ETH Price: $2,282.99 (-3.17%)

Token

One-Dimensional (OD)
 

Overview

Max Total Supply

203 OD

Holders

161

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 OD
0xeb70c4996fe587aa8a94a6498a6593141562dae1
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:
PunksAirdrop

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU LGPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-22
*/

// SPDX-License-Identifier: GPL-3.0
// File: @openzeppelin/contracts/utils/Strings.sol


// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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


// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

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

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


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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

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


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;


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

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


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;


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

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

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

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


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;


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

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

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

// File: @openzeppelin/contracts/security/ReentrancyGuard.sol


// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

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

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

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

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

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

        _;

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

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


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

// File: contracts/ERC721A.sol
pragma solidity ^0.8.0;

/**
 * @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 = 1;

  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), "URI query for nonexistent token");
    return _baseURI();
  }


  /**
   * @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: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

pragma solidity >=0.7.0 <0.9.0;
contract PunksAirdrop is ERC721A, Ownable, ReentrancyGuard {
	using Strings for uint256;
	string baseURI;
	string baseExtension = ".json";
	uint256 public maxMintPerBatch = 202;
        uint256 maxSupply = 202;
        address[] recipients;
	constructor(
		string memory _name,
		string memory _symbol
    ) ERC721A(_name, _symbol, maxMintPerBatch, maxSupply) {}

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

	function mint() public nonReentrant onlyOwner {
		_safeMint(msg.sender, maxMintPerBatch);
	}

  function airdrop() public nonReentrant onlyOwner {
    for (uint256 i = 1; i < recipients.length; i++) {
      safeTransferFrom(owner(), recipients[i], i);
    }
  }

  function setRecipients(address[] memory _recipients) public onlyOwner {
    recipients = _recipients;
  } 

	function tokenURI()
		public
		view
		virtual
		returns (string memory)
	{
		return baseURI;
	}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintPerBatch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"nonpayable","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":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_recipients","type":"address[]"}],"name":"setRecipients","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":[],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c0604052600160005560006007556040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600b90805190602001906200005b92919062000271565b5060ca600c5560ca600d553480156200007357600080fd5b50604051620044d8380380620044d883398181016040528101906200009991906200039f565b8181600c54600d5460008111620000e7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000de9062000494565b60405180910390fd5b600082116200012d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001249062000472565b60405180910390fd5b83600190805190602001906200014592919062000271565b5082600290805190602001906200015e92919062000271565b508160a081815250508060808181525050505050506200019362000187620001a360201b60201c565b620001ab60201b60201c565b60016009819055505050620006e9565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200027f906200055c565b90600052602060002090601f016020900481019282620002a35760008555620002ef565b82601f10620002be57805160ff1916838001178555620002ef565b82800160010185558215620002ef579182015b82811115620002ee578251825591602001919060010190620002d1565b5b509050620002fe919062000302565b5090565b5b808211156200031d57600081600090555060010162000303565b5090565b6000620003386200033284620004df565b620004b6565b9050828152602081018484840111156200035757620003566200062b565b5b6200036484828562000526565b509392505050565b600082601f83011262000384576200038362000626565b5b81516200039684826020860162000321565b91505092915050565b60008060408385031215620003b957620003b862000635565b5b600083015167ffffffffffffffff811115620003da57620003d962000630565b5b620003e8858286016200036c565b925050602083015167ffffffffffffffff8111156200040c576200040b62000630565b5b6200041a858286016200036c565b9150509250929050565b60006200043360278362000515565b915062000440826200064b565b604082019050919050565b60006200045a602e8362000515565b915062000467826200069a565b604082019050919050565b600060208201905081810360008301526200048d8162000424565b9050919050565b60006020820190508181036000830152620004af816200044b565b9050919050565b6000620004c2620004d5565b9050620004d0828262000592565b919050565b6000604051905090565b600067ffffffffffffffff821115620004fd57620004fc620005f7565b5b62000508826200063a565b9050602081019050919050565b600082825260208201905092915050565b60005b838110156200054657808201518184015260208101905062000529565b8381111562000556576000848401525b50505050565b600060028204905060018216806200057557607f821691505b602082108114156200058c576200058b620005c8565b5b50919050565b6200059d826200063a565b810181811067ffffffffffffffff82111715620005bf57620005be620005f7565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b60805160a051613dbe6200071a60003960008181611c3f01528181611c68015261219e015260005050613dbe6000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c806355f804b3116100de578063a22cb46511610097578063d7224ba011610071578063d7224ba01461045b578063e626302614610479578063e985e9c514610497578063f2fde38b146104c75761018e565b8063a22cb465146103f3578063b88d4fde1461040f578063c87b56dd1461042b5761018e565b806355f804b3146103315780636352211e1461034d57806370a082311461037d578063715018a6146103ad5780638da5cb5b146103b757806395d89b41146103d55761018e565b806323b872dd1161014b5780633c130d90116101255780633c130d90146102ab57806342842e0e146102c95780634e7602d3146102e55780634f6ccce7146103015761018e565b806323b872dd146102555780632f745c59146102715780633884d635146102a15761018e565b806301ffc9a71461019357806306fdde03146101c3578063081812fc146101e1578063095ea7b3146102115780631249c58b1461022d57806318160ddd14610237575b600080fd5b6101ad60048036038101906101a89190612b45565b6104e3565b6040516101ba9190612ffa565b60405180910390f35b6101cb61062d565b6040516101d89190613015565b60405180910390f35b6101fb60048036038101906101f69190612be8565b6106bf565b6040516102089190612f93565b60405180910390f35b61022b60048036038101906102269190612abc565b610744565b005b61023561085d565b005b61023f61093d565b60405161024c91906132d7565b60405180910390f35b61026f600480360381019061026a91906129a6565b610946565b005b61028b60048036038101906102869190612abc565b610956565b60405161029891906132d7565b60405180910390f35b6102a9610b54565b005b6102b3610ca0565b6040516102c09190613015565b60405180910390f35b6102e360048036038101906102de91906129a6565b610d32565b005b6102ff60048036038101906102fa9190612afc565b610d52565b005b61031b60048036038101906103169190612be8565b610de8565b60405161032891906132d7565b60405180910390f35b61034b60048036038101906103469190612b9f565b610e3c565b005b61036760048036038101906103629190612be8565b610ed2565b6040516103749190612f93565b60405180910390f35b61039760048036038101906103929190612939565b610ee8565b6040516103a491906132d7565b60405180910390f35b6103b5610fd1565b005b6103bf611059565b6040516103cc9190612f93565b60405180910390f35b6103dd611083565b6040516103ea9190613015565b60405180910390f35b61040d60048036038101906104089190612a7c565b611115565b005b610429600480360381019061042491906129f9565b611296565b005b61044560048036038101906104409190612be8565b6112f2565b6040516104529190613015565b60405180910390f35b61046361134b565b60405161047091906132d7565b60405180910390f35b610481611351565b60405161048e91906132d7565b60405180910390f35b6104b160048036038101906104ac9190612966565b611357565b6040516104be9190612ffa565b60405180910390f35b6104e160048036038101906104dc9190612939565b6113eb565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105ae57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061061657507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106265750610625826114e3565b5b9050919050565b60606001805461063c906135dd565b80601f0160208091040260200160405190810160405280929190818152602001828054610668906135dd565b80156106b55780601f1061068a576101008083540402835291602001916106b5565b820191906000526020600020905b81548152906001019060200180831161069857829003601f168201915b5050505050905090565b60006106ca8261154d565b610709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070090613297565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061074f82610ed2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b7906131b7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166107df61155a565b73ffffffffffffffffffffffffffffffffffffffff16148061080e575061080d8161080861155a565b611357565b5b61084d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610844906130f7565b60405180910390fd5b610858838383611562565b505050565b600260095414156108a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089a90613257565b60405180910390fd5b60026009819055506108b361155a565b73ffffffffffffffffffffffffffffffffffffffff166108d1611059565b73ffffffffffffffffffffffffffffffffffffffff1614610927576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091e90613157565b60405180910390fd5b61093333600c54611614565b6001600981905550565b60008054905090565b610951838383611632565b505050565b600061096183610ee8565b82106109a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099990613037565b60405180910390fd5b60006109ac61093d565b905060008060005b83811015610b12576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610aa657806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610afe5786841415610aef578195505050505050610b4e565b8380610afa90613640565b9450505b508080610b0a90613640565b9150506109b4565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4590613237565b60405180910390fd5b92915050565b60026009541415610b9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9190613257565b60405180910390fd5b6002600981905550610baa61155a565b73ffffffffffffffffffffffffffffffffffffffff16610bc8611059565b73ffffffffffffffffffffffffffffffffffffffff1614610c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1590613157565b60405180910390fd5b6000600190505b600e80549050811015610c9557610c82610c3d611059565b600e8381548110610c5157610c506136e7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683610d32565b8080610c8d90613640565b915050610c25565b506001600981905550565b6060600a8054610caf906135dd565b80601f0160208091040260200160405190810160405280929190818152602001828054610cdb906135dd565b8015610d285780601f10610cfd57610100808354040283529160200191610d28565b820191906000526020600020905b815481529060010190602001808311610d0b57829003601f168201915b5050505050905090565b610d4d83838360405180602001604052806000815250611296565b505050565b610d5a61155a565b73ffffffffffffffffffffffffffffffffffffffff16610d78611059565b73ffffffffffffffffffffffffffffffffffffffff1614610dce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc590613157565b60405180910390fd5b80600e9080519060200190610de49291906125eb565b5050565b6000610df261093d565b821115610e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2b906130b7565b60405180910390fd5b819050919050565b610e4461155a565b73ffffffffffffffffffffffffffffffffffffffff16610e62611059565b73ffffffffffffffffffffffffffffffffffffffff1614610eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaf90613157565b60405180910390fd5b80600a9080519060200190610ece929190612675565b5050565b6000610edd82611beb565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5090613117565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b610fd961155a565b73ffffffffffffffffffffffffffffffffffffffff16610ff7611059565b73ffffffffffffffffffffffffffffffffffffffff161461104d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104490613157565b60405180910390fd5b6110576000611dee565b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054611092906135dd565b80601f01602080910402602001604051908101604052809291908181526020018280546110be906135dd565b801561110b5780601f106110e05761010080835404028352916020019161110b565b820191906000526020600020905b8154815290600101906020018083116110ee57829003601f168201915b5050505050905090565b61111d61155a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561118b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118290613177565b60405180910390fd5b806006600061119861155a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661124561155a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161128a9190612ffa565b60405180910390a35050565b6112a1848484611632565b6112ad84848484611eb4565b6112ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e3906131d7565b60405180910390fd5b50505050565b60606112fd8261154d565b61133c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133390613057565b60405180910390fd5b61134461204b565b9050919050565b60075481565b600c5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6113f361155a565b73ffffffffffffffffffffffffffffffffffffffff16611411611059565b73ffffffffffffffffffffffffffffffffffffffff1614611467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145e90613157565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ce90613077565b60405180910390fd5b6114e081611dee565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b61162e8282604051806020016040528060008152506120dd565b5050565b600061163d82611beb565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661166461155a565b73ffffffffffffffffffffffffffffffffffffffff1614806116c0575061168961155a565b73ffffffffffffffffffffffffffffffffffffffff166116a8846106bf565b73ffffffffffffffffffffffffffffffffffffffff16145b806116dc57506116db82600001516116d661155a565b611357565b5b90508061171e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171590613197565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611790576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178790613137565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f7906130d7565b60405180910390fd5b61180d85858560016125bc565b61181d6000848460000151611562565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661188b9190613479565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661192f91906133dd565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184611a359190613423565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611b7b57611aab8161154d565b15611b7a576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611be386868660016125c2565b505050505050565b611bf36126fb565b611bfc8261154d565b611c3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3290613097565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008310611c9f5760017f000000000000000000000000000000000000000000000000000000000000000084611c9291906134ad565b611c9c9190613423565b90505b60008390505b818110611dad576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611d9957809350505050611de9565b508080611da5906135b3565b915050611ca5565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de090613277565b60405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000611ed58473ffffffffffffffffffffffffffffffffffffffff166125c8565b1561203e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611efe61155a565b8786866040518563ffffffff1660e01b8152600401611f209493929190612fae565b602060405180830381600087803b158015611f3a57600080fd5b505af1925050508015611f6b57506040513d601f19601f82011682018060405250810190611f689190612b72565b60015b611fee573d8060008114611f9b576040519150601f19603f3d011682016040523d82523d6000602084013e611fa0565b606091505b50600081511415611fe6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdd906131d7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612043565b600190505b949350505050565b6060600a805461205a906135dd565b80601f0160208091040260200160405190810160405280929190818152602001828054612086906135dd565b80156120d35780601f106120a8576101008083540402835291602001916120d3565b820191906000526020600020905b8154815290600101906020018083116120b657829003601f168201915b5050505050905090565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214a90613217565b60405180910390fd5b61215c8161154d565b1561219c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612193906131f7565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008311156121ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f6906132b7565b60405180910390fd5b61220c60008583866125bc565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250509050604051806040016040528085836000015161230991906133dd565b6fffffffffffffffffffffffffffffffff16815260200185836020015161233091906133dd565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561259f57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461253f6000888488611eb4565b61257e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612575906131d7565b60405180910390fd5b818061258990613640565b925050808061259790613640565b9150506124ce565b50806000819055506125b460008785886125c2565b505050505050565b50505050565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054828255906000526020600020908101928215612664579160200282015b828111156126635782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019061260b565b5b5090506126719190612735565b5090565b828054612681906135dd565b90600052602060002090601f0160209004810192826126a357600085556126ea565b82601f106126bc57805160ff19168380011785556126ea565b828001600101855582156126ea579182015b828111156126e95782518255916020019190600101906126ce565b5b5090506126f79190612735565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561274e576000816000905550600101612736565b5090565b600061276561276084613317565b6132f2565b905080838252602082019050828560208602820111156127885761278761374a565b5b60005b858110156127b8578161279e8882612846565b84526020840193506020830192505060018101905061278b565b5050509392505050565b60006127d56127d084613343565b6132f2565b9050828152602081018484840111156127f1576127f061374f565b5b6127fc848285613571565b509392505050565b600061281761281284613374565b6132f2565b9050828152602081018484840111156128335761283261374f565b5b61283e848285613571565b509392505050565b60008135905061285581613d2c565b92915050565b600082601f8301126128705761286f613745565b5b8135612880848260208601612752565b91505092915050565b60008135905061289881613d43565b92915050565b6000813590506128ad81613d5a565b92915050565b6000815190506128c281613d5a565b92915050565b600082601f8301126128dd576128dc613745565b5b81356128ed8482602086016127c2565b91505092915050565b600082601f83011261290b5761290a613745565b5b813561291b848260208601612804565b91505092915050565b60008135905061293381613d71565b92915050565b60006020828403121561294f5761294e613759565b5b600061295d84828501612846565b91505092915050565b6000806040838503121561297d5761297c613759565b5b600061298b85828601612846565b925050602061299c85828601612846565b9150509250929050565b6000806000606084860312156129bf576129be613759565b5b60006129cd86828701612846565b93505060206129de86828701612846565b92505060406129ef86828701612924565b9150509250925092565b60008060008060808587031215612a1357612a12613759565b5b6000612a2187828801612846565b9450506020612a3287828801612846565b9350506040612a4387828801612924565b925050606085013567ffffffffffffffff811115612a6457612a63613754565b5b612a70878288016128c8565b91505092959194509250565b60008060408385031215612a9357612a92613759565b5b6000612aa185828601612846565b9250506020612ab285828601612889565b9150509250929050565b60008060408385031215612ad357612ad2613759565b5b6000612ae185828601612846565b9250506020612af285828601612924565b9150509250929050565b600060208284031215612b1257612b11613759565b5b600082013567ffffffffffffffff811115612b3057612b2f613754565b5b612b3c8482850161285b565b91505092915050565b600060208284031215612b5b57612b5a613759565b5b6000612b698482850161289e565b91505092915050565b600060208284031215612b8857612b87613759565b5b6000612b96848285016128b3565b91505092915050565b600060208284031215612bb557612bb4613759565b5b600082013567ffffffffffffffff811115612bd357612bd2613754565b5b612bdf848285016128f6565b91505092915050565b600060208284031215612bfe57612bfd613759565b5b6000612c0c84828501612924565b91505092915050565b612c1e816134e1565b82525050565b612c2d816134f3565b82525050565b6000612c3e826133a5565b612c4881856133bb565b9350612c58818560208601613580565b612c618161375e565b840191505092915050565b6000612c77826133b0565b612c8181856133cc565b9350612c91818560208601613580565b612c9a8161375e565b840191505092915050565b6000612cb26022836133cc565b9150612cbd8261376f565b604082019050919050565b6000612cd5601f836133cc565b9150612ce0826137be565b602082019050919050565b6000612cf86026836133cc565b9150612d03826137e7565b604082019050919050565b6000612d1b602a836133cc565b9150612d2682613836565b604082019050919050565b6000612d3e6023836133cc565b9150612d4982613885565b604082019050919050565b6000612d616025836133cc565b9150612d6c826138d4565b604082019050919050565b6000612d846039836133cc565b9150612d8f82613923565b604082019050919050565b6000612da7602b836133cc565b9150612db282613972565b604082019050919050565b6000612dca6026836133cc565b9150612dd5826139c1565b604082019050919050565b6000612ded6020836133cc565b9150612df882613a10565b602082019050919050565b6000612e10601a836133cc565b9150612e1b82613a39565b602082019050919050565b6000612e336032836133cc565b9150612e3e82613a62565b604082019050919050565b6000612e566022836133cc565b9150612e6182613ab1565b604082019050919050565b6000612e796033836133cc565b9150612e8482613b00565b604082019050919050565b6000612e9c601d836133cc565b9150612ea782613b4f565b602082019050919050565b6000612ebf6021836133cc565b9150612eca82613b78565b604082019050919050565b6000612ee2602e836133cc565b9150612eed82613bc7565b604082019050919050565b6000612f05601f836133cc565b9150612f1082613c16565b602082019050919050565b6000612f28602f836133cc565b9150612f3382613c3f565b604082019050919050565b6000612f4b602d836133cc565b9150612f5682613c8e565b604082019050919050565b6000612f6e6022836133cc565b9150612f7982613cdd565b604082019050919050565b612f8d81613567565b82525050565b6000602082019050612fa86000830184612c15565b92915050565b6000608082019050612fc36000830187612c15565b612fd06020830186612c15565b612fdd6040830185612f84565b8181036060830152612fef8184612c33565b905095945050505050565b600060208201905061300f6000830184612c24565b92915050565b6000602082019050818103600083015261302f8184612c6c565b905092915050565b6000602082019050818103600083015261305081612ca5565b9050919050565b6000602082019050818103600083015261307081612cc8565b9050919050565b6000602082019050818103600083015261309081612ceb565b9050919050565b600060208201905081810360008301526130b081612d0e565b9050919050565b600060208201905081810360008301526130d081612d31565b9050919050565b600060208201905081810360008301526130f081612d54565b9050919050565b6000602082019050818103600083015261311081612d77565b9050919050565b6000602082019050818103600083015261313081612d9a565b9050919050565b6000602082019050818103600083015261315081612dbd565b9050919050565b6000602082019050818103600083015261317081612de0565b9050919050565b6000602082019050818103600083015261319081612e03565b9050919050565b600060208201905081810360008301526131b081612e26565b9050919050565b600060208201905081810360008301526131d081612e49565b9050919050565b600060208201905081810360008301526131f081612e6c565b9050919050565b6000602082019050818103600083015261321081612e8f565b9050919050565b6000602082019050818103600083015261323081612eb2565b9050919050565b6000602082019050818103600083015261325081612ed5565b9050919050565b6000602082019050818103600083015261327081612ef8565b9050919050565b6000602082019050818103600083015261329081612f1b565b9050919050565b600060208201905081810360008301526132b081612f3e565b9050919050565b600060208201905081810360008301526132d081612f61565b9050919050565b60006020820190506132ec6000830184612f84565b92915050565b60006132fc61330d565b9050613308828261360f565b919050565b6000604051905090565b600067ffffffffffffffff82111561333257613331613716565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561335e5761335d613716565b5b6133678261375e565b9050602081019050919050565b600067ffffffffffffffff82111561338f5761338e613716565b5b6133988261375e565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006133e88261352b565b91506133f38361352b565b9250826fffffffffffffffffffffffffffffffff0382111561341857613417613689565b5b828201905092915050565b600061342e82613567565b915061343983613567565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561346e5761346d613689565b5b828201905092915050565b60006134848261352b565b915061348f8361352b565b9250828210156134a2576134a1613689565b5b828203905092915050565b60006134b882613567565b91506134c383613567565b9250828210156134d6576134d5613689565b5b828203905092915050565b60006134ec82613547565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561359e578082015181840152602081019050613583565b838111156135ad576000848401525b50505050565b60006135be82613567565b915060008214156135d2576135d1613689565b5b600182039050919050565b600060028204905060018216806135f557607f821691505b60208210811415613609576136086136b8565b5b50919050565b6136188261375e565b810181811067ffffffffffffffff8211171561363757613636613716565b5b80604052505050565b600061364b82613567565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561367e5761367d613689565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e00600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b613d35816134e1565b8114613d4057600080fd5b50565b613d4c816134f3565b8114613d5757600080fd5b50565b613d63816134ff565b8114613d6e57600080fd5b50565b613d7a81613567565b8114613d8557600080fd5b5056fea2646970667358221220b0011aaf19feadfc8a90530b1caf86eb1d081514354949ef0c0495b02973847c64736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000f4f6e652d44696d656e73696f6e616c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024f44000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061018e5760003560e01c806355f804b3116100de578063a22cb46511610097578063d7224ba011610071578063d7224ba01461045b578063e626302614610479578063e985e9c514610497578063f2fde38b146104c75761018e565b8063a22cb465146103f3578063b88d4fde1461040f578063c87b56dd1461042b5761018e565b806355f804b3146103315780636352211e1461034d57806370a082311461037d578063715018a6146103ad5780638da5cb5b146103b757806395d89b41146103d55761018e565b806323b872dd1161014b5780633c130d90116101255780633c130d90146102ab57806342842e0e146102c95780634e7602d3146102e55780634f6ccce7146103015761018e565b806323b872dd146102555780632f745c59146102715780633884d635146102a15761018e565b806301ffc9a71461019357806306fdde03146101c3578063081812fc146101e1578063095ea7b3146102115780631249c58b1461022d57806318160ddd14610237575b600080fd5b6101ad60048036038101906101a89190612b45565b6104e3565b6040516101ba9190612ffa565b60405180910390f35b6101cb61062d565b6040516101d89190613015565b60405180910390f35b6101fb60048036038101906101f69190612be8565b6106bf565b6040516102089190612f93565b60405180910390f35b61022b60048036038101906102269190612abc565b610744565b005b61023561085d565b005b61023f61093d565b60405161024c91906132d7565b60405180910390f35b61026f600480360381019061026a91906129a6565b610946565b005b61028b60048036038101906102869190612abc565b610956565b60405161029891906132d7565b60405180910390f35b6102a9610b54565b005b6102b3610ca0565b6040516102c09190613015565b60405180910390f35b6102e360048036038101906102de91906129a6565b610d32565b005b6102ff60048036038101906102fa9190612afc565b610d52565b005b61031b60048036038101906103169190612be8565b610de8565b60405161032891906132d7565b60405180910390f35b61034b60048036038101906103469190612b9f565b610e3c565b005b61036760048036038101906103629190612be8565b610ed2565b6040516103749190612f93565b60405180910390f35b61039760048036038101906103929190612939565b610ee8565b6040516103a491906132d7565b60405180910390f35b6103b5610fd1565b005b6103bf611059565b6040516103cc9190612f93565b60405180910390f35b6103dd611083565b6040516103ea9190613015565b60405180910390f35b61040d60048036038101906104089190612a7c565b611115565b005b610429600480360381019061042491906129f9565b611296565b005b61044560048036038101906104409190612be8565b6112f2565b6040516104529190613015565b60405180910390f35b61046361134b565b60405161047091906132d7565b60405180910390f35b610481611351565b60405161048e91906132d7565b60405180910390f35b6104b160048036038101906104ac9190612966565b611357565b6040516104be9190612ffa565b60405180910390f35b6104e160048036038101906104dc9190612939565b6113eb565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105ae57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061061657507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106265750610625826114e3565b5b9050919050565b60606001805461063c906135dd565b80601f0160208091040260200160405190810160405280929190818152602001828054610668906135dd565b80156106b55780601f1061068a576101008083540402835291602001916106b5565b820191906000526020600020905b81548152906001019060200180831161069857829003601f168201915b5050505050905090565b60006106ca8261154d565b610709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070090613297565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061074f82610ed2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b7906131b7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166107df61155a565b73ffffffffffffffffffffffffffffffffffffffff16148061080e575061080d8161080861155a565b611357565b5b61084d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610844906130f7565b60405180910390fd5b610858838383611562565b505050565b600260095414156108a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089a90613257565b60405180910390fd5b60026009819055506108b361155a565b73ffffffffffffffffffffffffffffffffffffffff166108d1611059565b73ffffffffffffffffffffffffffffffffffffffff1614610927576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091e90613157565b60405180910390fd5b61093333600c54611614565b6001600981905550565b60008054905090565b610951838383611632565b505050565b600061096183610ee8565b82106109a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099990613037565b60405180910390fd5b60006109ac61093d565b905060008060005b83811015610b12576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610aa657806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610afe5786841415610aef578195505050505050610b4e565b8380610afa90613640565b9450505b508080610b0a90613640565b9150506109b4565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4590613237565b60405180910390fd5b92915050565b60026009541415610b9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9190613257565b60405180910390fd5b6002600981905550610baa61155a565b73ffffffffffffffffffffffffffffffffffffffff16610bc8611059565b73ffffffffffffffffffffffffffffffffffffffff1614610c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1590613157565b60405180910390fd5b6000600190505b600e80549050811015610c9557610c82610c3d611059565b600e8381548110610c5157610c506136e7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683610d32565b8080610c8d90613640565b915050610c25565b506001600981905550565b6060600a8054610caf906135dd565b80601f0160208091040260200160405190810160405280929190818152602001828054610cdb906135dd565b8015610d285780601f10610cfd57610100808354040283529160200191610d28565b820191906000526020600020905b815481529060010190602001808311610d0b57829003601f168201915b5050505050905090565b610d4d83838360405180602001604052806000815250611296565b505050565b610d5a61155a565b73ffffffffffffffffffffffffffffffffffffffff16610d78611059565b73ffffffffffffffffffffffffffffffffffffffff1614610dce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc590613157565b60405180910390fd5b80600e9080519060200190610de49291906125eb565b5050565b6000610df261093d565b821115610e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2b906130b7565b60405180910390fd5b819050919050565b610e4461155a565b73ffffffffffffffffffffffffffffffffffffffff16610e62611059565b73ffffffffffffffffffffffffffffffffffffffff1614610eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaf90613157565b60405180910390fd5b80600a9080519060200190610ece929190612675565b5050565b6000610edd82611beb565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5090613117565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b610fd961155a565b73ffffffffffffffffffffffffffffffffffffffff16610ff7611059565b73ffffffffffffffffffffffffffffffffffffffff161461104d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104490613157565b60405180910390fd5b6110576000611dee565b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054611092906135dd565b80601f01602080910402602001604051908101604052809291908181526020018280546110be906135dd565b801561110b5780601f106110e05761010080835404028352916020019161110b565b820191906000526020600020905b8154815290600101906020018083116110ee57829003601f168201915b5050505050905090565b61111d61155a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561118b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118290613177565b60405180910390fd5b806006600061119861155a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661124561155a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161128a9190612ffa565b60405180910390a35050565b6112a1848484611632565b6112ad84848484611eb4565b6112ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e3906131d7565b60405180910390fd5b50505050565b60606112fd8261154d565b61133c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133390613057565b60405180910390fd5b61134461204b565b9050919050565b60075481565b600c5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6113f361155a565b73ffffffffffffffffffffffffffffffffffffffff16611411611059565b73ffffffffffffffffffffffffffffffffffffffff1614611467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145e90613157565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ce90613077565b60405180910390fd5b6114e081611dee565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b61162e8282604051806020016040528060008152506120dd565b5050565b600061163d82611beb565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661166461155a565b73ffffffffffffffffffffffffffffffffffffffff1614806116c0575061168961155a565b73ffffffffffffffffffffffffffffffffffffffff166116a8846106bf565b73ffffffffffffffffffffffffffffffffffffffff16145b806116dc57506116db82600001516116d661155a565b611357565b5b90508061171e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171590613197565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611790576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178790613137565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f7906130d7565b60405180910390fd5b61180d85858560016125bc565b61181d6000848460000151611562565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661188b9190613479565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661192f91906133dd565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184611a359190613423565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611b7b57611aab8161154d565b15611b7a576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611be386868660016125c2565b505050505050565b611bf36126fb565b611bfc8261154d565b611c3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3290613097565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000ca8310611c9f5760017f00000000000000000000000000000000000000000000000000000000000000ca84611c9291906134ad565b611c9c9190613423565b90505b60008390505b818110611dad576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611d9957809350505050611de9565b508080611da5906135b3565b915050611ca5565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de090613277565b60405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000611ed58473ffffffffffffffffffffffffffffffffffffffff166125c8565b1561203e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611efe61155a565b8786866040518563ffffffff1660e01b8152600401611f209493929190612fae565b602060405180830381600087803b158015611f3a57600080fd5b505af1925050508015611f6b57506040513d601f19601f82011682018060405250810190611f689190612b72565b60015b611fee573d8060008114611f9b576040519150601f19603f3d011682016040523d82523d6000602084013e611fa0565b606091505b50600081511415611fe6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdd906131d7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612043565b600190505b949350505050565b6060600a805461205a906135dd565b80601f0160208091040260200160405190810160405280929190818152602001828054612086906135dd565b80156120d35780601f106120a8576101008083540402835291602001916120d3565b820191906000526020600020905b8154815290600101906020018083116120b657829003601f168201915b5050505050905090565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214a90613217565b60405180910390fd5b61215c8161154d565b1561219c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612193906131f7565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000ca8311156121ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f6906132b7565b60405180910390fd5b61220c60008583866125bc565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250509050604051806040016040528085836000015161230991906133dd565b6fffffffffffffffffffffffffffffffff16815260200185836020015161233091906133dd565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561259f57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461253f6000888488611eb4565b61257e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612575906131d7565b60405180910390fd5b818061258990613640565b925050808061259790613640565b9150506124ce565b50806000819055506125b460008785886125c2565b505050505050565b50505050565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054828255906000526020600020908101928215612664579160200282015b828111156126635782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019061260b565b5b5090506126719190612735565b5090565b828054612681906135dd565b90600052602060002090601f0160209004810192826126a357600085556126ea565b82601f106126bc57805160ff19168380011785556126ea565b828001600101855582156126ea579182015b828111156126e95782518255916020019190600101906126ce565b5b5090506126f79190612735565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561274e576000816000905550600101612736565b5090565b600061276561276084613317565b6132f2565b905080838252602082019050828560208602820111156127885761278761374a565b5b60005b858110156127b8578161279e8882612846565b84526020840193506020830192505060018101905061278b565b5050509392505050565b60006127d56127d084613343565b6132f2565b9050828152602081018484840111156127f1576127f061374f565b5b6127fc848285613571565b509392505050565b600061281761281284613374565b6132f2565b9050828152602081018484840111156128335761283261374f565b5b61283e848285613571565b509392505050565b60008135905061285581613d2c565b92915050565b600082601f8301126128705761286f613745565b5b8135612880848260208601612752565b91505092915050565b60008135905061289881613d43565b92915050565b6000813590506128ad81613d5a565b92915050565b6000815190506128c281613d5a565b92915050565b600082601f8301126128dd576128dc613745565b5b81356128ed8482602086016127c2565b91505092915050565b600082601f83011261290b5761290a613745565b5b813561291b848260208601612804565b91505092915050565b60008135905061293381613d71565b92915050565b60006020828403121561294f5761294e613759565b5b600061295d84828501612846565b91505092915050565b6000806040838503121561297d5761297c613759565b5b600061298b85828601612846565b925050602061299c85828601612846565b9150509250929050565b6000806000606084860312156129bf576129be613759565b5b60006129cd86828701612846565b93505060206129de86828701612846565b92505060406129ef86828701612924565b9150509250925092565b60008060008060808587031215612a1357612a12613759565b5b6000612a2187828801612846565b9450506020612a3287828801612846565b9350506040612a4387828801612924565b925050606085013567ffffffffffffffff811115612a6457612a63613754565b5b612a70878288016128c8565b91505092959194509250565b60008060408385031215612a9357612a92613759565b5b6000612aa185828601612846565b9250506020612ab285828601612889565b9150509250929050565b60008060408385031215612ad357612ad2613759565b5b6000612ae185828601612846565b9250506020612af285828601612924565b9150509250929050565b600060208284031215612b1257612b11613759565b5b600082013567ffffffffffffffff811115612b3057612b2f613754565b5b612b3c8482850161285b565b91505092915050565b600060208284031215612b5b57612b5a613759565b5b6000612b698482850161289e565b91505092915050565b600060208284031215612b8857612b87613759565b5b6000612b96848285016128b3565b91505092915050565b600060208284031215612bb557612bb4613759565b5b600082013567ffffffffffffffff811115612bd357612bd2613754565b5b612bdf848285016128f6565b91505092915050565b600060208284031215612bfe57612bfd613759565b5b6000612c0c84828501612924565b91505092915050565b612c1e816134e1565b82525050565b612c2d816134f3565b82525050565b6000612c3e826133a5565b612c4881856133bb565b9350612c58818560208601613580565b612c618161375e565b840191505092915050565b6000612c77826133b0565b612c8181856133cc565b9350612c91818560208601613580565b612c9a8161375e565b840191505092915050565b6000612cb26022836133cc565b9150612cbd8261376f565b604082019050919050565b6000612cd5601f836133cc565b9150612ce0826137be565b602082019050919050565b6000612cf86026836133cc565b9150612d03826137e7565b604082019050919050565b6000612d1b602a836133cc565b9150612d2682613836565b604082019050919050565b6000612d3e6023836133cc565b9150612d4982613885565b604082019050919050565b6000612d616025836133cc565b9150612d6c826138d4565b604082019050919050565b6000612d846039836133cc565b9150612d8f82613923565b604082019050919050565b6000612da7602b836133cc565b9150612db282613972565b604082019050919050565b6000612dca6026836133cc565b9150612dd5826139c1565b604082019050919050565b6000612ded6020836133cc565b9150612df882613a10565b602082019050919050565b6000612e10601a836133cc565b9150612e1b82613a39565b602082019050919050565b6000612e336032836133cc565b9150612e3e82613a62565b604082019050919050565b6000612e566022836133cc565b9150612e6182613ab1565b604082019050919050565b6000612e796033836133cc565b9150612e8482613b00565b604082019050919050565b6000612e9c601d836133cc565b9150612ea782613b4f565b602082019050919050565b6000612ebf6021836133cc565b9150612eca82613b78565b604082019050919050565b6000612ee2602e836133cc565b9150612eed82613bc7565b604082019050919050565b6000612f05601f836133cc565b9150612f1082613c16565b602082019050919050565b6000612f28602f836133cc565b9150612f3382613c3f565b604082019050919050565b6000612f4b602d836133cc565b9150612f5682613c8e565b604082019050919050565b6000612f6e6022836133cc565b9150612f7982613cdd565b604082019050919050565b612f8d81613567565b82525050565b6000602082019050612fa86000830184612c15565b92915050565b6000608082019050612fc36000830187612c15565b612fd06020830186612c15565b612fdd6040830185612f84565b8181036060830152612fef8184612c33565b905095945050505050565b600060208201905061300f6000830184612c24565b92915050565b6000602082019050818103600083015261302f8184612c6c565b905092915050565b6000602082019050818103600083015261305081612ca5565b9050919050565b6000602082019050818103600083015261307081612cc8565b9050919050565b6000602082019050818103600083015261309081612ceb565b9050919050565b600060208201905081810360008301526130b081612d0e565b9050919050565b600060208201905081810360008301526130d081612d31565b9050919050565b600060208201905081810360008301526130f081612d54565b9050919050565b6000602082019050818103600083015261311081612d77565b9050919050565b6000602082019050818103600083015261313081612d9a565b9050919050565b6000602082019050818103600083015261315081612dbd565b9050919050565b6000602082019050818103600083015261317081612de0565b9050919050565b6000602082019050818103600083015261319081612e03565b9050919050565b600060208201905081810360008301526131b081612e26565b9050919050565b600060208201905081810360008301526131d081612e49565b9050919050565b600060208201905081810360008301526131f081612e6c565b9050919050565b6000602082019050818103600083015261321081612e8f565b9050919050565b6000602082019050818103600083015261323081612eb2565b9050919050565b6000602082019050818103600083015261325081612ed5565b9050919050565b6000602082019050818103600083015261327081612ef8565b9050919050565b6000602082019050818103600083015261329081612f1b565b9050919050565b600060208201905081810360008301526132b081612f3e565b9050919050565b600060208201905081810360008301526132d081612f61565b9050919050565b60006020820190506132ec6000830184612f84565b92915050565b60006132fc61330d565b9050613308828261360f565b919050565b6000604051905090565b600067ffffffffffffffff82111561333257613331613716565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561335e5761335d613716565b5b6133678261375e565b9050602081019050919050565b600067ffffffffffffffff82111561338f5761338e613716565b5b6133988261375e565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006133e88261352b565b91506133f38361352b565b9250826fffffffffffffffffffffffffffffffff0382111561341857613417613689565b5b828201905092915050565b600061342e82613567565b915061343983613567565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561346e5761346d613689565b5b828201905092915050565b60006134848261352b565b915061348f8361352b565b9250828210156134a2576134a1613689565b5b828203905092915050565b60006134b882613567565b91506134c383613567565b9250828210156134d6576134d5613689565b5b828203905092915050565b60006134ec82613547565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561359e578082015181840152602081019050613583565b838111156135ad576000848401525b50505050565b60006135be82613567565b915060008214156135d2576135d1613689565b5b600182039050919050565b600060028204905060018216806135f557607f821691505b60208210811415613609576136086136b8565b5b50919050565b6136188261375e565b810181811067ffffffffffffffff8211171561363757613636613716565b5b80604052505050565b600061364b82613567565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561367e5761367d613689565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e00600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b613d35816134e1565b8114613d4057600080fd5b50565b613d4c816134f3565b8114613d5757600080fd5b50565b613d63816134ff565b8114613d6e57600080fd5b50565b613d7a81613567565b8114613d8557600080fd5b5056fea2646970667358221220b0011aaf19feadfc8a90530b1caf86eb1d081514354949ef0c0495b02973847c64736f6c63430008070033

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

00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000f4f6e652d44696d656e73696f6e616c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024f44000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): One-Dimensional
Arg [1] : _symbol (string): OD

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [3] : 4f6e652d44696d656e73696f6e616c0000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [5] : 4f44000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

42440:1088:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27782:370;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29508:94;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30826:204;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30389:379;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42935:94;;;:::i;:::-;;26342;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31676:142;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26974:744;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43035:169;;;:::i;:::-;;43323:102;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31881:157;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43210:107;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26505:178;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43430:95;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29331:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28208:211;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41590:103;;;:::i;:::-;;40939:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29663:98;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31094:274;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32101:311;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29824:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36516:43;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42584:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31431:186;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41848:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27782:370;27909:4;27954:25;27939:40;;;:11;:40;;;;:99;;;;28005:33;27990:48;;;:11;:48;;;;27939:99;:160;;;;28064:35;28049:50;;;:11;:50;;;;27939:160;:207;;;;28110:36;28134:11;28110:23;:36::i;:::-;27939:207;27925:221;;27782:370;;;:::o;29508:94::-;29562:13;29591:5;29584:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29508:94;:::o;30826:204::-;30894:7;30918:16;30926:7;30918;:16::i;:::-;30910:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;31000:15;:24;31016:7;31000:24;;;;;;;;;;;;;;;;;;;;;30993:31;;30826:204;;;:::o;30389:379::-;30458:13;30474:24;30490:7;30474:15;:24::i;:::-;30458:40;;30519:5;30513:11;;:2;:11;;;;30505:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30604:5;30588:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;30613:37;30630:5;30637:12;:10;:12::i;:::-;30613:16;:37::i;:::-;30588:62;30572:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;30734:28;30743:2;30747:7;30756:5;30734:8;:28::i;:::-;30451:317;30389:379;;:::o;42935:94::-;22208:1;22806:7;;:19;;22798:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;22208:1;22939:7;:18;;;;41170:12:::1;:10;:12::i;:::-;41159:23;;:7;:5;:7::i;:::-;:23;;;41151:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42986:38:::2;42996:10;43008:15;;42986:9;:38::i;:::-;22164:1:::0;23118:7;:22;;;;42935:94::o;26342:::-;26395:7;26418:12;;26411:19;;26342:94;:::o;31676:142::-;31784:28;31794:4;31800:2;31804:7;31784:9;:28::i;:::-;31676:142;;;:::o;26974:744::-;27083:7;27118:16;27128:5;27118:9;:16::i;:::-;27110:5;:24;27102:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27180:22;27205:13;:11;:13::i;:::-;27180:38;;27225:19;27255:25;27305:9;27300:350;27324:14;27320:1;:18;27300:350;;;27354:31;27388:11;:14;27400:1;27388:14;;;;;;;;;;;27354:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27441:1;27415:28;;:9;:14;;;:28;;;27411:89;;27476:9;:14;;;27456:34;;27411:89;27533:5;27512:26;;:17;:26;;;27508:135;;;27570:5;27555:11;:20;27551:59;;;27597:1;27590:8;;;;;;;;;27551:59;27620:13;;;;;:::i;:::-;;;;27508:135;27345:305;27340:3;;;;;:::i;:::-;;;;27300:350;;;;27656:56;;;;;;;;;;:::i;:::-;;;;;;;;26974:744;;;;;:::o;43035:169::-;22208:1;22806:7;;:19;;22798:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;22208:1;22939:7;:18;;;;41170:12:::1;:10;:12::i;:::-;41159:23;;:7;:5;:7::i;:::-;:23;;;41151:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43096:9:::2;43108:1;43096:13;;43091:108;43115:10;:17;;;;43111:1;:21;43091:108;;;43148:43;43165:7;:5;:7::i;:::-;43174:10;43185:1;43174:13;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43189:1;43148:16;:43::i;:::-;43134:3;;;;;:::i;:::-;;;;43091:108;;;;22164:1:::0;23118:7;:22;;;;43035:169::o;43323:102::-;43384:13;43413:7;43406:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43323:102;:::o;31881:157::-;31993:39;32010:4;32016:2;32020:7;31993:39;;;;;;;;;;;;:16;:39::i;:::-;31881:157;;;:::o;43210:107::-;41170:12;:10;:12::i;:::-;41159:23;;:7;:5;:7::i;:::-;:23;;;41151:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43300:11:::1;43287:10;:24;;;;;;;;;;;;:::i;:::-;;43210:107:::0;:::o;26505:178::-;26572:7;26605:13;:11;:13::i;:::-;26596:5;:22;;26588:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;26672:5;26665:12;;26505:178;;;:::o;43430:95::-;41170:12;:10;:12::i;:::-;41159:23;;:7;:5;:7::i;:::-;:23;;;41151:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43509:11:::1;43499:7;:21;;;;;;;;;;;;:::i;:::-;;43430:95:::0;:::o;29331:118::-;29395:7;29418:20;29430:7;29418:11;:20::i;:::-;:25;;;29411:32;;29331:118;;;:::o;28208:211::-;28272:7;28313:1;28296:19;;:5;:19;;;;28288:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;28385:12;:19;28398:5;28385:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;28377:36;;28370:43;;28208:211;;;:::o;41590:103::-;41170:12;:10;:12::i;:::-;41159:23;;:7;:5;:7::i;:::-;:23;;;41151:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41655:30:::1;41682:1;41655:18;:30::i;:::-;41590:103::o:0;40939:87::-;40985:7;41012:6;;;;;;;;;;;41005:13;;40939:87;:::o;29663:98::-;29719:13;29748:7;29741:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29663:98;:::o;31094:274::-;31197:12;:10;:12::i;:::-;31185:24;;:8;:24;;;;31177:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;31294:8;31249:18;:32;31268:12;:10;:12::i;:::-;31249:32;;;;;;;;;;;;;;;:42;31282:8;31249:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;31343:8;31314:48;;31329:12;:10;:12::i;:::-;31314:48;;;31353:8;31314:48;;;;;;:::i;:::-;;;;;;;;31094:274;;:::o;32101:311::-;32238:28;32248:4;32254:2;32258:7;32238:9;:28::i;:::-;32289:48;32312:4;32318:2;32322:7;32331:5;32289:22;:48::i;:::-;32273:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;32101:311;;;;:::o;29824:185::-;29897:13;29927:16;29935:7;29927;:16::i;:::-;29919:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;29993:10;:8;:10::i;:::-;29986:17;;29824:185;;;:::o;36516:43::-;;;;:::o;42584:36::-;;;;:::o;31431:186::-;31553:4;31576:18;:25;31595:5;31576:25;;;;;;;;;;;;;;;:35;31602:8;31576:35;;;;;;;;;;;;;;;;;;;;;;;;;31569:42;;31431:186;;;;:::o;41848:201::-;41170:12;:10;:12::i;:::-;41159:23;;:7;:5;:7::i;:::-;:23;;;41151:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41957:1:::1;41937:22;;:8;:22;;;;41929:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42013:28;42032:8;42013:18;:28::i;:::-;41848:201:::0;:::o;13477:157::-;13562:4;13601:25;13586:40;;;:11;:40;;;;13579:47;;13477:157;;;:::o;32651:105::-;32708:4;32738:12;;32728:7;:22;32721:29;;32651:105;;;:::o;23834:98::-;23887:7;23914:10;23907:17;;23834:98;:::o;36338:172::-;36462:2;36435:15;:24;36451:7;36435:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36496:7;36492:2;36476:28;;36485:5;36476:28;;;;;;;;;;;;36338:172;;;:::o;32762:98::-;32827:27;32837:2;32841:8;32827:27;;;;;;;;;;;;:9;:27::i;:::-;32762:98;;:::o;34703:1529::-;34800:35;34838:20;34850:7;34838:11;:20::i;:::-;34800:58;;34867:22;34909:13;:18;;;34893:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;34962:12;:10;:12::i;:::-;34938:36;;:20;34950:7;34938:11;:20::i;:::-;:36;;;34893:81;:142;;;;34985:50;35002:13;:18;;;35022:12;:10;:12::i;:::-;34985:16;:50::i;:::-;34893:142;34867:169;;35061:17;35045:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;35193:4;35171:26;;:13;:18;;;:26;;;35155:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;35282:1;35268:16;;:2;:16;;;;35260:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;35335:43;35357:4;35363:2;35367:7;35376:1;35335:21;:43::i;:::-;35435:49;35452:1;35456:7;35465:13;:18;;;35435:8;:49::i;:::-;35523:1;35493:12;:18;35506:4;35493:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35559:1;35531:12;:16;35544:2;35531:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35590:43;;;;;;;;35605:2;35590:43;;;;;;35616:15;35590:43;;;;;35567:11;:20;35579:7;35567:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35861:19;35893:1;35883:7;:11;;;;:::i;:::-;35861:33;;35946:1;35905:43;;:11;:24;35917:11;35905:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;35901:236;;;35963:20;35971:11;35963:7;:20::i;:::-;35959:171;;;36023:97;;;;;;;;36050:13;:18;;;36023:97;;;;;;36081:13;:28;;;36023:97;;;;;35996:11;:24;36008:11;35996:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35959:171;35901:236;36169:7;36165:2;36150:27;;36159:4;36150:27;;;;;;;;;;;;36184:42;36205:4;36211:2;36215:7;36224:1;36184:20;:42::i;:::-;34793:1439;;;34703:1529;;;:::o;28671:606::-;28747:21;;:::i;:::-;28788:16;28796:7;28788;:16::i;:::-;28780:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;28860:26;28908:12;28897:7;:23;28893:93;;28977:1;28962:12;28952:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;28931:47;;28893:93;28999:12;29014:7;28999:22;;28994:212;29031:18;29023:4;:26;28994:212;;29068:31;29102:11;:17;29114:4;29102:17;;;;;;;;;;;29068:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29158:1;29132:28;;:9;:14;;;:28;;;29128:71;;29180:9;29173:16;;;;;;;29128:71;29059:147;29051:6;;;;;:::i;:::-;;;;28994:212;;;;29214:57;;;;;;;;;;:::i;:::-;;;;;;;;28671:606;;;;:::o;42209:191::-;42283:16;42302:6;;;;;;;;;;;42283:25;;42328:8;42319:6;;:17;;;;;;;;;;;;;;;;;;42383:8;42352:40;;42373:8;42352:40;;;;;;;;;;;;42272:128;42209:191;:::o;38053:690::-;38190:4;38207:15;:2;:13;;;:15::i;:::-;38203:535;;;38262:2;38246:36;;;38283:12;:10;:12::i;:::-;38297:4;38303:7;38312:5;38246:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38233:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38494:1;38477:6;:13;:18;38473:215;;;38510:61;;;;;;;;;;:::i;:::-;;;;;;;;38473:215;38656:6;38650:13;38641:6;38637:2;38633:15;38626:38;38233:464;38378:45;;;38368:55;;;:6;:55;;;;38361:62;;;;;38203:535;38726:4;38719:11;;38053:690;;;;;;;:::o;42831:99::-;42891:13;42918:7;42911:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42831:99;:::o;33199:1272::-;33304:20;33327:12;;33304:35;;33368:1;33354:16;;:2;:16;;;;33346:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33545:21;33553:12;33545:7;:21::i;:::-;33544:22;33536:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33627:12;33615:8;:24;;33607:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33687:61;33717:1;33721:2;33725:12;33739:8;33687:21;:61::i;:::-;33757:30;33790:12;:16;33803:2;33790:16;;;;;;;;;;;;;;;33757:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33832:119;;;;;;;;33882:8;33852:11;:19;;;:39;;;;:::i;:::-;33832:119;;;;;;33935:8;33900:11;:24;;;:44;;;;:::i;:::-;33832:119;;;;;33813:12;:16;33826:2;33813:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33986:43;;;;;;;;34001:2;33986:43;;;;;;34012:15;33986:43;;;;;33958:11;:25;33970:12;33958:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34038:20;34061:12;34038:35;;34087:9;34082:281;34106:8;34102:1;:12;34082:281;;;34160:12;34156:2;34135:38;;34152:1;34135:38;;;;;;;;;;;;34200:59;34231:1;34235:2;34239:12;34253:5;34200:22;:59::i;:::-;34182:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;34341:14;;;;;:::i;:::-;;;;34116:3;;;;;:::i;:::-;;;;34082:281;;;;34386:12;34371;:27;;;;34405:60;34434:1;34438:2;34442:12;34456:8;34405:20;:60::i;:::-;33297:1174;;;33199:1272;;;:::o;39205:141::-;;;;;:::o;39732:140::-;;;;;:::o;3394:326::-;3454:4;3711:1;3689:7;:19;;;:23;3682:30;;3394:326;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;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;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:338::-;2621:5;2670:3;2663:4;2655:6;2651:17;2647:27;2637:122;;2678:79;;:::i;:::-;2637:122;2795:6;2782:20;2820:78;2894:3;2886:6;2879:4;2871:6;2867:17;2820:78;:::i;:::-;2811:87;;2627:277;2566:338;;;;:::o;2924:340::-;2980:5;3029:3;3022:4;3014:6;3010:17;3006:27;2996:122;;3037:79;;:::i;:::-;2996:122;3154:6;3141:20;3179:79;3254:3;3246:6;3239:4;3231:6;3227:17;3179:79;:::i;:::-;3170:88;;2986:278;2924:340;;;;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:329::-;3474:6;3523:2;3511:9;3502:7;3498:23;3494:32;3491:119;;;3529:79;;:::i;:::-;3491:119;3649:1;3674:53;3719:7;3710:6;3699:9;3695:22;3674:53;:::i;:::-;3664:63;;3620:117;3415:329;;;;:::o;3750:474::-;3818:6;3826;3875:2;3863:9;3854:7;3850:23;3846:32;3843:119;;;3881:79;;:::i;:::-;3843:119;4001:1;4026:53;4071:7;4062:6;4051:9;4047:22;4026:53;:::i;:::-;4016:63;;3972:117;4128:2;4154:53;4199:7;4190:6;4179:9;4175:22;4154:53;:::i;:::-;4144:63;;4099:118;3750:474;;;;;:::o;4230:619::-;4307:6;4315;4323;4372:2;4360:9;4351:7;4347:23;4343:32;4340:119;;;4378:79;;:::i;:::-;4340:119;4498:1;4523:53;4568:7;4559:6;4548:9;4544:22;4523:53;:::i;:::-;4513:63;;4469:117;4625:2;4651:53;4696:7;4687:6;4676:9;4672:22;4651:53;:::i;:::-;4641:63;;4596:118;4753:2;4779:53;4824:7;4815:6;4804:9;4800:22;4779:53;:::i;:::-;4769:63;;4724:118;4230:619;;;;;:::o;4855:943::-;4950:6;4958;4966;4974;5023:3;5011:9;5002:7;4998:23;4994:33;4991:120;;;5030:79;;:::i;:::-;4991:120;5150:1;5175:53;5220:7;5211:6;5200:9;5196:22;5175:53;:::i;:::-;5165:63;;5121:117;5277:2;5303:53;5348:7;5339:6;5328:9;5324:22;5303:53;:::i;:::-;5293:63;;5248:118;5405:2;5431:53;5476:7;5467:6;5456:9;5452:22;5431:53;:::i;:::-;5421:63;;5376:118;5561:2;5550:9;5546:18;5533:32;5592:18;5584:6;5581:30;5578:117;;;5614:79;;:::i;:::-;5578:117;5719:62;5773:7;5764:6;5753:9;5749:22;5719:62;:::i;:::-;5709:72;;5504:287;4855:943;;;;;;;:::o;5804:468::-;5869:6;5877;5926:2;5914:9;5905:7;5901:23;5897:32;5894:119;;;5932:79;;:::i;:::-;5894:119;6052:1;6077:53;6122:7;6113:6;6102:9;6098:22;6077:53;:::i;:::-;6067:63;;6023:117;6179:2;6205:50;6247:7;6238:6;6227:9;6223:22;6205:50;:::i;:::-;6195:60;;6150:115;5804:468;;;;;:::o;6278:474::-;6346:6;6354;6403:2;6391:9;6382:7;6378:23;6374:32;6371:119;;;6409:79;;:::i;:::-;6371:119;6529:1;6554:53;6599:7;6590:6;6579:9;6575:22;6554:53;:::i;:::-;6544:63;;6500:117;6656:2;6682:53;6727:7;6718:6;6707:9;6703:22;6682:53;:::i;:::-;6672:63;;6627:118;6278:474;;;;;:::o;6758:539::-;6842:6;6891:2;6879:9;6870:7;6866:23;6862:32;6859:119;;;6897:79;;:::i;:::-;6859:119;7045:1;7034:9;7030:17;7017:31;7075:18;7067:6;7064:30;7061:117;;;7097:79;;:::i;:::-;7061:117;7202:78;7272:7;7263:6;7252:9;7248:22;7202:78;:::i;:::-;7192:88;;6988:302;6758:539;;;;:::o;7303:327::-;7361:6;7410:2;7398:9;7389:7;7385:23;7381:32;7378:119;;;7416:79;;:::i;:::-;7378:119;7536:1;7561:52;7605:7;7596:6;7585:9;7581:22;7561:52;:::i;:::-;7551:62;;7507:116;7303:327;;;;:::o;7636:349::-;7705:6;7754:2;7742:9;7733:7;7729:23;7725:32;7722:119;;;7760:79;;:::i;:::-;7722:119;7880:1;7905:63;7960:7;7951:6;7940:9;7936:22;7905:63;:::i;:::-;7895:73;;7851:127;7636:349;;;;:::o;7991:509::-;8060:6;8109:2;8097:9;8088:7;8084:23;8080:32;8077:119;;;8115:79;;:::i;:::-;8077:119;8263:1;8252:9;8248:17;8235:31;8293:18;8285:6;8282:30;8279:117;;;8315:79;;:::i;:::-;8279:117;8420:63;8475:7;8466:6;8455:9;8451:22;8420:63;:::i;:::-;8410:73;;8206:287;7991:509;;;;:::o;8506:329::-;8565:6;8614:2;8602:9;8593:7;8589:23;8585:32;8582:119;;;8620:79;;:::i;:::-;8582:119;8740:1;8765:53;8810:7;8801:6;8790:9;8786:22;8765:53;:::i;:::-;8755:63;;8711:117;8506:329;;;;:::o;8841:118::-;8928:24;8946:5;8928:24;:::i;:::-;8923:3;8916:37;8841:118;;:::o;8965:109::-;9046:21;9061:5;9046:21;:::i;:::-;9041:3;9034:34;8965:109;;:::o;9080:360::-;9166:3;9194:38;9226:5;9194:38;:::i;:::-;9248:70;9311:6;9306:3;9248:70;:::i;:::-;9241:77;;9327:52;9372:6;9367:3;9360:4;9353:5;9349:16;9327:52;:::i;:::-;9404:29;9426:6;9404:29;:::i;:::-;9399:3;9395:39;9388:46;;9170:270;9080:360;;;;:::o;9446:364::-;9534:3;9562:39;9595:5;9562:39;:::i;:::-;9617:71;9681:6;9676:3;9617:71;:::i;:::-;9610:78;;9697:52;9742:6;9737:3;9730:4;9723:5;9719:16;9697:52;:::i;:::-;9774:29;9796:6;9774:29;:::i;:::-;9769:3;9765:39;9758:46;;9538:272;9446:364;;;;:::o;9816:366::-;9958:3;9979:67;10043:2;10038:3;9979:67;:::i;:::-;9972:74;;10055:93;10144:3;10055:93;:::i;:::-;10173:2;10168:3;10164:12;10157:19;;9816:366;;;:::o;10188:::-;10330:3;10351:67;10415:2;10410:3;10351:67;:::i;:::-;10344:74;;10427:93;10516:3;10427:93;:::i;:::-;10545:2;10540:3;10536:12;10529:19;;10188:366;;;:::o;10560:::-;10702:3;10723:67;10787:2;10782:3;10723:67;:::i;:::-;10716:74;;10799:93;10888:3;10799:93;:::i;:::-;10917:2;10912:3;10908:12;10901:19;;10560:366;;;:::o;10932:::-;11074:3;11095:67;11159:2;11154:3;11095:67;:::i;:::-;11088:74;;11171:93;11260:3;11171:93;:::i;:::-;11289:2;11284:3;11280:12;11273:19;;10932:366;;;:::o;11304:::-;11446:3;11467:67;11531:2;11526:3;11467:67;:::i;:::-;11460:74;;11543:93;11632:3;11543:93;:::i;:::-;11661:2;11656:3;11652:12;11645:19;;11304:366;;;:::o;11676:::-;11818:3;11839:67;11903:2;11898:3;11839:67;:::i;:::-;11832:74;;11915:93;12004:3;11915:93;:::i;:::-;12033:2;12028:3;12024:12;12017:19;;11676:366;;;:::o;12048:::-;12190:3;12211:67;12275:2;12270:3;12211:67;:::i;:::-;12204:74;;12287:93;12376:3;12287:93;:::i;:::-;12405:2;12400:3;12396:12;12389:19;;12048:366;;;:::o;12420:::-;12562:3;12583:67;12647:2;12642:3;12583:67;:::i;:::-;12576:74;;12659:93;12748:3;12659:93;:::i;:::-;12777:2;12772:3;12768:12;12761:19;;12420:366;;;:::o;12792:::-;12934:3;12955:67;13019:2;13014:3;12955:67;:::i;:::-;12948:74;;13031:93;13120:3;13031:93;:::i;:::-;13149:2;13144:3;13140:12;13133:19;;12792:366;;;:::o;13164:::-;13306:3;13327:67;13391:2;13386:3;13327:67;:::i;:::-;13320:74;;13403:93;13492:3;13403:93;:::i;:::-;13521:2;13516:3;13512:12;13505:19;;13164:366;;;:::o;13536:::-;13678:3;13699:67;13763:2;13758:3;13699:67;:::i;:::-;13692:74;;13775:93;13864:3;13775:93;:::i;:::-;13893:2;13888:3;13884:12;13877:19;;13536:366;;;:::o;13908:::-;14050:3;14071:67;14135:2;14130:3;14071:67;:::i;:::-;14064:74;;14147:93;14236:3;14147:93;:::i;:::-;14265:2;14260:3;14256:12;14249:19;;13908:366;;;:::o;14280:::-;14422:3;14443:67;14507:2;14502:3;14443:67;:::i;:::-;14436:74;;14519:93;14608:3;14519:93;:::i;:::-;14637:2;14632:3;14628:12;14621:19;;14280:366;;;:::o;14652:::-;14794:3;14815:67;14879:2;14874:3;14815:67;:::i;:::-;14808:74;;14891:93;14980:3;14891:93;:::i;:::-;15009:2;15004:3;15000:12;14993:19;;14652:366;;;:::o;15024:::-;15166:3;15187:67;15251:2;15246:3;15187:67;:::i;:::-;15180:74;;15263:93;15352:3;15263:93;:::i;:::-;15381:2;15376:3;15372:12;15365:19;;15024:366;;;:::o;15396:::-;15538:3;15559:67;15623:2;15618:3;15559:67;:::i;:::-;15552:74;;15635:93;15724:3;15635:93;:::i;:::-;15753:2;15748:3;15744:12;15737:19;;15396:366;;;:::o;15768:::-;15910:3;15931:67;15995:2;15990:3;15931:67;:::i;:::-;15924:74;;16007:93;16096:3;16007:93;:::i;:::-;16125:2;16120:3;16116:12;16109:19;;15768:366;;;:::o;16140:::-;16282:3;16303:67;16367:2;16362:3;16303:67;:::i;:::-;16296:74;;16379:93;16468:3;16379:93;:::i;:::-;16497:2;16492:3;16488:12;16481:19;;16140:366;;;:::o;16512:::-;16654:3;16675:67;16739:2;16734:3;16675:67;:::i;:::-;16668:74;;16751:93;16840:3;16751:93;:::i;:::-;16869:2;16864:3;16860:12;16853:19;;16512:366;;;:::o;16884:::-;17026:3;17047:67;17111:2;17106:3;17047:67;:::i;:::-;17040:74;;17123:93;17212:3;17123:93;:::i;:::-;17241:2;17236:3;17232:12;17225:19;;16884:366;;;:::o;17256:::-;17398:3;17419:67;17483:2;17478:3;17419:67;:::i;:::-;17412:74;;17495:93;17584:3;17495:93;:::i;:::-;17613:2;17608:3;17604:12;17597:19;;17256:366;;;:::o;17628:118::-;17715:24;17733:5;17715:24;:::i;:::-;17710:3;17703:37;17628:118;;:::o;17752:222::-;17845:4;17883:2;17872:9;17868:18;17860:26;;17896:71;17964:1;17953:9;17949:17;17940:6;17896:71;:::i;:::-;17752:222;;;;:::o;17980:640::-;18175:4;18213:3;18202:9;18198:19;18190:27;;18227:71;18295:1;18284:9;18280:17;18271:6;18227:71;:::i;:::-;18308:72;18376:2;18365:9;18361:18;18352:6;18308:72;:::i;:::-;18390;18458:2;18447:9;18443:18;18434:6;18390:72;:::i;:::-;18509:9;18503:4;18499:20;18494:2;18483:9;18479:18;18472:48;18537:76;18608:4;18599:6;18537:76;:::i;:::-;18529:84;;17980:640;;;;;;;:::o;18626:210::-;18713:4;18751:2;18740:9;18736:18;18728:26;;18764:65;18826:1;18815:9;18811:17;18802:6;18764:65;:::i;:::-;18626:210;;;;:::o;18842:313::-;18955:4;18993:2;18982:9;18978:18;18970:26;;19042:9;19036:4;19032:20;19028:1;19017:9;19013:17;19006:47;19070:78;19143:4;19134:6;19070:78;:::i;:::-;19062:86;;18842:313;;;;:::o;19161:419::-;19327:4;19365:2;19354:9;19350:18;19342:26;;19414:9;19408:4;19404:20;19400:1;19389:9;19385:17;19378:47;19442:131;19568:4;19442:131;:::i;:::-;19434:139;;19161:419;;;:::o;19586:::-;19752:4;19790:2;19779:9;19775:18;19767:26;;19839:9;19833:4;19829:20;19825:1;19814:9;19810:17;19803:47;19867:131;19993:4;19867:131;:::i;:::-;19859:139;;19586:419;;;:::o;20011:::-;20177:4;20215:2;20204:9;20200:18;20192:26;;20264:9;20258:4;20254:20;20250:1;20239:9;20235:17;20228:47;20292:131;20418:4;20292:131;:::i;:::-;20284:139;;20011:419;;;:::o;20436:::-;20602:4;20640:2;20629:9;20625:18;20617:26;;20689:9;20683:4;20679:20;20675:1;20664:9;20660:17;20653:47;20717:131;20843:4;20717:131;:::i;:::-;20709:139;;20436:419;;;:::o;20861:::-;21027:4;21065:2;21054:9;21050:18;21042:26;;21114:9;21108:4;21104:20;21100:1;21089:9;21085:17;21078:47;21142:131;21268:4;21142:131;:::i;:::-;21134:139;;20861:419;;;:::o;21286:::-;21452:4;21490:2;21479:9;21475:18;21467:26;;21539:9;21533:4;21529:20;21525:1;21514:9;21510:17;21503:47;21567:131;21693:4;21567:131;:::i;:::-;21559:139;;21286:419;;;:::o;21711:::-;21877:4;21915:2;21904:9;21900:18;21892:26;;21964:9;21958:4;21954:20;21950:1;21939:9;21935:17;21928:47;21992:131;22118:4;21992:131;:::i;:::-;21984:139;;21711:419;;;:::o;22136:::-;22302:4;22340:2;22329:9;22325:18;22317:26;;22389:9;22383:4;22379:20;22375:1;22364:9;22360:17;22353:47;22417:131;22543:4;22417:131;:::i;:::-;22409:139;;22136:419;;;:::o;22561:::-;22727:4;22765:2;22754:9;22750:18;22742:26;;22814:9;22808:4;22804:20;22800:1;22789:9;22785:17;22778:47;22842:131;22968:4;22842:131;:::i;:::-;22834:139;;22561:419;;;:::o;22986:::-;23152:4;23190:2;23179:9;23175:18;23167:26;;23239:9;23233:4;23229:20;23225:1;23214:9;23210:17;23203:47;23267:131;23393:4;23267:131;:::i;:::-;23259:139;;22986:419;;;:::o;23411:::-;23577:4;23615:2;23604:9;23600:18;23592:26;;23664:9;23658:4;23654:20;23650:1;23639:9;23635:17;23628:47;23692:131;23818:4;23692:131;:::i;:::-;23684:139;;23411:419;;;:::o;23836:::-;24002:4;24040:2;24029:9;24025:18;24017:26;;24089:9;24083:4;24079:20;24075:1;24064:9;24060:17;24053:47;24117:131;24243:4;24117:131;:::i;:::-;24109:139;;23836:419;;;:::o;24261:::-;24427:4;24465:2;24454:9;24450:18;24442:26;;24514:9;24508:4;24504:20;24500:1;24489:9;24485:17;24478:47;24542:131;24668:4;24542:131;:::i;:::-;24534:139;;24261:419;;;:::o;24686:::-;24852:4;24890:2;24879:9;24875:18;24867:26;;24939:9;24933:4;24929:20;24925:1;24914:9;24910:17;24903:47;24967:131;25093:4;24967:131;:::i;:::-;24959:139;;24686:419;;;:::o;25111:::-;25277:4;25315:2;25304:9;25300:18;25292:26;;25364:9;25358:4;25354:20;25350:1;25339:9;25335:17;25328:47;25392:131;25518:4;25392:131;:::i;:::-;25384:139;;25111:419;;;:::o;25536:::-;25702:4;25740:2;25729:9;25725:18;25717:26;;25789:9;25783:4;25779:20;25775:1;25764:9;25760:17;25753:47;25817:131;25943:4;25817:131;:::i;:::-;25809:139;;25536:419;;;:::o;25961:::-;26127:4;26165:2;26154:9;26150:18;26142:26;;26214:9;26208:4;26204:20;26200:1;26189:9;26185:17;26178:47;26242:131;26368:4;26242:131;:::i;:::-;26234:139;;25961:419;;;:::o;26386:::-;26552:4;26590:2;26579:9;26575:18;26567:26;;26639:9;26633:4;26629:20;26625:1;26614:9;26610:17;26603:47;26667:131;26793:4;26667:131;:::i;:::-;26659:139;;26386:419;;;:::o;26811:::-;26977:4;27015:2;27004:9;27000:18;26992:26;;27064:9;27058:4;27054:20;27050:1;27039:9;27035:17;27028:47;27092:131;27218:4;27092:131;:::i;:::-;27084:139;;26811:419;;;:::o;27236:::-;27402:4;27440:2;27429:9;27425:18;27417:26;;27489:9;27483:4;27479:20;27475:1;27464:9;27460:17;27453:47;27517:131;27643:4;27517:131;:::i;:::-;27509:139;;27236:419;;;:::o;27661:::-;27827:4;27865:2;27854:9;27850:18;27842:26;;27914:9;27908:4;27904:20;27900:1;27889:9;27885:17;27878:47;27942:131;28068:4;27942:131;:::i;:::-;27934:139;;27661:419;;;:::o;28086:222::-;28179:4;28217:2;28206:9;28202:18;28194:26;;28230:71;28298:1;28287:9;28283:17;28274:6;28230:71;:::i;:::-;28086:222;;;;:::o;28314:129::-;28348:6;28375:20;;:::i;:::-;28365:30;;28404:33;28432:4;28424:6;28404:33;:::i;:::-;28314:129;;;:::o;28449:75::-;28482:6;28515:2;28509:9;28499:19;;28449:75;:::o;28530:311::-;28607:4;28697:18;28689:6;28686:30;28683:56;;;28719:18;;:::i;:::-;28683:56;28769:4;28761:6;28757:17;28749:25;;28829:4;28823;28819:15;28811:23;;28530:311;;;:::o;28847:307::-;28908:4;28998:18;28990:6;28987:30;28984:56;;;29020:18;;:::i;:::-;28984:56;29058:29;29080:6;29058:29;:::i;:::-;29050:37;;29142:4;29136;29132:15;29124:23;;28847:307;;;:::o;29160:308::-;29222:4;29312:18;29304:6;29301:30;29298:56;;;29334:18;;:::i;:::-;29298:56;29372:29;29394:6;29372:29;:::i;:::-;29364:37;;29456:4;29450;29446:15;29438:23;;29160:308;;;:::o;29474:98::-;29525:6;29559:5;29553:12;29543:22;;29474:98;;;:::o;29578:99::-;29630:6;29664:5;29658:12;29648:22;;29578:99;;;:::o;29683:168::-;29766:11;29800:6;29795:3;29788:19;29840:4;29835:3;29831:14;29816:29;;29683:168;;;;:::o;29857:169::-;29941:11;29975:6;29970:3;29963:19;30015:4;30010:3;30006:14;29991:29;;29857:169;;;;:::o;30032:273::-;30072:3;30091:20;30109:1;30091:20;:::i;:::-;30086:25;;30125:20;30143:1;30125:20;:::i;:::-;30120:25;;30247:1;30211:34;30207:42;30204:1;30201:49;30198:75;;;30253:18;;:::i;:::-;30198:75;30297:1;30294;30290:9;30283:16;;30032:273;;;;:::o;30311:305::-;30351:3;30370:20;30388:1;30370:20;:::i;:::-;30365:25;;30404:20;30422:1;30404:20;:::i;:::-;30399:25;;30558:1;30490:66;30486:74;30483:1;30480:81;30477:107;;;30564:18;;:::i;:::-;30477:107;30608:1;30605;30601:9;30594:16;;30311:305;;;;:::o;30622:191::-;30662:4;30682:20;30700:1;30682:20;:::i;:::-;30677:25;;30716:20;30734:1;30716:20;:::i;:::-;30711:25;;30755:1;30752;30749:8;30746:34;;;30760:18;;:::i;:::-;30746:34;30805:1;30802;30798:9;30790:17;;30622:191;;;;:::o;30819:::-;30859:4;30879:20;30897:1;30879:20;:::i;:::-;30874:25;;30913:20;30931:1;30913:20;:::i;:::-;30908:25;;30952:1;30949;30946:8;30943:34;;;30957:18;;:::i;:::-;30943:34;31002:1;30999;30995:9;30987:17;;30819:191;;;;:::o;31016:96::-;31053:7;31082:24;31100:5;31082:24;:::i;:::-;31071:35;;31016:96;;;:::o;31118:90::-;31152:7;31195:5;31188:13;31181:21;31170:32;;31118:90;;;:::o;31214:149::-;31250:7;31290:66;31283:5;31279:78;31268:89;;31214:149;;;:::o;31369:118::-;31406:7;31446:34;31439:5;31435:46;31424:57;;31369:118;;;:::o;31493:126::-;31530:7;31570:42;31563:5;31559:54;31548:65;;31493:126;;;:::o;31625:77::-;31662:7;31691:5;31680:16;;31625:77;;;:::o;31708:154::-;31792:6;31787:3;31782;31769:30;31854:1;31845:6;31840:3;31836:16;31829:27;31708:154;;;:::o;31868:307::-;31936:1;31946:113;31960:6;31957:1;31954:13;31946:113;;;32045:1;32040:3;32036:11;32030:18;32026:1;32021:3;32017:11;32010:39;31982:2;31979:1;31975:10;31970:15;;31946:113;;;32077:6;32074:1;32071:13;32068:101;;;32157:1;32148:6;32143:3;32139:16;32132:27;32068:101;31917:258;31868:307;;;:::o;32181:171::-;32220:3;32243:24;32261:5;32243:24;:::i;:::-;32234:33;;32289:4;32282:5;32279:15;32276:41;;;32297:18;;:::i;:::-;32276:41;32344:1;32337:5;32333:13;32326:20;;32181:171;;;:::o;32358:320::-;32402:6;32439:1;32433:4;32429:12;32419:22;;32486:1;32480:4;32476:12;32507:18;32497:81;;32563:4;32555:6;32551:17;32541:27;;32497:81;32625:2;32617:6;32614:14;32594:18;32591:38;32588:84;;;32644:18;;:::i;:::-;32588:84;32409:269;32358:320;;;:::o;32684:281::-;32767:27;32789:4;32767:27;:::i;:::-;32759:6;32755:40;32897:6;32885:10;32882:22;32861:18;32849:10;32846:34;32843:62;32840:88;;;32908:18;;:::i;:::-;32840:88;32948:10;32944:2;32937:22;32727:238;32684:281;;:::o;32971:233::-;33010:3;33033:24;33051:5;33033:24;:::i;:::-;33024:33;;33079:66;33072:5;33069:77;33066:103;;;33149:18;;:::i;:::-;33066:103;33196:1;33189:5;33185:13;33178:20;;32971:233;;;:::o;33210:180::-;33258:77;33255:1;33248:88;33355:4;33352:1;33345:15;33379:4;33376:1;33369:15;33396:180;33444:77;33441:1;33434:88;33541:4;33538:1;33531:15;33565:4;33562:1;33555:15;33582:180;33630:77;33627:1;33620:88;33727:4;33724:1;33717:15;33751:4;33748:1;33741:15;33768:180;33816:77;33813:1;33806:88;33913:4;33910:1;33903:15;33937:4;33934:1;33927:15;33954:117;34063:1;34060;34053:12;34077:117;34186:1;34183;34176:12;34200:117;34309:1;34306;34299:12;34323:117;34432:1;34429;34422:12;34446:117;34555:1;34552;34545:12;34569:102;34610:6;34661:2;34657:7;34652:2;34645:5;34641:14;34637:28;34627:38;;34569:102;;;:::o;34677:221::-;34817:34;34813:1;34805:6;34801:14;34794:58;34886:4;34881:2;34873:6;34869:15;34862:29;34677:221;:::o;34904:181::-;35044:33;35040:1;35032:6;35028:14;35021:57;34904:181;:::o;35091:225::-;35231:34;35227:1;35219:6;35215:14;35208:58;35300:8;35295:2;35287:6;35283:15;35276:33;35091:225;:::o;35322:229::-;35462:34;35458:1;35450:6;35446:14;35439:58;35531:12;35526:2;35518:6;35514:15;35507:37;35322:229;:::o;35557:222::-;35697:34;35693:1;35685:6;35681:14;35674:58;35766:5;35761:2;35753:6;35749:15;35742:30;35557:222;:::o;35785:224::-;35925:34;35921:1;35913:6;35909:14;35902:58;35994:7;35989:2;35981:6;35977:15;35970:32;35785:224;:::o;36015:244::-;36155:34;36151:1;36143:6;36139:14;36132:58;36224:27;36219:2;36211:6;36207:15;36200:52;36015:244;:::o;36265:230::-;36405:34;36401:1;36393:6;36389:14;36382:58;36474:13;36469:2;36461:6;36457:15;36450:38;36265:230;:::o;36501:225::-;36641:34;36637:1;36629:6;36625:14;36618:58;36710:8;36705:2;36697:6;36693:15;36686:33;36501:225;:::o;36732:182::-;36872:34;36868:1;36860:6;36856:14;36849:58;36732:182;:::o;36920:176::-;37060:28;37056:1;37048:6;37044:14;37037:52;36920:176;:::o;37102:237::-;37242:34;37238:1;37230:6;37226:14;37219:58;37311:20;37306:2;37298:6;37294:15;37287:45;37102:237;:::o;37345:221::-;37485:34;37481:1;37473:6;37469:14;37462:58;37554:4;37549:2;37541:6;37537:15;37530:29;37345:221;:::o;37572:238::-;37712:34;37708:1;37700:6;37696:14;37689:58;37781:21;37776:2;37768:6;37764:15;37757:46;37572:238;:::o;37816:179::-;37956:31;37952:1;37944:6;37940:14;37933:55;37816:179;:::o;38001:220::-;38141:34;38137:1;38129:6;38125:14;38118:58;38210:3;38205:2;38197:6;38193:15;38186:28;38001:220;:::o;38227:233::-;38367:34;38363:1;38355:6;38351:14;38344:58;38436:16;38431:2;38423:6;38419:15;38412:41;38227:233;:::o;38466:181::-;38606:33;38602:1;38594:6;38590:14;38583:57;38466:181;:::o;38653:234::-;38793:34;38789:1;38781:6;38777:14;38770:58;38862:17;38857:2;38849:6;38845:15;38838:42;38653:234;:::o;38893:232::-;39033:34;39029:1;39021:6;39017:14;39010:58;39102:15;39097:2;39089:6;39085:15;39078:40;38893:232;:::o;39131:221::-;39271:34;39267:1;39259:6;39255:14;39248:58;39340:4;39335:2;39327:6;39323:15;39316:29;39131:221;:::o;39358:122::-;39431:24;39449:5;39431:24;:::i;:::-;39424:5;39421:35;39411:63;;39470:1;39467;39460:12;39411:63;39358:122;:::o;39486:116::-;39556:21;39571:5;39556:21;:::i;:::-;39549:5;39546:32;39536:60;;39592:1;39589;39582:12;39536:60;39486:116;:::o;39608:120::-;39680:23;39697:5;39680:23;:::i;:::-;39673:5;39670:34;39660:62;;39718:1;39715;39708:12;39660:62;39608:120;:::o;39734:122::-;39807:24;39825:5;39807:24;:::i;:::-;39800:5;39797:35;39787:63;;39846:1;39843;39836:12;39787:63;39734:122;:::o

Swarm Source

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