ETH Price: $3,423.98 (-0.43%)
Gas: 27 Gwei

Token

BrokenApeCouchClub (BACC)
 

Overview

Max Total Supply

1,111 BACC

Holders

820

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 BACC
0x7333a0c737271bc3fad230ab4ae722e99ef9a279
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:
BrokenApeCouchClub

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

pragma solidity ^0.8.0;

import "./Ownable.sol";
import "./ReentrancyGuard.sol";
import "./ERC721A.sol";
import "./Strings.sol";

contract BrokenApeCouchClub is Ownable, ERC721A, ReentrancyGuard {
  uint256 public immutable maxPerAddressDuringMint;
  uint256 public immutable amountForDevs;
  uint256 public immutable amountForAllowList;

  struct SaleConfig {
    uint32 allowStartTime;
    uint32 publicSaleStartTime;
    uint64 allowPrice;
    uint64 publicPrice;
  }

  SaleConfig public saleConfig;

  mapping(address => uint256) public allowlist;

  constructor(
    string memory name_,
    string memory symbol_,
    uint256 maxBatchSize_, 
    uint256 collectionSize_, 
    uint256 amountForAllows_, 
    uint256 amountForDevs_ 
  ) ERC721A(name_, symbol_, maxBatchSize_, collectionSize_) {
    maxPerAddressDuringMint = maxBatchSize_;
    amountForDevs = amountForDevs_;
    amountForAllowList = amountForAllows_;
    require(
      amountForAllows_ + amountForDevs_ <= collectionSize_,
      "larger collection size needed"
    );
  }

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

  function publicSaleMint(uint256 quantity) external payable callerIsUser {
    uint256 _saleStartTime = uint256(saleConfig.publicSaleStartTime);
    require(
      _saleStartTime != 0 && block.timestamp >= _saleStartTime,
      "sale has not started yet"
    );
    require(
      totalSupply() + quantity <= collectionSize,
      "not enough remaining reserved"
    );
    require(
      numberMinted(msg.sender) + quantity <= maxPerAddressDuringMint,
      "can not mint this many"
    );
    uint256 totalCost = saleConfig.publicPrice * quantity;
    _safeMint(msg.sender, quantity);
    refundIfOver(totalCost);
  }

  function allowlistMint() external payable callerIsUser {
    uint256 price = uint256(saleConfig.allowPrice);
    uint256 _allowStartTime = uint256(saleConfig.allowStartTime);
    require(
      _allowStartTime != 0 && block.timestamp >= _allowStartTime,
      "sale has not started yet"
    );
    require(
      numberMinted(msg.sender) + 1 <= maxPerAddressDuringMint,
      "can not mint this many"
    );
    require(price != 0, "allowlist sale has not begun yet");
    require(allowlist[msg.sender] > 0, "not eligible for allowlist mint");
    require(
      totalSupply() + 1 <= collectionSize,
      "reached max supply"
    );
    allowlist[msg.sender]--;
    _safeMint(msg.sender, 1);
    refundIfOver(price);
  }

  function refundIfOver(uint256 price) private {
    require(msg.value >= price, "Need to send more ETH.");
    if (msg.value > price) {
      payable(msg.sender).transfer(msg.value - price);
    }
  }

  function isPublicSaleOn(
    uint256 publicPriceWei,
    uint256 publicSaleStartTime
  ) public view returns (bool) {
    return
      publicPriceWei != 0 &&
      block.timestamp >= publicSaleStartTime;
  }

  function setPublicSaleConfig(uint32 timestamp, uint64 price) external onlyOwner {
    saleConfig.publicSaleStartTime = timestamp;
    saleConfig.publicPrice = price;
  }

  function setAllowSaleConfig(uint32 timestamp, uint64 price) external onlyOwner {
    saleConfig.allowStartTime = timestamp;
    saleConfig.allowPrice = price;
  }

  function seedAllowlist(address[] memory addresses, uint256[] memory numSlots)
    external
    onlyOwner
  {
    require(
      addresses.length == numSlots.length,
      "addresses does not match numSlots length"
    );
    for (uint256 i = 0; i < addresses.length; i++) {
      allowlist[addresses[i]] = numSlots[i];
    }
  }

  // For marketing etc.
  function devMint(uint256 quantity) external onlyOwner {
    require(
      totalSupply() + quantity <= amountForDevs,
      "too many already minted before dev mint"
    );
    require(
      quantity <= 10,
      "only less than 10 a minter can mint at a time"
    );
    uint256 numChunks = quantity / maxBatchSize;
    for (uint256 i = 0; i < numChunks; i++) {
      _safeMint(msg.sender, maxBatchSize);
    }
  }

  // // 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(address payee) external onlyOwner nonReentrant {
    (bool success, ) = payable(payee).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 getCollectionSize() public view returns (uint256) {
    return collectionSize;
  }

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

  function destroyContact() external onlyOwner{
    selfdestruct(payable(msg.sender));
  }    
}

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";

/**
 * @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
{
  using Address for address;
  using Strings for uint256;

  struct TokenOwnership {
    address addr;
    uint64 startTimestamp;
  }

  struct AddressData {
    uint128 balance;
    uint128 numberMinted;
  }

  uint256 private currentIndex = 0;

  uint256 internal immutable collectionSize;
  uint256 internal immutable maxBatchSize;

  // Token name
  string private _name;

  // Token symbol
  string private _symbol;

  // 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_
  ) {
    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;
  }

  /**
   * @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 = 0;
    address currOwnershipAddr = address(0);
    for (uint256 i = 0; 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"
    );

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

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

  /**
   * @dev See {IERC721-approve}.
   */
  function approve(address to, uint256 tokenId) public 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":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint256","name":"maxBatchSize_","type":"uint256"},{"internalType":"uint256","name":"collectionSize_","type":"uint256"},{"internalType":"uint256","name":"amountForAllows_","type":"uint256"},{"internalType":"uint256","name":"amountForDevs_","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":"","type":"address"}],"name":"allowlist","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowlistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"amountForAllowList","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amountForDevs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"destroyContact","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"devMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCollectionSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"uint256","name":"publicPriceWei","type":"uint256"},{"internalType":"uint256","name":"publicSaleStartTime","type":"uint256"}],"name":"isPublicSaleOn","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":"uint256","name":"quantity","type":"uint256"}],"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":[],"name":"saleConfig","outputs":[{"internalType":"uint32","name":"allowStartTime","type":"uint32"},{"internalType":"uint32","name":"publicSaleStartTime","type":"uint32"},{"internalType":"uint64","name":"allowPrice","type":"uint64"},{"internalType":"uint64","name":"publicPrice","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"numSlots","type":"uint256[]"}],"name":"seedAllowlist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"timestamp","type":"uint32"},{"internalType":"uint64","name":"price","type":"uint64"}],"name":"setAllowSaleConfig","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":"uint32","name":"timestamp","type":"uint32"},{"internalType":"uint64","name":"price","type":"uint64"}],"name":"setPublicSaleConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"payee","type":"address"}],"name":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]

610120604052600060015560006008553480156200001c57600080fd5b506040516200666a3803806200666a8339818101604052810190620000429190620003c9565b85858585620000666200005a620001b860201b60201c565b620001c060201b60201c565b60008111620000ac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000a3906200055c565b60405180910390fd5b60008211620000f2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000e99062000518565b60405180910390fd5b83600290805190602001906200010a92919062000284565b5082600390805190602001906200012392919062000284565b508160a0818152505080608081815250505050505060016009819055508360c081815250508060e08181525050816101008181525050828183620001689190620005ee565b1115620001ac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001a3906200053a565b60405180910390fd5b5050505050506200088a565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b82805462000292906200068b565b90600052602060002090601f016020900481019282620002b6576000855562000302565b82601f10620002d157805160ff191683800117855562000302565b8280016001018555821562000302579182015b8281111562000301578251825591602001919060010190620002e4565b5b50905062000311919062000315565b5090565b5b808211156200033057600081600090555060010162000316565b5090565b60006200034b6200034584620005a7565b6200057e565b9050828152602081018484840111156200036a576200036962000789565b5b6200037784828562000655565b509392505050565b600082601f83011262000397576200039662000784565b5b8151620003a984826020860162000334565b91505092915050565b600081519050620003c38162000870565b92915050565b60008060008060008060c08789031215620003e957620003e862000793565b5b600087015167ffffffffffffffff8111156200040a57620004096200078e565b5b6200041889828a016200037f565b965050602087015167ffffffffffffffff8111156200043c576200043b6200078e565b5b6200044a89828a016200037f565b95505060406200045d89828a01620003b2565b94505060606200047089828a01620003b2565b93505060806200048389828a01620003b2565b92505060a06200049689828a01620003b2565b9150509295509295509295565b6000620004b2602783620005dd565b9150620004bf82620007a9565b604082019050919050565b6000620004d9601d83620005dd565b9150620004e682620007f8565b602082019050919050565b600062000500602e83620005dd565b91506200050d8262000821565b604082019050919050565b600060208201905081810360008301526200053381620004a3565b9050919050565b600060208201905081810360008301526200055581620004ca565b9050919050565b600060208201905081810360008301526200057781620004f1565b9050919050565b60006200058a6200059d565b9050620005988282620006c1565b919050565b6000604051905090565b600067ffffffffffffffff821115620005c557620005c462000755565b5b620005d08262000798565b9050602081019050919050565b600082825260208201905092915050565b6000620005fb826200064b565b915062000608836200064b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000640576200063f620006f7565b5b828201905092915050565b6000819050919050565b60005b838110156200067557808201518184015260208101905062000658565b8381111562000685576000848401525b50505050565b60006002820490506001821680620006a457607f821691505b60208210811415620006bb57620006ba62000726565b5b50919050565b620006cc8262000798565b810181811067ffffffffffffffff82111715620006ee57620006ed62000755565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f6c617267657220636f6c6c656374696f6e2073697a65206e6565646564000000600082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b6200087b816200064b565b81146200088757600080fd5b50565b60805160a05160c05160e05161010051615d4e6200091c600039600061197b01526000818161119b015261242b0152600081816113d70152818161199f0152611f440152600081816112560152818161129301528181612ed901528181612f02015261368d0152600081816115140152818161188501528181611ecf01528181612ba20152612bd60152615d4e6000f3fe6080604052600436106102305760003560e01c80638626eb181161012e578063b88d4fde116100ab578063dc33e6811161006f578063dc33e68114610834578063e18bb94114610871578063e985e9c51461089a578063f2fde38b146108d7578063fbe1aa511461090057610230565b8063b88d4fde1461074f578063b9cc929f14610778578063c87b56dd1461078f578063d7224ba0146107cc578063dbcad76f146107f757610230565b806395d89b41116100f257806395d89b4114610679578063a22cb465146106a4578063a7cd52cb146106cd578063b05863d51461070a578063b3ab66b01461073357610230565b80638626eb181461058d5780638bc35c2f146105b85780638da5cb5b146105e357806390aa0b0f1461060e5780639231ab2a1461063c57610230565b8063375a069a116101bc5780636352211e116101805780636352211e146104a857806370a08231146104e5578063715018a6146105225780637155c1ea146105395780637d8b4d371461056457610230565b8063375a069a146103e657806341fbddbd1461040f57806342842e0e146104195780634f6ccce71461044257806355f804b31461047f57610230565b806318160ddd1161020357806318160ddd1461030357806323b872dd1461032e5780632d20fb60146103575780632f745c59146103805780632f971029146103bd57610230565b806301ffc9a71461023557806306fdde0314610272578063081812fc1461029d578063095ea7b3146102da575b600080fd5b34801561024157600080fd5b5061025c6004803603810190610257919061406b565b61092b565b60405161026991906148a9565b60405180910390f35b34801561027e57600080fd5b50610287610a75565b60405161029491906148c4565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf9190614112565b610b07565b6040516102d19190614842565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc9190613fb3565b610b8c565b005b34801561030f57600080fd5b50610318610ca5565b6040516103259190614d81565b60405180910390f35b34801561033a57600080fd5b5061035560048036038101906103509190613e9d565b610caf565b005b34801561036357600080fd5b5061037e60048036038101906103799190614112565b610cbf565b005b34801561038c57600080fd5b506103a760048036038101906103a29190613fb3565b610d9d565b6040516103b49190614d81565b60405180910390f35b3480156103c957600080fd5b506103e460048036038101906103df9190613e30565b610f9b565b005b3480156103f257600080fd5b5061040d60048036038101906104089190614112565b61111d565b005b6104176112cf565b005b34801561042557600080fd5b50610440600480360381019061043b9190613e9d565b6115f5565b005b34801561044e57600080fd5b5061046960048036038101906104649190614112565b611615565b6040516104769190614d81565b60405180910390f35b34801561048b57600080fd5b506104a660048036038101906104a191906140c5565b611668565b005b3480156104b457600080fd5b506104cf60048036038101906104ca9190614112565b6116fa565b6040516104dc9190614842565b60405180910390f35b3480156104f157600080fd5b5061050c60048036038101906105079190613e30565b611710565b6040516105199190614d81565b60405180910390f35b34801561052e57600080fd5b506105376117f9565b005b34801561054557600080fd5b5061054e611881565b60405161055b9190614d81565b60405180910390f35b34801561057057600080fd5b5061058b6004803603810190610586919061417f565b6118a9565b005b34801561059957600080fd5b506105a2611979565b6040516105af9190614d81565b60405180910390f35b3480156105c457600080fd5b506105cd61199d565b6040516105da9190614d81565b60405180910390f35b3480156105ef57600080fd5b506105f86119c1565b6040516106059190614842565b60405180910390f35b34801561061a57600080fd5b506106236119ea565b6040516106339493929190614d9c565b60405180910390f35b34801561064857600080fd5b50610663600480360381019061065e9190614112565b611a50565b6040516106709190614d66565b60405180910390f35b34801561068557600080fd5b5061068e611a68565b60405161069b91906148c4565b60405180910390f35b3480156106b057600080fd5b506106cb60048036038101906106c69190613f73565b611afa565b005b3480156106d957600080fd5b506106f460048036038101906106ef9190613e30565b611c7b565b6040516107019190614d81565b60405180910390f35b34801561071657600080fd5b50610731600480360381019061072c9190613ff3565b611c93565b005b61074d60048036038101906107489190614112565b611def565b005b34801561075b57600080fd5b5061077660048036038101906107719190613ef0565b612003565b005b34801561078457600080fd5b5061078d61205f565b005b34801561079b57600080fd5b506107b660048036038101906107b19190614112565b6120f4565b6040516107c391906148c4565b60405180910390f35b3480156107d857600080fd5b506107e161219b565b6040516107ee9190614d81565b60405180910390f35b34801561080357600080fd5b5061081e6004803603810190610819919061413f565b6121a1565b60405161082b91906148a9565b60405180910390f35b34801561084057600080fd5b5061085b60048036038101906108569190613e30565b6121bb565b6040516108689190614d81565b60405180910390f35b34801561087d57600080fd5b506108986004803603810190610893919061417f565b6121cd565b005b3480156108a657600080fd5b506108c160048036038101906108bc9190613e5d565b61229d565b6040516108ce91906148a9565b60405180910390f35b3480156108e357600080fd5b506108fe60048036038101906108f99190613e30565b612331565b005b34801561090c57600080fd5b50610915612429565b6040516109229190614d81565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109f657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a5e57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a6e5750610a6d8261244d565b5b9050919050565b606060028054610a849061518c565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab09061518c565b8015610afd5780601f10610ad257610100808354040283529160200191610afd565b820191906000526020600020905b815481529060010190602001808311610ae057829003601f168201915b5050505050905090565b6000610b12826124b7565b610b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4890614d06565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b97826116fa565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bff90614b86565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c276124c5565b73ffffffffffffffffffffffffffffffffffffffff161480610c565750610c5581610c506124c5565b61229d565b5b610c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8c90614a06565b60405180910390fd5b610ca08383836124cd565b505050565b6000600154905090565b610cba83838361257f565b505050565b610cc76124c5565b73ffffffffffffffffffffffffffffffffffffffff16610ce56119c1565b73ffffffffffffffffffffffffffffffffffffffff1614610d3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3290614ae6565b60405180910390fd5b60026009541415610d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7890614cc6565b60405180910390fd5b6002600981905550610d9281612b38565b600160098190555050565b6000610da883611710565b8210610de9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de0906148e6565b60405180910390fd5b6000610df3610ca5565b905060008060005b83811015610f59576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610eed57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f455786841415610f36578195505050505050610f95565b8380610f41906151ef565b9450505b508080610f51906151ef565b915050610dfb565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8c90614c86565b60405180910390fd5b92915050565b610fa36124c5565b73ffffffffffffffffffffffffffffffffffffffff16610fc16119c1565b73ffffffffffffffffffffffffffffffffffffffff1614611017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100e90614ae6565b60405180910390fd5b6002600954141561105d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105490614cc6565b60405180910390fd5b600260098190555060008173ffffffffffffffffffffffffffffffffffffffff164760405161108b9061482d565b60006040518083038185875af1925050503d80600081146110c8576040519150601f19603f3d011682016040523d82523d6000602084013e6110cd565b606091505b5050905080611111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110890614ba6565b60405180910390fd5b50600160098190555050565b6111256124c5565b73ffffffffffffffffffffffffffffffffffffffff166111436119c1565b73ffffffffffffffffffffffffffffffffffffffff1614611199576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119090614ae6565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000816111c3610ca5565b6111cd9190614f23565b111561120e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120590614c66565b60405180910390fd5b600a811115611252576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124990614a46565b60405180910390fd5b60007f0000000000000000000000000000000000000000000000000000000000000000826112809190614f79565b905060005b818110156112ca576112b7337f0000000000000000000000000000000000000000000000000000000000000000612dc6565b80806112c2906151ef565b915050611285565b505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461133d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611334906149e6565b60405180910390fd5b6000600a60000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1690506000600a60000160009054906101000a900463ffffffff1663ffffffff169050600081141580156113965750804210155b6113d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cc906149a6565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001611401336121bb565b61140b9190614f23565b111561144c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144390614c46565b60405180910390fd5b6000821415611490576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148790614b66565b60405180910390fd5b6000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611512576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150990614aa6565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000600161153d610ca5565b6115479190614f23565b1115611588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157f90614a86565b60405180910390fd5b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906115d890615162565b91905055506115e8336001612dc6565b6115f182612de4565b5050565b61161083838360405180602001604052806000815250612003565b505050565b600061161f610ca5565b8210611660576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165790614946565b60405180910390fd5b819050919050565b6116706124c5565b73ffffffffffffffffffffffffffffffffffffffff1661168e6119c1565b73ffffffffffffffffffffffffffffffffffffffff16146116e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116db90614ae6565b60405180910390fd5b8181600c91906116f5929190613abe565b505050565b600061170582612e85565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177890614a66565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6118016124c5565b73ffffffffffffffffffffffffffffffffffffffff1661181f6119c1565b73ffffffffffffffffffffffffffffffffffffffff1614611875576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186c90614ae6565b60405180910390fd5b61187f6000613088565b565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b6118b16124c5565b73ffffffffffffffffffffffffffffffffffffffff166118cf6119c1565b73ffffffffffffffffffffffffffffffffffffffff1614611925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191c90614ae6565b60405180910390fd5b81600a60000160006101000a81548163ffffffff021916908363ffffffff16021790555080600a60000160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a8060000160009054906101000a900463ffffffff16908060000160049054906101000a900463ffffffff16908060000160089054906101000a900467ffffffffffffffff16908060000160109054906101000a900467ffffffffffffffff16905084565b611a58613b44565b611a6182612e85565b9050919050565b606060038054611a779061518c565b80601f0160208091040260200160405190810160405280929190818152602001828054611aa39061518c565b8015611af05780601f10611ac557610100808354040283529160200191611af0565b820191906000526020600020905b815481529060010190602001808311611ad357829003601f168201915b5050505050905090565b611b026124c5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6790614b26565b60405180910390fd5b8060076000611b7d6124c5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c2a6124c5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c6f91906148a9565b60405180910390a35050565b600b6020528060005260406000206000915090505481565b611c9b6124c5565b73ffffffffffffffffffffffffffffffffffffffff16611cb96119c1565b73ffffffffffffffffffffffffffffffffffffffff1614611d0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0690614ae6565b60405180910390fd5b8051825114611d53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4a90614d46565b60405180910390fd5b60005b8251811015611dea57818181518110611d7257611d716152f6565b5b6020026020010151600b6000858481518110611d9157611d906152f6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080611de2906151ef565b915050611d56565b505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611e5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e54906149e6565b60405180910390fd5b6000600a60000160049054906101000a900463ffffffff1663ffffffff16905060008114158015611e8e5750804210155b611ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec4906149a6565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000082611ef7610ca5565b611f019190614f23565b1115611f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3990614986565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000082611f6d336121bb565b611f779190614f23565b1115611fb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611faf90614c46565b60405180910390fd5b600082600a60000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff16611fe99190614faa565b9050611ff53384612dc6565b611ffe81612de4565b505050565b61200e84848461257f565b61201a8484848461314c565b612059576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205090614bc6565b60405180910390fd5b50505050565b6120676124c5565b73ffffffffffffffffffffffffffffffffffffffff166120856119c1565b73ffffffffffffffffffffffffffffffffffffffff16146120db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d290614ae6565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16ff5b60606120ff826124b7565b61213e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213590614b06565b60405180910390fd5b60006121486132e3565b905060008151116121685760405180602001604052806000815250612193565b8061217284613375565b604051602001612183929190614809565b6040516020818303038152906040525b915050919050565b60085481565b60008083141580156121b35750814210155b905092915050565b60006121c6826134d6565b9050919050565b6121d56124c5565b73ffffffffffffffffffffffffffffffffffffffff166121f36119c1565b73ffffffffffffffffffffffffffffffffffffffff1614612249576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224090614ae6565b60405180910390fd5b81600a60000160046101000a81548163ffffffff021916908363ffffffff16021790555080600a60000160106101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6123396124c5565b73ffffffffffffffffffffffffffffffffffffffff166123576119c1565b73ffffffffffffffffffffffffffffffffffffffff16146123ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a490614ae6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561241d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241490614906565b60405180910390fd5b61242681613088565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061258a82612e85565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166125b16124c5565b73ffffffffffffffffffffffffffffffffffffffff16148061260d57506125d66124c5565b73ffffffffffffffffffffffffffffffffffffffff166125f584610b07565b73ffffffffffffffffffffffffffffffffffffffff16145b80612629575061262882600001516126236124c5565b61229d565b5b90508061266b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266290614b46565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146126dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d490614ac6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561274d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274490614966565b60405180910390fd5b61275a85858560016135bf565b61276a60008484600001516124cd565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166127d89190615004565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661287c9190614edd565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846129829190614f23565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612ac8576129f8816124b7565b15612ac7576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612b3086868660016135c5565b505050505050565b6000600854905060008211612b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7990614a26565b60405180910390fd5b600060018383612b929190614f23565b612b9c9190615038565b905060017f0000000000000000000000000000000000000000000000000000000000000000612bcb9190615038565b811115612c025760017f0000000000000000000000000000000000000000000000000000000000000000612bff9190615038565b90505b612c0b816124b7565b612c4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4190614ca6565b60405180910390fd5b60008290505b818111612dad57600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612d9a576000612ccd82612e85565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b8080612da5906151ef565b915050612c50565b50600181612dbb9190614f23565b600881905550505050565b612de08282604051806020016040528060008152506135cb565b5050565b80341015612e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1e90614be6565b60405180910390fd5b80341115612e82573373ffffffffffffffffffffffffffffffffffffffff166108fc8234612e559190615038565b9081150290604051600060405180830381858888f19350505050158015612e80573d6000803e3d6000fd5b505b50565b612e8d613b44565b612e96826124b7565b612ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ecc90614926565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008310612f395760017f000000000000000000000000000000000000000000000000000000000000000084612f2c9190615038565b612f369190614f23565b90505b60008390505b818110613047576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461303357809350505050613083565b50808061303f90615162565b915050612f3f565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307a90614ce6565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061316d8473ffffffffffffffffffffffffffffffffffffffff16613aab565b156132d6578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026131966124c5565b8786866040518563ffffffff1660e01b81526004016131b8949392919061485d565b602060405180830381600087803b1580156131d257600080fd5b505af192505050801561320357506040513d601f19601f820116820180604052508101906132009190614098565b60015b613286573d8060008114613233576040519150601f19603f3d011682016040523d82523d6000602084013e613238565b606091505b5060008151141561327e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161327590614bc6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506132db565b600190505b949350505050565b6060600c80546132f29061518c565b80601f016020809104026020016040519081016040528092919081815260200182805461331e9061518c565b801561336b5780601f106133405761010080835404028352916020019161336b565b820191906000526020600020905b81548152906001019060200180831161334e57829003601f168201915b5050505050905090565b606060008214156133bd576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506134d1565b600082905060005b600082146133ef5780806133d8906151ef565b915050600a826133e89190614f79565b91506133c5565b60008167ffffffffffffffff81111561340b5761340a615325565b5b6040519080825280601f01601f19166020018201604052801561343d5781602001600182028036833780820191505090505b5090505b600085146134ca576001826134569190615038565b9150600a856134659190615238565b60306134719190614f23565b60f81b818381518110613487576134866152f6565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856134c39190614f79565b9450613441565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613547576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161353e906149c6565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161363990614c26565b60405180910390fd5b61364b816124b7565b1561368b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161368290614c06565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008311156136ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136e590614d26565b60405180910390fd5b6136fb60008583866135bf565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516137f89190614edd565b6fffffffffffffffffffffffffffffffff16815260200185836020015161381f9190614edd565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015613a8e57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613a2e600088848861314c565b613a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a6490614bc6565b60405180910390fd5b8180613a78906151ef565b9250508080613a86906151ef565b9150506139bd565b5080600181905550613aa360008785886135c5565b505050505050565b600080823b905060008111915050919050565b828054613aca9061518c565b90600052602060002090601f016020900481019282613aec5760008555613b33565b82601f10613b0557803560ff1916838001178555613b33565b82800160010185558215613b33579182015b82811115613b32578235825591602001919060010190613b17565b5b509050613b409190613b7e565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613b97576000816000905550600101613b7f565b5090565b6000613bae613ba984614e06565b614de1565b90508083825260208201905082856020860282011115613bd157613bd061535e565b5b60005b85811015613c015781613be78882613cbd565b845260208401935060208301925050600181019050613bd4565b5050509392505050565b6000613c1e613c1984614e32565b614de1565b90508083825260208201905082856020860282011115613c4157613c4061535e565b5b60005b85811015613c715781613c578882613df1565b845260208401935060208301925050600181019050613c44565b5050509392505050565b6000613c8e613c8984614e5e565b614de1565b905082815260208101848484011115613caa57613ca9615363565b5b613cb5848285615120565b509392505050565b600081359050613ccc81615c8e565b92915050565b600082601f830112613ce757613ce6615359565b5b8135613cf7848260208601613b9b565b91505092915050565b600082601f830112613d1557613d14615359565b5b8135613d25848260208601613c0b565b91505092915050565b600081359050613d3d81615ca5565b92915050565b600081359050613d5281615cbc565b92915050565b600081519050613d6781615cbc565b92915050565b600082601f830112613d8257613d81615359565b5b8135613d92848260208601613c7b565b91505092915050565b60008083601f840112613db157613db0615359565b5b8235905067ffffffffffffffff811115613dce57613dcd615354565b5b602083019150836001820283011115613dea57613de961535e565b5b9250929050565b600081359050613e0081615cd3565b92915050565b600081359050613e1581615cea565b92915050565b600081359050613e2a81615d01565b92915050565b600060208284031215613e4657613e4561536d565b5b6000613e5484828501613cbd565b91505092915050565b60008060408385031215613e7457613e7361536d565b5b6000613e8285828601613cbd565b9250506020613e9385828601613cbd565b9150509250929050565b600080600060608486031215613eb657613eb561536d565b5b6000613ec486828701613cbd565b9350506020613ed586828701613cbd565b9250506040613ee686828701613df1565b9150509250925092565b60008060008060808587031215613f0a57613f0961536d565b5b6000613f1887828801613cbd565b9450506020613f2987828801613cbd565b9350506040613f3a87828801613df1565b925050606085013567ffffffffffffffff811115613f5b57613f5a615368565b5b613f6787828801613d6d565b91505092959194509250565b60008060408385031215613f8a57613f8961536d565b5b6000613f9885828601613cbd565b9250506020613fa985828601613d2e565b9150509250929050565b60008060408385031215613fca57613fc961536d565b5b6000613fd885828601613cbd565b9250506020613fe985828601613df1565b9150509250929050565b6000806040838503121561400a5761400961536d565b5b600083013567ffffffffffffffff81111561402857614027615368565b5b61403485828601613cd2565b925050602083013567ffffffffffffffff81111561405557614054615368565b5b61406185828601613d00565b9150509250929050565b6000602082840312156140815761408061536d565b5b600061408f84828501613d43565b91505092915050565b6000602082840312156140ae576140ad61536d565b5b60006140bc84828501613d58565b91505092915050565b600080602083850312156140dc576140db61536d565b5b600083013567ffffffffffffffff8111156140fa576140f9615368565b5b61410685828601613d9b565b92509250509250929050565b6000602082840312156141285761412761536d565b5b600061413684828501613df1565b91505092915050565b600080604083850312156141565761415561536d565b5b600061416485828601613df1565b925050602061417585828601613df1565b9150509250929050565b600080604083850312156141965761419561536d565b5b60006141a485828601613e06565b92505060206141b585828601613e1b565b9150509250929050565b6141c88161506c565b82525050565b6141d78161506c565b82525050565b6141e68161507e565b82525050565b60006141f782614e8f565b6142018185614ea5565b935061421181856020860161512f565b61421a81615372565b840191505092915050565b600061423082614e9a565b61423a8185614ec1565b935061424a81856020860161512f565b61425381615372565b840191505092915050565b600061426982614e9a565b6142738185614ed2565b935061428381856020860161512f565b80840191505092915050565b600061429c602283614ec1565b91506142a782615383565b604082019050919050565b60006142bf602683614ec1565b91506142ca826153d2565b604082019050919050565b60006142e2602a83614ec1565b91506142ed82615421565b604082019050919050565b6000614305602383614ec1565b915061431082615470565b604082019050919050565b6000614328602583614ec1565b9150614333826154bf565b604082019050919050565b600061434b601d83614ec1565b91506143568261550e565b602082019050919050565b600061436e601883614ec1565b915061437982615537565b602082019050919050565b6000614391603183614ec1565b915061439c82615560565b604082019050919050565b60006143b4601e83614ec1565b91506143bf826155af565b602082019050919050565b60006143d7603983614ec1565b91506143e2826155d8565b604082019050919050565b60006143fa601883614ec1565b915061440582615627565b602082019050919050565b600061441d602d83614ec1565b915061442882615650565b604082019050919050565b6000614440602b83614ec1565b915061444b8261569f565b604082019050919050565b6000614463601283614ec1565b915061446e826156ee565b602082019050919050565b6000614486601f83614ec1565b915061449182615717565b602082019050919050565b60006144a9602683614ec1565b91506144b482615740565b604082019050919050565b60006144cc602083614ec1565b91506144d78261578f565b602082019050919050565b60006144ef602f83614ec1565b91506144fa826157b8565b604082019050919050565b6000614512601a83614ec1565b915061451d82615807565b602082019050919050565b6000614535603283614ec1565b915061454082615830565b604082019050919050565b6000614558602083614ec1565b91506145638261587f565b602082019050919050565b600061457b602283614ec1565b9150614586826158a8565b604082019050919050565b600061459e600083614eb6565b91506145a9826158f7565b600082019050919050565b60006145c1601083614ec1565b91506145cc826158fa565b602082019050919050565b60006145e4603383614ec1565b91506145ef82615923565b604082019050919050565b6000614607601683614ec1565b915061461282615972565b602082019050919050565b600061462a601d83614ec1565b91506146358261599b565b602082019050919050565b600061464d602183614ec1565b9150614658826159c4565b604082019050919050565b6000614670601683614ec1565b915061467b82615a13565b602082019050919050565b6000614693602783614ec1565b915061469e82615a3c565b604082019050919050565b60006146b6602e83614ec1565b91506146c182615a8b565b604082019050919050565b60006146d9602683614ec1565b91506146e482615ada565b604082019050919050565b60006146fc601f83614ec1565b915061470782615b29565b602082019050919050565b600061471f602f83614ec1565b915061472a82615b52565b604082019050919050565b6000614742602d83614ec1565b915061474d82615ba1565b604082019050919050565b6000614765602283614ec1565b915061477082615bf0565b604082019050919050565b6000614788602883614ec1565b915061479382615c3f565b604082019050919050565b6040820160008201516147b460008501826141bf565b5060208201516147c760208501826147eb565b50505050565b6147d6816150f2565b82525050565b6147e5816150fc565b82525050565b6147f48161510c565b82525050565b6148038161510c565b82525050565b6000614815828561425e565b9150614821828461425e565b91508190509392505050565b600061483882614591565b9150819050919050565b600060208201905061485760008301846141ce565b92915050565b600060808201905061487260008301876141ce565b61487f60208301866141ce565b61488c60408301856147cd565b818103606083015261489e81846141ec565b905095945050505050565b60006020820190506148be60008301846141dd565b92915050565b600060208201905081810360008301526148de8184614225565b905092915050565b600060208201905081810360008301526148ff8161428f565b9050919050565b6000602082019050818103600083015261491f816142b2565b9050919050565b6000602082019050818103600083015261493f816142d5565b9050919050565b6000602082019050818103600083015261495f816142f8565b9050919050565b6000602082019050818103600083015261497f8161431b565b9050919050565b6000602082019050818103600083015261499f8161433e565b9050919050565b600060208201905081810360008301526149bf81614361565b9050919050565b600060208201905081810360008301526149df81614384565b9050919050565b600060208201905081810360008301526149ff816143a7565b9050919050565b60006020820190508181036000830152614a1f816143ca565b9050919050565b60006020820190508181036000830152614a3f816143ed565b9050919050565b60006020820190508181036000830152614a5f81614410565b9050919050565b60006020820190508181036000830152614a7f81614433565b9050919050565b60006020820190508181036000830152614a9f81614456565b9050919050565b60006020820190508181036000830152614abf81614479565b9050919050565b60006020820190508181036000830152614adf8161449c565b9050919050565b60006020820190508181036000830152614aff816144bf565b9050919050565b60006020820190508181036000830152614b1f816144e2565b9050919050565b60006020820190508181036000830152614b3f81614505565b9050919050565b60006020820190508181036000830152614b5f81614528565b9050919050565b60006020820190508181036000830152614b7f8161454b565b9050919050565b60006020820190508181036000830152614b9f8161456e565b9050919050565b60006020820190508181036000830152614bbf816145b4565b9050919050565b60006020820190508181036000830152614bdf816145d7565b9050919050565b60006020820190508181036000830152614bff816145fa565b9050919050565b60006020820190508181036000830152614c1f8161461d565b9050919050565b60006020820190508181036000830152614c3f81614640565b9050919050565b60006020820190508181036000830152614c5f81614663565b9050919050565b60006020820190508181036000830152614c7f81614686565b9050919050565b60006020820190508181036000830152614c9f816146a9565b9050919050565b60006020820190508181036000830152614cbf816146cc565b9050919050565b60006020820190508181036000830152614cdf816146ef565b9050919050565b60006020820190508181036000830152614cff81614712565b9050919050565b60006020820190508181036000830152614d1f81614735565b9050919050565b60006020820190508181036000830152614d3f81614758565b9050919050565b60006020820190508181036000830152614d5f8161477b565b9050919050565b6000604082019050614d7b600083018461479e565b92915050565b6000602082019050614d9660008301846147cd565b92915050565b6000608082019050614db160008301876147dc565b614dbe60208301866147dc565b614dcb60408301856147fa565b614dd860608301846147fa565b95945050505050565b6000614deb614dfc565b9050614df782826151be565b919050565b6000604051905090565b600067ffffffffffffffff821115614e2157614e20615325565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614e4d57614e4c615325565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614e7957614e78615325565b5b614e8282615372565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614ee8826150b6565b9150614ef3836150b6565b9250826fffffffffffffffffffffffffffffffff03821115614f1857614f17615269565b5b828201905092915050565b6000614f2e826150f2565b9150614f39836150f2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614f6e57614f6d615269565b5b828201905092915050565b6000614f84826150f2565b9150614f8f836150f2565b925082614f9f57614f9e615298565b5b828204905092915050565b6000614fb5826150f2565b9150614fc0836150f2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ff957614ff8615269565b5b828202905092915050565b600061500f826150b6565b915061501a836150b6565b92508282101561502d5761502c615269565b5b828203905092915050565b6000615043826150f2565b915061504e836150f2565b92508282101561506157615060615269565b5b828203905092915050565b6000615077826150d2565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b8381101561514d578082015181840152602081019050615132565b8381111561515c576000848401525b50505050565b600061516d826150f2565b9150600082141561518157615180615269565b5b600182039050919050565b600060028204905060018216806151a457607f821691505b602082108114156151b8576151b76152c7565b5b50919050565b6151c782615372565b810181811067ffffffffffffffff821117156151e6576151e5615325565b5b80604052505050565b60006151fa826150f2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561522d5761522c615269565b5b600182019050919050565b6000615243826150f2565b915061524e836150f2565b92508261525e5761525d615298565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f7567682072656d61696e696e67207265736572766564000000600082015250565b7f73616c6520686173206e6f742073746172746564207965740000000000000000600082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f6f6e6c79206c657373207468616e2031302061206d696e7465722063616e206d60008201527f696e7420617420612074696d6500000000000000000000000000000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f6e6f7420656c696769626c6520666f7220616c6c6f776c697374206d696e7400600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f616c6c6f776c6973742073616c6520686173206e6f7420626567756e20796574600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f746f6f206d616e7920616c7265616479206d696e746564206265666f7265206460008201527f6576206d696e7400000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b7f61646472657373657320646f6573206e6f74206d61746368206e756d536c6f7460008201527f73206c656e677468000000000000000000000000000000000000000000000000602082015250565b615c978161506c565b8114615ca257600080fd5b50565b615cae8161507e565b8114615cb957600080fd5b50565b615cc58161508a565b8114615cd057600080fd5b50565b615cdc816150f2565b8114615ce757600080fd5b50565b615cf3816150fc565b8114615cfe57600080fd5b50565b615d0a8161510c565b8114615d1557600080fd5b5056fea26469706673582212206f32b21f1a25a806e079adb7a5373243fd901ac13466d123cdabb95237664b1564736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000045700000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000000000137000000000000000000000000000000000000000000000000000000000000001242726f6b656e417065436f756368436c7562000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044241434300000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102305760003560e01c80638626eb181161012e578063b88d4fde116100ab578063dc33e6811161006f578063dc33e68114610834578063e18bb94114610871578063e985e9c51461089a578063f2fde38b146108d7578063fbe1aa511461090057610230565b8063b88d4fde1461074f578063b9cc929f14610778578063c87b56dd1461078f578063d7224ba0146107cc578063dbcad76f146107f757610230565b806395d89b41116100f257806395d89b4114610679578063a22cb465146106a4578063a7cd52cb146106cd578063b05863d51461070a578063b3ab66b01461073357610230565b80638626eb181461058d5780638bc35c2f146105b85780638da5cb5b146105e357806390aa0b0f1461060e5780639231ab2a1461063c57610230565b8063375a069a116101bc5780636352211e116101805780636352211e146104a857806370a08231146104e5578063715018a6146105225780637155c1ea146105395780637d8b4d371461056457610230565b8063375a069a146103e657806341fbddbd1461040f57806342842e0e146104195780634f6ccce71461044257806355f804b31461047f57610230565b806318160ddd1161020357806318160ddd1461030357806323b872dd1461032e5780632d20fb60146103575780632f745c59146103805780632f971029146103bd57610230565b806301ffc9a71461023557806306fdde0314610272578063081812fc1461029d578063095ea7b3146102da575b600080fd5b34801561024157600080fd5b5061025c6004803603810190610257919061406b565b61092b565b60405161026991906148a9565b60405180910390f35b34801561027e57600080fd5b50610287610a75565b60405161029491906148c4565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf9190614112565b610b07565b6040516102d19190614842565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc9190613fb3565b610b8c565b005b34801561030f57600080fd5b50610318610ca5565b6040516103259190614d81565b60405180910390f35b34801561033a57600080fd5b5061035560048036038101906103509190613e9d565b610caf565b005b34801561036357600080fd5b5061037e60048036038101906103799190614112565b610cbf565b005b34801561038c57600080fd5b506103a760048036038101906103a29190613fb3565b610d9d565b6040516103b49190614d81565b60405180910390f35b3480156103c957600080fd5b506103e460048036038101906103df9190613e30565b610f9b565b005b3480156103f257600080fd5b5061040d60048036038101906104089190614112565b61111d565b005b6104176112cf565b005b34801561042557600080fd5b50610440600480360381019061043b9190613e9d565b6115f5565b005b34801561044e57600080fd5b5061046960048036038101906104649190614112565b611615565b6040516104769190614d81565b60405180910390f35b34801561048b57600080fd5b506104a660048036038101906104a191906140c5565b611668565b005b3480156104b457600080fd5b506104cf60048036038101906104ca9190614112565b6116fa565b6040516104dc9190614842565b60405180910390f35b3480156104f157600080fd5b5061050c60048036038101906105079190613e30565b611710565b6040516105199190614d81565b60405180910390f35b34801561052e57600080fd5b506105376117f9565b005b34801561054557600080fd5b5061054e611881565b60405161055b9190614d81565b60405180910390f35b34801561057057600080fd5b5061058b6004803603810190610586919061417f565b6118a9565b005b34801561059957600080fd5b506105a2611979565b6040516105af9190614d81565b60405180910390f35b3480156105c457600080fd5b506105cd61199d565b6040516105da9190614d81565b60405180910390f35b3480156105ef57600080fd5b506105f86119c1565b6040516106059190614842565b60405180910390f35b34801561061a57600080fd5b506106236119ea565b6040516106339493929190614d9c565b60405180910390f35b34801561064857600080fd5b50610663600480360381019061065e9190614112565b611a50565b6040516106709190614d66565b60405180910390f35b34801561068557600080fd5b5061068e611a68565b60405161069b91906148c4565b60405180910390f35b3480156106b057600080fd5b506106cb60048036038101906106c69190613f73565b611afa565b005b3480156106d957600080fd5b506106f460048036038101906106ef9190613e30565b611c7b565b6040516107019190614d81565b60405180910390f35b34801561071657600080fd5b50610731600480360381019061072c9190613ff3565b611c93565b005b61074d60048036038101906107489190614112565b611def565b005b34801561075b57600080fd5b5061077660048036038101906107719190613ef0565b612003565b005b34801561078457600080fd5b5061078d61205f565b005b34801561079b57600080fd5b506107b660048036038101906107b19190614112565b6120f4565b6040516107c391906148c4565b60405180910390f35b3480156107d857600080fd5b506107e161219b565b6040516107ee9190614d81565b60405180910390f35b34801561080357600080fd5b5061081e6004803603810190610819919061413f565b6121a1565b60405161082b91906148a9565b60405180910390f35b34801561084057600080fd5b5061085b60048036038101906108569190613e30565b6121bb565b6040516108689190614d81565b60405180910390f35b34801561087d57600080fd5b506108986004803603810190610893919061417f565b6121cd565b005b3480156108a657600080fd5b506108c160048036038101906108bc9190613e5d565b61229d565b6040516108ce91906148a9565b60405180910390f35b3480156108e357600080fd5b506108fe60048036038101906108f99190613e30565b612331565b005b34801561090c57600080fd5b50610915612429565b6040516109229190614d81565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109f657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a5e57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a6e5750610a6d8261244d565b5b9050919050565b606060028054610a849061518c565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab09061518c565b8015610afd5780601f10610ad257610100808354040283529160200191610afd565b820191906000526020600020905b815481529060010190602001808311610ae057829003601f168201915b5050505050905090565b6000610b12826124b7565b610b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4890614d06565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b97826116fa565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bff90614b86565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c276124c5565b73ffffffffffffffffffffffffffffffffffffffff161480610c565750610c5581610c506124c5565b61229d565b5b610c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8c90614a06565b60405180910390fd5b610ca08383836124cd565b505050565b6000600154905090565b610cba83838361257f565b505050565b610cc76124c5565b73ffffffffffffffffffffffffffffffffffffffff16610ce56119c1565b73ffffffffffffffffffffffffffffffffffffffff1614610d3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3290614ae6565b60405180910390fd5b60026009541415610d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7890614cc6565b60405180910390fd5b6002600981905550610d9281612b38565b600160098190555050565b6000610da883611710565b8210610de9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de0906148e6565b60405180910390fd5b6000610df3610ca5565b905060008060005b83811015610f59576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610eed57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f455786841415610f36578195505050505050610f95565b8380610f41906151ef565b9450505b508080610f51906151ef565b915050610dfb565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8c90614c86565b60405180910390fd5b92915050565b610fa36124c5565b73ffffffffffffffffffffffffffffffffffffffff16610fc16119c1565b73ffffffffffffffffffffffffffffffffffffffff1614611017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100e90614ae6565b60405180910390fd5b6002600954141561105d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105490614cc6565b60405180910390fd5b600260098190555060008173ffffffffffffffffffffffffffffffffffffffff164760405161108b9061482d565b60006040518083038185875af1925050503d80600081146110c8576040519150601f19603f3d011682016040523d82523d6000602084013e6110cd565b606091505b5050905080611111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110890614ba6565b60405180910390fd5b50600160098190555050565b6111256124c5565b73ffffffffffffffffffffffffffffffffffffffff166111436119c1565b73ffffffffffffffffffffffffffffffffffffffff1614611199576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119090614ae6565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000137816111c3610ca5565b6111cd9190614f23565b111561120e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120590614c66565b60405180910390fd5b600a811115611252576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124990614a46565b60405180910390fd5b60007f0000000000000000000000000000000000000000000000000000000000000001826112809190614f79565b905060005b818110156112ca576112b7337f0000000000000000000000000000000000000000000000000000000000000001612dc6565b80806112c2906151ef565b915050611285565b505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461133d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611334906149e6565b60405180910390fd5b6000600a60000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1690506000600a60000160009054906101000a900463ffffffff1663ffffffff169050600081141580156113965750804210155b6113d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cc906149a6565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000016001611401336121bb565b61140b9190614f23565b111561144c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144390614c46565b60405180910390fd5b6000821415611490576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148790614b66565b60405180910390fd5b6000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611512576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150990614aa6565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000457600161153d610ca5565b6115479190614f23565b1115611588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157f90614a86565b60405180910390fd5b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906115d890615162565b91905055506115e8336001612dc6565b6115f182612de4565b5050565b61161083838360405180602001604052806000815250612003565b505050565b600061161f610ca5565b8210611660576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165790614946565b60405180910390fd5b819050919050565b6116706124c5565b73ffffffffffffffffffffffffffffffffffffffff1661168e6119c1565b73ffffffffffffffffffffffffffffffffffffffff16146116e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116db90614ae6565b60405180910390fd5b8181600c91906116f5929190613abe565b505050565b600061170582612e85565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177890614a66565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6118016124c5565b73ffffffffffffffffffffffffffffffffffffffff1661181f6119c1565b73ffffffffffffffffffffffffffffffffffffffff1614611875576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186c90614ae6565b60405180910390fd5b61187f6000613088565b565b60007f0000000000000000000000000000000000000000000000000000000000000457905090565b6118b16124c5565b73ffffffffffffffffffffffffffffffffffffffff166118cf6119c1565b73ffffffffffffffffffffffffffffffffffffffff1614611925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191c90614ae6565b60405180910390fd5b81600a60000160006101000a81548163ffffffff021916908363ffffffff16021790555080600a60000160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505050565b7f000000000000000000000000000000000000000000000000000000000000032081565b7f000000000000000000000000000000000000000000000000000000000000000181565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a8060000160009054906101000a900463ffffffff16908060000160049054906101000a900463ffffffff16908060000160089054906101000a900467ffffffffffffffff16908060000160109054906101000a900467ffffffffffffffff16905084565b611a58613b44565b611a6182612e85565b9050919050565b606060038054611a779061518c565b80601f0160208091040260200160405190810160405280929190818152602001828054611aa39061518c565b8015611af05780601f10611ac557610100808354040283529160200191611af0565b820191906000526020600020905b815481529060010190602001808311611ad357829003601f168201915b5050505050905090565b611b026124c5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6790614b26565b60405180910390fd5b8060076000611b7d6124c5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c2a6124c5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c6f91906148a9565b60405180910390a35050565b600b6020528060005260406000206000915090505481565b611c9b6124c5565b73ffffffffffffffffffffffffffffffffffffffff16611cb96119c1565b73ffffffffffffffffffffffffffffffffffffffff1614611d0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0690614ae6565b60405180910390fd5b8051825114611d53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4a90614d46565b60405180910390fd5b60005b8251811015611dea57818181518110611d7257611d716152f6565b5b6020026020010151600b6000858481518110611d9157611d906152f6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080611de2906151ef565b915050611d56565b505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611e5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e54906149e6565b60405180910390fd5b6000600a60000160049054906101000a900463ffffffff1663ffffffff16905060008114158015611e8e5750804210155b611ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec4906149a6565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000045782611ef7610ca5565b611f019190614f23565b1115611f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3990614986565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000182611f6d336121bb565b611f779190614f23565b1115611fb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611faf90614c46565b60405180910390fd5b600082600a60000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff16611fe99190614faa565b9050611ff53384612dc6565b611ffe81612de4565b505050565b61200e84848461257f565b61201a8484848461314c565b612059576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205090614bc6565b60405180910390fd5b50505050565b6120676124c5565b73ffffffffffffffffffffffffffffffffffffffff166120856119c1565b73ffffffffffffffffffffffffffffffffffffffff16146120db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d290614ae6565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16ff5b60606120ff826124b7565b61213e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213590614b06565b60405180910390fd5b60006121486132e3565b905060008151116121685760405180602001604052806000815250612193565b8061217284613375565b604051602001612183929190614809565b6040516020818303038152906040525b915050919050565b60085481565b60008083141580156121b35750814210155b905092915050565b60006121c6826134d6565b9050919050565b6121d56124c5565b73ffffffffffffffffffffffffffffffffffffffff166121f36119c1565b73ffffffffffffffffffffffffffffffffffffffff1614612249576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224090614ae6565b60405180910390fd5b81600a60000160046101000a81548163ffffffff021916908363ffffffff16021790555080600a60000160106101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6123396124c5565b73ffffffffffffffffffffffffffffffffffffffff166123576119c1565b73ffffffffffffffffffffffffffffffffffffffff16146123ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a490614ae6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561241d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241490614906565b60405180910390fd5b61242681613088565b50565b7f000000000000000000000000000000000000000000000000000000000000013781565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061258a82612e85565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166125b16124c5565b73ffffffffffffffffffffffffffffffffffffffff16148061260d57506125d66124c5565b73ffffffffffffffffffffffffffffffffffffffff166125f584610b07565b73ffffffffffffffffffffffffffffffffffffffff16145b80612629575061262882600001516126236124c5565b61229d565b5b90508061266b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266290614b46565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146126dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d490614ac6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561274d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274490614966565b60405180910390fd5b61275a85858560016135bf565b61276a60008484600001516124cd565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166127d89190615004565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661287c9190614edd565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846129829190614f23565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612ac8576129f8816124b7565b15612ac7576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612b3086868660016135c5565b505050505050565b6000600854905060008211612b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7990614a26565b60405180910390fd5b600060018383612b929190614f23565b612b9c9190615038565b905060017f0000000000000000000000000000000000000000000000000000000000000457612bcb9190615038565b811115612c025760017f0000000000000000000000000000000000000000000000000000000000000457612bff9190615038565b90505b612c0b816124b7565b612c4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4190614ca6565b60405180910390fd5b60008290505b818111612dad57600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612d9a576000612ccd82612e85565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b8080612da5906151ef565b915050612c50565b50600181612dbb9190614f23565b600881905550505050565b612de08282604051806020016040528060008152506135cb565b5050565b80341015612e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1e90614be6565b60405180910390fd5b80341115612e82573373ffffffffffffffffffffffffffffffffffffffff166108fc8234612e559190615038565b9081150290604051600060405180830381858888f19350505050158015612e80573d6000803e3d6000fd5b505b50565b612e8d613b44565b612e96826124b7565b612ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ecc90614926565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000018310612f395760017f000000000000000000000000000000000000000000000000000000000000000184612f2c9190615038565b612f369190614f23565b90505b60008390505b818110613047576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461303357809350505050613083565b50808061303f90615162565b915050612f3f565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307a90614ce6565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061316d8473ffffffffffffffffffffffffffffffffffffffff16613aab565b156132d6578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026131966124c5565b8786866040518563ffffffff1660e01b81526004016131b8949392919061485d565b602060405180830381600087803b1580156131d257600080fd5b505af192505050801561320357506040513d601f19601f820116820180604052508101906132009190614098565b60015b613286573d8060008114613233576040519150601f19603f3d011682016040523d82523d6000602084013e613238565b606091505b5060008151141561327e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161327590614bc6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506132db565b600190505b949350505050565b6060600c80546132f29061518c565b80601f016020809104026020016040519081016040528092919081815260200182805461331e9061518c565b801561336b5780601f106133405761010080835404028352916020019161336b565b820191906000526020600020905b81548152906001019060200180831161334e57829003601f168201915b5050505050905090565b606060008214156133bd576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506134d1565b600082905060005b600082146133ef5780806133d8906151ef565b915050600a826133e89190614f79565b91506133c5565b60008167ffffffffffffffff81111561340b5761340a615325565b5b6040519080825280601f01601f19166020018201604052801561343d5781602001600182028036833780820191505090505b5090505b600085146134ca576001826134569190615038565b9150600a856134659190615238565b60306134719190614f23565b60f81b818381518110613487576134866152f6565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856134c39190614f79565b9450613441565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613547576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161353e906149c6565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161363990614c26565b60405180910390fd5b61364b816124b7565b1561368b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161368290614c06565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000018311156136ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136e590614d26565b60405180910390fd5b6136fb60008583866135bf565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516137f89190614edd565b6fffffffffffffffffffffffffffffffff16815260200185836020015161381f9190614edd565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015613a8e57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613a2e600088848861314c565b613a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a6490614bc6565b60405180910390fd5b8180613a78906151ef565b9250508080613a86906151ef565b9150506139bd565b5080600181905550613aa360008785886135c5565b505050505050565b600080823b905060008111915050919050565b828054613aca9061518c565b90600052602060002090601f016020900481019282613aec5760008555613b33565b82601f10613b0557803560ff1916838001178555613b33565b82800160010185558215613b33579182015b82811115613b32578235825591602001919060010190613b17565b5b509050613b409190613b7e565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613b97576000816000905550600101613b7f565b5090565b6000613bae613ba984614e06565b614de1565b90508083825260208201905082856020860282011115613bd157613bd061535e565b5b60005b85811015613c015781613be78882613cbd565b845260208401935060208301925050600181019050613bd4565b5050509392505050565b6000613c1e613c1984614e32565b614de1565b90508083825260208201905082856020860282011115613c4157613c4061535e565b5b60005b85811015613c715781613c578882613df1565b845260208401935060208301925050600181019050613c44565b5050509392505050565b6000613c8e613c8984614e5e565b614de1565b905082815260208101848484011115613caa57613ca9615363565b5b613cb5848285615120565b509392505050565b600081359050613ccc81615c8e565b92915050565b600082601f830112613ce757613ce6615359565b5b8135613cf7848260208601613b9b565b91505092915050565b600082601f830112613d1557613d14615359565b5b8135613d25848260208601613c0b565b91505092915050565b600081359050613d3d81615ca5565b92915050565b600081359050613d5281615cbc565b92915050565b600081519050613d6781615cbc565b92915050565b600082601f830112613d8257613d81615359565b5b8135613d92848260208601613c7b565b91505092915050565b60008083601f840112613db157613db0615359565b5b8235905067ffffffffffffffff811115613dce57613dcd615354565b5b602083019150836001820283011115613dea57613de961535e565b5b9250929050565b600081359050613e0081615cd3565b92915050565b600081359050613e1581615cea565b92915050565b600081359050613e2a81615d01565b92915050565b600060208284031215613e4657613e4561536d565b5b6000613e5484828501613cbd565b91505092915050565b60008060408385031215613e7457613e7361536d565b5b6000613e8285828601613cbd565b9250506020613e9385828601613cbd565b9150509250929050565b600080600060608486031215613eb657613eb561536d565b5b6000613ec486828701613cbd565b9350506020613ed586828701613cbd565b9250506040613ee686828701613df1565b9150509250925092565b60008060008060808587031215613f0a57613f0961536d565b5b6000613f1887828801613cbd565b9450506020613f2987828801613cbd565b9350506040613f3a87828801613df1565b925050606085013567ffffffffffffffff811115613f5b57613f5a615368565b5b613f6787828801613d6d565b91505092959194509250565b60008060408385031215613f8a57613f8961536d565b5b6000613f9885828601613cbd565b9250506020613fa985828601613d2e565b9150509250929050565b60008060408385031215613fca57613fc961536d565b5b6000613fd885828601613cbd565b9250506020613fe985828601613df1565b9150509250929050565b6000806040838503121561400a5761400961536d565b5b600083013567ffffffffffffffff81111561402857614027615368565b5b61403485828601613cd2565b925050602083013567ffffffffffffffff81111561405557614054615368565b5b61406185828601613d00565b9150509250929050565b6000602082840312156140815761408061536d565b5b600061408f84828501613d43565b91505092915050565b6000602082840312156140ae576140ad61536d565b5b60006140bc84828501613d58565b91505092915050565b600080602083850312156140dc576140db61536d565b5b600083013567ffffffffffffffff8111156140fa576140f9615368565b5b61410685828601613d9b565b92509250509250929050565b6000602082840312156141285761412761536d565b5b600061413684828501613df1565b91505092915050565b600080604083850312156141565761415561536d565b5b600061416485828601613df1565b925050602061417585828601613df1565b9150509250929050565b600080604083850312156141965761419561536d565b5b60006141a485828601613e06565b92505060206141b585828601613e1b565b9150509250929050565b6141c88161506c565b82525050565b6141d78161506c565b82525050565b6141e68161507e565b82525050565b60006141f782614e8f565b6142018185614ea5565b935061421181856020860161512f565b61421a81615372565b840191505092915050565b600061423082614e9a565b61423a8185614ec1565b935061424a81856020860161512f565b61425381615372565b840191505092915050565b600061426982614e9a565b6142738185614ed2565b935061428381856020860161512f565b80840191505092915050565b600061429c602283614ec1565b91506142a782615383565b604082019050919050565b60006142bf602683614ec1565b91506142ca826153d2565b604082019050919050565b60006142e2602a83614ec1565b91506142ed82615421565b604082019050919050565b6000614305602383614ec1565b915061431082615470565b604082019050919050565b6000614328602583614ec1565b9150614333826154bf565b604082019050919050565b600061434b601d83614ec1565b91506143568261550e565b602082019050919050565b600061436e601883614ec1565b915061437982615537565b602082019050919050565b6000614391603183614ec1565b915061439c82615560565b604082019050919050565b60006143b4601e83614ec1565b91506143bf826155af565b602082019050919050565b60006143d7603983614ec1565b91506143e2826155d8565b604082019050919050565b60006143fa601883614ec1565b915061440582615627565b602082019050919050565b600061441d602d83614ec1565b915061442882615650565b604082019050919050565b6000614440602b83614ec1565b915061444b8261569f565b604082019050919050565b6000614463601283614ec1565b915061446e826156ee565b602082019050919050565b6000614486601f83614ec1565b915061449182615717565b602082019050919050565b60006144a9602683614ec1565b91506144b482615740565b604082019050919050565b60006144cc602083614ec1565b91506144d78261578f565b602082019050919050565b60006144ef602f83614ec1565b91506144fa826157b8565b604082019050919050565b6000614512601a83614ec1565b915061451d82615807565b602082019050919050565b6000614535603283614ec1565b915061454082615830565b604082019050919050565b6000614558602083614ec1565b91506145638261587f565b602082019050919050565b600061457b602283614ec1565b9150614586826158a8565b604082019050919050565b600061459e600083614eb6565b91506145a9826158f7565b600082019050919050565b60006145c1601083614ec1565b91506145cc826158fa565b602082019050919050565b60006145e4603383614ec1565b91506145ef82615923565b604082019050919050565b6000614607601683614ec1565b915061461282615972565b602082019050919050565b600061462a601d83614ec1565b91506146358261599b565b602082019050919050565b600061464d602183614ec1565b9150614658826159c4565b604082019050919050565b6000614670601683614ec1565b915061467b82615a13565b602082019050919050565b6000614693602783614ec1565b915061469e82615a3c565b604082019050919050565b60006146b6602e83614ec1565b91506146c182615a8b565b604082019050919050565b60006146d9602683614ec1565b91506146e482615ada565b604082019050919050565b60006146fc601f83614ec1565b915061470782615b29565b602082019050919050565b600061471f602f83614ec1565b915061472a82615b52565b604082019050919050565b6000614742602d83614ec1565b915061474d82615ba1565b604082019050919050565b6000614765602283614ec1565b915061477082615bf0565b604082019050919050565b6000614788602883614ec1565b915061479382615c3f565b604082019050919050565b6040820160008201516147b460008501826141bf565b5060208201516147c760208501826147eb565b50505050565b6147d6816150f2565b82525050565b6147e5816150fc565b82525050565b6147f48161510c565b82525050565b6148038161510c565b82525050565b6000614815828561425e565b9150614821828461425e565b91508190509392505050565b600061483882614591565b9150819050919050565b600060208201905061485760008301846141ce565b92915050565b600060808201905061487260008301876141ce565b61487f60208301866141ce565b61488c60408301856147cd565b818103606083015261489e81846141ec565b905095945050505050565b60006020820190506148be60008301846141dd565b92915050565b600060208201905081810360008301526148de8184614225565b905092915050565b600060208201905081810360008301526148ff8161428f565b9050919050565b6000602082019050818103600083015261491f816142b2565b9050919050565b6000602082019050818103600083015261493f816142d5565b9050919050565b6000602082019050818103600083015261495f816142f8565b9050919050565b6000602082019050818103600083015261497f8161431b565b9050919050565b6000602082019050818103600083015261499f8161433e565b9050919050565b600060208201905081810360008301526149bf81614361565b9050919050565b600060208201905081810360008301526149df81614384565b9050919050565b600060208201905081810360008301526149ff816143a7565b9050919050565b60006020820190508181036000830152614a1f816143ca565b9050919050565b60006020820190508181036000830152614a3f816143ed565b9050919050565b60006020820190508181036000830152614a5f81614410565b9050919050565b60006020820190508181036000830152614a7f81614433565b9050919050565b60006020820190508181036000830152614a9f81614456565b9050919050565b60006020820190508181036000830152614abf81614479565b9050919050565b60006020820190508181036000830152614adf8161449c565b9050919050565b60006020820190508181036000830152614aff816144bf565b9050919050565b60006020820190508181036000830152614b1f816144e2565b9050919050565b60006020820190508181036000830152614b3f81614505565b9050919050565b60006020820190508181036000830152614b5f81614528565b9050919050565b60006020820190508181036000830152614b7f8161454b565b9050919050565b60006020820190508181036000830152614b9f8161456e565b9050919050565b60006020820190508181036000830152614bbf816145b4565b9050919050565b60006020820190508181036000830152614bdf816145d7565b9050919050565b60006020820190508181036000830152614bff816145fa565b9050919050565b60006020820190508181036000830152614c1f8161461d565b9050919050565b60006020820190508181036000830152614c3f81614640565b9050919050565b60006020820190508181036000830152614c5f81614663565b9050919050565b60006020820190508181036000830152614c7f81614686565b9050919050565b60006020820190508181036000830152614c9f816146a9565b9050919050565b60006020820190508181036000830152614cbf816146cc565b9050919050565b60006020820190508181036000830152614cdf816146ef565b9050919050565b60006020820190508181036000830152614cff81614712565b9050919050565b60006020820190508181036000830152614d1f81614735565b9050919050565b60006020820190508181036000830152614d3f81614758565b9050919050565b60006020820190508181036000830152614d5f8161477b565b9050919050565b6000604082019050614d7b600083018461479e565b92915050565b6000602082019050614d9660008301846147cd565b92915050565b6000608082019050614db160008301876147dc565b614dbe60208301866147dc565b614dcb60408301856147fa565b614dd860608301846147fa565b95945050505050565b6000614deb614dfc565b9050614df782826151be565b919050565b6000604051905090565b600067ffffffffffffffff821115614e2157614e20615325565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614e4d57614e4c615325565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614e7957614e78615325565b5b614e8282615372565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614ee8826150b6565b9150614ef3836150b6565b9250826fffffffffffffffffffffffffffffffff03821115614f1857614f17615269565b5b828201905092915050565b6000614f2e826150f2565b9150614f39836150f2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614f6e57614f6d615269565b5b828201905092915050565b6000614f84826150f2565b9150614f8f836150f2565b925082614f9f57614f9e615298565b5b828204905092915050565b6000614fb5826150f2565b9150614fc0836150f2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ff957614ff8615269565b5b828202905092915050565b600061500f826150b6565b915061501a836150b6565b92508282101561502d5761502c615269565b5b828203905092915050565b6000615043826150f2565b915061504e836150f2565b92508282101561506157615060615269565b5b828203905092915050565b6000615077826150d2565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b8381101561514d578082015181840152602081019050615132565b8381111561515c576000848401525b50505050565b600061516d826150f2565b9150600082141561518157615180615269565b5b600182039050919050565b600060028204905060018216806151a457607f821691505b602082108114156151b8576151b76152c7565b5b50919050565b6151c782615372565b810181811067ffffffffffffffff821117156151e6576151e5615325565b5b80604052505050565b60006151fa826150f2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561522d5761522c615269565b5b600182019050919050565b6000615243826150f2565b915061524e836150f2565b92508261525e5761525d615298565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f7567682072656d61696e696e67207265736572766564000000600082015250565b7f73616c6520686173206e6f742073746172746564207965740000000000000000600082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f6f6e6c79206c657373207468616e2031302061206d696e7465722063616e206d60008201527f696e7420617420612074696d6500000000000000000000000000000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f6e6f7420656c696769626c6520666f7220616c6c6f776c697374206d696e7400600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f616c6c6f776c6973742073616c6520686173206e6f7420626567756e20796574600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f746f6f206d616e7920616c7265616479206d696e746564206265666f7265206460008201527f6576206d696e7400000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b7f61646472657373657320646f6573206e6f74206d61746368206e756d536c6f7460008201527f73206c656e677468000000000000000000000000000000000000000000000000602082015250565b615c978161506c565b8114615ca257600080fd5b50565b615cae8161507e565b8114615cb957600080fd5b50565b615cc58161508a565b8114615cd057600080fd5b50565b615cdc816150f2565b8114615ce757600080fd5b50565b615cf3816150fc565b8114615cfe57600080fd5b50565b615d0a8161510c565b8114615d1557600080fd5b5056fea26469706673582212206f32b21f1a25a806e079adb7a5373243fd901ac13466d123cdabb95237664b1564736f6c63430008070033

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

00000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000045700000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000000000137000000000000000000000000000000000000000000000000000000000000001242726f6b656e417065436f756368436c7562000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044241434300000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name_ (string): BrokenApeCouchClub
Arg [1] : symbol_ (string): BACC
Arg [2] : maxBatchSize_ (uint256): 1
Arg [3] : collectionSize_ (uint256): 1111
Arg [4] : amountForAllows_ (uint256): 800
Arg [5] : amountForDevs_ (uint256): 311

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000457
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000320
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000137
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [7] : 42726f6b656e417065436f756368436c75620000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [9] : 4241434300000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

163:4935:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3826:358:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5490:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6955:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6533:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2432:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7773:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4535:116:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3046:721:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4336:195:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3650:416;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1816:721;;;:::i;:::-;;7967:151:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2588:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4234:98:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5320:116:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4235:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1598:92:10;;;;;;;;;;;;;:::i;:::-;;4764:91:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3128:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;326:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;232:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;966:85:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;507:28:1;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;4859:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5638:96:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7214:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;540:44:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3294:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1194:618;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8176:300:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5004:88:1;;;;;;;;;;;;;:::i;:::-;;5792:377:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12446:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2744:207:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4655:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2955:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7541:178:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1839:189:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;284:38:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3826:358:4;3948:4;3990:25;3975:40;;;:11;:40;;;;:98;;;;4040:33;4025:48;;;:11;:48;;;;3975:98;:158;;;;4098:35;4083:50;;;:11;:50;;;;3975:158;:204;;;;4143:36;4167:11;4143:23;:36::i;:::-;3975:204;3962:217;;3826:358;;;:::o;5490:92::-;5544:13;5572:5;5565:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5490:92;:::o;6955:200::-;7023:7;7046:16;7054:7;7046;:16::i;:::-;7038:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;7126:15;:24;7142:7;7126:24;;;;;;;;;;;;;;;;;;;;;7119:31;;6955:200;;;:::o;6533:369::-;6601:13;6617:24;6633:7;6617:15;:24::i;:::-;6601:40;;6661:5;6655:11;;:2;:11;;;;6647:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;6743:5;6727:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;6752:37;6769:5;6776:12;:10;:12::i;:::-;6752:16;:37::i;:::-;6727:62;6712:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;6869:28;6878:2;6882:7;6891:5;6869:8;:28::i;:::-;6595:307;6533:369;;:::o;2432:92::-;2485:7;2507:12;;2500:19;;2432:92;:::o;7773:136::-;7876:28;7886:4;7892:2;7896:7;7876:9;:28::i;:::-;7773:136;;;:::o;4535:116:1:-;1189:12:10;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1680:1:11::1;2259:7;;:19;;2251:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1680:1;2389:7;:18;;;;4618:28:1::2;4637:8;4618:18;:28::i;:::-;1637:1:11::1;2562:7;:22;;;;4535:116:1::0;:::o;3046:721:4:-;3151:7;3184:16;3194:5;3184:9;:16::i;:::-;3176:5;:24;3168:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;3245:22;3270:13;:11;:13::i;:::-;3245:38;;3289:19;3318:25;3367:9;3362:339;3386:14;3382:1;:18;3362:339;;;3415:31;3449:11;:14;3461:1;3449:14;;;;;;;;;;;3415:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3501:1;3475:28;;:9;:14;;;:28;;;3471:87;;3535:9;:14;;;3515:34;;3471:87;3590:5;3569:26;;:17;:26;;;3565:130;;;3626:5;3611:11;:20;3607:57;;;3652:1;3645:8;;;;;;;;;3607:57;3673:13;;;;;:::i;:::-;;;;3565:130;3407:294;3402:3;;;;;:::i;:::-;;;;3362:339;;;;3706:56;;;;;;;;;;:::i;:::-;;;;;;;;3046:721;;;;;:::o;4336:195:1:-;1189:12:10;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1680:1:11::1;2259:7;;:19;;2251:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1680:1;2389:7;:18;;;;4413:12:1::2;4439:5;4431:19;;4458:21;4431:53;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4412:72;;;4498:7;4490:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;4406:125;1637:1:11::1;2562:7;:22;;;;4336:195:1::0;:::o;3650:416::-;1189:12:10;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3753:13:1::1;3741:8;3725:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:41;;3710:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;3854:2;3842:8;:14;;3827:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;3923:17;3954:12;3943:8;:23;;;;:::i;:::-;3923:43;;3977:9;3972:90;3996:9;3992:1;:13;3972:90;;;4020:35;4030:10;4042:12;4020:9;:35::i;:::-;4007:3;;;;;:::i;:::-;;;;3972:90;;;;3704:362;3650:416:::0;:::o;1816:721::-;1133:10;1120:23;;:9;:23;;;1112:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;1877:13:::1;1901:10;:21;;;;;;;;;;;;1893:30;;1877:46;;1929:23;1963:10;:25;;;;;;;;;;;;1955:34;;1929:60;;2029:1;2010:15;:20;;:58;;;;;2053:15;2034;:34;;2010:58;1995:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;2161:23;2156:1;2129:24;2142:10;2129:12;:24::i;:::-;:28;;;;:::i;:::-;:55;;2114:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;2245:1;2236:5;:10;;2228:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;2321:1;2297:9;:21;2307:10;2297:21;;;;;;;;;;;;;;;;:25;2289:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;2400:14;2395:1;2379:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:35;;2364:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;2454:9;:21;2464:10;2454:21;;;;;;;;;;;;;;;;:23;;;;;;;;;:::i;:::-;;;;;;2483:24;2493:10;2505:1;2483:9;:24::i;:::-;2513:19;2526:5;2513:12;:19::i;:::-;1871:666;;1816:721::o:0;7967:151:4:-;8074:39;8091:4;8097:2;8101:7;8074:39;;;;;;;;;;;;:16;:39::i;:::-;7967:151;;;:::o;2588:174::-;2655:7;2686:13;:11;:13::i;:::-;2678:5;:21;2670:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;2752:5;2745:12;;2588:174;;;:::o;4234:98:1:-;1189:12:10;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4320:7:1::1;;4304:13;:23;;;;;;;:::i;:::-;;4234:98:::0;;:::o;5320:116:4:-;5384:7;5406:20;5418:7;5406:11;:20::i;:::-;:25;;;5399:32;;5320:116;;;:::o;4235:208::-;4299:7;4339:1;4322:19;;:5;:19;;;;4314:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;4410:12;:19;4423:5;4410:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;4402:36;;4395:43;;4235:208;;;:::o;1598:92:10:-;1189:12;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1662:21:::1;1680:1;1662:9;:21::i;:::-;1598:92::o:0;4764:91:1:-;4814:7;4836:14;4829:21;;4764:91;:::o;3128:162::-;1189:12:10;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3241:9:1::1;3213:10;:25;;;:37;;;;;;;;;;;;;;;;;;3280:5;3256:10;:21;;;:29;;;;;;;;;;;;;;;;;;3128:162:::0;;:::o;326:43::-;;;:::o;232:48::-;;;:::o;966:85:10:-;1012:7;1038:6;;;;;;;;;;;1031:13;;966:85;:::o;507:28:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4859:141::-;4937:21;;:::i;:::-;4975:20;4987:7;4975:11;:20::i;:::-;4968:27;;4859:141;;;:::o;5638:96:4:-;5694:13;5722:7;5715:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5638:96;:::o;7214:269::-;7316:12;:10;:12::i;:::-;7304:24;;:8;:24;;;;7296:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;7411:8;7366:18;:32;7385:12;:10;:12::i;:::-;7366:32;;;;;;;;;;;;;;;:42;7399:8;7366:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;7459:8;7430:48;;7445:12;:10;:12::i;:::-;7430:48;;;7469:8;7430:48;;;;;;:::i;:::-;;;;;;;;7214:269;;:::o;540:44:1:-;;;;;;;;;;;;;;;;;:::o;3294:328::-;1189:12:10;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3442:8:1::1;:15;3422:9;:16;:35;3407:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;3524:9;3519:99;3543:9;:16;3539:1;:20;3519:99;;;3600:8;3609:1;3600:11;;;;;;;;:::i;:::-;;;;;;;;3574:9;:23;3584:9;3594:1;3584:12;;;;;;;;:::i;:::-;;;;;;;;3574:23;;;;;;;;;;;;;;;:37;;;;3561:3;;;;;:::i;:::-;;;;3519:99;;;;3294:328:::0;;:::o;1194:618::-;1133:10;1120:23;;:9;:23;;;1112:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;1272:22:::1;1305:10;:30;;;;;;;;;;;;1297:39;;1272:64;;1375:1;1357:14;:19;;:56;;;;;1399:14;1380:15;:33;;1357:56;1342:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;1502:14;1490:8;1474:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:42;;1459:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;1621:23;1609:8;1582:24;1595:10;1582:12;:24::i;:::-;:35;;;;:::i;:::-;:62;;1567:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;1688:17;1733:8;1708:10;:22;;;;;;;;;;;;:33;;;;;;:::i;:::-;1688:53;;1747:31;1757:10;1769:8;1747:9;:31::i;:::-;1784:23;1797:9;1784:12;:23::i;:::-;1266:546;;1194:618:::0;:::o;8176:300:4:-;8307:28;8317:4;8323:2;8327:7;8307:9;:28::i;:::-;8356:48;8379:4;8385:2;8389:7;8398:5;8356:22;:48::i;:::-;8341:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;8176:300;;;;:::o;5004:88:1:-;1189:12:10;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5075:10:1::1;5054:33;;;5792:377:4::0;5885:13;5923:16;5931:7;5923;:16::i;:::-;5908:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;6009:21;6033:10;:8;:10::i;:::-;6009:34;;6086:1;6068:7;6062:21;:25;:102;;;;;;;;;;;;;;;;;6122:7;6131:18;:7;:16;:18::i;:::-;6105:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6062:102;6049:115;;;5792:377;;;:::o;12446:43::-;;;;:::o;2744:207:1:-;2854:4;2897:1;2879:14;:19;;:67;;;;;2927:19;2908:15;:38;;2879:67;2866:80;;2744:207;;;;:::o;4655:105::-;4713:7;4735:20;4749:5;4735:13;:20::i;:::-;4728:27;;4655:105;;;:::o;2955:169::-;1189:12:10;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3074:9:1::1;3041:10;:30;;;:42;;;;;;;;;;;;;;;;;;3114:5;3089:10;:22;;;:30;;;;;;;;;;;;;;;;;;2955:169:::0;;:::o;7541:178:4:-;7658:4;7679:18;:25;7698:5;7679:25;;;;;;;;;;;;;;;:35;7705:8;7679:35;;;;;;;;;;;;;;;;;;;;;;;;;7672:42;;7541:178;;;;:::o;1839:189:10:-;1189:12;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1947:1:::1;1927:22;;:8;:22;;;;1919:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2002:19;2012:8;2002:9;:19::i;:::-;1839:189:::0;:::o;284:38:1:-;;;:::o;763:155:3:-;848:4;886:25;871:40;;;:11;:40;;;;864:47;;763:155;;;:::o;8706:103:4:-;8763:4;8792:12;;8782:7;:22;8775:29;;8706:103;;;:::o;586:96:2:-;639:7;665:10;658:17;;586:96;:::o;12277:165:4:-;12396:2;12369:15;:24;12385:7;12369:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;12429:7;12425:2;12409:28;;12418:5;12409:28;;;;;;;;;;;;12277:165;;;:::o;10694:1484::-;10786:35;10824:20;10836:7;10824:11;:20::i;:::-;10786:58;;10851:22;10893:13;:18;;;10877:34;;:12;:10;:12::i;:::-;:34;;;:80;;;;10945:12;:10;:12::i;:::-;10921:36;;:20;10933:7;10921:11;:20::i;:::-;:36;;;10877:80;:140;;;;10967:50;10984:13;:18;;;11004:12;:10;:12::i;:::-;10967:16;:50::i;:::-;10877:140;10851:167;;11040:17;11025:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;11167:4;11145:26;;:13;:18;;;:26;;;11130:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;11253:1;11239:16;;:2;:16;;;;11231:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;11304:43;11326:4;11332:2;11336:7;11345:1;11304:21;:43::i;:::-;11401:49;11418:1;11422:7;11431:13;:18;;;11401:8;:49::i;:::-;11487:1;11457:12;:18;11470:4;11457:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11522:1;11494:12;:16;11507:2;11494:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11552:43;;;;;;;;11567:2;11552:43;;;;;;11578:15;11552:43;;;;;11529:11;:20;11541:7;11529:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11819:19;11851:1;11841:7;:11;;;;:::i;:::-;11819:33;;11903:1;11862:43;;:11;:24;11874:11;11862:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;11858:229;;;11919:20;11927:11;11919:7;:20::i;:::-;11915:166;;;11978:94;;;;;;;;12004:13;:18;;;11978:94;;;;;;12034:13;:28;;;11978:94;;;;;11951:11;:24;11963:11;11951:24;;;;;;;;;;;:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11915:166;11858:229;12117:7;12113:2;12098:27;;12107:4;12098:27;;;;;;;;;;;;12131:42;12152:4;12158:2;12162:7;12171:1;12131:20;:42::i;:::-;10780:1398;;;10694:1484;;;:::o;12589:827::-;12650:25;12678:24;;12650:52;;12727:1;12716:8;:12;12708:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;12763:16;12813:1;12802:8;12782:17;:28;;;;:::i;:::-;:32;;;;:::i;:::-;12763:51;;12852:1;12835:14;:18;;;;:::i;:::-;12824:8;:29;12820:79;;;12891:1;12874:14;:18;;;;:::i;:::-;12863:29;;12820:79;13012:17;13020:8;13012:7;:17::i;:::-;13004:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13083:9;13095:17;13083:29;;13078:289;13119:8;13114:1;:13;13078:289;;13177:1;13146:33;;:11;:14;13158:1;13146:14;;;;;;;;;;;:19;;;;;;;;;;;;:33;;;13142:219;;;13191:31;13225:14;13237:1;13225:11;:14::i;:::-;13191:48;;13266:86;;;;;;;;13292:9;:14;;;13266:86;;;;;;13318:9;:24;;;13266:86;;;;;13249:11;:14;13261:1;13249:14;;;;;;;;;;;:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13181:180;13142:219;13129:3;;;;;:::i;:::-;;;;13078:289;;;;13410:1;13399:8;:12;;;;:::i;:::-;13372:24;:39;;;;12644:772;;12589:827;:::o;8813:96::-;8877:27;8887:2;8891:8;8877:27;;;;;;;;;;;;:9;:27::i;:::-;8813:96;;:::o;2541:199:1:-;2613:5;2600:9;:18;;2592:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;2667:5;2655:9;:17;2651:85;;;2690:10;2682:28;;:47;2723:5;2711:9;:17;;;;:::i;:::-;2682:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2651:85;2541:199;:::o;4685:586:4:-;4758:21;;:::i;:::-;4797:16;4805:7;4797;:16::i;:::-;4789:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;4867:26;4914:12;4903:7;:23;4899:91;;4982:1;4967:12;4957:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;4936:47;;4899:91;5001:12;5016:7;5001:22;;4996:207;5033:18;5025:4;:26;4996:207;;5069:31;5103:11;:17;5115:4;5103:17;;;;;;;;;;;5069:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5158:1;5132:28;;:9;:14;;;:28;;;5128:69;;5179:9;5172:16;;;;;;;5128:69;5061:142;5053:6;;;;;:::i;:::-;;;;4996:207;;;;5209:57;;;;;;;;;;:::i;:::-;;;;;;;;4685:586;;;;:::o;2034:169:10:-;2089:16;2108:6;;;;;;;;;;;2089:25;;2133:8;2124:6;;:17;;;;;;;;;;;;;;;;;;2187:8;2156:40;;2177:8;2156:40;;;;;;;;;;;;2079:124;2034:169;:::o;13947:667:4:-;14079:4;14095:15;:2;:13;;;:15::i;:::-;14091:519;;;14148:2;14132:36;;;14169:12;:10;:12::i;:::-;14183:4;14189:7;14198:5;14132:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;14120:452;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14376:1;14359:6;:13;:18;14355:209;;;14391:61;;;;;;;;;;:::i;:::-;;;;;;;;14355:209;14534:6;14528:13;14519:6;14515:2;14511:15;14504:38;14120:452;14262:45;;;14252:55;;;:6;:55;;;;14245:62;;;;;14091:519;14599:4;14592:11;;13947:667;;;;;;;:::o;4124:106:1:-;4184:13;4212;4205:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4124:106;:::o;275:703:12:-;331:13;557:1;548:5;:10;544:51;;;574:10;;;;;;;;;;;;;;;;;;;;;544:51;604:12;619:5;604:20;;634:14;658:75;673:1;665:4;:9;658:75;;690:8;;;;;:::i;:::-;;;;720:2;712:10;;;;;:::i;:::-;;;658:75;;;742:19;774:6;764:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;742:39;;791:150;807:1;798:5;:10;791:150;;834:1;824:11;;;;;:::i;:::-;;;900:2;892:5;:10;;;;:::i;:::-;879:2;:24;;;;:::i;:::-;866:39;;849:6;856;849:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;928:2;919:11;;;;;:::i;:::-;;;791:150;;;964:6;950:21;;;;;275:703;;;;:::o;4447:234:4:-;4508:7;4555:1;4538:19;;:5;:19;;;;4523:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;4643:12;:19;4656:5;4643:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;4635:41;;4628:48;;4447:234;;;:::o;15062:136::-;;;;;:::o;15570:135::-;;;;;:::o;9235:1239::-;9335:20;9358:12;;9335:35;;9398:1;9384:16;;:2;:16;;;;9376:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;9573:21;9581:12;9573:7;:21::i;:::-;9572:22;9564:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;9654:12;9642:8;:24;;9634:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;9712:61;9742:1;9746:2;9750:12;9764:8;9712:21;:61::i;:::-;9780:30;9813:12;:16;9826:2;9813:16;;;;;;;;;;;;;;;9780:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9854:116;;;;;;;;9903:8;9873:11;:19;;;:39;;;;:::i;:::-;9854:116;;;;;;9955:8;9920:11;:24;;;:44;;;;:::i;:::-;9854:116;;;;;9835:12;:16;9848:2;9835:16;;;;;;;;;;;;;;;:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10004:43;;;;;;;;10019:2;10004:43;;;;;;10030:15;10004:43;;;;;9976:11;:25;9988:12;9976:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10054:20;10077:12;10054:35;;10101:9;10096:274;10120:8;10116:1;:12;10096:274;;;10173:12;10169:2;10148:38;;10165:1;10148:38;;;;;;;;;;;;10211:59;10242:1;10246:2;10250:12;10264:5;10211:22;:59::i;:::-;10194:147;;;;;;;;;;;;:::i;:::-;;;;;;;;;10349:14;;;;;:::i;:::-;;;;10130:3;;;;;:::i;:::-;;;;10096:274;;;;10391:12;10376;:27;;;;10409:60;10438:1;10442:2;10446:12;10460:8;10409:20;:60::i;:::-;9329:1145;;;9235:1239;;;:::o;718:377:0:-;778:4;981:12;1046:7;1034:20;1026:28;;1087:1;1080:4;:8;1073:15;;;718:377;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:13:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:139::-;1959:5;1997:6;1984:20;1975:29;;2013:33;2040:5;2013:33;:::i;:::-;1913:139;;;;:::o;2075:370::-;2146:5;2195:3;2188:4;2180:6;2176:17;2172:27;2162:122;;2203:79;;:::i;:::-;2162:122;2320:6;2307:20;2345:94;2435:3;2427:6;2420:4;2412:6;2408:17;2345:94;:::i;:::-;2336:103;;2152:293;2075:370;;;;:::o;2468:::-;2539:5;2588:3;2581:4;2573:6;2569:17;2565:27;2555:122;;2596:79;;:::i;:::-;2555:122;2713:6;2700:20;2738:94;2828:3;2820:6;2813:4;2805:6;2801:17;2738:94;:::i;:::-;2729:103;;2545:293;2468:370;;;;:::o;2844:133::-;2887:5;2925:6;2912:20;2903:29;;2941:30;2965:5;2941:30;:::i;:::-;2844:133;;;;:::o;2983:137::-;3028:5;3066:6;3053:20;3044:29;;3082:32;3108:5;3082:32;:::i;:::-;2983:137;;;;:::o;3126:141::-;3182:5;3213:6;3207:13;3198:22;;3229:32;3255:5;3229:32;:::i;:::-;3126:141;;;;:::o;3286:338::-;3341:5;3390:3;3383:4;3375:6;3371:17;3367:27;3357:122;;3398:79;;:::i;:::-;3357:122;3515:6;3502:20;3540:78;3614:3;3606:6;3599:4;3591:6;3587:17;3540:78;:::i;:::-;3531:87;;3347:277;3286:338;;;;:::o;3644:553::-;3702:8;3712:6;3762:3;3755:4;3747:6;3743:17;3739:27;3729:122;;3770:79;;:::i;:::-;3729:122;3883:6;3870:20;3860:30;;3913:18;3905:6;3902:30;3899:117;;;3935:79;;:::i;:::-;3899:117;4049:4;4041:6;4037:17;4025:29;;4103:3;4095:4;4087:6;4083:17;4073:8;4069:32;4066:41;4063:128;;;4110:79;;:::i;:::-;4063:128;3644:553;;;;;:::o;4203:139::-;4249:5;4287:6;4274:20;4265:29;;4303:33;4330:5;4303:33;:::i;:::-;4203:139;;;;:::o;4348:137::-;4393:5;4431:6;4418:20;4409:29;;4447:32;4473:5;4447:32;:::i;:::-;4348:137;;;;:::o;4491:::-;4536:5;4574:6;4561:20;4552:29;;4590:32;4616:5;4590:32;:::i;:::-;4491:137;;;;:::o;4634:329::-;4693:6;4742:2;4730:9;4721:7;4717:23;4713:32;4710:119;;;4748:79;;:::i;:::-;4710:119;4868:1;4893:53;4938:7;4929:6;4918:9;4914:22;4893:53;:::i;:::-;4883:63;;4839:117;4634:329;;;;:::o;4969:474::-;5037:6;5045;5094:2;5082:9;5073:7;5069:23;5065:32;5062:119;;;5100:79;;:::i;:::-;5062:119;5220:1;5245:53;5290:7;5281:6;5270:9;5266:22;5245:53;:::i;:::-;5235:63;;5191:117;5347:2;5373:53;5418:7;5409:6;5398:9;5394:22;5373:53;:::i;:::-;5363:63;;5318:118;4969:474;;;;;:::o;5449:619::-;5526:6;5534;5542;5591:2;5579:9;5570:7;5566:23;5562:32;5559:119;;;5597:79;;:::i;:::-;5559:119;5717:1;5742:53;5787:7;5778:6;5767:9;5763:22;5742:53;:::i;:::-;5732:63;;5688:117;5844:2;5870:53;5915:7;5906:6;5895:9;5891:22;5870:53;:::i;:::-;5860:63;;5815:118;5972:2;5998:53;6043:7;6034:6;6023:9;6019:22;5998:53;:::i;:::-;5988:63;;5943:118;5449:619;;;;;:::o;6074:943::-;6169:6;6177;6185;6193;6242:3;6230:9;6221:7;6217:23;6213:33;6210:120;;;6249:79;;:::i;:::-;6210:120;6369:1;6394:53;6439:7;6430:6;6419:9;6415:22;6394:53;:::i;:::-;6384:63;;6340:117;6496:2;6522:53;6567:7;6558:6;6547:9;6543:22;6522:53;:::i;:::-;6512:63;;6467:118;6624:2;6650:53;6695:7;6686:6;6675:9;6671:22;6650:53;:::i;:::-;6640:63;;6595:118;6780:2;6769:9;6765:18;6752:32;6811:18;6803:6;6800:30;6797:117;;;6833:79;;:::i;:::-;6797:117;6938:62;6992:7;6983:6;6972:9;6968:22;6938:62;:::i;:::-;6928:72;;6723:287;6074:943;;;;;;;:::o;7023:468::-;7088:6;7096;7145:2;7133:9;7124:7;7120:23;7116:32;7113:119;;;7151:79;;:::i;:::-;7113:119;7271:1;7296:53;7341:7;7332:6;7321:9;7317:22;7296:53;:::i;:::-;7286:63;;7242:117;7398:2;7424:50;7466:7;7457:6;7446:9;7442:22;7424:50;:::i;:::-;7414:60;;7369:115;7023:468;;;;;:::o;7497:474::-;7565:6;7573;7622:2;7610:9;7601:7;7597:23;7593:32;7590:119;;;7628:79;;:::i;:::-;7590:119;7748:1;7773:53;7818:7;7809:6;7798:9;7794:22;7773:53;:::i;:::-;7763:63;;7719:117;7875:2;7901:53;7946:7;7937:6;7926:9;7922:22;7901:53;:::i;:::-;7891:63;;7846:118;7497:474;;;;;:::o;7977:894::-;8095:6;8103;8152:2;8140:9;8131:7;8127:23;8123:32;8120:119;;;8158:79;;:::i;:::-;8120:119;8306:1;8295:9;8291:17;8278:31;8336:18;8328:6;8325:30;8322:117;;;8358:79;;:::i;:::-;8322:117;8463:78;8533:7;8524:6;8513:9;8509:22;8463:78;:::i;:::-;8453:88;;8249:302;8618:2;8607:9;8603:18;8590:32;8649:18;8641:6;8638:30;8635:117;;;8671:79;;:::i;:::-;8635:117;8776:78;8846:7;8837:6;8826:9;8822:22;8776:78;:::i;:::-;8766:88;;8561:303;7977:894;;;;;:::o;8877:327::-;8935:6;8984:2;8972:9;8963:7;8959:23;8955:32;8952:119;;;8990:79;;:::i;:::-;8952:119;9110:1;9135:52;9179:7;9170:6;9159:9;9155:22;9135:52;:::i;:::-;9125:62;;9081:116;8877:327;;;;:::o;9210:349::-;9279:6;9328:2;9316:9;9307:7;9303:23;9299:32;9296:119;;;9334:79;;:::i;:::-;9296:119;9454:1;9479:63;9534:7;9525:6;9514:9;9510:22;9479:63;:::i;:::-;9469:73;;9425:127;9210:349;;;;:::o;9565:529::-;9636:6;9644;9693:2;9681:9;9672:7;9668:23;9664:32;9661:119;;;9699:79;;:::i;:::-;9661:119;9847:1;9836:9;9832:17;9819:31;9877:18;9869:6;9866:30;9863:117;;;9899:79;;:::i;:::-;9863:117;10012:65;10069:7;10060:6;10049:9;10045:22;10012:65;:::i;:::-;9994:83;;;;9790:297;9565:529;;;;;:::o;10100:329::-;10159:6;10208:2;10196:9;10187:7;10183:23;10179:32;10176:119;;;10214:79;;:::i;:::-;10176:119;10334:1;10359:53;10404:7;10395:6;10384:9;10380:22;10359:53;:::i;:::-;10349:63;;10305:117;10100:329;;;;:::o;10435:474::-;10503:6;10511;10560:2;10548:9;10539:7;10535:23;10531:32;10528:119;;;10566:79;;:::i;:::-;10528:119;10686:1;10711:53;10756:7;10747:6;10736:9;10732:22;10711:53;:::i;:::-;10701:63;;10657:117;10813:2;10839:53;10884:7;10875:6;10864:9;10860:22;10839:53;:::i;:::-;10829:63;;10784:118;10435:474;;;;;:::o;10915:470::-;10981:6;10989;11038:2;11026:9;11017:7;11013:23;11009:32;11006:119;;;11044:79;;:::i;:::-;11006:119;11164:1;11189:52;11233:7;11224:6;11213:9;11209:22;11189:52;:::i;:::-;11179:62;;11135:116;11290:2;11316:52;11360:7;11351:6;11340:9;11336:22;11316:52;:::i;:::-;11306:62;;11261:117;10915:470;;;;;:::o;11391:108::-;11468:24;11486:5;11468:24;:::i;:::-;11463:3;11456:37;11391:108;;:::o;11505:118::-;11592:24;11610:5;11592:24;:::i;:::-;11587:3;11580:37;11505:118;;:::o;11629:109::-;11710:21;11725:5;11710:21;:::i;:::-;11705:3;11698:34;11629:109;;:::o;11744:360::-;11830:3;11858:38;11890:5;11858:38;:::i;:::-;11912:70;11975:6;11970:3;11912:70;:::i;:::-;11905:77;;11991:52;12036:6;12031:3;12024:4;12017:5;12013:16;11991:52;:::i;:::-;12068:29;12090:6;12068:29;:::i;:::-;12063:3;12059:39;12052:46;;11834:270;11744:360;;;;:::o;12110:364::-;12198:3;12226:39;12259:5;12226:39;:::i;:::-;12281:71;12345:6;12340:3;12281:71;:::i;:::-;12274:78;;12361:52;12406:6;12401:3;12394:4;12387:5;12383:16;12361:52;:::i;:::-;12438:29;12460:6;12438:29;:::i;:::-;12433:3;12429:39;12422:46;;12202:272;12110:364;;;;:::o;12480:377::-;12586:3;12614:39;12647:5;12614:39;:::i;:::-;12669:89;12751:6;12746:3;12669:89;:::i;:::-;12662:96;;12767:52;12812:6;12807:3;12800:4;12793:5;12789:16;12767:52;:::i;:::-;12844:6;12839:3;12835:16;12828:23;;12590:267;12480:377;;;;:::o;12863:366::-;13005:3;13026:67;13090:2;13085:3;13026:67;:::i;:::-;13019:74;;13102:93;13191:3;13102:93;:::i;:::-;13220:2;13215:3;13211:12;13204:19;;12863:366;;;:::o;13235:::-;13377:3;13398:67;13462:2;13457:3;13398:67;:::i;:::-;13391:74;;13474:93;13563:3;13474:93;:::i;:::-;13592:2;13587:3;13583:12;13576:19;;13235:366;;;:::o;13607:::-;13749:3;13770:67;13834:2;13829:3;13770:67;:::i;:::-;13763:74;;13846:93;13935:3;13846:93;:::i;:::-;13964:2;13959:3;13955:12;13948:19;;13607:366;;;:::o;13979:::-;14121:3;14142:67;14206:2;14201:3;14142:67;:::i;:::-;14135:74;;14218:93;14307:3;14218:93;:::i;:::-;14336:2;14331:3;14327:12;14320:19;;13979:366;;;:::o;14351:::-;14493:3;14514:67;14578:2;14573:3;14514:67;:::i;:::-;14507:74;;14590:93;14679:3;14590:93;:::i;:::-;14708:2;14703:3;14699:12;14692:19;;14351:366;;;:::o;14723:::-;14865:3;14886:67;14950:2;14945:3;14886:67;:::i;:::-;14879:74;;14962:93;15051:3;14962:93;:::i;:::-;15080:2;15075:3;15071:12;15064:19;;14723:366;;;:::o;15095:::-;15237:3;15258:67;15322:2;15317:3;15258:67;:::i;:::-;15251:74;;15334:93;15423:3;15334:93;:::i;:::-;15452:2;15447:3;15443:12;15436:19;;15095:366;;;:::o;15467:::-;15609:3;15630:67;15694:2;15689:3;15630:67;:::i;:::-;15623:74;;15706:93;15795:3;15706:93;:::i;:::-;15824:2;15819:3;15815:12;15808:19;;15467:366;;;:::o;15839:::-;15981:3;16002:67;16066:2;16061:3;16002:67;:::i;:::-;15995:74;;16078:93;16167:3;16078:93;:::i;:::-;16196:2;16191:3;16187:12;16180:19;;15839:366;;;:::o;16211:::-;16353:3;16374:67;16438:2;16433:3;16374:67;:::i;:::-;16367:74;;16450:93;16539:3;16450:93;:::i;:::-;16568:2;16563:3;16559:12;16552:19;;16211:366;;;:::o;16583:::-;16725:3;16746:67;16810:2;16805:3;16746:67;:::i;:::-;16739:74;;16822:93;16911:3;16822:93;:::i;:::-;16940:2;16935:3;16931:12;16924:19;;16583:366;;;:::o;16955:::-;17097:3;17118:67;17182:2;17177:3;17118:67;:::i;:::-;17111:74;;17194:93;17283:3;17194:93;:::i;:::-;17312:2;17307:3;17303:12;17296:19;;16955:366;;;:::o;17327:::-;17469:3;17490:67;17554:2;17549:3;17490:67;:::i;:::-;17483:74;;17566:93;17655:3;17566:93;:::i;:::-;17684:2;17679:3;17675:12;17668:19;;17327:366;;;:::o;17699:::-;17841:3;17862:67;17926:2;17921:3;17862:67;:::i;:::-;17855:74;;17938:93;18027:3;17938:93;:::i;:::-;18056:2;18051:3;18047:12;18040:19;;17699:366;;;:::o;18071:::-;18213:3;18234:67;18298:2;18293:3;18234:67;:::i;:::-;18227:74;;18310:93;18399:3;18310:93;:::i;:::-;18428:2;18423:3;18419:12;18412:19;;18071:366;;;:::o;18443:::-;18585:3;18606:67;18670:2;18665:3;18606:67;:::i;:::-;18599:74;;18682:93;18771:3;18682:93;:::i;:::-;18800:2;18795:3;18791:12;18784:19;;18443:366;;;:::o;18815:::-;18957:3;18978:67;19042:2;19037:3;18978:67;:::i;:::-;18971:74;;19054:93;19143:3;19054:93;:::i;:::-;19172:2;19167:3;19163:12;19156:19;;18815:366;;;:::o;19187:::-;19329:3;19350:67;19414:2;19409:3;19350:67;:::i;:::-;19343:74;;19426:93;19515:3;19426:93;:::i;:::-;19544:2;19539:3;19535:12;19528:19;;19187:366;;;:::o;19559:::-;19701:3;19722:67;19786:2;19781:3;19722:67;:::i;:::-;19715:74;;19798:93;19887:3;19798:93;:::i;:::-;19916:2;19911:3;19907:12;19900:19;;19559:366;;;:::o;19931:::-;20073:3;20094:67;20158:2;20153:3;20094:67;:::i;:::-;20087:74;;20170:93;20259:3;20170:93;:::i;:::-;20288:2;20283:3;20279:12;20272:19;;19931:366;;;:::o;20303:::-;20445:3;20466:67;20530:2;20525:3;20466:67;:::i;:::-;20459:74;;20542:93;20631:3;20542:93;:::i;:::-;20660:2;20655:3;20651:12;20644:19;;20303:366;;;:::o;20675:::-;20817:3;20838:67;20902:2;20897:3;20838:67;:::i;:::-;20831:74;;20914:93;21003:3;20914:93;:::i;:::-;21032:2;21027:3;21023:12;21016:19;;20675:366;;;:::o;21047:398::-;21206:3;21227:83;21308:1;21303:3;21227:83;:::i;:::-;21220:90;;21319:93;21408:3;21319:93;:::i;:::-;21437:1;21432:3;21428:11;21421:18;;21047:398;;;:::o;21451:366::-;21593:3;21614:67;21678:2;21673:3;21614:67;:::i;:::-;21607:74;;21690:93;21779:3;21690:93;:::i;:::-;21808:2;21803:3;21799:12;21792:19;;21451:366;;;:::o;21823:::-;21965:3;21986:67;22050:2;22045:3;21986:67;:::i;:::-;21979:74;;22062:93;22151:3;22062:93;:::i;:::-;22180:2;22175:3;22171:12;22164:19;;21823:366;;;:::o;22195:::-;22337:3;22358:67;22422:2;22417:3;22358:67;:::i;:::-;22351:74;;22434:93;22523:3;22434:93;:::i;:::-;22552:2;22547:3;22543:12;22536:19;;22195:366;;;:::o;22567:::-;22709:3;22730:67;22794:2;22789:3;22730:67;:::i;:::-;22723:74;;22806:93;22895:3;22806:93;:::i;:::-;22924:2;22919:3;22915:12;22908:19;;22567:366;;;:::o;22939:::-;23081:3;23102:67;23166:2;23161:3;23102:67;:::i;:::-;23095:74;;23178:93;23267:3;23178:93;:::i;:::-;23296:2;23291:3;23287:12;23280:19;;22939:366;;;:::o;23311:::-;23453:3;23474:67;23538:2;23533:3;23474:67;:::i;:::-;23467:74;;23550:93;23639:3;23550:93;:::i;:::-;23668:2;23663:3;23659:12;23652:19;;23311:366;;;:::o;23683:::-;23825:3;23846:67;23910:2;23905:3;23846:67;:::i;:::-;23839:74;;23922:93;24011:3;23922:93;:::i;:::-;24040:2;24035:3;24031:12;24024:19;;23683:366;;;:::o;24055:::-;24197:3;24218:67;24282:2;24277:3;24218:67;:::i;:::-;24211:74;;24294:93;24383:3;24294:93;:::i;:::-;24412:2;24407:3;24403:12;24396:19;;24055:366;;;:::o;24427:::-;24569:3;24590:67;24654:2;24649:3;24590:67;:::i;:::-;24583:74;;24666:93;24755:3;24666:93;:::i;:::-;24784:2;24779:3;24775:12;24768:19;;24427:366;;;:::o;24799:::-;24941:3;24962:67;25026:2;25021:3;24962:67;:::i;:::-;24955:74;;25038:93;25127:3;25038:93;:::i;:::-;25156:2;25151:3;25147:12;25140:19;;24799:366;;;:::o;25171:::-;25313:3;25334:67;25398:2;25393:3;25334:67;:::i;:::-;25327:74;;25410:93;25499:3;25410:93;:::i;:::-;25528:2;25523:3;25519:12;25512:19;;25171:366;;;:::o;25543:::-;25685:3;25706:67;25770:2;25765:3;25706:67;:::i;:::-;25699:74;;25782:93;25871:3;25782:93;:::i;:::-;25900:2;25895:3;25891:12;25884:19;;25543:366;;;:::o;25915:::-;26057:3;26078:67;26142:2;26137:3;26078:67;:::i;:::-;26071:74;;26154:93;26243:3;26154:93;:::i;:::-;26272:2;26267:3;26263:12;26256:19;;25915:366;;;:::o;26287:::-;26429:3;26450:67;26514:2;26509:3;26450:67;:::i;:::-;26443:74;;26526:93;26615:3;26526:93;:::i;:::-;26644:2;26639:3;26635:12;26628:19;;26287:366;;;:::o;26729:527::-;26888:4;26883:3;26879:14;26975:4;26968:5;26964:16;26958:23;26994:63;27051:4;27046:3;27042:14;27028:12;26994:63;:::i;:::-;26903:164;27159:4;27152:5;27148:16;27142:23;27178:61;27233:4;27228:3;27224:14;27210:12;27178:61;:::i;:::-;27077:172;26857:399;26729:527;;:::o;27262:118::-;27349:24;27367:5;27349:24;:::i;:::-;27344:3;27337:37;27262:118;;:::o;27386:115::-;27471:23;27488:5;27471:23;:::i;:::-;27466:3;27459:36;27386:115;;:::o;27507:105::-;27582:23;27599:5;27582:23;:::i;:::-;27577:3;27570:36;27507:105;;:::o;27618:115::-;27703:23;27720:5;27703:23;:::i;:::-;27698:3;27691:36;27618:115;;:::o;27739:435::-;27919:3;27941:95;28032:3;28023:6;27941:95;:::i;:::-;27934:102;;28053:95;28144:3;28135:6;28053:95;:::i;:::-;28046:102;;28165:3;28158:10;;27739:435;;;;;:::o;28180:379::-;28364:3;28386:147;28529:3;28386:147;:::i;:::-;28379:154;;28550:3;28543:10;;28180:379;;;:::o;28565:222::-;28658:4;28696:2;28685:9;28681:18;28673:26;;28709:71;28777:1;28766:9;28762:17;28753:6;28709:71;:::i;:::-;28565:222;;;;:::o;28793:640::-;28988:4;29026:3;29015:9;29011:19;29003:27;;29040:71;29108:1;29097:9;29093:17;29084:6;29040:71;:::i;:::-;29121:72;29189:2;29178:9;29174:18;29165:6;29121:72;:::i;:::-;29203;29271:2;29260:9;29256:18;29247:6;29203:72;:::i;:::-;29322:9;29316:4;29312:20;29307:2;29296:9;29292:18;29285:48;29350:76;29421:4;29412:6;29350:76;:::i;:::-;29342:84;;28793:640;;;;;;;:::o;29439:210::-;29526:4;29564:2;29553:9;29549:18;29541:26;;29577:65;29639:1;29628:9;29624:17;29615:6;29577:65;:::i;:::-;29439:210;;;;:::o;29655:313::-;29768:4;29806:2;29795:9;29791:18;29783:26;;29855:9;29849:4;29845:20;29841:1;29830:9;29826:17;29819:47;29883:78;29956:4;29947:6;29883:78;:::i;:::-;29875:86;;29655:313;;;;:::o;29974:419::-;30140:4;30178:2;30167:9;30163:18;30155:26;;30227:9;30221:4;30217:20;30213:1;30202:9;30198:17;30191:47;30255:131;30381:4;30255:131;:::i;:::-;30247:139;;29974:419;;;:::o;30399:::-;30565:4;30603:2;30592:9;30588:18;30580:26;;30652:9;30646:4;30642:20;30638:1;30627:9;30623:17;30616:47;30680:131;30806:4;30680:131;:::i;:::-;30672:139;;30399:419;;;:::o;30824:::-;30990:4;31028:2;31017:9;31013:18;31005:26;;31077:9;31071:4;31067:20;31063:1;31052:9;31048:17;31041:47;31105:131;31231:4;31105:131;:::i;:::-;31097:139;;30824:419;;;:::o;31249:::-;31415:4;31453:2;31442:9;31438:18;31430:26;;31502:9;31496:4;31492:20;31488:1;31477:9;31473:17;31466:47;31530:131;31656:4;31530:131;:::i;:::-;31522:139;;31249:419;;;:::o;31674:::-;31840:4;31878:2;31867:9;31863:18;31855:26;;31927:9;31921:4;31917:20;31913:1;31902:9;31898:17;31891:47;31955:131;32081:4;31955:131;:::i;:::-;31947:139;;31674:419;;;:::o;32099:::-;32265:4;32303:2;32292:9;32288:18;32280:26;;32352:9;32346:4;32342:20;32338:1;32327:9;32323:17;32316:47;32380:131;32506:4;32380:131;:::i;:::-;32372:139;;32099:419;;;:::o;32524:::-;32690:4;32728:2;32717:9;32713:18;32705:26;;32777:9;32771:4;32767:20;32763:1;32752:9;32748:17;32741:47;32805:131;32931:4;32805:131;:::i;:::-;32797:139;;32524:419;;;:::o;32949:::-;33115:4;33153:2;33142:9;33138:18;33130:26;;33202:9;33196:4;33192:20;33188:1;33177:9;33173:17;33166:47;33230:131;33356:4;33230:131;:::i;:::-;33222:139;;32949:419;;;:::o;33374:::-;33540:4;33578:2;33567:9;33563:18;33555:26;;33627:9;33621:4;33617:20;33613:1;33602:9;33598:17;33591:47;33655:131;33781:4;33655:131;:::i;:::-;33647:139;;33374:419;;;:::o;33799:::-;33965:4;34003:2;33992:9;33988:18;33980:26;;34052:9;34046:4;34042:20;34038:1;34027:9;34023:17;34016:47;34080:131;34206:4;34080:131;:::i;:::-;34072:139;;33799:419;;;:::o;34224:::-;34390:4;34428:2;34417:9;34413:18;34405:26;;34477:9;34471:4;34467:20;34463:1;34452:9;34448:17;34441:47;34505:131;34631:4;34505:131;:::i;:::-;34497:139;;34224:419;;;:::o;34649:::-;34815:4;34853:2;34842:9;34838:18;34830:26;;34902:9;34896:4;34892:20;34888:1;34877:9;34873:17;34866:47;34930:131;35056:4;34930:131;:::i;:::-;34922:139;;34649:419;;;:::o;35074:::-;35240:4;35278:2;35267:9;35263:18;35255:26;;35327:9;35321:4;35317:20;35313:1;35302:9;35298:17;35291:47;35355:131;35481:4;35355:131;:::i;:::-;35347:139;;35074:419;;;:::o;35499:::-;35665:4;35703:2;35692:9;35688:18;35680:26;;35752:9;35746:4;35742:20;35738:1;35727:9;35723:17;35716:47;35780:131;35906:4;35780:131;:::i;:::-;35772:139;;35499:419;;;:::o;35924:::-;36090:4;36128:2;36117:9;36113:18;36105:26;;36177:9;36171:4;36167:20;36163:1;36152:9;36148:17;36141:47;36205:131;36331:4;36205:131;:::i;:::-;36197:139;;35924:419;;;:::o;36349:::-;36515:4;36553:2;36542:9;36538:18;36530:26;;36602:9;36596:4;36592:20;36588:1;36577:9;36573:17;36566:47;36630:131;36756:4;36630:131;:::i;:::-;36622:139;;36349:419;;;:::o;36774:::-;36940:4;36978:2;36967:9;36963:18;36955:26;;37027:9;37021:4;37017:20;37013:1;37002:9;36998:17;36991:47;37055:131;37181:4;37055:131;:::i;:::-;37047:139;;36774:419;;;:::o;37199:::-;37365:4;37403:2;37392:9;37388:18;37380:26;;37452:9;37446:4;37442:20;37438:1;37427:9;37423:17;37416:47;37480:131;37606:4;37480:131;:::i;:::-;37472:139;;37199:419;;;:::o;37624:::-;37790:4;37828:2;37817:9;37813:18;37805:26;;37877:9;37871:4;37867:20;37863:1;37852:9;37848:17;37841:47;37905:131;38031:4;37905:131;:::i;:::-;37897:139;;37624:419;;;:::o;38049:::-;38215:4;38253:2;38242:9;38238:18;38230:26;;38302:9;38296:4;38292:20;38288:1;38277:9;38273:17;38266:47;38330:131;38456:4;38330:131;:::i;:::-;38322:139;;38049:419;;;:::o;38474:::-;38640:4;38678:2;38667:9;38663:18;38655:26;;38727:9;38721:4;38717:20;38713:1;38702:9;38698:17;38691:47;38755:131;38881:4;38755:131;:::i;:::-;38747:139;;38474:419;;;:::o;38899:::-;39065:4;39103:2;39092:9;39088:18;39080:26;;39152:9;39146:4;39142:20;39138:1;39127:9;39123:17;39116:47;39180:131;39306:4;39180:131;:::i;:::-;39172:139;;38899:419;;;:::o;39324:::-;39490:4;39528:2;39517:9;39513:18;39505:26;;39577:9;39571:4;39567:20;39563:1;39552:9;39548:17;39541:47;39605:131;39731:4;39605:131;:::i;:::-;39597:139;;39324:419;;;:::o;39749:::-;39915:4;39953:2;39942:9;39938:18;39930:26;;40002:9;39996:4;39992:20;39988:1;39977:9;39973:17;39966:47;40030:131;40156:4;40030:131;:::i;:::-;40022:139;;39749:419;;;:::o;40174:::-;40340:4;40378:2;40367:9;40363:18;40355:26;;40427:9;40421:4;40417:20;40413:1;40402:9;40398:17;40391:47;40455:131;40581:4;40455:131;:::i;:::-;40447:139;;40174:419;;;:::o;40599:::-;40765:4;40803:2;40792:9;40788:18;40780:26;;40852:9;40846:4;40842:20;40838:1;40827:9;40823:17;40816:47;40880:131;41006:4;40880:131;:::i;:::-;40872:139;;40599:419;;;:::o;41024:::-;41190:4;41228:2;41217:9;41213:18;41205:26;;41277:9;41271:4;41267:20;41263:1;41252:9;41248:17;41241:47;41305:131;41431:4;41305:131;:::i;:::-;41297:139;;41024:419;;;:::o;41449:::-;41615:4;41653:2;41642:9;41638:18;41630:26;;41702:9;41696:4;41692:20;41688:1;41677:9;41673:17;41666:47;41730:131;41856:4;41730:131;:::i;:::-;41722:139;;41449:419;;;:::o;41874:::-;42040:4;42078:2;42067:9;42063:18;42055:26;;42127:9;42121:4;42117:20;42113:1;42102:9;42098:17;42091:47;42155:131;42281:4;42155:131;:::i;:::-;42147:139;;41874:419;;;:::o;42299:::-;42465:4;42503:2;42492:9;42488:18;42480:26;;42552:9;42546:4;42542:20;42538:1;42527:9;42523:17;42516:47;42580:131;42706:4;42580:131;:::i;:::-;42572:139;;42299:419;;;:::o;42724:::-;42890:4;42928:2;42917:9;42913:18;42905:26;;42977:9;42971:4;42967:20;42963:1;42952:9;42948:17;42941:47;43005:131;43131:4;43005:131;:::i;:::-;42997:139;;42724:419;;;:::o;43149:::-;43315:4;43353:2;43342:9;43338:18;43330:26;;43402:9;43396:4;43392:20;43388:1;43377:9;43373:17;43366:47;43430:131;43556:4;43430:131;:::i;:::-;43422:139;;43149:419;;;:::o;43574:::-;43740:4;43778:2;43767:9;43763:18;43755:26;;43827:9;43821:4;43817:20;43813:1;43802:9;43798:17;43791:47;43855:131;43981:4;43855:131;:::i;:::-;43847:139;;43574:419;;;:::o;43999:::-;44165:4;44203:2;44192:9;44188:18;44180:26;;44252:9;44246:4;44242:20;44238:1;44227:9;44223:17;44216:47;44280:131;44406:4;44280:131;:::i;:::-;44272:139;;43999:419;;;:::o;44424:::-;44590:4;44628:2;44617:9;44613:18;44605:26;;44677:9;44671:4;44667:20;44663:1;44652:9;44648:17;44641:47;44705:131;44831:4;44705:131;:::i;:::-;44697:139;;44424:419;;;:::o;44849:::-;45015:4;45053:2;45042:9;45038:18;45030:26;;45102:9;45096:4;45092:20;45088:1;45077:9;45073:17;45066:47;45130:131;45256:4;45130:131;:::i;:::-;45122:139;;44849:419;;;:::o;45274:346::-;45429:4;45467:2;45456:9;45452:18;45444:26;;45480:133;45610:1;45599:9;45595:17;45586:6;45480:133;:::i;:::-;45274:346;;;;:::o;45626:222::-;45719:4;45757:2;45746:9;45742:18;45734:26;;45770:71;45838:1;45827:9;45823:17;45814:6;45770:71;:::i;:::-;45626:222;;;;:::o;45854:537::-;46023:4;46061:3;46050:9;46046:19;46038:27;;46075:69;46141:1;46130:9;46126:17;46117:6;46075:69;:::i;:::-;46154:70;46220:2;46209:9;46205:18;46196:6;46154:70;:::i;:::-;46234;46300:2;46289:9;46285:18;46276:6;46234:70;:::i;:::-;46314;46380:2;46369:9;46365:18;46356:6;46314:70;:::i;:::-;45854:537;;;;;;;:::o;46397:129::-;46431:6;46458:20;;:::i;:::-;46448:30;;46487:33;46515:4;46507:6;46487:33;:::i;:::-;46397:129;;;:::o;46532:75::-;46565:6;46598:2;46592:9;46582:19;;46532:75;:::o;46613:311::-;46690:4;46780:18;46772:6;46769:30;46766:56;;;46802:18;;:::i;:::-;46766:56;46852:4;46844:6;46840:17;46832:25;;46912:4;46906;46902:15;46894:23;;46613:311;;;:::o;46930:::-;47007:4;47097:18;47089:6;47086:30;47083:56;;;47119:18;;:::i;:::-;47083:56;47169:4;47161:6;47157:17;47149:25;;47229:4;47223;47219:15;47211:23;;46930:311;;;:::o;47247:307::-;47308:4;47398:18;47390:6;47387:30;47384:56;;;47420:18;;:::i;:::-;47384:56;47458:29;47480:6;47458:29;:::i;:::-;47450:37;;47542:4;47536;47532:15;47524:23;;47247:307;;;:::o;47560:98::-;47611:6;47645:5;47639:12;47629:22;;47560:98;;;:::o;47664:99::-;47716:6;47750:5;47744:12;47734:22;;47664:99;;;:::o;47769:168::-;47852:11;47886:6;47881:3;47874:19;47926:4;47921:3;47917:14;47902:29;;47769:168;;;;:::o;47943:147::-;48044:11;48081:3;48066:18;;47943:147;;;;:::o;48096:169::-;48180:11;48214:6;48209:3;48202:19;48254:4;48249:3;48245:14;48230:29;;48096:169;;;;:::o;48271:148::-;48373:11;48410:3;48395:18;;48271:148;;;;:::o;48425:273::-;48465:3;48484:20;48502:1;48484:20;:::i;:::-;48479:25;;48518:20;48536:1;48518:20;:::i;:::-;48513:25;;48640:1;48604:34;48600:42;48597:1;48594:49;48591:75;;;48646:18;;:::i;:::-;48591:75;48690:1;48687;48683:9;48676:16;;48425:273;;;;:::o;48704:305::-;48744:3;48763:20;48781:1;48763:20;:::i;:::-;48758:25;;48797:20;48815:1;48797:20;:::i;:::-;48792:25;;48951:1;48883:66;48879:74;48876:1;48873:81;48870:107;;;48957:18;;:::i;:::-;48870:107;49001:1;48998;48994:9;48987:16;;48704:305;;;;:::o;49015:185::-;49055:1;49072:20;49090:1;49072:20;:::i;:::-;49067:25;;49106:20;49124:1;49106:20;:::i;:::-;49101:25;;49145:1;49135:35;;49150:18;;:::i;:::-;49135:35;49192:1;49189;49185:9;49180:14;;49015:185;;;;:::o;49206:348::-;49246:7;49269:20;49287:1;49269:20;:::i;:::-;49264:25;;49303:20;49321:1;49303:20;:::i;:::-;49298:25;;49491:1;49423:66;49419:74;49416:1;49413:81;49408:1;49401:9;49394:17;49390:105;49387:131;;;49498:18;;:::i;:::-;49387:131;49546:1;49543;49539:9;49528:20;;49206:348;;;;:::o;49560:191::-;49600:4;49620:20;49638:1;49620:20;:::i;:::-;49615:25;;49654:20;49672:1;49654:20;:::i;:::-;49649:25;;49693:1;49690;49687:8;49684:34;;;49698:18;;:::i;:::-;49684:34;49743:1;49740;49736:9;49728:17;;49560:191;;;;:::o;49757:::-;49797:4;49817:20;49835:1;49817:20;:::i;:::-;49812:25;;49851:20;49869:1;49851:20;:::i;:::-;49846:25;;49890:1;49887;49884:8;49881:34;;;49895:18;;:::i;:::-;49881:34;49940:1;49937;49933:9;49925:17;;49757:191;;;;:::o;49954:96::-;49991:7;50020:24;50038:5;50020:24;:::i;:::-;50009:35;;49954:96;;;:::o;50056:90::-;50090:7;50133:5;50126:13;50119:21;50108:32;;50056:90;;;:::o;50152:149::-;50188:7;50228:66;50221:5;50217:78;50206:89;;50152:149;;;:::o;50307:118::-;50344:7;50384:34;50377:5;50373:46;50362:57;;50307:118;;;:::o;50431:126::-;50468:7;50508:42;50501:5;50497:54;50486:65;;50431:126;;;:::o;50563:77::-;50600:7;50629:5;50618:16;;50563:77;;;:::o;50646:93::-;50682:7;50722:10;50715:5;50711:22;50700:33;;50646:93;;;:::o;50745:101::-;50781:7;50821:18;50814:5;50810:30;50799:41;;50745:101;;;:::o;50852:154::-;50936:6;50931:3;50926;50913:30;50998:1;50989:6;50984:3;50980:16;50973:27;50852:154;;;:::o;51012:307::-;51080:1;51090:113;51104:6;51101:1;51098:13;51090:113;;;51189:1;51184:3;51180:11;51174:18;51170:1;51165:3;51161:11;51154:39;51126:2;51123:1;51119:10;51114:15;;51090:113;;;51221:6;51218:1;51215:13;51212:101;;;51301:1;51292:6;51287:3;51283:16;51276:27;51212:101;51061:258;51012:307;;;:::o;51325:171::-;51364:3;51387:24;51405:5;51387:24;:::i;:::-;51378:33;;51433:4;51426:5;51423:15;51420:41;;;51441:18;;:::i;:::-;51420:41;51488:1;51481:5;51477:13;51470:20;;51325:171;;;:::o;51502:320::-;51546:6;51583:1;51577:4;51573:12;51563:22;;51630:1;51624:4;51620:12;51651:18;51641:81;;51707:4;51699:6;51695:17;51685:27;;51641:81;51769:2;51761:6;51758:14;51738:18;51735:38;51732:84;;;51788:18;;:::i;:::-;51732:84;51553:269;51502:320;;;:::o;51828:281::-;51911:27;51933:4;51911:27;:::i;:::-;51903:6;51899:40;52041:6;52029:10;52026:22;52005:18;51993:10;51990:34;51987:62;51984:88;;;52052:18;;:::i;:::-;51984:88;52092:10;52088:2;52081:22;51871:238;51828:281;;:::o;52115:233::-;52154:3;52177:24;52195:5;52177:24;:::i;:::-;52168:33;;52223:66;52216:5;52213:77;52210:103;;;52293:18;;:::i;:::-;52210:103;52340:1;52333:5;52329:13;52322:20;;52115:233;;;:::o;52354:176::-;52386:1;52403:20;52421:1;52403:20;:::i;:::-;52398:25;;52437:20;52455:1;52437:20;:::i;:::-;52432:25;;52476:1;52466:35;;52481:18;;:::i;:::-;52466:35;52522:1;52519;52515:9;52510:14;;52354:176;;;;:::o;52536:180::-;52584:77;52581:1;52574:88;52681:4;52678:1;52671:15;52705:4;52702:1;52695:15;52722:180;52770:77;52767:1;52760:88;52867:4;52864:1;52857:15;52891:4;52888:1;52881:15;52908:180;52956:77;52953:1;52946:88;53053:4;53050:1;53043:15;53077:4;53074:1;53067:15;53094:180;53142:77;53139:1;53132:88;53239:4;53236:1;53229:15;53263:4;53260:1;53253:15;53280:180;53328:77;53325:1;53318:88;53425:4;53422:1;53415:15;53449:4;53446:1;53439:15;53466:117;53575:1;53572;53565:12;53589:117;53698:1;53695;53688:12;53712:117;53821:1;53818;53811:12;53835:117;53944:1;53941;53934:12;53958:117;54067:1;54064;54057:12;54081:117;54190:1;54187;54180:12;54204:102;54245:6;54296:2;54292:7;54287:2;54280:5;54276:14;54272:28;54262:38;;54204:102;;;:::o;54312:221::-;54452:34;54448:1;54440:6;54436:14;54429:58;54521:4;54516:2;54508:6;54504:15;54497:29;54312:221;:::o;54539:225::-;54679:34;54675:1;54667:6;54663:14;54656:58;54748:8;54743:2;54735:6;54731:15;54724:33;54539:225;:::o;54770:229::-;54910:34;54906:1;54898:6;54894:14;54887:58;54979:12;54974:2;54966:6;54962:15;54955:37;54770:229;:::o;55005:222::-;55145:34;55141:1;55133:6;55129:14;55122:58;55214:5;55209:2;55201:6;55197:15;55190:30;55005:222;:::o;55233:224::-;55373:34;55369:1;55361:6;55357:14;55350:58;55442:7;55437:2;55429:6;55425:15;55418:32;55233:224;:::o;55463:179::-;55603:31;55599:1;55591:6;55587:14;55580:55;55463:179;:::o;55648:174::-;55788:26;55784:1;55776:6;55772:14;55765:50;55648:174;:::o;55828:236::-;55968:34;55964:1;55956:6;55952:14;55945:58;56037:19;56032:2;56024:6;56020:15;56013:44;55828:236;:::o;56070:180::-;56210:32;56206:1;56198:6;56194:14;56187:56;56070:180;:::o;56256:244::-;56396:34;56392:1;56384:6;56380:14;56373:58;56465:27;56460:2;56452:6;56448:15;56441:52;56256:244;:::o;56506:174::-;56646:26;56642:1;56634:6;56630:14;56623:50;56506:174;:::o;56686:232::-;56826:34;56822:1;56814:6;56810:14;56803:58;56895:15;56890:2;56882:6;56878:15;56871:40;56686:232;:::o;56924:230::-;57064:34;57060:1;57052:6;57048:14;57041:58;57133:13;57128:2;57120:6;57116:15;57109:38;56924:230;:::o;57160:168::-;57300:20;57296:1;57288:6;57284:14;57277:44;57160:168;:::o;57334:181::-;57474:33;57470:1;57462:6;57458:14;57451:57;57334:181;:::o;57521:225::-;57661:34;57657:1;57649:6;57645:14;57638:58;57730:8;57725:2;57717:6;57713:15;57706:33;57521:225;:::o;57752:182::-;57892:34;57888:1;57880:6;57876:14;57869:58;57752:182;:::o;57940:234::-;58080:34;58076:1;58068:6;58064:14;58057:58;58149:17;58144:2;58136:6;58132:15;58125:42;57940:234;:::o;58180:176::-;58320:28;58316:1;58308:6;58304:14;58297:52;58180:176;:::o;58362:237::-;58502:34;58498:1;58490:6;58486:14;58479:58;58571:20;58566:2;58558:6;58554:15;58547:45;58362:237;:::o;58605:182::-;58745:34;58741:1;58733:6;58729:14;58722:58;58605:182;:::o;58793:221::-;58933:34;58929:1;58921:6;58917:14;58910:58;59002:4;58997:2;58989:6;58985:15;58978:29;58793:221;:::o;59020:114::-;;:::o;59140:166::-;59280:18;59276:1;59268:6;59264:14;59257:42;59140:166;:::o;59312:238::-;59452:34;59448:1;59440:6;59436:14;59429:58;59521:21;59516:2;59508:6;59504:15;59497:46;59312:238;:::o;59556:172::-;59696:24;59692:1;59684:6;59680:14;59673:48;59556:172;:::o;59734:179::-;59874:31;59870:1;59862:6;59858:14;59851:55;59734:179;:::o;59919:220::-;60059:34;60055:1;60047:6;60043:14;60036:58;60128:3;60123:2;60115:6;60111:15;60104:28;59919:220;:::o;60145:172::-;60285:24;60281:1;60273:6;60269:14;60262:48;60145:172;:::o;60323:226::-;60463:34;60459:1;60451:6;60447:14;60440:58;60532:9;60527:2;60519:6;60515:15;60508:34;60323:226;:::o;60555:233::-;60695:34;60691:1;60683:6;60679:14;60672:58;60764:16;60759:2;60751:6;60747:15;60740:41;60555:233;:::o;60794:225::-;60934:34;60930:1;60922:6;60918:14;60911:58;61003:8;60998:2;60990:6;60986:15;60979:33;60794:225;:::o;61025:181::-;61165:33;61161:1;61153:6;61149:14;61142:57;61025:181;:::o;61212:234::-;61352:34;61348:1;61340:6;61336:14;61329:58;61421:17;61416:2;61408:6;61404:15;61397:42;61212:234;:::o;61452:232::-;61592:34;61588:1;61580:6;61576:14;61569:58;61661:15;61656:2;61648:6;61644:15;61637:40;61452:232;:::o;61690:221::-;61830:34;61826:1;61818:6;61814:14;61807:58;61899:4;61894:2;61886:6;61882:15;61875:29;61690:221;:::o;61917:227::-;62057:34;62053:1;62045:6;62041:14;62034:58;62126:10;62121:2;62113:6;62109:15;62102:35;61917:227;:::o;62150:122::-;62223:24;62241:5;62223:24;:::i;:::-;62216:5;62213:35;62203:63;;62262:1;62259;62252:12;62203:63;62150:122;:::o;62278:116::-;62348:21;62363:5;62348:21;:::i;:::-;62341:5;62338:32;62328:60;;62384:1;62381;62374:12;62328:60;62278:116;:::o;62400:120::-;62472:23;62489:5;62472:23;:::i;:::-;62465:5;62462:34;62452:62;;62510:1;62507;62500:12;62452:62;62400:120;:::o;62526:122::-;62599:24;62617:5;62599:24;:::i;:::-;62592:5;62589:35;62579:63;;62638:1;62635;62628:12;62579:63;62526:122;:::o;62654:120::-;62726:23;62743:5;62726:23;:::i;:::-;62719:5;62716:34;62706:62;;62764:1;62761;62754:12;62706:62;62654:120;:::o;62780:::-;62852:23;62869:5;62852:23;:::i;:::-;62845:5;62842:34;62832:62;;62890:1;62887;62880:12;62832:62;62780:120;:::o

Swarm Source

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