ETH Price: $3,003.66 (+3.04%)
Gas: 2 Gwei

Token

BALUBA (BALUBA)
 

Overview

Max Total Supply

10,000 BALUBA

Holders

2,785

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
0 BALUBA
0x9405d755357932339c385ecaf929bdadc35055ef
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
BALUBA

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

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

pragma solidity ^0.8.0;

import "./Ownable.sol";
import "./ReentrancyGuard.sol";
import "./ERC721A.sol";
import "./Strings.sol";
import "./Address.sol";
import "./Context.sol";
import "./ERC165.sol";
import "./IERC165.sol";
import "./IERC721.sol";
import "./IERC721Enumerable.sol";
import "./IERC721Metadata.sol";
import "./IERC721Receiver.sol";
contract BALUBA is Ownable, ERC721A, ReentrancyGuard {
  uint256 public immutable maxPerAddressDuringMint;
  uint256 price =5000000000000000;

  constructor(
    uint256 maxBatchSize_,
    uint256 collectionSize_

  ) ERC721A("BALUBA", "BALUBA", maxBatchSize_, collectionSize_) {
    maxPerAddressDuringMint = maxBatchSize_;
  }
  modifier callerIsUser() {
    require(tx.origin == msg.sender, "The caller is another contract");
    _;
  }



 

  function publicSaleMint(uint8 quantity)
    external
    payable
    callerIsUser
  {  
    require(totalSupply() + quantity <= collectionSize, "reached max supply");
    require(
      numberMinted(msg.sender) + quantity <= maxPerAddressDuringMint,
      "can not mint this many"
    );
    uint256 totalprice;
    if(numberMinted(msg.sender)<1){
      totalprice = (quantity - 1) * price;
    }else{
      totalprice = quantity  * price;
    }
    _safeMint(msg.sender, quantity);
    refundIfOver(totalprice);
  }

  function refundIfOver(uint256 cost) private {
    require(msg.value >= cost, "Need to send more ETH.");
    if (msg.value > cost) {
      payable(msg.sender).transfer(msg.value - cost);
    }
  }
  // // metadata URI
  string private _baseTokenURI;

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

  function setBaseURI(string calldata baseURI) external onlyOwner {
    _baseTokenURI = baseURI;
  }

  function withdrawMoney() external onlyOwner nonReentrant {
    (bool success, ) = msg.sender.call{value: address(this).balance}("");
    require(success, "Transfer failed.");
  }

  function setOwnersExplicit(uint256 quantity) external onlyOwner nonReentrant {
    _setOwnersExplicit(quantity);
  }

  function numberMinted(address owner) public view returns (uint256) {
    return _numberMinted(owner);
  }

  function getOwnershipData(uint256 tokenId)
    external
    view
    returns (TokenOwnership memory)
  {
    return ownershipOf(tokenId);
  }
}

File 1 of 13: Address.sol
// SPDX-License-Identifier: MIT

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

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

File 3 of 13: Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

File 4 of 13: ERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

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

File 5 of 13: ERC721A.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC721.sol";
import "./IERC721Receiver.sol";
import "./IERC721Metadata.sol";
import "./IERC721Enumerable.sol";
import "./Address.sol";
import "./Context.sol";
import "./Strings.sol";
import "./ERC165.sol";
import "./Ownable.sol";
/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..).
 *
 * Assumes the number of issuable tokens (collection size) is capped and fits in a uint128.
 *
 * Does not support burning tokens to address(0).
 */
contract ERC721A is
  Context,
  ERC165,
  IERC721,
  IERC721Metadata,
  IERC721Enumerable,
  Ownable
{
  using Address for address;
  using Strings for uint256;

  struct TokenOwnership {
    address addr;
    uint64 startTimestamp;
  }

  struct AddressData {
    uint128 balance;
    uint128 numberMinted;
  }

  uint256 private currentIndex = 1;

  uint256 internal immutable collectionSize;
  uint256 internal immutable maxBatchSize;

  // Token name
  string private _name;

  // Token symbol
  string private _symbol;
  //
  string private baseExtension = ".json";
 
  // Mapping from token ID to ownership details
  // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details.
  mapping(uint256 => TokenOwnership) private _ownerships;

  // Mapping owner address to address data
  mapping(address => AddressData) private _addressData;

  // 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
   * `maxBatchSize` refers to how much a minter can mint at a time.
   * `collectionSize_` refers to how many tokens are in the collection.
   */
  constructor(
    string memory name_,
    string memory symbol_,
    uint256 maxBatchSize_,
    uint256 collectionSize_
    // bool isBind_
  ) {
    require(
      collectionSize_ > 0,
      "ERC721A: collection must have a nonzero supply"
    );
    require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero");
    _name = name_;
    _symbol = symbol_;
    maxBatchSize = maxBatchSize_;
    collectionSize = collectionSize_;
    
  }

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

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

  /**
   * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
   * This read function is O(collectionSize). If calling from a separate contract, be sure to test gas first.
   * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case.
   */
  function tokenOfOwnerByIndex(address owner, uint256 index)
    public
    view
    override
    returns (uint256)
  {
    require(index < balanceOf(owner), "ERC721A: owner index out of bounds");
    uint256 numMintedSoFar = totalSupply();
    uint256 tokenIdsIdx = 1;
    address currOwnershipAddr = address(0);
    for (uint256 i = 1; i < numMintedSoFar; i++) {
      TokenOwnership memory ownership = _ownerships[i];
      if (ownership.addr != address(0)) {
        currOwnershipAddr = ownership.addr;
      }
      if (currOwnershipAddr == owner) {
        if (tokenIdsIdx == index) {
          return i;
        }
        tokenIdsIdx++;
      }
    }
    revert("ERC721A: unable to get token of owner by index");
  }

  /**
   * @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 ||
      interfaceId == type(IERC721Enumerable).interfaceId ||
      super.supportsInterface(interfaceId);
  }

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

  function _numberMinted(address owner) internal view returns (uint256) {
    require(
      owner != address(0),
      "ERC721A: number minted query for the zero address"
    );
    return uint256(_addressData[owner].numberMinted);
  }

  function ownershipOf(uint256 tokenId)
    internal
    view
    returns (TokenOwnership memory)
  {
    require(_exists(tokenId), "ERC721A: owner query for nonexistent token");

    uint256 lowestTokenToCheck;
    if (tokenId >= maxBatchSize) {
      lowestTokenToCheck = tokenId - maxBatchSize + 1;
    }

    for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) {
      TokenOwnership memory ownership = _ownerships[curr];
      if (ownership.addr != address(0)) {
        return ownership;
      }
    }

    revert("ERC721A: unable to determine the owner of token");
  }

  /**
   * @dev See {IERC721-ownerOf}.
   */
  function ownerOf(uint256 tokenId) public view override returns (address) {
    return ownershipOf(tokenId).addr;
  }

  /**
   * @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"
    );
    require(
      tokenId!=0,
      "ERC721Metadata: URI query for nonexistent token"
    );
    string memory baseURI = _baseURI();
    return
      bytes(baseURI).length > 0
        ? string(abi.encodePacked(baseURI, tokenId.toString(),baseExtension))
        : "";
  }

  /**
   * @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 override {
    address owner = ERC721A.ownerOf(tokenId);
    require(to != owner, "ERC721A: approval to current owner");

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

    _approve(to, tokenId, owner);
  }

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

    return _tokenApprovals[tokenId];
  }

  /**
   * @dev See {IERC721-setApprovalForAll}.
   */
  function setApprovalForAll(address operator, bool approved) public override {
    require(operator != _msgSender(), "ERC721A: 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 override {
    _transfer(from, to, tokenId);
  }

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

  /**
   * @dev See {IERC721-safeTransferFrom}.
   */
  function safeTransferFrom(
    address from,
    address to,
    uint256 tokenId,
    bytes memory _data
  ) public override {
    _transfer(from, to, tokenId);
    require(
      _checkOnERC721Received(from, to, tokenId, _data),
      "ERC721A: 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`),
   */
  function _exists(uint256 tokenId) internal view returns (bool) {
    return tokenId < currentIndex;
  }

  function _safeMint(address to, uint256 quantity) internal {
    _safeMint(to, quantity, "");
  }

  /**
   * @dev Mints `quantity` tokens and transfers them to `to`.
   *
   * Requirements:
   *
   * - there must be `quantity` tokens remaining unminted in the total collection.
   * - `to` cannot be the zero address.
   * - `quantity` cannot be larger than the max batch size.
   *
   * Emits a {Transfer} event.
   */
  function _safeMint(
    address to,
    uint256 quantity,
    bytes memory _data
  ) internal {
    uint256 startTokenId = currentIndex;
    require(to != address(0), "ERC721A: mint to the zero address");
    // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering.
    require(!_exists(startTokenId), "ERC721A: token already minted");
    require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high");

    _beforeTokenTransfers(address(0), to, startTokenId, quantity);

    AddressData memory addressData = _addressData[to];
    _addressData[to] = AddressData(
      addressData.balance + uint128(quantity),
      addressData.numberMinted + uint128(quantity)
    );
    _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp));

    uint256 updatedIndex = startTokenId;

    for (uint256 i = 0; i < quantity; i++) {
      emit Transfer(address(0), to, updatedIndex);
      require(
        _checkOnERC721Received(address(0), to, updatedIndex, _data),
        "ERC721A: transfer to non ERC721Receiver implementer"
      );
      updatedIndex++;
    }

    currentIndex = updatedIndex;
    _afterTokenTransfers(address(0), to, startTokenId, quantity);
  }

  /**
   * @dev Transfers `tokenId` from `from` to `to`.
   *
   * 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
  ) private {
    TokenOwnership memory prevOwnership = ownershipOf(tokenId);

    bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
      getApproved(tokenId) == _msgSender() ||
      isApprovedForAll(prevOwnership.addr, _msgSender()));

    require(
      isApprovedOrOwner,
      "ERC721A: transfer caller is not owner nor approved"
    );

    require(
      prevOwnership.addr == from,
      "ERC721A: transfer from incorrect owner"
    );
    require(to != address(0), "ERC721A: transfer to the zero address");

    _beforeTokenTransfers(from, to, tokenId, 1);

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

    _addressData[from].balance -= 1;
    _addressData[to].balance += 1;
    _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp));

    // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
    // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
    uint256 nextTokenId = tokenId + 1;
    if (_ownerships[nextTokenId].addr == address(0)) {
      if (_exists(nextTokenId)) {
        _ownerships[nextTokenId] = TokenOwnership(
          prevOwnership.addr,
          prevOwnership.startTimestamp
        );
      }
    }

    emit Transfer(from, to, tokenId);
    _afterTokenTransfers(from, to, tokenId, 1);
  }

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

  uint256 public nextOwnerToExplicitlySet = 0;

  /**
   * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf().
   */
  function _setOwnersExplicit(uint256 quantity) internal {
    uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet;
    require(quantity > 0, "quantity must be nonzero");
    uint256 endIndex = oldNextOwnerToSet + quantity - 1;
    if (endIndex > collectionSize - 1) {
      endIndex = collectionSize - 1;
    }
    // We know if the last one in the group exists, all in the group exist, due to serial ordering.
    require(_exists(endIndex), "not enough minted yet for this cleanup");
    for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) {
      if (_ownerships[i].addr == address(0)) {
        TokenOwnership memory ownership = ownershipOf(i);
        _ownerships[i] = TokenOwnership(
          ownership.addr,
          ownership.startTimestamp
        );
      }
    }
    nextOwnerToExplicitlySet = endIndex + 1;
  }

  /**
   * @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(to).onERC721Received.selector;
      } catch (bytes memory reason) {
        if (reason.length == 0) {
          revert("ERC721A: transfer to non ERC721Receiver implementer");
        } else {
          assembly {
            revert(add(32, reason), mload(reason))
          }
        }
      }
    } else {
      return true;
    }
  }

  /**
   * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
   *
   * startTokenId - the first token id to be transferred
   * quantity - the amount to be transferred
   *
   * 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`.
   */
  function _beforeTokenTransfers(
    address from,
    address to,
    uint256 startTokenId,
    uint256 quantity
  ) internal virtual {}

  /**
   * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
   * minting.
   *
   * startTokenId - the first token id to be transferred
   * quantity - the amount to be transferred
   *
   * Calling conditions:
   *
   * - when `from` and `to` are both non-zero.
   * - `from` and `to` are never both zero.
   */
  function _afterTokenTransfers(
    address from,
    address to,
    uint256 startTokenId,
    uint256 quantity
  ) internal virtual {}
}

File 6 of 13: IERC165.sol
// SPDX-License-Identifier: MIT

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 7 of 13: IERC721.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

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

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

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

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

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

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

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

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

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

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

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

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

File 8 of 13: IERC721Enumerable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC721.sol";

/**
 * @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 9 of 13: IERC721Metadata.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC721.sol";

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

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

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

File 10 of 13: IERC721Receiver.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

File 11 of 13: Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./Context.sol";

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _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 12 of 13: ReentrancyGuard.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

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

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

        _;

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"maxBatchSize_","type":"uint256"},{"internalType":"uint256","name":"collectionSize_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerAddressDuringMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"uint8","name":"quantity","type":"uint8"}],"name":"publicSaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"setOwnersExplicit","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":[],"name":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60e0604052600180556040518060400160405280600581526020017f2e6a736f6e0000000000000000000000000000000000000000000000000000008152506004908051906020019062000055929190620002dd565b5060006009556611c37937e08000600b553480156200007357600080fd5b50604051620051dd380380620051dd8339818101604052810190620000999190620003a4565b6040518060400160405280600681526020017f42414c55424100000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f42414c55424100000000000000000000000000000000000000000000000000008152508383620001276200011b6200021160201b60201c565b6200021960201b60201c565b600081116200016d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000164906200045b565b60405180910390fd5b60008211620001b3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001aa9062000439565b60405180910390fd5b8360029080519060200190620001cb929190620002dd565b508260039080519060200190620001e4929190620002dd565b508160a081815250508060808181525050505050506001600a819055508160c081815250505050620005ba565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002eb9062000498565b90600052602060002090601f0160209004810192826200030f57600085556200035b565b82601f106200032a57805160ff19168380011785556200035b565b828001600101855582156200035b579182015b828111156200035a5782518255916020019190600101906200033d565b5b5090506200036a91906200036e565b5090565b5b80821115620003895760008160009055506001016200036f565b5090565b6000815190506200039e81620005a0565b92915050565b60008060408385031215620003be57620003bd620004fd565b5b6000620003ce858286016200038d565b9250506020620003e1858286016200038d565b9150509250929050565b6000620003fa6027836200047d565b9150620004078262000502565b604082019050919050565b600062000421602e836200047d565b91506200042e8262000551565b604082019050919050565b600060208201905081810360008301526200045481620003eb565b9050919050565b60006020820190508181036000830152620004768162000412565b9050919050565b600082825260208201905092915050565b6000819050919050565b60006002820490506001821680620004b157607f821691505b60208210811415620004c857620004c7620004ce565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b620005ab816200048e565b8114620005b757600080fd5b50565b60805160a05160c051614bd06200060d60003960008181610fa801526114e301526000818161221e015281816122470152612aa401526000818161146b01528181611fa60152611fda0152614bd06000f3fe60806040526004361061019c5760003560e01c8063715018a6116100ec578063b88d4fde1161008a578063d7224ba011610064578063d7224ba0146105c9578063dc33e681146105f4578063e985e9c514610631578063f2fde38b1461066e5761019c565b8063b88d4fde14610547578063c76df80e14610570578063c87b56dd1461058c5761019c565b80639231ab2a116100c65780639231ab2a1461049f57806395d89b41146104dc578063a22cb46514610507578063ac446002146105305761019c565b8063715018a6146104325780638bc35c2f146104495780638da5cb5b146104745761019c565b80632d20fb60116101595780634f6ccce7116101335780634f6ccce71461035257806355f804b31461038f5780636352211e146103b857806370a08231146103f55761019c565b80632d20fb60146102c35780632f745c59146102ec57806342842e0e146103295761019c565b806301ffc9a7146101a157806306fdde03146101de578063081812fc14610209578063095ea7b31461024657806318160ddd1461026f57806323b872dd1461029a575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c391906132a6565b610697565b6040516101d59190613a0a565b60405180910390f35b3480156101ea57600080fd5b506101f36107e1565b6040516102009190613a25565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b919061334d565b610873565b60405161023d91906139a3565b60405180910390f35b34801561025257600080fd5b5061026d60048036038101906102689190613266565b6108f8565b005b34801561027b57600080fd5b50610284610a11565b6040516102919190613e02565b60405180910390f35b3480156102a657600080fd5b506102c160048036038101906102bc9190613150565b610a26565b005b3480156102cf57600080fd5b506102ea60048036038101906102e5919061334d565b610a36565b005b3480156102f857600080fd5b50610313600480360381019061030e9190613266565b610b14565b6040516103209190613e02565b60405180910390f35b34801561033557600080fd5b50610350600480360381019061034b9190613150565b610d1a565b005b34801561035e57600080fd5b506103796004803603810190610374919061334d565b610d3a565b6040516103869190613e02565b60405180910390f35b34801561039b57600080fd5b506103b660048036038101906103b19190613300565b610d8d565b005b3480156103c457600080fd5b506103df60048036038101906103da919061334d565b610e1f565b6040516103ec91906139a3565b60405180910390f35b34801561040157600080fd5b5061041c600480360381019061041791906130e3565b610e35565b6040516104299190613e02565b60405180910390f35b34801561043e57600080fd5b50610447610f1e565b005b34801561045557600080fd5b5061045e610fa6565b60405161046b9190613e02565b60405180910390f35b34801561048057600080fd5b50610489610fca565b60405161049691906139a3565b60405180910390f35b3480156104ab57600080fd5b506104c660048036038101906104c1919061334d565b610ff3565b6040516104d39190613de7565b60405180910390f35b3480156104e857600080fd5b506104f161100b565b6040516104fe9190613a25565b60405180910390f35b34801561051357600080fd5b5061052e60048036038101906105299190613226565b61109d565b005b34801561053c57600080fd5b5061054561121e565b005b34801561055357600080fd5b5061056e600480360381019061056991906131a3565b61139f565b005b61058a6004803603810190610585919061337a565b6113fb565b005b34801561059857600080fd5b506105b360048036038101906105ae919061334d565b6115bf565b6040516105c09190613a25565b60405180910390f35b3480156105d557600080fd5b506105de6116ad565b6040516105eb9190613e02565b60405180910390f35b34801561060057600080fd5b5061061b600480360381019061061691906130e3565b6116b3565b6040516106289190613e02565b60405180910390f35b34801561063d57600080fd5b5061065860048036038101906106539190613110565b6116c5565b6040516106659190613a0a565b60405180910390f35b34801561067a57600080fd5b50610695600480360381019061069091906130e3565b611759565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061076257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107ca57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107da57506107d982611851565b5b9050919050565b6060600280546107f0906141b6565b80601f016020809104026020016040519081016040528092919081815260200182805461081c906141b6565b80156108695780601f1061083e57610100808354040283529160200191610869565b820191906000526020600020905b81548152906001019060200180831161084c57829003601f168201915b5050505050905090565b600061087e826118bb565b6108bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b490613da7565b60405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061090382610e1f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096b90613c47565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109936118c9565b73ffffffffffffffffffffffffffffffffffffffff1614806109c257506109c1816109bc6118c9565b6116c5565b5b610a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f890613b27565b60405180910390fd5b610a0c8383836118d1565b505050565b600060018054610a219190614031565b905090565b610a31838383611983565b505050565b610a3e6118c9565b73ffffffffffffffffffffffffffffffffffffffff16610a5c610fca565b73ffffffffffffffffffffffffffffffffffffffff1614610ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa990613bc7565b60405180910390fd5b6002600a541415610af8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aef90613d67565b60405180910390fd5b6002600a81905550610b0981611f3c565b6001600a8190555050565b6000610b1f83610e35565b8210610b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5790613a47565b60405180910390fd5b6000610b6a610a11565b9050600060019050600080600190505b83811015610cd8576000600560008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610c6c57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cc45786841415610cb5578195505050505050610d14565b8380610cc090614219565b9450505b508080610cd090614219565b915050610b7a565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0b90613d27565b60405180910390fd5b92915050565b610d358383836040518060200160405280600081525061139f565b505050565b6000610d44610a11565b8210610d85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7c90613aa7565b60405180910390fd5b819050919050565b610d956118c9565b73ffffffffffffffffffffffffffffffffffffffff16610db3610fca565b73ffffffffffffffffffffffffffffffffffffffff1614610e09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0090613bc7565b60405180910390fd5b8181600c9190610e1a929190612ec2565b505050565b6000610e2a826121ca565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ea6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9d90613b67565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b610f266118c9565b73ffffffffffffffffffffffffffffffffffffffff16610f44610fca565b73ffffffffffffffffffffffffffffffffffffffff1614610f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9190613bc7565b60405180910390fd5b610fa460006123cd565b565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610ffb612f48565b611004826121ca565b9050919050565b60606003805461101a906141b6565b80601f0160208091040260200160405190810160405280929190818152602001828054611046906141b6565b80156110935780601f1061106857610100808354040283529160200191611093565b820191906000526020600020905b81548152906001019060200180831161107657829003601f168201915b5050505050905090565b6110a56118c9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611113576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110a90613c07565b60405180910390fd5b80600860006111206118c9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166111cd6118c9565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516112129190613a0a565b60405180910390a35050565b6112266118c9565b73ffffffffffffffffffffffffffffffffffffffff16611244610fca565b73ffffffffffffffffffffffffffffffffffffffff161461129a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129190613bc7565b60405180910390fd5b6002600a5414156112e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d790613d67565b60405180910390fd5b6002600a8190555060003373ffffffffffffffffffffffffffffffffffffffff164760405161130e9061398e565b60006040518083038185875af1925050503d806000811461134b576040519150601f19603f3d011682016040523d82523d6000602084013e611350565b606091505b5050905080611394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138b90613c67565b60405180910390fd5b506001600a81905550565b6113aa848484611983565b6113b684848484612491565b6113f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ec90613c87565b60405180910390fd5b50505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611469576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146090613b07565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008160ff16611496610a11565b6114a09190613f1c565b11156114e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d890613b87565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008160ff1661150f336116b3565b6115199190613f1c565b111561155a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155190613d07565b60405180910390fd5b60006001611567336116b3565b101561159157600b5460018361157d9190614065565b60ff1661158a9190613fa3565b90506115a5565b600b548260ff166115a29190613fa3565b90505b6115b2338360ff16612628565b6115bb81612646565b5050565b60606115ca826118bb565b611609576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160090613be7565b60405180910390fd5b600082141561164d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164490613be7565b60405180910390fd5b60006116576126e7565b9050600081511161167757604051806020016040528060008152506116a5565b8061168184612779565b60046040516020016116959392919061395d565b6040516020818303038152906040525b915050919050565b60095481565b60006116be826128da565b9050919050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6117616118c9565b73ffffffffffffffffffffffffffffffffffffffff1661177f610fca565b73ffffffffffffffffffffffffffffffffffffffff16146117d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cc90613bc7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183c90613a67565b60405180910390fd5b61184e816123cd565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061198e826121ca565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166119b56118c9565b73ffffffffffffffffffffffffffffffffffffffff161480611a1157506119da6118c9565b73ffffffffffffffffffffffffffffffffffffffff166119f984610873565b73ffffffffffffffffffffffffffffffffffffffff16145b80611a2d5750611a2c8260000151611a276118c9565b6116c5565b5b905080611a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6690613c27565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611ae1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad890613ba7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4890613ac7565b60405180910390fd5b611b5e85858560016129c3565b611b6e60008484600001516118d1565b6001600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611bdc9190613ffd565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611c809190613ed6565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506005600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184611d869190613f1c565b9050600073ffffffffffffffffffffffffffffffffffffffff166005600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611ecc57611dfc816118bb565b15611ecb576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506005600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611f3486868660016129c9565b505050505050565b6000600954905060008211611f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7d90613b47565b60405180910390fd5b600060018383611f969190613f1c565b611fa09190614031565b905060017f0000000000000000000000000000000000000000000000000000000000000000611fcf9190614031565b8111156120065760017f00000000000000000000000000000000000000000000000000000000000000006120039190614031565b90505b61200f816118bb565b61204e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204590613d47565b60405180910390fd5b60008290505b8181116121b157600073ffffffffffffffffffffffffffffffffffffffff166005600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561219e5760006120d1826121ca565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506005600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b80806121a990614219565b915050612054565b506001816121bf9190613f1c565b600981905550505050565b6121d2612f48565b6121db826118bb565b61221a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221190613a87565b60405180910390fd5b60007f0000000000000000000000000000000000000000000000000000000000000000831061227e5760017f0000000000000000000000000000000000000000000000000000000000000000846122719190614031565b61227b9190613f1c565b90505b60008390505b81811061238c576000600560008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612378578093505050506123c8565b5080806123849061418c565b915050612284565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bf90613d87565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006124b28473ffffffffffffffffffffffffffffffffffffffff166129cf565b1561261b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026124db6118c9565b8786866040518563ffffffff1660e01b81526004016124fd94939291906139be565b602060405180830381600087803b15801561251757600080fd5b505af192505050801561254857506040513d601f19601f8201168201806040525081019061254591906132d3565b60015b6125cb573d8060008114612578576040519150601f19603f3d011682016040523d82523d6000602084013e61257d565b606091505b506000815114156125c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ba90613c87565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612620565b600190505b949350505050565b6126428282604051806020016040528060008152506129e2565b5050565b80341015612689576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268090613ca7565b60405180910390fd5b803411156126e4573373ffffffffffffffffffffffffffffffffffffffff166108fc82346126b79190614031565b9081150290604051600060405180830381858888f193505050501580156126e2573d6000803e3d6000fd5b505b50565b6060600c80546126f6906141b6565b80601f0160208091040260200160405190810160405280929190818152602001828054612722906141b6565b801561276f5780601f106127445761010080835404028352916020019161276f565b820191906000526020600020905b81548152906001019060200180831161275257829003601f168201915b5050505050905090565b606060008214156127c1576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506128d5565b600082905060005b600082146127f35780806127dc90614219565b915050600a826127ec9190613f72565b91506127c9565b60008167ffffffffffffffff81111561280f5761280e61434f565b5b6040519080825280601f01601f1916602001820160405280156128415781602001600182028036833780820191505090505b5090505b600085146128ce5760018261285a9190614031565b9150600a856128699190614262565b60306128759190613f1c565b60f81b81838151811061288b5761288a614320565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128c79190613f72565b9450612845565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561294b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294290613ae7565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b50505050565b50505050565b600080823b905060008111915050919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612a59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5090613ce7565b60405180910390fd5b612a62816118bb565b15612aa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9990613cc7565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000831115612b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afc90613dc7565b60405180910390fd5b612b1260008583866129c3565b6000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151612c0f9190613ed6565b6fffffffffffffffffffffffffffffffff168152602001858360200151612c369190613ed6565b6fffffffffffffffffffffffffffffffff16815250600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506005600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015612ea557818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612e456000888488612491565b612e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7b90613c87565b60405180910390fd5b8180612e8f90614219565b9250508080612e9d90614219565b915050612dd4565b5080600181905550612eba60008785886129c9565b505050505050565b828054612ece906141b6565b90600052602060002090601f016020900481019282612ef05760008555612f37565b82601f10612f0957803560ff1916838001178555612f37565b82800160010185558215612f37579182015b82811115612f36578235825591602001919060010190612f1b565b5b509050612f449190612f82565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612f9b576000816000905550600101612f83565b5090565b6000612fb2612fad84613e42565b613e1d565b905082815260208101848484011115612fce57612fcd61438d565b5b612fd984828561414a565b509392505050565b600081359050612ff081614b27565b92915050565b60008135905061300581614b3e565b92915050565b60008135905061301a81614b55565b92915050565b60008151905061302f81614b55565b92915050565b600082601f83011261304a57613049614383565b5b813561305a848260208601612f9f565b91505092915050565b60008083601f84011261307957613078614383565b5b8235905067ffffffffffffffff8111156130965761309561437e565b5b6020830191508360018202830111156130b2576130b1614388565b5b9250929050565b6000813590506130c881614b6c565b92915050565b6000813590506130dd81614b83565b92915050565b6000602082840312156130f9576130f8614397565b5b600061310784828501612fe1565b91505092915050565b6000806040838503121561312757613126614397565b5b600061313585828601612fe1565b925050602061314685828601612fe1565b9150509250929050565b60008060006060848603121561316957613168614397565b5b600061317786828701612fe1565b935050602061318886828701612fe1565b9250506040613199868287016130b9565b9150509250925092565b600080600080608085870312156131bd576131bc614397565b5b60006131cb87828801612fe1565b94505060206131dc87828801612fe1565b93505060406131ed878288016130b9565b925050606085013567ffffffffffffffff81111561320e5761320d614392565b5b61321a87828801613035565b91505092959194509250565b6000806040838503121561323d5761323c614397565b5b600061324b85828601612fe1565b925050602061325c85828601612ff6565b9150509250929050565b6000806040838503121561327d5761327c614397565b5b600061328b85828601612fe1565b925050602061329c858286016130b9565b9150509250929050565b6000602082840312156132bc576132bb614397565b5b60006132ca8482850161300b565b91505092915050565b6000602082840312156132e9576132e8614397565b5b60006132f784828501613020565b91505092915050565b6000806020838503121561331757613316614397565b5b600083013567ffffffffffffffff81111561333557613334614392565b5b61334185828601613063565b92509250509250929050565b60006020828403121561336357613362614397565b5b6000613371848285016130b9565b91505092915050565b6000602082840312156133905761338f614397565b5b600061339e848285016130ce565b91505092915050565b6133b081614099565b82525050565b6133bf81614099565b82525050565b6133ce816140ab565b82525050565b60006133df82613e88565b6133e98185613e9e565b93506133f9818560208601614159565b6134028161439c565b840191505092915050565b600061341882613e93565b6134228185613eba565b9350613432818560208601614159565b61343b8161439c565b840191505092915050565b600061345182613e93565b61345b8185613ecb565b935061346b818560208601614159565b80840191505092915050565b60008154613484816141b6565b61348e8186613ecb565b945060018216600081146134a957600181146134ba576134ed565b60ff198316865281860193506134ed565b6134c385613e73565b60005b838110156134e5578154818901526001820191506020810190506134c6565b838801955050505b50505092915050565b6000613503602283613eba565b915061350e826143ad565b604082019050919050565b6000613526602683613eba565b9150613531826143fc565b604082019050919050565b6000613549602a83613eba565b91506135548261444b565b604082019050919050565b600061356c602383613eba565b91506135778261449a565b604082019050919050565b600061358f602583613eba565b915061359a826144e9565b604082019050919050565b60006135b2603183613eba565b91506135bd82614538565b604082019050919050565b60006135d5601e83613eba565b91506135e082614587565b602082019050919050565b60006135f8603983613eba565b9150613603826145b0565b604082019050919050565b600061361b601883613eba565b9150613626826145ff565b602082019050919050565b600061363e602b83613eba565b915061364982614628565b604082019050919050565b6000613661601283613eba565b915061366c82614677565b602082019050919050565b6000613684602683613eba565b915061368f826146a0565b604082019050919050565b60006136a7602083613eba565b91506136b2826146ef565b602082019050919050565b60006136ca602f83613eba565b91506136d582614718565b604082019050919050565b60006136ed601a83613eba565b91506136f882614767565b602082019050919050565b6000613710603283613eba565b915061371b82614790565b604082019050919050565b6000613733602283613eba565b915061373e826147df565b604082019050919050565b6000613756600083613eaf565b91506137618261482e565b600082019050919050565b6000613779601083613eba565b915061378482614831565b602082019050919050565b600061379c603383613eba565b91506137a78261485a565b604082019050919050565b60006137bf601683613eba565b91506137ca826148a9565b602082019050919050565b60006137e2601d83613eba565b91506137ed826148d2565b602082019050919050565b6000613805602183613eba565b9150613810826148fb565b604082019050919050565b6000613828601683613eba565b91506138338261494a565b602082019050919050565b600061384b602e83613eba565b915061385682614973565b604082019050919050565b600061386e602683613eba565b9150613879826149c2565b604082019050919050565b6000613891601f83613eba565b915061389c82614a11565b602082019050919050565b60006138b4602f83613eba565b91506138bf82614a3a565b604082019050919050565b60006138d7602d83613eba565b91506138e282614a89565b604082019050919050565b60006138fa602283613eba565b915061390582614ad8565b604082019050919050565b60408201600082015161392660008501826133a7565b506020820151613939602085018261394e565b50505050565b6139488161411f565b82525050565b61395781614129565b82525050565b60006139698286613446565b91506139758285613446565b91506139818284613477565b9150819050949350505050565b600061399982613749565b9150819050919050565b60006020820190506139b860008301846133b6565b92915050565b60006080820190506139d360008301876133b6565b6139e060208301866133b6565b6139ed604083018561393f565b81810360608301526139ff81846133d4565b905095945050505050565b6000602082019050613a1f60008301846133c5565b92915050565b60006020820190508181036000830152613a3f818461340d565b905092915050565b60006020820190508181036000830152613a60816134f6565b9050919050565b60006020820190508181036000830152613a8081613519565b9050919050565b60006020820190508181036000830152613aa08161353c565b9050919050565b60006020820190508181036000830152613ac08161355f565b9050919050565b60006020820190508181036000830152613ae081613582565b9050919050565b60006020820190508181036000830152613b00816135a5565b9050919050565b60006020820190508181036000830152613b20816135c8565b9050919050565b60006020820190508181036000830152613b40816135eb565b9050919050565b60006020820190508181036000830152613b608161360e565b9050919050565b60006020820190508181036000830152613b8081613631565b9050919050565b60006020820190508181036000830152613ba081613654565b9050919050565b60006020820190508181036000830152613bc081613677565b9050919050565b60006020820190508181036000830152613be08161369a565b9050919050565b60006020820190508181036000830152613c00816136bd565b9050919050565b60006020820190508181036000830152613c20816136e0565b9050919050565b60006020820190508181036000830152613c4081613703565b9050919050565b60006020820190508181036000830152613c6081613726565b9050919050565b60006020820190508181036000830152613c808161376c565b9050919050565b60006020820190508181036000830152613ca08161378f565b9050919050565b60006020820190508181036000830152613cc0816137b2565b9050919050565b60006020820190508181036000830152613ce0816137d5565b9050919050565b60006020820190508181036000830152613d00816137f8565b9050919050565b60006020820190508181036000830152613d208161381b565b9050919050565b60006020820190508181036000830152613d408161383e565b9050919050565b60006020820190508181036000830152613d6081613861565b9050919050565b60006020820190508181036000830152613d8081613884565b9050919050565b60006020820190508181036000830152613da0816138a7565b9050919050565b60006020820190508181036000830152613dc0816138ca565b9050919050565b60006020820190508181036000830152613de0816138ed565b9050919050565b6000604082019050613dfc6000830184613910565b92915050565b6000602082019050613e17600083018461393f565b92915050565b6000613e27613e38565b9050613e3382826141e8565b919050565b6000604051905090565b600067ffffffffffffffff821115613e5d57613e5c61434f565b5b613e668261439c565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613ee1826140e3565b9150613eec836140e3565b9250826fffffffffffffffffffffffffffffffff03821115613f1157613f10614293565b5b828201905092915050565b6000613f278261411f565b9150613f328361411f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f6757613f66614293565b5b828201905092915050565b6000613f7d8261411f565b9150613f888361411f565b925082613f9857613f976142c2565b5b828204905092915050565b6000613fae8261411f565b9150613fb98361411f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613ff257613ff1614293565b5b828202905092915050565b6000614008826140e3565b9150614013836140e3565b92508282101561402657614025614293565b5b828203905092915050565b600061403c8261411f565b91506140478361411f565b92508282101561405a57614059614293565b5b828203905092915050565b60006140708261413d565b915061407b8361413d565b92508282101561408e5761408d614293565b5b828203905092915050565b60006140a4826140ff565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561417757808201518184015260208101905061415c565b83811115614186576000848401525b50505050565b60006141978261411f565b915060008214156141ab576141aa614293565b5b600182039050919050565b600060028204905060018216806141ce57607f821691505b602082108114156141e2576141e16142f1565b5b50919050565b6141f18261439c565b810181811067ffffffffffffffff821117156142105761420f61434f565b5b80604052505050565b60006142248261411f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561425757614256614293565b5b600182019050919050565b600061426d8261411f565b91506142788361411f565b925082614288576142876142c2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b614b3081614099565b8114614b3b57600080fd5b50565b614b47816140ab565b8114614b5257600080fd5b50565b614b5e816140b7565b8114614b6957600080fd5b50565b614b758161411f565b8114614b8057600080fd5b50565b614b8c8161413d565b8114614b9757600080fd5b5056fea264697066735822122072b6cb1266db7fda7828956108d43f1c13812a216d99c87d595a6c135cc15fe264736f6c63430008070033000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000002710

Deployed Bytecode

0x60806040526004361061019c5760003560e01c8063715018a6116100ec578063b88d4fde1161008a578063d7224ba011610064578063d7224ba0146105c9578063dc33e681146105f4578063e985e9c514610631578063f2fde38b1461066e5761019c565b8063b88d4fde14610547578063c76df80e14610570578063c87b56dd1461058c5761019c565b80639231ab2a116100c65780639231ab2a1461049f57806395d89b41146104dc578063a22cb46514610507578063ac446002146105305761019c565b8063715018a6146104325780638bc35c2f146104495780638da5cb5b146104745761019c565b80632d20fb60116101595780634f6ccce7116101335780634f6ccce71461035257806355f804b31461038f5780636352211e146103b857806370a08231146103f55761019c565b80632d20fb60146102c35780632f745c59146102ec57806342842e0e146103295761019c565b806301ffc9a7146101a157806306fdde03146101de578063081812fc14610209578063095ea7b31461024657806318160ddd1461026f57806323b872dd1461029a575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c391906132a6565b610697565b6040516101d59190613a0a565b60405180910390f35b3480156101ea57600080fd5b506101f36107e1565b6040516102009190613a25565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b919061334d565b610873565b60405161023d91906139a3565b60405180910390f35b34801561025257600080fd5b5061026d60048036038101906102689190613266565b6108f8565b005b34801561027b57600080fd5b50610284610a11565b6040516102919190613e02565b60405180910390f35b3480156102a657600080fd5b506102c160048036038101906102bc9190613150565b610a26565b005b3480156102cf57600080fd5b506102ea60048036038101906102e5919061334d565b610a36565b005b3480156102f857600080fd5b50610313600480360381019061030e9190613266565b610b14565b6040516103209190613e02565b60405180910390f35b34801561033557600080fd5b50610350600480360381019061034b9190613150565b610d1a565b005b34801561035e57600080fd5b506103796004803603810190610374919061334d565b610d3a565b6040516103869190613e02565b60405180910390f35b34801561039b57600080fd5b506103b660048036038101906103b19190613300565b610d8d565b005b3480156103c457600080fd5b506103df60048036038101906103da919061334d565b610e1f565b6040516103ec91906139a3565b60405180910390f35b34801561040157600080fd5b5061041c600480360381019061041791906130e3565b610e35565b6040516104299190613e02565b60405180910390f35b34801561043e57600080fd5b50610447610f1e565b005b34801561045557600080fd5b5061045e610fa6565b60405161046b9190613e02565b60405180910390f35b34801561048057600080fd5b50610489610fca565b60405161049691906139a3565b60405180910390f35b3480156104ab57600080fd5b506104c660048036038101906104c1919061334d565b610ff3565b6040516104d39190613de7565b60405180910390f35b3480156104e857600080fd5b506104f161100b565b6040516104fe9190613a25565b60405180910390f35b34801561051357600080fd5b5061052e60048036038101906105299190613226565b61109d565b005b34801561053c57600080fd5b5061054561121e565b005b34801561055357600080fd5b5061056e600480360381019061056991906131a3565b61139f565b005b61058a6004803603810190610585919061337a565b6113fb565b005b34801561059857600080fd5b506105b360048036038101906105ae919061334d565b6115bf565b6040516105c09190613a25565b60405180910390f35b3480156105d557600080fd5b506105de6116ad565b6040516105eb9190613e02565b60405180910390f35b34801561060057600080fd5b5061061b600480360381019061061691906130e3565b6116b3565b6040516106289190613e02565b60405180910390f35b34801561063d57600080fd5b5061065860048036038101906106539190613110565b6116c5565b6040516106659190613a0a565b60405180910390f35b34801561067a57600080fd5b50610695600480360381019061069091906130e3565b611759565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061076257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107ca57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107da57506107d982611851565b5b9050919050565b6060600280546107f0906141b6565b80601f016020809104026020016040519081016040528092919081815260200182805461081c906141b6565b80156108695780601f1061083e57610100808354040283529160200191610869565b820191906000526020600020905b81548152906001019060200180831161084c57829003601f168201915b5050505050905090565b600061087e826118bb565b6108bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b490613da7565b60405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061090382610e1f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096b90613c47565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109936118c9565b73ffffffffffffffffffffffffffffffffffffffff1614806109c257506109c1816109bc6118c9565b6116c5565b5b610a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f890613b27565b60405180910390fd5b610a0c8383836118d1565b505050565b600060018054610a219190614031565b905090565b610a31838383611983565b505050565b610a3e6118c9565b73ffffffffffffffffffffffffffffffffffffffff16610a5c610fca565b73ffffffffffffffffffffffffffffffffffffffff1614610ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa990613bc7565b60405180910390fd5b6002600a541415610af8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aef90613d67565b60405180910390fd5b6002600a81905550610b0981611f3c565b6001600a8190555050565b6000610b1f83610e35565b8210610b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5790613a47565b60405180910390fd5b6000610b6a610a11565b9050600060019050600080600190505b83811015610cd8576000600560008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610c6c57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cc45786841415610cb5578195505050505050610d14565b8380610cc090614219565b9450505b508080610cd090614219565b915050610b7a565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0b90613d27565b60405180910390fd5b92915050565b610d358383836040518060200160405280600081525061139f565b505050565b6000610d44610a11565b8210610d85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7c90613aa7565b60405180910390fd5b819050919050565b610d956118c9565b73ffffffffffffffffffffffffffffffffffffffff16610db3610fca565b73ffffffffffffffffffffffffffffffffffffffff1614610e09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0090613bc7565b60405180910390fd5b8181600c9190610e1a929190612ec2565b505050565b6000610e2a826121ca565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ea6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9d90613b67565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b610f266118c9565b73ffffffffffffffffffffffffffffffffffffffff16610f44610fca565b73ffffffffffffffffffffffffffffffffffffffff1614610f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9190613bc7565b60405180910390fd5b610fa460006123cd565b565b7f000000000000000000000000000000000000000000000000000000000000000a81565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610ffb612f48565b611004826121ca565b9050919050565b60606003805461101a906141b6565b80601f0160208091040260200160405190810160405280929190818152602001828054611046906141b6565b80156110935780601f1061106857610100808354040283529160200191611093565b820191906000526020600020905b81548152906001019060200180831161107657829003601f168201915b5050505050905090565b6110a56118c9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611113576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110a90613c07565b60405180910390fd5b80600860006111206118c9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166111cd6118c9565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516112129190613a0a565b60405180910390a35050565b6112266118c9565b73ffffffffffffffffffffffffffffffffffffffff16611244610fca565b73ffffffffffffffffffffffffffffffffffffffff161461129a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129190613bc7565b60405180910390fd5b6002600a5414156112e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d790613d67565b60405180910390fd5b6002600a8190555060003373ffffffffffffffffffffffffffffffffffffffff164760405161130e9061398e565b60006040518083038185875af1925050503d806000811461134b576040519150601f19603f3d011682016040523d82523d6000602084013e611350565b606091505b5050905080611394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138b90613c67565b60405180910390fd5b506001600a81905550565b6113aa848484611983565b6113b684848484612491565b6113f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ec90613c87565b60405180910390fd5b50505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611469576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146090613b07565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000027108160ff16611496610a11565b6114a09190613f1c565b11156114e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d890613b87565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000a8160ff1661150f336116b3565b6115199190613f1c565b111561155a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155190613d07565b60405180910390fd5b60006001611567336116b3565b101561159157600b5460018361157d9190614065565b60ff1661158a9190613fa3565b90506115a5565b600b548260ff166115a29190613fa3565b90505b6115b2338360ff16612628565b6115bb81612646565b5050565b60606115ca826118bb565b611609576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160090613be7565b60405180910390fd5b600082141561164d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164490613be7565b60405180910390fd5b60006116576126e7565b9050600081511161167757604051806020016040528060008152506116a5565b8061168184612779565b60046040516020016116959392919061395d565b6040516020818303038152906040525b915050919050565b60095481565b60006116be826128da565b9050919050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6117616118c9565b73ffffffffffffffffffffffffffffffffffffffff1661177f610fca565b73ffffffffffffffffffffffffffffffffffffffff16146117d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cc90613bc7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183c90613a67565b60405180910390fd5b61184e816123cd565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061198e826121ca565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166119b56118c9565b73ffffffffffffffffffffffffffffffffffffffff161480611a1157506119da6118c9565b73ffffffffffffffffffffffffffffffffffffffff166119f984610873565b73ffffffffffffffffffffffffffffffffffffffff16145b80611a2d5750611a2c8260000151611a276118c9565b6116c5565b5b905080611a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6690613c27565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611ae1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad890613ba7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4890613ac7565b60405180910390fd5b611b5e85858560016129c3565b611b6e60008484600001516118d1565b6001600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611bdc9190613ffd565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611c809190613ed6565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506005600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184611d869190613f1c565b9050600073ffffffffffffffffffffffffffffffffffffffff166005600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611ecc57611dfc816118bb565b15611ecb576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506005600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611f3486868660016129c9565b505050505050565b6000600954905060008211611f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7d90613b47565b60405180910390fd5b600060018383611f969190613f1c565b611fa09190614031565b905060017f0000000000000000000000000000000000000000000000000000000000002710611fcf9190614031565b8111156120065760017f00000000000000000000000000000000000000000000000000000000000027106120039190614031565b90505b61200f816118bb565b61204e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204590613d47565b60405180910390fd5b60008290505b8181116121b157600073ffffffffffffffffffffffffffffffffffffffff166005600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561219e5760006120d1826121ca565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506005600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b80806121a990614219565b915050612054565b506001816121bf9190613f1c565b600981905550505050565b6121d2612f48565b6121db826118bb565b61221a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221190613a87565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000a831061227e5760017f000000000000000000000000000000000000000000000000000000000000000a846122719190614031565b61227b9190613f1c565b90505b60008390505b81811061238c576000600560008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612378578093505050506123c8565b5080806123849061418c565b915050612284565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bf90613d87565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006124b28473ffffffffffffffffffffffffffffffffffffffff166129cf565b1561261b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026124db6118c9565b8786866040518563ffffffff1660e01b81526004016124fd94939291906139be565b602060405180830381600087803b15801561251757600080fd5b505af192505050801561254857506040513d601f19601f8201168201806040525081019061254591906132d3565b60015b6125cb573d8060008114612578576040519150601f19603f3d011682016040523d82523d6000602084013e61257d565b606091505b506000815114156125c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ba90613c87565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612620565b600190505b949350505050565b6126428282604051806020016040528060008152506129e2565b5050565b80341015612689576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268090613ca7565b60405180910390fd5b803411156126e4573373ffffffffffffffffffffffffffffffffffffffff166108fc82346126b79190614031565b9081150290604051600060405180830381858888f193505050501580156126e2573d6000803e3d6000fd5b505b50565b6060600c80546126f6906141b6565b80601f0160208091040260200160405190810160405280929190818152602001828054612722906141b6565b801561276f5780601f106127445761010080835404028352916020019161276f565b820191906000526020600020905b81548152906001019060200180831161275257829003601f168201915b5050505050905090565b606060008214156127c1576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506128d5565b600082905060005b600082146127f35780806127dc90614219565b915050600a826127ec9190613f72565b91506127c9565b60008167ffffffffffffffff81111561280f5761280e61434f565b5b6040519080825280601f01601f1916602001820160405280156128415781602001600182028036833780820191505090505b5090505b600085146128ce5760018261285a9190614031565b9150600a856128699190614262565b60306128759190613f1c565b60f81b81838151811061288b5761288a614320565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128c79190613f72565b9450612845565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561294b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294290613ae7565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b50505050565b50505050565b600080823b905060008111915050919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612a59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5090613ce7565b60405180910390fd5b612a62816118bb565b15612aa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9990613cc7565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000a831115612b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afc90613dc7565b60405180910390fd5b612b1260008583866129c3565b6000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151612c0f9190613ed6565b6fffffffffffffffffffffffffffffffff168152602001858360200151612c369190613ed6565b6fffffffffffffffffffffffffffffffff16815250600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506005600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015612ea557818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612e456000888488612491565b612e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7b90613c87565b60405180910390fd5b8180612e8f90614219565b9250508080612e9d90614219565b915050612dd4565b5080600181905550612eba60008785886129c9565b505050505050565b828054612ece906141b6565b90600052602060002090601f016020900481019282612ef05760008555612f37565b82601f10612f0957803560ff1916838001178555612f37565b82800160010185558215612f37579182015b82811115612f36578235825591602001919060010190612f1b565b5b509050612f449190612f82565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612f9b576000816000905550600101612f83565b5090565b6000612fb2612fad84613e42565b613e1d565b905082815260208101848484011115612fce57612fcd61438d565b5b612fd984828561414a565b509392505050565b600081359050612ff081614b27565b92915050565b60008135905061300581614b3e565b92915050565b60008135905061301a81614b55565b92915050565b60008151905061302f81614b55565b92915050565b600082601f83011261304a57613049614383565b5b813561305a848260208601612f9f565b91505092915050565b60008083601f84011261307957613078614383565b5b8235905067ffffffffffffffff8111156130965761309561437e565b5b6020830191508360018202830111156130b2576130b1614388565b5b9250929050565b6000813590506130c881614b6c565b92915050565b6000813590506130dd81614b83565b92915050565b6000602082840312156130f9576130f8614397565b5b600061310784828501612fe1565b91505092915050565b6000806040838503121561312757613126614397565b5b600061313585828601612fe1565b925050602061314685828601612fe1565b9150509250929050565b60008060006060848603121561316957613168614397565b5b600061317786828701612fe1565b935050602061318886828701612fe1565b9250506040613199868287016130b9565b9150509250925092565b600080600080608085870312156131bd576131bc614397565b5b60006131cb87828801612fe1565b94505060206131dc87828801612fe1565b93505060406131ed878288016130b9565b925050606085013567ffffffffffffffff81111561320e5761320d614392565b5b61321a87828801613035565b91505092959194509250565b6000806040838503121561323d5761323c614397565b5b600061324b85828601612fe1565b925050602061325c85828601612ff6565b9150509250929050565b6000806040838503121561327d5761327c614397565b5b600061328b85828601612fe1565b925050602061329c858286016130b9565b9150509250929050565b6000602082840312156132bc576132bb614397565b5b60006132ca8482850161300b565b91505092915050565b6000602082840312156132e9576132e8614397565b5b60006132f784828501613020565b91505092915050565b6000806020838503121561331757613316614397565b5b600083013567ffffffffffffffff81111561333557613334614392565b5b61334185828601613063565b92509250509250929050565b60006020828403121561336357613362614397565b5b6000613371848285016130b9565b91505092915050565b6000602082840312156133905761338f614397565b5b600061339e848285016130ce565b91505092915050565b6133b081614099565b82525050565b6133bf81614099565b82525050565b6133ce816140ab565b82525050565b60006133df82613e88565b6133e98185613e9e565b93506133f9818560208601614159565b6134028161439c565b840191505092915050565b600061341882613e93565b6134228185613eba565b9350613432818560208601614159565b61343b8161439c565b840191505092915050565b600061345182613e93565b61345b8185613ecb565b935061346b818560208601614159565b80840191505092915050565b60008154613484816141b6565b61348e8186613ecb565b945060018216600081146134a957600181146134ba576134ed565b60ff198316865281860193506134ed565b6134c385613e73565b60005b838110156134e5578154818901526001820191506020810190506134c6565b838801955050505b50505092915050565b6000613503602283613eba565b915061350e826143ad565b604082019050919050565b6000613526602683613eba565b9150613531826143fc565b604082019050919050565b6000613549602a83613eba565b91506135548261444b565b604082019050919050565b600061356c602383613eba565b91506135778261449a565b604082019050919050565b600061358f602583613eba565b915061359a826144e9565b604082019050919050565b60006135b2603183613eba565b91506135bd82614538565b604082019050919050565b60006135d5601e83613eba565b91506135e082614587565b602082019050919050565b60006135f8603983613eba565b9150613603826145b0565b604082019050919050565b600061361b601883613eba565b9150613626826145ff565b602082019050919050565b600061363e602b83613eba565b915061364982614628565b604082019050919050565b6000613661601283613eba565b915061366c82614677565b602082019050919050565b6000613684602683613eba565b915061368f826146a0565b604082019050919050565b60006136a7602083613eba565b91506136b2826146ef565b602082019050919050565b60006136ca602f83613eba565b91506136d582614718565b604082019050919050565b60006136ed601a83613eba565b91506136f882614767565b602082019050919050565b6000613710603283613eba565b915061371b82614790565b604082019050919050565b6000613733602283613eba565b915061373e826147df565b604082019050919050565b6000613756600083613eaf565b91506137618261482e565b600082019050919050565b6000613779601083613eba565b915061378482614831565b602082019050919050565b600061379c603383613eba565b91506137a78261485a565b604082019050919050565b60006137bf601683613eba565b91506137ca826148a9565b602082019050919050565b60006137e2601d83613eba565b91506137ed826148d2565b602082019050919050565b6000613805602183613eba565b9150613810826148fb565b604082019050919050565b6000613828601683613eba565b91506138338261494a565b602082019050919050565b600061384b602e83613eba565b915061385682614973565b604082019050919050565b600061386e602683613eba565b9150613879826149c2565b604082019050919050565b6000613891601f83613eba565b915061389c82614a11565b602082019050919050565b60006138b4602f83613eba565b91506138bf82614a3a565b604082019050919050565b60006138d7602d83613eba565b91506138e282614a89565b604082019050919050565b60006138fa602283613eba565b915061390582614ad8565b604082019050919050565b60408201600082015161392660008501826133a7565b506020820151613939602085018261394e565b50505050565b6139488161411f565b82525050565b61395781614129565b82525050565b60006139698286613446565b91506139758285613446565b91506139818284613477565b9150819050949350505050565b600061399982613749565b9150819050919050565b60006020820190506139b860008301846133b6565b92915050565b60006080820190506139d360008301876133b6565b6139e060208301866133b6565b6139ed604083018561393f565b81810360608301526139ff81846133d4565b905095945050505050565b6000602082019050613a1f60008301846133c5565b92915050565b60006020820190508181036000830152613a3f818461340d565b905092915050565b60006020820190508181036000830152613a60816134f6565b9050919050565b60006020820190508181036000830152613a8081613519565b9050919050565b60006020820190508181036000830152613aa08161353c565b9050919050565b60006020820190508181036000830152613ac08161355f565b9050919050565b60006020820190508181036000830152613ae081613582565b9050919050565b60006020820190508181036000830152613b00816135a5565b9050919050565b60006020820190508181036000830152613b20816135c8565b9050919050565b60006020820190508181036000830152613b40816135eb565b9050919050565b60006020820190508181036000830152613b608161360e565b9050919050565b60006020820190508181036000830152613b8081613631565b9050919050565b60006020820190508181036000830152613ba081613654565b9050919050565b60006020820190508181036000830152613bc081613677565b9050919050565b60006020820190508181036000830152613be08161369a565b9050919050565b60006020820190508181036000830152613c00816136bd565b9050919050565b60006020820190508181036000830152613c20816136e0565b9050919050565b60006020820190508181036000830152613c4081613703565b9050919050565b60006020820190508181036000830152613c6081613726565b9050919050565b60006020820190508181036000830152613c808161376c565b9050919050565b60006020820190508181036000830152613ca08161378f565b9050919050565b60006020820190508181036000830152613cc0816137b2565b9050919050565b60006020820190508181036000830152613ce0816137d5565b9050919050565b60006020820190508181036000830152613d00816137f8565b9050919050565b60006020820190508181036000830152613d208161381b565b9050919050565b60006020820190508181036000830152613d408161383e565b9050919050565b60006020820190508181036000830152613d6081613861565b9050919050565b60006020820190508181036000830152613d8081613884565b9050919050565b60006020820190508181036000830152613da0816138a7565b9050919050565b60006020820190508181036000830152613dc0816138ca565b9050919050565b60006020820190508181036000830152613de0816138ed565b9050919050565b6000604082019050613dfc6000830184613910565b92915050565b6000602082019050613e17600083018461393f565b92915050565b6000613e27613e38565b9050613e3382826141e8565b919050565b6000604051905090565b600067ffffffffffffffff821115613e5d57613e5c61434f565b5b613e668261439c565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613ee1826140e3565b9150613eec836140e3565b9250826fffffffffffffffffffffffffffffffff03821115613f1157613f10614293565b5b828201905092915050565b6000613f278261411f565b9150613f328361411f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f6757613f66614293565b5b828201905092915050565b6000613f7d8261411f565b9150613f888361411f565b925082613f9857613f976142c2565b5b828204905092915050565b6000613fae8261411f565b9150613fb98361411f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613ff257613ff1614293565b5b828202905092915050565b6000614008826140e3565b9150614013836140e3565b92508282101561402657614025614293565b5b828203905092915050565b600061403c8261411f565b91506140478361411f565b92508282101561405a57614059614293565b5b828203905092915050565b60006140708261413d565b915061407b8361413d565b92508282101561408e5761408d614293565b5b828203905092915050565b60006140a4826140ff565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561417757808201518184015260208101905061415c565b83811115614186576000848401525b50505050565b60006141978261411f565b915060008214156141ab576141aa614293565b5b600182039050919050565b600060028204905060018216806141ce57607f821691505b602082108114156141e2576141e16142f1565b5b50919050565b6141f18261439c565b810181811067ffffffffffffffff821117156142105761420f61434f565b5b80604052505050565b60006142248261411f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561425757614256614293565b5b600182019050919050565b600061426d8261411f565b91506142788361411f565b925082614288576142876142c2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b614b3081614099565b8114614b3b57600080fd5b50565b614b47816140ab565b8114614b5257600080fd5b50565b614b5e816140b7565b8114614b6957600080fd5b50565b614b758161411f565b8114614b8057600080fd5b50565b614b8c8161413d565b8114614b9757600080fd5b5056fea264697066735822122072b6cb1266db7fda7828956108d43f1c13812a216d99c87d595a6c135cc15fe264736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000002710

-----Decoded View---------------
Arg [0] : maxBatchSize_ (uint256): 10
Arg [1] : collectionSize_ (uint256): 10000

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [1] : 0000000000000000000000000000000000000000000000000000000000002710


Deployed Bytecode Sourcemap

395:2066:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4077:370:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5803:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7448:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7011:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2636:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8298:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2074:118:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3269:744:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8503:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2801:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1781:100:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5626:118:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4503:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1650:94:10;;;;;;;;;;;;;:::i;:::-;;453:48:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;999:87:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2311:147:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5958:98:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7716:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1887:181:1;;;;;;;;;;;;;:::i;:::-;;8723:311:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;863:534:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6123:510:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13138:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2198:107:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8053:186:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1899:192:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4077:370:4;4204:4;4249:25;4234:40;;;:11;:40;;;;:99;;;;4300:33;4285:48;;;:11;:48;;;;4234:99;:160;;;;4359:35;4344:50;;;:11;:50;;;;4234:160;:207;;;;4405:36;4429:11;4405:23;:36::i;:::-;4234:207;4220:221;;4077:370;;;:::o;5803:94::-;5857:13;5886:5;5879:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5803:94;:::o;7448:204::-;7516:7;7540:16;7548:7;7540;:16::i;:::-;7532:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;7622:15;:24;7638:7;7622:24;;;;;;;;;;;;;;;;;;;;;7615:31;;7448:204;;;:::o;7011:379::-;7080:13;7096:24;7112:7;7096:15;:24::i;:::-;7080:40;;7141:5;7135:11;;:2;:11;;;;7127:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;7226:5;7210:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;7235:37;7252:5;7259:12;:10;:12::i;:::-;7235:16;:37::i;:::-;7210:62;7194:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;7356:28;7365:2;7369:7;7378:5;7356:8;:28::i;:::-;7073:317;7011:379;;:::o;2636:96::-;2689:7;2725:1;2712:12;;:14;;;;:::i;:::-;2705:21;;2636:96;:::o;8298:142::-;8406:28;8416:4;8422:2;8426:7;8406:9;:28::i;:::-;8298:142;;;:::o;2074:118:1:-;1230:12:10;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1713:1:11::1;2309:7;;:19;;2301:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1713:1;2442:7;:18;;;;2158:28:1::2;2177:8;2158:18;:28::i;:::-;1669:1:11::1;2621:7;:22;;;;2074:118:1::0;:::o;3269:744:4:-;3378:7;3413:16;3423:5;3413:9;:16::i;:::-;3405:5;:24;3397:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;3475:22;3500:13;:11;:13::i;:::-;3475:38;;3520:19;3542:1;3520:23;;3550:25;3600:9;3612:1;3600:13;;3595:350;3619:14;3615:1;:18;3595:350;;;3649:31;3683:11;:14;3695:1;3683:14;;;;;;;;;;;3649:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3736:1;3710:28;;:9;:14;;;:28;;;3706:89;;3771:9;:14;;;3751:34;;3706:89;3828:5;3807:26;;:17;:26;;;3803:135;;;3865:5;3850:11;:20;3846:59;;;3892:1;3885:8;;;;;;;;;3846:59;3915:13;;;;;:::i;:::-;;;;3803:135;3640:305;3635:3;;;;;:::i;:::-;;;;3595:350;;;;3951:56;;;;;;;;;;:::i;:::-;;;;;;;;3269:744;;;;;:::o;8503:157::-;8615:39;8632:4;8638:2;8642:7;8615:39;;;;;;;;;;;;:16;:39::i;:::-;8503:157;;;:::o;2801:177::-;2868:7;2900:13;:11;:13::i;:::-;2892:5;:21;2884:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;2967:5;2960:12;;2801:177;;;:::o;1781:100:1:-;1230:12:10;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1868:7:1::1;;1852:13;:23;;;;;;;:::i;:::-;;1781:100:::0;;:::o;5626:118:4:-;5690:7;5713:20;5725:7;5713:11;:20::i;:::-;:25;;;5706:32;;5626:118;;;:::o;4503:211::-;4567:7;4608:1;4591:19;;:5;:19;;;;4583:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;4680:12;:19;4693:5;4680:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;4672:36;;4665:43;;4503:211;;;:::o;1650:94:10:-;1230:12;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1715:21:::1;1733:1;1715:9;:21::i;:::-;1650:94::o:0;453:48:1:-;;;:::o;999:87:10:-;1045:7;1072:6;;;;;;;;;;;1065:13;;999:87;:::o;2311:147:1:-;2392:21;;:::i;:::-;2432:20;2444:7;2432:11;:20::i;:::-;2425:27;;2311:147;;;:::o;5958:98:4:-;6014:13;6043:7;6036:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5958:98;:::o;7716:274::-;7819:12;:10;:12::i;:::-;7807:24;;:8;:24;;;;7799:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;7916:8;7871:18;:32;7890:12;:10;:12::i;:::-;7871:32;;;;;;;;;;;;;;;:42;7904:8;7871:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;7965:8;7936:48;;7951:12;:10;:12::i;:::-;7936:48;;;7975:8;7936:48;;;;;;:::i;:::-;;;;;;;;7716:274;;:::o;1887:181:1:-;1230:12:10;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1713:1:11::1;2309:7;;:19;;2301:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1713:1;2442:7;:18;;;;1952:12:1::2;1970:10;:15;;1993:21;1970:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1951:68;;;2034:7;2026:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;1944:124;1669:1:11::1;2621:7;:22;;;;1887:181:1:o:0;8723:311:4:-;8860:28;8870:4;8876:2;8880:7;8860:9;:28::i;:::-;8911:48;8934:4;8940:2;8944:7;8953:5;8911:22;:48::i;:::-;8895:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;8723:311;;;;:::o;863:534:1:-;789:10;776:23;;:9;:23;;;768:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;996:14:::1;984:8;968:24;;:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:42;;960:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1095:23;1083:8;1056:35;;:24;1069:10;1056:12;:24::i;:::-;:35;;;;:::i;:::-;:62;;1040:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;1165:18;1218:1;1193:24;1206:10;1193:12;:24::i;:::-;:26;1190:133;;;1259:5;;1254:1;1243:8;:12;;;;:::i;:::-;1242:22;;;;;;:::i;:::-;1229:35;;1190:133;;;1310:5;;1298:8;:17;;;;;;:::i;:::-;1285:30;;1190:133;1329:31;1339:10;1351:8;1329:31;;:9;:31::i;:::-;1367:24;1380:10;1367:12;:24::i;:::-;951:446;863:534:::0;:::o;6123:510:4:-;6221:13;6268:16;6276:7;6268;:16::i;:::-;6252:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;6381:1;6372:7;:10;;6356:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;6454:21;6478:10;:8;:10::i;:::-;6454:34;;6533:1;6515:7;6509:21;:25;:118;;;;;;;;;;;;;;;;;6570:7;6579:18;:7;:16;:18::i;:::-;6598:13;6553:59;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6509:118;6495:132;;;6123:510;;;:::o;13138:43::-;;;;:::o;2198:107:1:-;2256:7;2279:20;2293:5;2279:13;:20::i;:::-;2272:27;;2198:107;;;:::o;8053:186:4:-;8175:4;8198:18;:25;8217:5;8198:25;;;;;;;;;;;;;;;:35;8224:8;8198:35;;;;;;;;;;;;;;;;;;;;;;;;;8191:42;;8053:186;;;;:::o;1899:192:10:-;1230:12;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2008:1:::1;1988:22;;:8;:22;;;;1980:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2064:19;2074:8;2064:9;:19::i;:::-;1899:192:::0;:::o;787:157:3:-;872:4;911:25;896:40;;;:11;:40;;;;889:47;;787:157;;;:::o;9273:105:4:-;9330:4;9360:12;;9350:7;:22;9343:29;;9273:105;;;:::o;601:98:2:-;654:7;681:10;674:17;;601:98;:::o;12960:172:4:-;13084:2;13057:15;:24;13073:7;13057:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;13118:7;13114:2;13098:28;;13107:5;13098:28;;;;;;;;;;;;12960:172;;;:::o;11325:1529::-;11422:35;11460:20;11472:7;11460:11;:20::i;:::-;11422:58;;11489:22;11531:13;:18;;;11515:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;11584:12;:10;:12::i;:::-;11560:36;;:20;11572:7;11560:11;:20::i;:::-;:36;;;11515:81;:142;;;;11607:50;11624:13;:18;;;11644:12;:10;:12::i;:::-;11607:16;:50::i;:::-;11515:142;11489:169;;11683:17;11667:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;11815:4;11793:26;;:13;:18;;;:26;;;11777:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;11904:1;11890:16;;:2;:16;;;;11882:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;11957:43;11979:4;11985:2;11989:7;11998:1;11957:21;:43::i;:::-;12057:49;12074:1;12078:7;12087:13;:18;;;12057:8;:49::i;:::-;12145:1;12115:12;:18;12128:4;12115:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12181:1;12153:12;:16;12166:2;12153:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12212:43;;;;;;;;12227:2;12212:43;;;;;;12238:15;12212:43;;;;;12189:11;:20;12201:7;12189:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12483:19;12515:1;12505:7;:11;;;;:::i;:::-;12483:33;;12568:1;12527:43;;:11;:24;12539:11;12527:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;12523:236;;;12585:20;12593:11;12585:7;:20::i;:::-;12581:171;;;12645:97;;;;;;;;12672:13;:18;;;12645:97;;;;;;12703:13;:28;;;12645:97;;;;;12618:11;:24;12630:11;12618:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12581:171;12523:236;12791:7;12787:2;12772:27;;12781:4;12772:27;;;;;;;;;;;;12806:42;12827:4;12833:2;12837:7;12846:1;12806:20;:42::i;:::-;11415:1439;;;11325:1529;;;:::o;13286:846::-;13348:25;13376:24;;13348:52;;13426:1;13415:8;:12;13407:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;13463:16;13513:1;13502:8;13482:17;:28;;;;:::i;:::-;:32;;;;:::i;:::-;13463:51;;13553:1;13536:14;:18;;;;:::i;:::-;13525:8;:29;13521:81;;;13593:1;13576:14;:18;;;;:::i;:::-;13565:29;;13521:81;13717:17;13725:8;13717:7;:17::i;:::-;13709:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13789:9;13801:17;13789:29;;13784:297;13825:8;13820:1;:13;13784:297;;13884:1;13853:33;;:11;:14;13865:1;13853:14;;;;;;;;;;;:19;;;;;;;;;;;;:33;;;13849:225;;;13899:31;13933:14;13945:1;13933:11;:14::i;:::-;13899:48;;13975:89;;;;;;;;14002:9;:14;;;13975:89;;;;;;14029:9;:24;;;13975:89;;;;;13958:11;:14;13970:1;13958:14;;;;;;;;;;;:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13888:186;13849:225;13835:3;;;;;:::i;:::-;;;;13784:297;;;;14125:1;14114:8;:12;;;;:::i;:::-;14087:24;:39;;;;13341:791;;13286:846;:::o;4966:606::-;5042:21;;:::i;:::-;5083:16;5091:7;5083;:16::i;:::-;5075:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5155:26;5203:12;5192:7;:23;5188:93;;5272:1;5257:12;5247:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;5226:47;;5188:93;5294:12;5309:7;5294:22;;5289:212;5326:18;5318:4;:26;5289:212;;5363:31;5397:11;:17;5409:4;5397:17;;;;;;;;;;;5363:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5453:1;5427:28;;:9;:14;;;:28;;;5423:71;;5475:9;5468:16;;;;;;;5423:71;5354:147;5346:6;;;;;:::i;:::-;;;;5289:212;;;;5509:57;;;;;;;;;;:::i;:::-;;;;;;;;4966:606;;;;:::o;2099:173:10:-;2155:16;2174:6;;;;;;;;;;;2155:25;;2200:8;2191:6;;:17;;;;;;;;;;;;;;;;;;2255:8;2224:40;;2245:8;2224:40;;;;;;;;;;;;2144:128;2099:173;:::o;14675:690:4:-;14812:4;14829:15;:2;:13;;;:15::i;:::-;14825:535;;;14884:2;14868:36;;;14905:12;:10;:12::i;:::-;14919:4;14925:7;14934:5;14868:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;14855:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15116:1;15099:6;:13;:18;15095:215;;;15132:61;;;;;;;;;;:::i;:::-;;;;;;;;15095:215;15278:6;15272:13;15263:6;15259:2;15255:15;15248:38;14855:464;15000:45;;;14990:55;;;:6;:55;;;;14983:62;;;;;14825:535;15348:4;15341:11;;14675:690;;;;;;;:::o;9384:98::-;9449:27;9459:2;9463:8;9449:27;;;;;;;;;;;;:9;:27::i;:::-;9384:98;;:::o;1403:200:1:-;1475:4;1462:9;:17;;1454:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;1529:4;1517:9;:16;1513:85;;;1552:10;1544:28;;:46;1585:4;1573:9;:16;;;;:::i;:::-;1544:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1513:85;1403:200;:::o;1667:108::-;1727:13;1756;1749:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1667:108;:::o;288:723:12:-;344:13;574:1;565:5;:10;561:53;;;592:10;;;;;;;;;;;;;;;;;;;;;561:53;624:12;639:5;624:20;;655:14;680:78;695:1;687:4;:9;680:78;;713:8;;;;;:::i;:::-;;;;744:2;736:10;;;;;:::i;:::-;;;680:78;;;768:19;800:6;790:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;768:39;;818:154;834:1;825:5;:10;818:154;;862:1;852:11;;;;;:::i;:::-;;;929:2;921:5;:10;;;;:::i;:::-;908:2;:24;;;;:::i;:::-;895:39;;878:6;885;878:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;958:2;949:11;;;;;:::i;:::-;;;818:154;;;996:6;982:21;;;;;288:723;;;;:::o;4720:240:4:-;4781:7;4830:1;4813:19;;:5;:19;;;;4797:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;4921:12;:19;4934:5;4921:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;4913:41;;4906:48;;4720:240;;;:::o;15827:141::-;;;;;:::o;16354:140::-;;;;;:::o;743:387:0:-;803:4;1011:12;1078:7;1066:20;1058:28;;1121:1;1114:4;:8;1107:15;;;743:387;;;:::o;9821:1272:4:-;9926:20;9949:12;;9926:35;;9990:1;9976:16;;:2;:16;;;;9968:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;10167:21;10175:12;10167:7;:21::i;:::-;10166:22;10158:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;10249:12;10237:8;:24;;10229:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;10309:61;10339:1;10343:2;10347:12;10361:8;10309:21;:61::i;:::-;10379:30;10412:12;:16;10425:2;10412:16;;;;;;;;;;;;;;;10379:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10454:119;;;;;;;;10504:8;10474:11;:19;;;:39;;;;:::i;:::-;10454:119;;;;;;10557:8;10522:11;:24;;;:44;;;;:::i;:::-;10454:119;;;;;10435:12;:16;10448:2;10435:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10608:43;;;;;;;;10623:2;10608:43;;;;;;10634:15;10608:43;;;;;10580:11;:25;10592:12;10580:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10660:20;10683:12;10660:35;;10709:9;10704:281;10728:8;10724:1;:12;10704:281;;;10782:12;10778:2;10757:38;;10774:1;10757:38;;;;;;;;;;;;10822:59;10853:1;10857:2;10861:12;10875:5;10822:22;:59::i;:::-;10804:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;10963:14;;;;;:::i;:::-;;;;10738:3;;;;;:::i;:::-;;;;10704:281;;;;11008:12;10993;:27;;;;11027:60;11056:1;11060:2;11064:12;11078:8;11027:20;:60::i;:::-;9919:1174;;;9821:1272;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:13:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;568:133;;;;:::o;707:137::-;752:5;790:6;777:20;768:29;;806:32;832:5;806:32;:::i;:::-;707:137;;;;:::o;850:141::-;906:5;937:6;931:13;922:22;;953:32;979:5;953:32;:::i;:::-;850:141;;;;:::o;1010:338::-;1065:5;1114:3;1107:4;1099:6;1095:17;1091:27;1081:122;;1122:79;;:::i;:::-;1081:122;1239:6;1226:20;1264:78;1338:3;1330:6;1323:4;1315:6;1311:17;1264:78;:::i;:::-;1255:87;;1071:277;1010:338;;;;:::o;1368:553::-;1426:8;1436:6;1486:3;1479:4;1471:6;1467:17;1463:27;1453:122;;1494:79;;:::i;:::-;1453:122;1607:6;1594:20;1584:30;;1637:18;1629:6;1626:30;1623:117;;;1659:79;;:::i;:::-;1623:117;1773:4;1765:6;1761:17;1749:29;;1827:3;1819:4;1811:6;1807:17;1797:8;1793:32;1790:41;1787:128;;;1834:79;;:::i;:::-;1787:128;1368:553;;;;;:::o;1927:139::-;1973:5;2011:6;1998:20;1989:29;;2027:33;2054:5;2027:33;:::i;:::-;1927:139;;;;:::o;2072:135::-;2116:5;2154:6;2141:20;2132:29;;2170:31;2195:5;2170:31;:::i;:::-;2072:135;;;;:::o;2213:329::-;2272:6;2321:2;2309:9;2300:7;2296:23;2292:32;2289:119;;;2327:79;;:::i;:::-;2289:119;2447:1;2472:53;2517:7;2508:6;2497:9;2493:22;2472:53;:::i;:::-;2462:63;;2418:117;2213:329;;;;:::o;2548:474::-;2616:6;2624;2673:2;2661:9;2652:7;2648:23;2644:32;2641:119;;;2679:79;;:::i;:::-;2641:119;2799:1;2824:53;2869:7;2860:6;2849:9;2845:22;2824:53;:::i;:::-;2814:63;;2770:117;2926:2;2952:53;2997:7;2988:6;2977:9;2973:22;2952:53;:::i;:::-;2942:63;;2897:118;2548:474;;;;;:::o;3028:619::-;3105:6;3113;3121;3170:2;3158:9;3149:7;3145:23;3141:32;3138:119;;;3176:79;;:::i;:::-;3138:119;3296:1;3321:53;3366:7;3357:6;3346:9;3342:22;3321:53;:::i;:::-;3311:63;;3267:117;3423:2;3449:53;3494:7;3485:6;3474:9;3470:22;3449:53;:::i;:::-;3439:63;;3394:118;3551:2;3577:53;3622:7;3613:6;3602:9;3598:22;3577:53;:::i;:::-;3567:63;;3522:118;3028:619;;;;;:::o;3653:943::-;3748:6;3756;3764;3772;3821:3;3809:9;3800:7;3796:23;3792:33;3789:120;;;3828:79;;:::i;:::-;3789:120;3948:1;3973:53;4018:7;4009:6;3998:9;3994:22;3973:53;:::i;:::-;3963:63;;3919:117;4075:2;4101:53;4146:7;4137:6;4126:9;4122:22;4101:53;:::i;:::-;4091:63;;4046:118;4203:2;4229:53;4274:7;4265:6;4254:9;4250:22;4229:53;:::i;:::-;4219:63;;4174:118;4359:2;4348:9;4344:18;4331:32;4390:18;4382:6;4379:30;4376:117;;;4412:79;;:::i;:::-;4376:117;4517:62;4571:7;4562:6;4551:9;4547:22;4517:62;:::i;:::-;4507:72;;4302:287;3653:943;;;;;;;:::o;4602:468::-;4667:6;4675;4724:2;4712:9;4703:7;4699:23;4695:32;4692:119;;;4730:79;;:::i;:::-;4692:119;4850:1;4875:53;4920:7;4911:6;4900:9;4896:22;4875:53;:::i;:::-;4865:63;;4821:117;4977:2;5003:50;5045:7;5036:6;5025:9;5021:22;5003:50;:::i;:::-;4993:60;;4948:115;4602:468;;;;;:::o;5076:474::-;5144:6;5152;5201:2;5189:9;5180:7;5176:23;5172:32;5169:119;;;5207:79;;:::i;:::-;5169:119;5327:1;5352:53;5397:7;5388:6;5377:9;5373:22;5352:53;:::i;:::-;5342:63;;5298:117;5454:2;5480:53;5525:7;5516:6;5505:9;5501:22;5480:53;:::i;:::-;5470:63;;5425:118;5076:474;;;;;:::o;5556:327::-;5614:6;5663:2;5651:9;5642:7;5638:23;5634:32;5631:119;;;5669:79;;:::i;:::-;5631:119;5789:1;5814:52;5858:7;5849:6;5838:9;5834:22;5814:52;:::i;:::-;5804:62;;5760:116;5556:327;;;;:::o;5889:349::-;5958:6;6007:2;5995:9;5986:7;5982:23;5978:32;5975:119;;;6013:79;;:::i;:::-;5975:119;6133:1;6158:63;6213:7;6204:6;6193:9;6189:22;6158:63;:::i;:::-;6148:73;;6104:127;5889:349;;;;:::o;6244:529::-;6315:6;6323;6372:2;6360:9;6351:7;6347:23;6343:32;6340:119;;;6378:79;;:::i;:::-;6340:119;6526:1;6515:9;6511:17;6498:31;6556:18;6548:6;6545:30;6542:117;;;6578:79;;:::i;:::-;6542:117;6691:65;6748:7;6739:6;6728:9;6724:22;6691:65;:::i;:::-;6673:83;;;;6469:297;6244:529;;;;;:::o;6779:329::-;6838:6;6887:2;6875:9;6866:7;6862:23;6858:32;6855:119;;;6893:79;;:::i;:::-;6855:119;7013:1;7038:53;7083:7;7074:6;7063:9;7059:22;7038:53;:::i;:::-;7028:63;;6984:117;6779:329;;;;:::o;7114:325::-;7171:6;7220:2;7208:9;7199:7;7195:23;7191:32;7188:119;;;7226:79;;:::i;:::-;7188:119;7346:1;7371:51;7414:7;7405:6;7394:9;7390:22;7371:51;:::i;:::-;7361:61;;7317:115;7114:325;;;;:::o;7445:108::-;7522:24;7540:5;7522:24;:::i;:::-;7517:3;7510:37;7445:108;;:::o;7559:118::-;7646:24;7664:5;7646:24;:::i;:::-;7641:3;7634:37;7559:118;;:::o;7683:109::-;7764:21;7779:5;7764:21;:::i;:::-;7759:3;7752:34;7683:109;;:::o;7798:360::-;7884:3;7912:38;7944:5;7912:38;:::i;:::-;7966:70;8029:6;8024:3;7966:70;:::i;:::-;7959:77;;8045:52;8090:6;8085:3;8078:4;8071:5;8067:16;8045:52;:::i;:::-;8122:29;8144:6;8122:29;:::i;:::-;8117:3;8113:39;8106:46;;7888:270;7798:360;;;;:::o;8164:364::-;8252:3;8280:39;8313:5;8280:39;:::i;:::-;8335:71;8399:6;8394:3;8335:71;:::i;:::-;8328:78;;8415:52;8460:6;8455:3;8448:4;8441:5;8437:16;8415:52;:::i;:::-;8492:29;8514:6;8492:29;:::i;:::-;8487:3;8483:39;8476:46;;8256:272;8164:364;;;;:::o;8534:377::-;8640:3;8668:39;8701:5;8668:39;:::i;:::-;8723:89;8805:6;8800:3;8723:89;:::i;:::-;8716:96;;8821:52;8866:6;8861:3;8854:4;8847:5;8843:16;8821:52;:::i;:::-;8898:6;8893:3;8889:16;8882:23;;8644:267;8534:377;;;;:::o;8941:845::-;9044:3;9081:5;9075:12;9110:36;9136:9;9110:36;:::i;:::-;9162:89;9244:6;9239:3;9162:89;:::i;:::-;9155:96;;9282:1;9271:9;9267:17;9298:1;9293:137;;;;9444:1;9439:341;;;;9260:520;;9293:137;9377:4;9373:9;9362;9358:25;9353:3;9346:38;9413:6;9408:3;9404:16;9397:23;;9293:137;;9439:341;9506:38;9538:5;9506:38;:::i;:::-;9566:1;9580:154;9594:6;9591:1;9588:13;9580:154;;;9668:7;9662:14;9658:1;9653:3;9649:11;9642:35;9718:1;9709:7;9705:15;9694:26;;9616:4;9613:1;9609:12;9604:17;;9580:154;;;9763:6;9758:3;9754:16;9747:23;;9446:334;;9260:520;;9048:738;;8941:845;;;;:::o;9792:366::-;9934:3;9955:67;10019:2;10014:3;9955:67;:::i;:::-;9948:74;;10031:93;10120:3;10031:93;:::i;:::-;10149:2;10144:3;10140:12;10133:19;;9792:366;;;:::o;10164:::-;10306:3;10327:67;10391:2;10386:3;10327:67;:::i;:::-;10320:74;;10403:93;10492:3;10403:93;:::i;:::-;10521:2;10516:3;10512:12;10505:19;;10164:366;;;:::o;10536:::-;10678:3;10699:67;10763:2;10758:3;10699:67;:::i;:::-;10692:74;;10775:93;10864:3;10775:93;:::i;:::-;10893:2;10888:3;10884:12;10877:19;;10536:366;;;:::o;10908:::-;11050:3;11071:67;11135:2;11130:3;11071:67;:::i;:::-;11064:74;;11147:93;11236:3;11147:93;:::i;:::-;11265:2;11260:3;11256:12;11249:19;;10908:366;;;:::o;11280:::-;11422:3;11443:67;11507:2;11502:3;11443:67;:::i;:::-;11436:74;;11519:93;11608:3;11519:93;:::i;:::-;11637:2;11632:3;11628:12;11621:19;;11280:366;;;:::o;11652:::-;11794:3;11815:67;11879:2;11874:3;11815:67;:::i;:::-;11808:74;;11891:93;11980:3;11891:93;:::i;:::-;12009:2;12004:3;12000:12;11993:19;;11652:366;;;:::o;12024:::-;12166:3;12187:67;12251:2;12246:3;12187:67;:::i;:::-;12180:74;;12263:93;12352:3;12263:93;:::i;:::-;12381:2;12376:3;12372:12;12365:19;;12024:366;;;:::o;12396:::-;12538:3;12559:67;12623:2;12618:3;12559:67;:::i;:::-;12552:74;;12635:93;12724:3;12635:93;:::i;:::-;12753:2;12748:3;12744:12;12737:19;;12396:366;;;:::o;12768:::-;12910:3;12931:67;12995:2;12990:3;12931:67;:::i;:::-;12924:74;;13007:93;13096:3;13007:93;:::i;:::-;13125:2;13120:3;13116:12;13109:19;;12768:366;;;:::o;13140:::-;13282:3;13303:67;13367:2;13362:3;13303:67;:::i;:::-;13296:74;;13379:93;13468:3;13379:93;:::i;:::-;13497:2;13492:3;13488:12;13481:19;;13140:366;;;:::o;13512:::-;13654:3;13675:67;13739:2;13734:3;13675:67;:::i;:::-;13668:74;;13751:93;13840:3;13751:93;:::i;:::-;13869:2;13864:3;13860:12;13853:19;;13512:366;;;:::o;13884:::-;14026:3;14047:67;14111:2;14106:3;14047:67;:::i;:::-;14040:74;;14123:93;14212:3;14123:93;:::i;:::-;14241:2;14236:3;14232:12;14225:19;;13884:366;;;:::o;14256:::-;14398:3;14419:67;14483:2;14478:3;14419:67;:::i;:::-;14412:74;;14495:93;14584:3;14495:93;:::i;:::-;14613:2;14608:3;14604:12;14597:19;;14256:366;;;:::o;14628:::-;14770:3;14791:67;14855:2;14850:3;14791:67;:::i;:::-;14784:74;;14867:93;14956:3;14867:93;:::i;:::-;14985:2;14980:3;14976:12;14969:19;;14628:366;;;:::o;15000:::-;15142:3;15163:67;15227:2;15222:3;15163:67;:::i;:::-;15156:74;;15239:93;15328:3;15239:93;:::i;:::-;15357:2;15352:3;15348:12;15341:19;;15000:366;;;:::o;15372:::-;15514:3;15535:67;15599:2;15594:3;15535:67;:::i;:::-;15528:74;;15611:93;15700:3;15611:93;:::i;:::-;15729:2;15724:3;15720:12;15713:19;;15372:366;;;:::o;15744:::-;15886:3;15907:67;15971:2;15966:3;15907:67;:::i;:::-;15900:74;;15983:93;16072:3;15983:93;:::i;:::-;16101:2;16096:3;16092:12;16085:19;;15744:366;;;:::o;16116:398::-;16275:3;16296:83;16377:1;16372:3;16296:83;:::i;:::-;16289:90;;16388:93;16477:3;16388:93;:::i;:::-;16506:1;16501:3;16497:11;16490:18;;16116:398;;;:::o;16520:366::-;16662:3;16683:67;16747:2;16742:3;16683:67;:::i;:::-;16676:74;;16759:93;16848:3;16759:93;:::i;:::-;16877:2;16872:3;16868:12;16861:19;;16520:366;;;:::o;16892:::-;17034:3;17055:67;17119:2;17114:3;17055:67;:::i;:::-;17048:74;;17131:93;17220:3;17131:93;:::i;:::-;17249:2;17244:3;17240:12;17233:19;;16892:366;;;:::o;17264:::-;17406:3;17427:67;17491:2;17486:3;17427:67;:::i;:::-;17420:74;;17503:93;17592:3;17503:93;:::i;:::-;17621:2;17616:3;17612:12;17605:19;;17264:366;;;:::o;17636:::-;17778:3;17799:67;17863:2;17858:3;17799:67;:::i;:::-;17792:74;;17875:93;17964:3;17875:93;:::i;:::-;17993:2;17988:3;17984:12;17977:19;;17636:366;;;:::o;18008:::-;18150:3;18171:67;18235:2;18230:3;18171:67;:::i;:::-;18164:74;;18247:93;18336:3;18247:93;:::i;:::-;18365:2;18360:3;18356:12;18349:19;;18008:366;;;:::o;18380:::-;18522:3;18543:67;18607:2;18602:3;18543:67;:::i;:::-;18536:74;;18619:93;18708:3;18619:93;:::i;:::-;18737:2;18732:3;18728:12;18721:19;;18380:366;;;:::o;18752:::-;18894:3;18915:67;18979:2;18974:3;18915:67;:::i;:::-;18908:74;;18991:93;19080:3;18991:93;:::i;:::-;19109:2;19104:3;19100:12;19093:19;;18752:366;;;:::o;19124:::-;19266:3;19287:67;19351:2;19346:3;19287:67;:::i;:::-;19280:74;;19363:93;19452:3;19363:93;:::i;:::-;19481:2;19476:3;19472:12;19465:19;;19124:366;;;:::o;19496:::-;19638:3;19659:67;19723:2;19718:3;19659:67;:::i;:::-;19652:74;;19735:93;19824:3;19735:93;:::i;:::-;19853:2;19848:3;19844:12;19837:19;;19496:366;;;:::o;19868:::-;20010:3;20031:67;20095:2;20090:3;20031:67;:::i;:::-;20024:74;;20107:93;20196:3;20107:93;:::i;:::-;20225:2;20220:3;20216:12;20209:19;;19868:366;;;:::o;20240:::-;20382:3;20403:67;20467:2;20462:3;20403:67;:::i;:::-;20396:74;;20479:93;20568:3;20479:93;:::i;:::-;20597:2;20592:3;20588:12;20581:19;;20240:366;;;:::o;20612:::-;20754:3;20775:67;20839:2;20834:3;20775:67;:::i;:::-;20768:74;;20851:93;20940:3;20851:93;:::i;:::-;20969:2;20964:3;20960:12;20953:19;;20612:366;;;:::o;21054:527::-;21213:4;21208:3;21204:14;21300:4;21293:5;21289:16;21283:23;21319:63;21376:4;21371:3;21367:14;21353:12;21319:63;:::i;:::-;21228:164;21484:4;21477:5;21473:16;21467:23;21503:61;21558:4;21553:3;21549:14;21535:12;21503:61;:::i;:::-;21402:172;21182:399;21054:527;;:::o;21587:118::-;21674:24;21692:5;21674:24;:::i;:::-;21669:3;21662:37;21587:118;;:::o;21711:105::-;21786:23;21803:5;21786:23;:::i;:::-;21781:3;21774:36;21711:105;;:::o;21822:589::-;22047:3;22069:95;22160:3;22151:6;22069:95;:::i;:::-;22062:102;;22181:95;22272:3;22263:6;22181:95;:::i;:::-;22174:102;;22293:92;22381:3;22372:6;22293:92;:::i;:::-;22286:99;;22402:3;22395:10;;21822:589;;;;;;:::o;22417:379::-;22601:3;22623:147;22766:3;22623:147;:::i;:::-;22616:154;;22787:3;22780:10;;22417:379;;;:::o;22802:222::-;22895:4;22933:2;22922:9;22918:18;22910:26;;22946:71;23014:1;23003:9;22999:17;22990:6;22946:71;:::i;:::-;22802:222;;;;:::o;23030:640::-;23225:4;23263:3;23252:9;23248:19;23240:27;;23277:71;23345:1;23334:9;23330:17;23321:6;23277:71;:::i;:::-;23358:72;23426:2;23415:9;23411:18;23402:6;23358:72;:::i;:::-;23440;23508:2;23497:9;23493:18;23484:6;23440:72;:::i;:::-;23559:9;23553:4;23549:20;23544:2;23533:9;23529:18;23522:48;23587:76;23658:4;23649:6;23587:76;:::i;:::-;23579:84;;23030:640;;;;;;;:::o;23676:210::-;23763:4;23801:2;23790:9;23786:18;23778:26;;23814:65;23876:1;23865:9;23861:17;23852:6;23814:65;:::i;:::-;23676:210;;;;:::o;23892:313::-;24005:4;24043:2;24032:9;24028:18;24020:26;;24092:9;24086:4;24082:20;24078:1;24067:9;24063:17;24056:47;24120:78;24193:4;24184:6;24120:78;:::i;:::-;24112:86;;23892:313;;;;:::o;24211:419::-;24377:4;24415:2;24404:9;24400:18;24392:26;;24464:9;24458:4;24454:20;24450:1;24439:9;24435:17;24428:47;24492:131;24618:4;24492:131;:::i;:::-;24484:139;;24211:419;;;:::o;24636:::-;24802:4;24840:2;24829:9;24825:18;24817:26;;24889:9;24883:4;24879:20;24875:1;24864:9;24860:17;24853:47;24917:131;25043:4;24917:131;:::i;:::-;24909:139;;24636:419;;;:::o;25061:::-;25227:4;25265:2;25254:9;25250:18;25242:26;;25314:9;25308:4;25304:20;25300:1;25289:9;25285:17;25278:47;25342:131;25468:4;25342:131;:::i;:::-;25334:139;;25061:419;;;:::o;25486:::-;25652:4;25690:2;25679:9;25675:18;25667:26;;25739:9;25733:4;25729:20;25725:1;25714:9;25710:17;25703:47;25767:131;25893:4;25767:131;:::i;:::-;25759:139;;25486:419;;;:::o;25911:::-;26077:4;26115:2;26104:9;26100:18;26092:26;;26164:9;26158:4;26154:20;26150:1;26139:9;26135:17;26128:47;26192:131;26318:4;26192:131;:::i;:::-;26184:139;;25911:419;;;:::o;26336:::-;26502:4;26540:2;26529:9;26525:18;26517:26;;26589:9;26583:4;26579:20;26575:1;26564:9;26560:17;26553:47;26617:131;26743:4;26617:131;:::i;:::-;26609:139;;26336:419;;;:::o;26761:::-;26927:4;26965:2;26954:9;26950:18;26942:26;;27014:9;27008:4;27004:20;27000:1;26989:9;26985:17;26978:47;27042:131;27168:4;27042:131;:::i;:::-;27034:139;;26761:419;;;:::o;27186:::-;27352:4;27390:2;27379:9;27375:18;27367:26;;27439:9;27433:4;27429:20;27425:1;27414:9;27410:17;27403:47;27467:131;27593:4;27467:131;:::i;:::-;27459:139;;27186:419;;;:::o;27611:::-;27777:4;27815:2;27804:9;27800:18;27792:26;;27864:9;27858:4;27854:20;27850:1;27839:9;27835:17;27828:47;27892:131;28018:4;27892:131;:::i;:::-;27884:139;;27611:419;;;:::o;28036:::-;28202:4;28240:2;28229:9;28225:18;28217:26;;28289:9;28283:4;28279:20;28275:1;28264:9;28260:17;28253:47;28317:131;28443:4;28317:131;:::i;:::-;28309:139;;28036:419;;;:::o;28461:::-;28627:4;28665:2;28654:9;28650:18;28642:26;;28714:9;28708:4;28704:20;28700:1;28689:9;28685:17;28678:47;28742:131;28868:4;28742:131;:::i;:::-;28734:139;;28461:419;;;:::o;28886:::-;29052:4;29090:2;29079:9;29075:18;29067:26;;29139:9;29133:4;29129:20;29125:1;29114:9;29110:17;29103:47;29167:131;29293:4;29167:131;:::i;:::-;29159:139;;28886:419;;;:::o;29311:::-;29477:4;29515:2;29504:9;29500:18;29492:26;;29564:9;29558:4;29554:20;29550:1;29539:9;29535:17;29528:47;29592:131;29718:4;29592:131;:::i;:::-;29584:139;;29311:419;;;:::o;29736:::-;29902:4;29940:2;29929:9;29925:18;29917:26;;29989:9;29983:4;29979:20;29975:1;29964:9;29960:17;29953:47;30017:131;30143:4;30017:131;:::i;:::-;30009:139;;29736:419;;;:::o;30161:::-;30327:4;30365:2;30354:9;30350:18;30342:26;;30414:9;30408:4;30404:20;30400:1;30389:9;30385:17;30378:47;30442:131;30568:4;30442:131;:::i;:::-;30434:139;;30161:419;;;:::o;30586:::-;30752:4;30790:2;30779:9;30775:18;30767:26;;30839:9;30833:4;30829:20;30825:1;30814:9;30810:17;30803:47;30867:131;30993:4;30867:131;:::i;:::-;30859:139;;30586:419;;;:::o;31011:::-;31177:4;31215:2;31204:9;31200:18;31192:26;;31264:9;31258:4;31254:20;31250:1;31239:9;31235:17;31228:47;31292:131;31418:4;31292:131;:::i;:::-;31284:139;;31011:419;;;:::o;31436:::-;31602:4;31640:2;31629:9;31625:18;31617:26;;31689:9;31683:4;31679:20;31675:1;31664:9;31660:17;31653:47;31717:131;31843:4;31717:131;:::i;:::-;31709:139;;31436:419;;;:::o;31861:::-;32027:4;32065:2;32054:9;32050:18;32042:26;;32114:9;32108:4;32104:20;32100:1;32089:9;32085:17;32078:47;32142:131;32268:4;32142:131;:::i;:::-;32134:139;;31861:419;;;:::o;32286:::-;32452:4;32490:2;32479:9;32475:18;32467:26;;32539:9;32533:4;32529:20;32525:1;32514:9;32510:17;32503:47;32567:131;32693:4;32567:131;:::i;:::-;32559:139;;32286:419;;;:::o;32711:::-;32877:4;32915:2;32904:9;32900:18;32892:26;;32964:9;32958:4;32954:20;32950:1;32939:9;32935:17;32928:47;32992:131;33118:4;32992:131;:::i;:::-;32984:139;;32711:419;;;:::o;33136:::-;33302:4;33340:2;33329:9;33325:18;33317:26;;33389:9;33383:4;33379:20;33375:1;33364:9;33360:17;33353:47;33417:131;33543:4;33417:131;:::i;:::-;33409:139;;33136:419;;;:::o;33561:::-;33727:4;33765:2;33754:9;33750:18;33742:26;;33814:9;33808:4;33804:20;33800:1;33789:9;33785:17;33778:47;33842:131;33968:4;33842:131;:::i;:::-;33834:139;;33561:419;;;:::o;33986:::-;34152:4;34190:2;34179:9;34175:18;34167:26;;34239:9;34233:4;34229:20;34225:1;34214:9;34210:17;34203:47;34267:131;34393:4;34267:131;:::i;:::-;34259:139;;33986:419;;;:::o;34411:::-;34577:4;34615:2;34604:9;34600:18;34592:26;;34664:9;34658:4;34654:20;34650:1;34639:9;34635:17;34628:47;34692:131;34818:4;34692:131;:::i;:::-;34684:139;;34411:419;;;:::o;34836:::-;35002:4;35040:2;35029:9;35025:18;35017:26;;35089:9;35083:4;35079:20;35075:1;35064:9;35060:17;35053:47;35117:131;35243:4;35117:131;:::i;:::-;35109:139;;34836:419;;;:::o;35261:::-;35427:4;35465:2;35454:9;35450:18;35442:26;;35514:9;35508:4;35504:20;35500:1;35489:9;35485:17;35478:47;35542:131;35668:4;35542:131;:::i;:::-;35534:139;;35261:419;;;:::o;35686:::-;35852:4;35890:2;35879:9;35875:18;35867:26;;35939:9;35933:4;35929:20;35925:1;35914:9;35910:17;35903:47;35967:131;36093:4;35967:131;:::i;:::-;35959:139;;35686:419;;;:::o;36111:::-;36277:4;36315:2;36304:9;36300:18;36292:26;;36364:9;36358:4;36354:20;36350:1;36339:9;36335:17;36328:47;36392:131;36518:4;36392:131;:::i;:::-;36384:139;;36111:419;;;:::o;36536:346::-;36691:4;36729:2;36718:9;36714:18;36706:26;;36742:133;36872:1;36861:9;36857:17;36848:6;36742:133;:::i;:::-;36536:346;;;;:::o;36888:222::-;36981:4;37019:2;37008:9;37004:18;36996:26;;37032:71;37100:1;37089:9;37085:17;37076:6;37032:71;:::i;:::-;36888:222;;;;:::o;37116:129::-;37150:6;37177:20;;:::i;:::-;37167:30;;37206:33;37234:4;37226:6;37206:33;:::i;:::-;37116:129;;;:::o;37251:75::-;37284:6;37317:2;37311:9;37301:19;;37251:75;:::o;37332:307::-;37393:4;37483:18;37475:6;37472:30;37469:56;;;37505:18;;:::i;:::-;37469:56;37543:29;37565:6;37543:29;:::i;:::-;37535:37;;37627:4;37621;37617:15;37609:23;;37332:307;;;:::o;37645:141::-;37694:4;37717:3;37709:11;;37740:3;37737:1;37730:14;37774:4;37771:1;37761:18;37753:26;;37645:141;;;:::o;37792:98::-;37843:6;37877:5;37871:12;37861:22;;37792:98;;;:::o;37896:99::-;37948:6;37982:5;37976:12;37966:22;;37896:99;;;:::o;38001:168::-;38084:11;38118:6;38113:3;38106:19;38158:4;38153:3;38149:14;38134:29;;38001:168;;;;:::o;38175:147::-;38276:11;38313:3;38298:18;;38175:147;;;;:::o;38328:169::-;38412:11;38446:6;38441:3;38434:19;38486:4;38481:3;38477:14;38462:29;;38328:169;;;;:::o;38503:148::-;38605:11;38642:3;38627:18;;38503:148;;;;:::o;38657:273::-;38697:3;38716:20;38734:1;38716:20;:::i;:::-;38711:25;;38750:20;38768:1;38750:20;:::i;:::-;38745:25;;38872:1;38836:34;38832:42;38829:1;38826:49;38823:75;;;38878:18;;:::i;:::-;38823:75;38922:1;38919;38915:9;38908:16;;38657:273;;;;:::o;38936:305::-;38976:3;38995:20;39013:1;38995:20;:::i;:::-;38990:25;;39029:20;39047:1;39029:20;:::i;:::-;39024:25;;39183:1;39115:66;39111:74;39108:1;39105:81;39102:107;;;39189:18;;:::i;:::-;39102:107;39233:1;39230;39226:9;39219:16;;38936:305;;;;:::o;39247:185::-;39287:1;39304:20;39322:1;39304:20;:::i;:::-;39299:25;;39338:20;39356:1;39338:20;:::i;:::-;39333:25;;39377:1;39367:35;;39382:18;;:::i;:::-;39367:35;39424:1;39421;39417:9;39412:14;;39247:185;;;;:::o;39438:348::-;39478:7;39501:20;39519:1;39501:20;:::i;:::-;39496:25;;39535:20;39553:1;39535:20;:::i;:::-;39530:25;;39723:1;39655:66;39651:74;39648:1;39645:81;39640:1;39633:9;39626:17;39622:105;39619:131;;;39730:18;;:::i;:::-;39619:131;39778:1;39775;39771:9;39760:20;;39438:348;;;;:::o;39792:191::-;39832:4;39852:20;39870:1;39852:20;:::i;:::-;39847:25;;39886:20;39904:1;39886:20;:::i;:::-;39881:25;;39925:1;39922;39919:8;39916:34;;;39930:18;;:::i;:::-;39916:34;39975:1;39972;39968:9;39960:17;;39792:191;;;;:::o;39989:::-;40029:4;40049:20;40067:1;40049:20;:::i;:::-;40044:25;;40083:20;40101:1;40083:20;:::i;:::-;40078:25;;40122:1;40119;40116:8;40113:34;;;40127:18;;:::i;:::-;40113:34;40172:1;40169;40165:9;40157:17;;39989:191;;;;:::o;40186:185::-;40224:4;40244:18;40260:1;40244:18;:::i;:::-;40239:23;;40276:18;40292:1;40276:18;:::i;:::-;40271:23;;40313:1;40310;40307:8;40304:34;;;40318:18;;:::i;:::-;40304:34;40363:1;40360;40356:9;40348:17;;40186:185;;;;:::o;40377:96::-;40414:7;40443:24;40461:5;40443:24;:::i;:::-;40432:35;;40377:96;;;:::o;40479:90::-;40513:7;40556:5;40549:13;40542:21;40531:32;;40479:90;;;:::o;40575:149::-;40611:7;40651:66;40644:5;40640:78;40629:89;;40575:149;;;:::o;40730:118::-;40767:7;40807:34;40800:5;40796:46;40785:57;;40730:118;;;:::o;40854:126::-;40891:7;40931:42;40924:5;40920:54;40909:65;;40854:126;;;:::o;40986:77::-;41023:7;41052:5;41041:16;;40986:77;;;:::o;41069:101::-;41105:7;41145:18;41138:5;41134:30;41123:41;;41069:101;;;:::o;41176:86::-;41211:7;41251:4;41244:5;41240:16;41229:27;;41176:86;;;:::o;41268:154::-;41352:6;41347:3;41342;41329:30;41414:1;41405:6;41400:3;41396:16;41389:27;41268:154;;;:::o;41428:307::-;41496:1;41506:113;41520:6;41517:1;41514:13;41506:113;;;41605:1;41600:3;41596:11;41590:18;41586:1;41581:3;41577:11;41570:39;41542:2;41539:1;41535:10;41530:15;;41506:113;;;41637:6;41634:1;41631:13;41628:101;;;41717:1;41708:6;41703:3;41699:16;41692:27;41628:101;41477:258;41428:307;;;:::o;41741:171::-;41780:3;41803:24;41821:5;41803:24;:::i;:::-;41794:33;;41849:4;41842:5;41839:15;41836:41;;;41857:18;;:::i;:::-;41836:41;41904:1;41897:5;41893:13;41886:20;;41741:171;;;:::o;41918:320::-;41962:6;41999:1;41993:4;41989:12;41979:22;;42046:1;42040:4;42036:12;42067:18;42057:81;;42123:4;42115:6;42111:17;42101:27;;42057:81;42185:2;42177:6;42174:14;42154:18;42151:38;42148:84;;;42204:18;;:::i;:::-;42148:84;41969:269;41918:320;;;:::o;42244:281::-;42327:27;42349:4;42327:27;:::i;:::-;42319:6;42315:40;42457:6;42445:10;42442:22;42421:18;42409:10;42406:34;42403:62;42400:88;;;42468:18;;:::i;:::-;42400:88;42508:10;42504:2;42497:22;42287:238;42244:281;;:::o;42531:233::-;42570:3;42593:24;42611:5;42593:24;:::i;:::-;42584:33;;42639:66;42632:5;42629:77;42626:103;;;42709:18;;:::i;:::-;42626:103;42756:1;42749:5;42745:13;42738:20;;42531:233;;;:::o;42770:176::-;42802:1;42819:20;42837:1;42819:20;:::i;:::-;42814:25;;42853:20;42871:1;42853:20;:::i;:::-;42848:25;;42892:1;42882:35;;42897:18;;:::i;:::-;42882:35;42938:1;42935;42931:9;42926:14;;42770:176;;;;:::o;42952:180::-;43000:77;42997:1;42990:88;43097:4;43094:1;43087:15;43121:4;43118:1;43111:15;43138:180;43186:77;43183:1;43176:88;43283:4;43280:1;43273:15;43307:4;43304:1;43297:15;43324:180;43372:77;43369:1;43362:88;43469:4;43466:1;43459:15;43493:4;43490:1;43483:15;43510:180;43558:77;43555:1;43548:88;43655:4;43652:1;43645:15;43679:4;43676:1;43669:15;43696:180;43744:77;43741:1;43734:88;43841:4;43838:1;43831:15;43865:4;43862:1;43855:15;43882:117;43991:1;43988;43981:12;44005:117;44114:1;44111;44104:12;44128:117;44237:1;44234;44227:12;44251:117;44360:1;44357;44350:12;44374:117;44483:1;44480;44473:12;44497:117;44606:1;44603;44596:12;44620:102;44661:6;44712:2;44708:7;44703:2;44696:5;44692:14;44688:28;44678:38;;44620:102;;;:::o;44728:221::-;44868:34;44864:1;44856:6;44852:14;44845:58;44937:4;44932:2;44924:6;44920:15;44913:29;44728:221;:::o;44955:225::-;45095:34;45091:1;45083:6;45079:14;45072:58;45164:8;45159:2;45151:6;45147:15;45140:33;44955:225;:::o;45186:229::-;45326:34;45322:1;45314:6;45310:14;45303:58;45395:12;45390:2;45382:6;45378:15;45371:37;45186:229;:::o;45421:222::-;45561:34;45557:1;45549:6;45545:14;45538:58;45630:5;45625:2;45617:6;45613:15;45606:30;45421:222;:::o;45649:224::-;45789:34;45785:1;45777:6;45773:14;45766:58;45858:7;45853:2;45845:6;45841:15;45834:32;45649:224;:::o;45879:236::-;46019:34;46015:1;46007:6;46003:14;45996:58;46088:19;46083:2;46075:6;46071:15;46064:44;45879:236;:::o;46121:180::-;46261:32;46257:1;46249:6;46245:14;46238:56;46121:180;:::o;46307:244::-;46447:34;46443:1;46435:6;46431:14;46424:58;46516:27;46511:2;46503:6;46499:15;46492:52;46307:244;:::o;46557:174::-;46697:26;46693:1;46685:6;46681:14;46674:50;46557:174;:::o;46737:230::-;46877:34;46873:1;46865:6;46861:14;46854:58;46946:13;46941:2;46933:6;46929:15;46922:38;46737:230;:::o;46973:168::-;47113:20;47109:1;47101:6;47097:14;47090:44;46973:168;:::o;47147:225::-;47287:34;47283:1;47275:6;47271:14;47264:58;47356:8;47351:2;47343:6;47339:15;47332:33;47147:225;:::o;47378:182::-;47518:34;47514:1;47506:6;47502:14;47495:58;47378:182;:::o;47566:234::-;47706:34;47702:1;47694:6;47690:14;47683:58;47775:17;47770:2;47762:6;47758:15;47751:42;47566:234;:::o;47806:176::-;47946:28;47942:1;47934:6;47930:14;47923:52;47806:176;:::o;47988:237::-;48128:34;48124:1;48116:6;48112:14;48105:58;48197:20;48192:2;48184:6;48180:15;48173:45;47988:237;:::o;48231:221::-;48371:34;48367:1;48359:6;48355:14;48348:58;48440:4;48435:2;48427:6;48423:15;48416:29;48231:221;:::o;48458:114::-;;:::o;48578:166::-;48718:18;48714:1;48706:6;48702:14;48695:42;48578:166;:::o;48750:238::-;48890:34;48886:1;48878:6;48874:14;48867:58;48959:21;48954:2;48946:6;48942:15;48935:46;48750:238;:::o;48994:172::-;49134:24;49130:1;49122:6;49118:14;49111:48;48994:172;:::o;49172:179::-;49312:31;49308:1;49300:6;49296:14;49289:55;49172:179;:::o;49357:220::-;49497:34;49493:1;49485:6;49481:14;49474:58;49566:3;49561:2;49553:6;49549:15;49542:28;49357:220;:::o;49583:172::-;49723:24;49719:1;49711:6;49707:14;49700:48;49583:172;:::o;49761:233::-;49901:34;49897:1;49889:6;49885:14;49878:58;49970:16;49965:2;49957:6;49953:15;49946:41;49761:233;:::o;50000:225::-;50140:34;50136:1;50128:6;50124:14;50117:58;50209:8;50204:2;50196:6;50192:15;50185:33;50000:225;:::o;50231:181::-;50371:33;50367:1;50359:6;50355:14;50348:57;50231:181;:::o;50418:234::-;50558:34;50554:1;50546:6;50542:14;50535:58;50627:17;50622:2;50614:6;50610:15;50603:42;50418:234;:::o;50658:232::-;50798:34;50794:1;50786:6;50782:14;50775:58;50867:15;50862:2;50854:6;50850:15;50843:40;50658:232;:::o;50896:221::-;51036:34;51032:1;51024:6;51020:14;51013:58;51105:4;51100:2;51092:6;51088:15;51081:29;50896:221;:::o;51123:122::-;51196:24;51214:5;51196:24;:::i;:::-;51189:5;51186:35;51176:63;;51235:1;51232;51225:12;51176:63;51123:122;:::o;51251:116::-;51321:21;51336:5;51321:21;:::i;:::-;51314:5;51311:32;51301:60;;51357:1;51354;51347:12;51301:60;51251:116;:::o;51373:120::-;51445:23;51462:5;51445:23;:::i;:::-;51438:5;51435:34;51425:62;;51483:1;51480;51473:12;51425:62;51373:120;:::o;51499:122::-;51572:24;51590:5;51572:24;:::i;:::-;51565:5;51562:35;51552:63;;51611:1;51608;51601:12;51552:63;51499:122;:::o;51627:118::-;51698:22;51714:5;51698:22;:::i;:::-;51691:5;51688:33;51678:61;;51735:1;51732;51725:12;51678:61;51627:118;:::o

Swarm Source

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