Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
202 HODLeR
Holders
79
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 HODLeRLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
HODLeRShoes
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-06 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol // OpenZeppelin Contracts (last updated v4.6.0) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. * * WARNING: You should avoid using leaf values that are 64 bytes long prior to * hashing, or use a hash function other than keccak256 for hashing leaves. * This is because the concatenation of a sorted pair of internal nodes in * the merkle tree could be reinterpreted as a leaf value. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } // 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/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: @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); } } // 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 (last updated v4.6.0) (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 `IERC721Receiver.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 (last updated v4.6.0) (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`. * * 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; /** * @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 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 the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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); } // 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: contracts/finalcontract.sol pragma solidity ^0.8.0; error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error ApproveToCaller(); error ApprovalToCurrentOwner(); error BalanceQueryForZeroAddress(); error MintedQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error OwnerIndexOutOfBounds(); error OwnerQueryForNonexistentToken(); error TokenIndexOutOfBounds(); error TransferCallerNotOwnerNorApproved(); error TransferFromIncorrectOwner(); error TransferToNonERC721ReceiverImplementer(); error TransferToZeroAddress(); error UnableDetermineTokenOwner(); error URIQueryForNonexistentToken(); /** * @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..). * * Does not support burning tokens to address(0). * * Assumes that an owner cannot have more than the 2**128 - 1 (max value of uint128) of supply */ 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 internal _currentIndex; // 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) internal _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; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @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) { if (index >= totalSupply()) revert TokenIndexOutOfBounds(); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(totalSupply). 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) { if (index >= balanceOf(owner)) revert OwnerIndexOutOfBounds(); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx; address currOwnershipAddr; // Counter overflow is impossible as the loop breaks when uint256 i is equal to another uint256 numMintedSoFar. unchecked { for (uint256 i; 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++; } } } // Execution should never reach this point. assert(false); return tokenIdsIdx; } /** * @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) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { if (owner == address(0)) revert MintedQueryForZeroAddress(); return uint256(_addressData[owner].numberMinted); } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { if (!_exists(tokenId)) revert OwnerQueryForNonexistentToken(); unchecked { for (uint256 curr = tokenId; curr >= 0; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } revert UnableDetermineTokenOwner(); } /** * @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) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) revert ApprovalCallerNotOwnerNorApproved(); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { if (operator == _msgSender()) revert ApproveToCaller(); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); if (!_checkOnERC721Received(from, to, tokenId, _data)) revert TransferToNonERC721ReceiverImplementer(); } /** * @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 Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _mint(to, quantity, _data, true); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint( address to, uint256 quantity, bytes memory _data, bool safe ) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 3.4e38 (2**128) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.56e77 (2**256) - 1 unchecked { _addressData[to].balance += uint128(quantity); _addressData[to].numberMinted += uint128(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; for (uint256 i; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); if (safe && !_checkOnERC721Received(address(0), to, updatedIndex, _data)) { revert TransferToNonERC721ReceiverImplementer(); } 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())); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (prevOwnership.addr != from) revert TransferFromIncorrectOwner(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId].addr = to; _ownerships[tokenId].startTimestamp = 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].addr = prevOwnership.addr; _ownerships[nextTokenId].startTimestamp = 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); } /** * @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 TransferToNonERC721ReceiverImplementer(); 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 {} } contract HODLeRShoes is ERC721A, Ownable{ using Strings for uint256; uint256 public constant MAX_SUPPLY = 200; uint256 public constant MAX_PUBLIC_MINT = 5; uint256 public constant MAX_WHITELIST_MINT = 5; uint256 public PUBLIC_SALE_PRICE = .05 ether; uint256 public WHITELIST_SALE_PRICE = .05 ether; string private baseTokenUri; string public placeholderTokenUri; //deploy smart contract, toggle WL, toggle WL when done, toggle publicSale //2 days later toggle reveal bool public isRevealed; bool public publicSale; bool public whiteListSale; bool public pause; bool public teamMinted; bytes32 private merkleRoot; mapping(address => uint256) public totalPublicMint; mapping(address => uint256) public totalWhitelistMint; constructor() ERC721A("HODLeR Shoes", "HODLeR"){ } modifier callerIsUser() { require(tx.origin == msg.sender, "HODLeR Shoes :: Cannot be called by a contract"); _; } function mint(uint256 _quantity) external payable callerIsUser{ require(publicSale, "HODLeR Shoes :: Not Yet Active."); require((totalSupply() + _quantity) <= MAX_SUPPLY, "HODLeR Shoes :: Beyond Max Supply"); require((totalPublicMint[msg.sender] +_quantity) <= MAX_PUBLIC_MINT, "HODLeR Shoes :: Already minted 3 times!"); require(msg.value >= (PUBLIC_SALE_PRICE * _quantity), "HODLeR Shoes :: Below "); totalPublicMint[msg.sender] += _quantity; _safeMint(msg.sender, _quantity); } function whitelistMint(bytes32[] memory _merkleProof, uint256 _quantity) external payable callerIsUser{ require(whiteListSale, "HODLeR Shoes :: Minting is on Pause"); require((totalSupply() + _quantity) <= MAX_SUPPLY, "HODLeR Shoes :: Cannot mint beyond max supply"); require((totalWhitelistMint[msg.sender] + _quantity) <= MAX_WHITELIST_MINT, "HODLeR Shoes :: Cannot mint beyond whitelist max mint!"); require(msg.value >= (WHITELIST_SALE_PRICE * _quantity), "HODLeR Shoes :: Payment is below the price"); //create leaf node bytes32 sender = keccak256(abi.encodePacked(msg.sender)); require(MerkleProof.verify(_merkleProof, merkleRoot, sender), "HODLeR Shoes :: You are not whitelisted"); totalWhitelistMint[msg.sender] += _quantity; _safeMint(msg.sender, _quantity); } function teamMint() external onlyOwner{ require(!teamMinted, "HODLeR Shoes :: Team already minted"); teamMinted = true; _safeMint(msg.sender, 10); } function _baseURI() internal view virtual override returns (string memory) { return baseTokenUri; } //return uri for certain token function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); uint256 trueId = tokenId + 1; if(!isRevealed){ return placeholderTokenUri; } //string memory baseURI = _baseURI(); return bytes(baseTokenUri).length > 0 ? string(abi.encodePacked(baseTokenUri, trueId.toString(), ".json")) : ""; } /// @dev walletOf() function shouldn't be called on-chain due to gas consumption function walletOf() external view returns(uint256[] memory){ address _owner = msg.sender; uint256 numberOfOwnedNFT = balanceOf(_owner); uint256[] memory ownerIds = new uint256[](numberOfOwnedNFT); for(uint256 index = 0; index < numberOfOwnedNFT; index++){ ownerIds[index] = tokenOfOwnerByIndex(_owner, index); } return ownerIds; } function setTokenUri(string memory _baseTokenUri) external onlyOwner{ baseTokenUri = _baseTokenUri; } function setPlaceHolderUri(string memory _placeholderTokenUri) external onlyOwner{ placeholderTokenUri = _placeholderTokenUri; } function setMerkleRoot(bytes32 _merkleRoot) external onlyOwner{ merkleRoot = _merkleRoot; } function getMerkleRoot() external view returns (bytes32){ return merkleRoot; } function togglePause() external onlyOwner{ pause = !pause; } function toggleWhiteListSale() external onlyOwner{ whiteListSale = !whiteListSale; } function togglePublicSale() external onlyOwner{ publicSale = !publicSale; } function update_public_price(uint price) external onlyOwner { PUBLIC_SALE_PRICE = price; } function update_preSale_price(uint price) external onlyOwner { WHITELIST_SALE_PRICE = price; } function AirDrop(address[] memory _wallets, uint _count) public onlyOwner{ require(_wallets.length > 0, "mint at least one token"); require(totalSupply() + _wallets.length <= MAX_SUPPLY, "not enough tokens left"); for (uint i = 0; i < _wallets.length; i++) { _safeMint(_wallets[i], _count); } } function toggleReveal() external onlyOwner{ isRevealed = !isRevealed; } function withdraw() external onlyOwner{ uint _balance = address(this).balance; payable(owner()).transfer(_balance );//owner } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerIndexOutOfBounds","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TokenIndexOutOfBounds","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"UnableDetermineTokenOwner","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"_wallets","type":"address[]"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"AirDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"MAX_PUBLIC_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_WHITELIST_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PUBLIC_SALE_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WHITELIST_SALE_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"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":"isRevealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"placeholderTokenUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_placeholderTokenUri","type":"string"}],"name":"setPlaceHolderUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseTokenUri","type":"string"}],"name":"setTokenUri","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":[],"name":"teamMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"teamMinted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"togglePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePublicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleReveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleWhiteListSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalPublicMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalWhitelistMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"update_preSale_price","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"update_public_price","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"walletOf","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whiteListSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"},{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405266b1a2bc2ec5000060085566b1a2bc2ec500006009553480156200002757600080fd5b506040518060400160405280600c81526020017f484f444c65522053686f657300000000000000000000000000000000000000008152506040518060400160405280600681526020017f484f444c655200000000000000000000000000000000000000000000000000008152508160019080519060200190620000ac929190620001bc565b508060029080519060200190620000c5929190620001bc565b505050620000e8620000dc620000ee60201b60201c565b620000f660201b60201c565b620002d1565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001ca906200026c565b90600052602060002090601f016020900481019282620001ee57600085556200023a565b82601f106200020957805160ff19168380011785556200023a565b828001600101855582156200023a579182015b82811115620002395782518255916020019190600101906200021c565b5b5090506200024991906200024d565b5090565b5b80821115620002685760008160009055506001016200024e565b5090565b600060028204905060018216806200028557607f821691505b602082108114156200029c576200029b620002a2565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614fe880620002e16000396000f3fe6080604052600436106102935760003560e01c806370a082311161015a578063b88d4fde116100c1578063e222c7f91161007a578063e222c7f9146109a0578063e2a70eaf146109b7578063e8b5498d146109e0578063e985e9c514610a0b578063eeb9052f14610a48578063f2fde38b14610a7157610293565b8063b88d4fde146108b6578063ba7a86b8146108df578063bc912e1a146108f6578063c08dfd3c14610921578063c4ae31681461094c578063c87b56dd1461096357610293565b80638bb64a8c116101135780638bb64a8c146107db5780638da5cb5b146107f257806395d89b411461081d578063a0712d6814610848578063a22cb46514610864578063b0962c531461088d57610293565b806370a08231146106dd578063715018a61461071a5780637cb647591461073157806383a974a21461075a5780638456cb591461078557806386a173ee146107b057610293565b806332cb6b0c116101fe5780634f6ccce7116101b75780634f6ccce7146105cd57806354214f691461060a5780635b8ad429146106355780636352211e1461064c57806363adc5a51461068957806365f13097146106b257610293565b806332cb6b0c146104e157806333bc1c5c1461050c5780633ccfd60b1461053757806342842e0e1461054e57806349590657146105775780634cf5f7a4146105a257610293565b8063095ea7b311610250578063095ea7b3146103ce57806318160ddd146103f75780631c16521c1461042257806323b872dd1461045f5780632904e6d9146104885780632f745c59146104a457610293565b806301ffc9a7146102985780630345e3cb146102d55780630675b7c61461031257806306fdde031461033b57806307e89ec014610366578063081812fc14610391575b600080fd5b3480156102a457600080fd5b506102bf60048036038101906102ba9190613cea565b610a9a565b6040516102cc91906142da565b60405180910390f35b3480156102e157600080fd5b506102fc60048036038101906102f79190613a42565b610be4565b6040516103099190614532565b60405180910390f35b34801561031e57600080fd5b5061033960048036038101906103349190613d44565b610bfc565b005b34801561034757600080fd5b50610350610c92565b60405161035d9190614310565b60405180910390f35b34801561037257600080fd5b5061037b610d24565b6040516103889190614532565b60405180910390f35b34801561039d57600080fd5b506103b860048036038101906103b39190613d8d565b610d2a565b6040516103c59190614251565b60405180910390f35b3480156103da57600080fd5b506103f560048036038101906103f09190613bc5565b610da6565b005b34801561040357600080fd5b5061040c610eb1565b6040516104199190614532565b60405180910390f35b34801561042e57600080fd5b5061044960048036038101906104449190613a42565b610eba565b6040516104569190614532565b60405180910390f35b34801561046b57600080fd5b5061048660048036038101906104819190613aaf565b610ed2565b005b6104a2600480360381019061049d9190613c61565b610ee2565b005b3480156104b057600080fd5b506104cb60048036038101906104c69190613bc5565b6111af565b6040516104d89190614532565b60405180910390f35b3480156104ed57600080fd5b506104f6611373565b6040516105039190614532565b60405180910390f35b34801561051857600080fd5b50610521611378565b60405161052e91906142da565b60405180910390f35b34801561054357600080fd5b5061054c61138b565b005b34801561055a57600080fd5b5061057560048036038101906105709190613aaf565b61145d565b005b34801561058357600080fd5b5061058c61147d565b60405161059991906142f5565b60405180910390f35b3480156105ae57600080fd5b506105b7611487565b6040516105c49190614310565b60405180910390f35b3480156105d957600080fd5b506105f460048036038101906105ef9190613d8d565b611515565b6040516106019190614532565b60405180910390f35b34801561061657600080fd5b5061061f61155f565b60405161062c91906142da565b60405180910390f35b34801561064157600080fd5b5061064a611572565b005b34801561065857600080fd5b50610673600480360381019061066e9190613d8d565b61161a565b6040516106809190614251565b60405180910390f35b34801561069557600080fd5b506106b060048036038101906106ab9190613d8d565b611630565b005b3480156106be57600080fd5b506106c76116b6565b6040516106d49190614532565b60405180910390f35b3480156106e957600080fd5b5061070460048036038101906106ff9190613a42565b6116bb565b6040516107119190614532565b60405180910390f35b34801561072657600080fd5b5061072f61179b565b005b34801561073d57600080fd5b5061075860048036038101906107539190613cbd565b611823565b005b34801561076657600080fd5b5061076f6118a9565b60405161077c91906142b8565b60405180910390f35b34801561079157600080fd5b5061079a61195b565b6040516107a791906142da565b60405180910390f35b3480156107bc57600080fd5b506107c561196e565b6040516107d291906142da565b60405180910390f35b3480156107e757600080fd5b506107f0611981565b005b3480156107fe57600080fd5b50610807611a29565b6040516108149190614251565b60405180910390f35b34801561082957600080fd5b50610832611a53565b60405161083f9190614310565b60405180910390f35b610862600480360381019061085d9190613d8d565b611ae5565b005b34801561087057600080fd5b5061088b60048036038101906108869190613b85565b611d39565b005b34801561089957600080fd5b506108b460048036038101906108af9190613d44565b611eb1565b005b3480156108c257600080fd5b506108dd60048036038101906108d89190613b02565b611f47565b005b3480156108eb57600080fd5b506108f4611f9a565b005b34801561090257600080fd5b5061090b61208e565b6040516109189190614532565b60405180910390f35b34801561092d57600080fd5b50610936612094565b6040516109439190614532565b60405180910390f35b34801561095857600080fd5b50610961612099565b005b34801561096f57600080fd5b5061098a60048036038101906109859190613d8d565b612141565b6040516109979190614310565b60405180910390f35b3480156109ac57600080fd5b506109b56122a3565b005b3480156109c357600080fd5b506109de60048036038101906109d99190613d8d565b61234b565b005b3480156109ec57600080fd5b506109f56123d1565b604051610a0291906142da565b60405180910390f35b348015610a1757600080fd5b50610a326004803603810190610a2d9190613a6f565b6123e4565b604051610a3f91906142da565b60405180910390f35b348015610a5457600080fd5b50610a6f6004803603810190610a6a9190613c05565b612478565b005b348015610a7d57600080fd5b50610a986004803603810190610a939190613a42565b6125d7565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b6557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bcd57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bdd5750610bdc826126cf565b5b9050919050565b600f6020528060005260406000206000915090505481565b610c04612739565b73ffffffffffffffffffffffffffffffffffffffff16610c22611a29565b73ffffffffffffffffffffffffffffffffffffffff1614610c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6f90614452565b60405180910390fd5b80600a9080519060200190610c8e9291906136cb565b5050565b606060018054610ca190614892565b80601f0160208091040260200160405190810160405280929190818152602001828054610ccd90614892565b8015610d1a5780601f10610cef57610100808354040283529160200191610d1a565b820191906000526020600020905b815481529060010190602001808311610cfd57829003601f168201915b5050505050905090565b60085481565b6000610d3582612741565b610d6b576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610db18261161a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e19576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e38612739565b73ffffffffffffffffffffffffffffffffffffffff1614158015610e6a5750610e6881610e63612739565b6123e4565b155b15610ea1576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610eac83838361274e565b505050565b60008054905090565b600e6020528060005260406000206000915090505481565b610edd838383612800565b505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610f50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f47906144d2565b60405180910390fd5b600c60029054906101000a900460ff16610f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9690614352565b60405180910390fd5b60c881610faa610eb1565b610fb491906146bd565b1115610ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fec90614412565b60405180910390fd5b600581600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461104291906146bd565b1115611083576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107a90614392565b60405180910390fd5b806009546110919190614744565b3410156110d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ca90614432565b60405180910390fd5b6000336040516020016110e69190614207565b60405160208183030381529060405280519060200120905061110b83600d5483612d25565b61114a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114190614472565b60405180910390fd5b81600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461119991906146bd565b925050819055506111aa3383612d3c565b505050565b60006111ba836116bb565b82106111f2576040517f0ddac30e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006111fc610eb1565b905060008060005b83811015611356576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146112f657806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611348578684141561133f57819550505050505061136d565b83806001019450505b508080600101915050611204565b50600061136657611365614993565b5b8193505050505b92915050565b60c881565b600c60019054906101000a900460ff1681565b611393612739565b73ffffffffffffffffffffffffffffffffffffffff166113b1611a29565b73ffffffffffffffffffffffffffffffffffffffff1614611407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fe90614452565b60405180910390fd5b6000479050611414611a29565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611459573d6000803e3d6000fd5b5050565b61147883838360405180602001604052806000815250611f47565b505050565b6000600d54905090565b600b805461149490614892565b80601f01602080910402602001604051908101604052809291908181526020018280546114c090614892565b801561150d5780601f106114e25761010080835404028352916020019161150d565b820191906000526020600020905b8154815290600101906020018083116114f057829003601f168201915b505050505081565b600061151f610eb1565b8210611557576040517fa723001c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b819050919050565b600c60009054906101000a900460ff1681565b61157a612739565b73ffffffffffffffffffffffffffffffffffffffff16611598611a29565b73ffffffffffffffffffffffffffffffffffffffff16146115ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e590614452565b60405180910390fd5b600c60009054906101000a900460ff1615600c60006101000a81548160ff021916908315150217905550565b600061162582612d5a565b600001519050919050565b611638612739565b73ffffffffffffffffffffffffffffffffffffffff16611656611a29565b73ffffffffffffffffffffffffffffffffffffffff16146116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a390614452565b60405180910390fd5b8060098190555050565b600581565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611723576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6117a3612739565b73ffffffffffffffffffffffffffffffffffffffff166117c1611a29565b73ffffffffffffffffffffffffffffffffffffffff1614611817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180e90614452565b60405180910390fd5b6118216000612ee2565b565b61182b612739565b73ffffffffffffffffffffffffffffffffffffffff16611849611a29565b73ffffffffffffffffffffffffffffffffffffffff161461189f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189690614452565b60405180910390fd5b80600d8190555050565b6060600033905060006118bb826116bb565b905060008167ffffffffffffffff8111156118d9576118d8614a7e565b5b6040519080825280602002602001820160405280156119075781602001602082028036833780820191505090505b50905060005b828110156119515761191f84826111af565b82828151811061193257611931614a4f565b5b6020026020010181815250508080611949906148f5565b91505061190d565b5080935050505090565b600c60039054906101000a900460ff1681565b600c60029054906101000a900460ff1681565b611989612739565b73ffffffffffffffffffffffffffffffffffffffff166119a7611a29565b73ffffffffffffffffffffffffffffffffffffffff16146119fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f490614452565b60405180910390fd5b600c60029054906101000a900460ff1615600c60026101000a81548160ff021916908315150217905550565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054611a6290614892565b80601f0160208091040260200160405190810160405280929190818152602001828054611a8e90614892565b8015611adb5780601f10611ab057610100808354040283529160200191611adb565b820191906000526020600020905b815481529060010190602001808311611abe57829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4a906144d2565b60405180910390fd5b600c60019054906101000a900460ff16611ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b99906143d2565b60405180910390fd5b60c881611bad610eb1565b611bb791906146bd565b1115611bf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bef906143f2565b60405180910390fd5b600581600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c4591906146bd565b1115611c86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7d906144b2565b60405180910390fd5b80600854611c949190614744565b341015611cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccd906143b2565b60405180910390fd5b80600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d2591906146bd565b92505081905550611d363382612d3c565b50565b611d41612739565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611da6576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060066000611db3612739565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611e60612739565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ea591906142da565b60405180910390a35050565b611eb9612739565b73ffffffffffffffffffffffffffffffffffffffff16611ed7611a29565b73ffffffffffffffffffffffffffffffffffffffff1614611f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2490614452565b60405180910390fd5b80600b9080519060200190611f439291906136cb565b5050565b611f52848484612800565b611f5e84848484612fa8565b611f94576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b611fa2612739565b73ffffffffffffffffffffffffffffffffffffffff16611fc0611a29565b73ffffffffffffffffffffffffffffffffffffffff1614612016576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200d90614452565b60405180910390fd5b600c60049054906101000a900460ff1615612066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205d90614332565b60405180910390fd5b6001600c60046101000a81548160ff02191690831515021790555061208c33600a612d3c565b565b60095481565b600581565b6120a1612739565b73ffffffffffffffffffffffffffffffffffffffff166120bf611a29565b73ffffffffffffffffffffffffffffffffffffffff1614612115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210c90614452565b60405180910390fd5b600c60039054906101000a900460ff1615600c60036101000a81548160ff021916908315150217905550565b606061214c82612741565b61218b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218290614492565b60405180910390fd5b600060018361219a91906146bd565b9050600c60009054906101000a900460ff1661224357600b80546121bd90614892565b80601f01602080910402602001604051908101604052809291908181526020018280546121e990614892565b80156122365780601f1061220b57610100808354040283529160200191612236565b820191906000526020600020905b81548152906001019060200180831161221957829003601f168201915b505050505091505061229e565b6000600a805461225290614892565b90501161226e576040518060200160405280600081525061229a565b600a61227982613136565b60405160200161228a929190614222565b6040516020818303038152906040525b9150505b919050565b6122ab612739565b73ffffffffffffffffffffffffffffffffffffffff166122c9611a29565b73ffffffffffffffffffffffffffffffffffffffff161461231f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231690614452565b60405180910390fd5b600c60019054906101000a900460ff1615600c60016101000a81548160ff021916908315150217905550565b612353612739565b73ffffffffffffffffffffffffffffffffffffffff16612371611a29565b73ffffffffffffffffffffffffffffffffffffffff16146123c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123be90614452565b60405180910390fd5b8060088190555050565b600c60049054906101000a900460ff1681565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612480612739565b73ffffffffffffffffffffffffffffffffffffffff1661249e611a29565b73ffffffffffffffffffffffffffffffffffffffff16146124f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124eb90614452565b60405180910390fd5b6000825111612538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252f906144f2565b60405180910390fd5b60c88251612544610eb1565b61254e91906146bd565b111561258f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258690614512565b60405180910390fd5b60005b82518110156125d2576125bf8382815181106125b1576125b0614a4f565b5b602002602001015183612d3c565b80806125ca906148f5565b915050612592565b505050565b6125df612739565b73ffffffffffffffffffffffffffffffffffffffff166125fd611a29565b73ffffffffffffffffffffffffffffffffffffffff1614612653576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264a90614452565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ba90614372565b60405180910390fd5b6126cc81612ee2565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6000805482109050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061280b82612d5a565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612832612739565b73ffffffffffffffffffffffffffffffffffffffff16148061288e5750612857612739565b73ffffffffffffffffffffffffffffffffffffffff1661287684610d2a565b73ffffffffffffffffffffffffffffffffffffffff16145b806128aa57506128a982600001516128a4612739565b6123e4565b5b9050806128e3576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461294c576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156129b3576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6129c08585856001613297565b6129d0600084846000015161274e565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612cb557612c1481612741565b15612cb45782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612d1e858585600161329d565b5050505050565b600082612d3285846132a3565b1490509392505050565b612d56828260405180602001604052806000815250613318565b5050565b612d62613751565b612d6b82612741565b612da1576040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008290505b60008110612eaa576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612e9b578092505050612edd565b50808060019003915050612da7565b506040517fe7c0edfb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612fc98473ffffffffffffffffffffffffffffffffffffffff1661332a565b15613129578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ff2612739565b8786866040518563ffffffff1660e01b8152600401613014949392919061426c565b602060405180830381600087803b15801561302e57600080fd5b505af192505050801561305f57506040513d601f19601f8201168201806040525081019061305c9190613d17565b60015b6130d9573d806000811461308f576040519150601f19603f3d011682016040523d82523d6000602084013e613094565b606091505b506000815114156130d1576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061312e565b600190505b949350505050565b6060600082141561317e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613292565b600082905060005b600082146131b0578080613199906148f5565b915050600a826131a99190614713565b9150613186565b60008167ffffffffffffffff8111156131cc576131cb614a7e565b5b6040519080825280601f01601f1916602001820160405280156131fe5781602001600182028036833780820191505090505b5090505b6000851461328b57600182613217919061479e565b9150600a856132269190614962565b603061323291906146bd565b60f81b81838151811061324857613247614a4f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132849190614713565b9450613202565b8093505050505b919050565b50505050565b50505050565b60008082905060005b845181101561330d5760008582815181106132ca576132c9614a4f565b5b602002602001015190508083116132ec576132e5838261334d565b92506132f9565b6132f6818461334d565b92505b508080613305906148f5565b9150506132ac565b508091505092915050565b6133258383836001613364565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082600052816020526040600020905092915050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156133d1576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084141561340c576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134196000868387613297565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b858110156136ae57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a483801561366257506136606000888488612fa8565b155b15613699576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818060010192505080806001019150506135e7565b5080600081905550506136c4600086838761329d565b5050505050565b8280546136d790614892565b90600052602060002090601f0160209004810192826136f95760008555613740565b82601f1061371257805160ff1916838001178555613740565b82800160010185558215613740579182015b8281111561373f578251825591602001919060010190613724565b5b50905061374d919061378b565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b808211156137a457600081600090555060010161378c565b5090565b60006137bb6137b684614572565b61454d565b905080838252602082019050828560208602820111156137de576137dd614ab2565b5b60005b8581101561380e57816137f4888261390c565b8452602084019350602083019250506001810190506137e1565b5050509392505050565b600061382b6138268461459e565b61454d565b9050808382526020820190508285602086028201111561384e5761384d614ab2565b5b60005b8581101561387e57816138648882613992565b845260208401935060208301925050600181019050613851565b5050509392505050565b600061389b613896846145ca565b61454d565b9050828152602081018484840111156138b7576138b6614ab7565b5b6138c2848285614850565b509392505050565b60006138dd6138d8846145fb565b61454d565b9050828152602081018484840111156138f9576138f8614ab7565b5b613904848285614850565b509392505050565b60008135905061391b81614f3f565b92915050565b600082601f83011261393657613935614aad565b5b81356139468482602086016137a8565b91505092915050565b600082601f83011261396457613963614aad565b5b8135613974848260208601613818565b91505092915050565b60008135905061398c81614f56565b92915050565b6000813590506139a181614f6d565b92915050565b6000813590506139b681614f84565b92915050565b6000815190506139cb81614f84565b92915050565b600082601f8301126139e6576139e5614aad565b5b81356139f6848260208601613888565b91505092915050565b600082601f830112613a1457613a13614aad565b5b8135613a248482602086016138ca565b91505092915050565b600081359050613a3c81614f9b565b92915050565b600060208284031215613a5857613a57614ac1565b5b6000613a668482850161390c565b91505092915050565b60008060408385031215613a8657613a85614ac1565b5b6000613a948582860161390c565b9250506020613aa58582860161390c565b9150509250929050565b600080600060608486031215613ac857613ac7614ac1565b5b6000613ad68682870161390c565b9350506020613ae78682870161390c565b9250506040613af886828701613a2d565b9150509250925092565b60008060008060808587031215613b1c57613b1b614ac1565b5b6000613b2a8782880161390c565b9450506020613b3b8782880161390c565b9350506040613b4c87828801613a2d565b925050606085013567ffffffffffffffff811115613b6d57613b6c614abc565b5b613b79878288016139d1565b91505092959194509250565b60008060408385031215613b9c57613b9b614ac1565b5b6000613baa8582860161390c565b9250506020613bbb8582860161397d565b9150509250929050565b60008060408385031215613bdc57613bdb614ac1565b5b6000613bea8582860161390c565b9250506020613bfb85828601613a2d565b9150509250929050565b60008060408385031215613c1c57613c1b614ac1565b5b600083013567ffffffffffffffff811115613c3a57613c39614abc565b5b613c4685828601613921565b9250506020613c5785828601613a2d565b9150509250929050565b60008060408385031215613c7857613c77614ac1565b5b600083013567ffffffffffffffff811115613c9657613c95614abc565b5b613ca28582860161394f565b9250506020613cb385828601613a2d565b9150509250929050565b600060208284031215613cd357613cd2614ac1565b5b6000613ce184828501613992565b91505092915050565b600060208284031215613d0057613cff614ac1565b5b6000613d0e848285016139a7565b91505092915050565b600060208284031215613d2d57613d2c614ac1565b5b6000613d3b848285016139bc565b91505092915050565b600060208284031215613d5a57613d59614ac1565b5b600082013567ffffffffffffffff811115613d7857613d77614abc565b5b613d84848285016139ff565b91505092915050565b600060208284031215613da357613da2614ac1565b5b6000613db184828501613a2d565b91505092915050565b6000613dc683836141e9565b60208301905092915050565b613ddb816147d2565b82525050565b613df2613ded826147d2565b61493e565b82525050565b6000613e0382614651565b613e0d818561467f565b9350613e188361462c565b8060005b83811015613e49578151613e308882613dba565b9750613e3b83614672565b925050600181019050613e1c565b5085935050505092915050565b613e5f816147e4565b82525050565b613e6e816147f0565b82525050565b6000613e7f8261465c565b613e898185614690565b9350613e9981856020860161485f565b613ea281614ac6565b840191505092915050565b6000613eb882614667565b613ec281856146a1565b9350613ed281856020860161485f565b613edb81614ac6565b840191505092915050565b6000613ef182614667565b613efb81856146b2565b9350613f0b81856020860161485f565b80840191505092915050565b60008154613f2481614892565b613f2e81866146b2565b94506001821660008114613f495760018114613f5a57613f8d565b60ff19831686528186019350613f8d565b613f638561463c565b60005b83811015613f8557815481890152600182019150602081019050613f66565b838801955050505b50505092915050565b6000613fa36023836146a1565b9150613fae82614ae4565b604082019050919050565b6000613fc66023836146a1565b9150613fd182614b33565b604082019050919050565b6000613fe96026836146a1565b9150613ff482614b82565b604082019050919050565b600061400c6036836146a1565b915061401782614bd1565b604082019050919050565b600061402f6016836146a1565b915061403a82614c20565b602082019050919050565b6000614052601f836146a1565b915061405d82614c49565b602082019050919050565b60006140756021836146a1565b915061408082614c72565b604082019050919050565b6000614098602d836146a1565b91506140a382614cc1565b604082019050919050565b60006140bb602a836146a1565b91506140c682614d10565b604082019050919050565b60006140de6005836146b2565b91506140e982614d5f565b600582019050919050565b60006141016020836146a1565b915061410c82614d88565b602082019050919050565b60006141246027836146a1565b915061412f82614db1565b604082019050919050565b6000614147602f836146a1565b915061415282614e00565b604082019050919050565b600061416a6027836146a1565b915061417582614e4f565b604082019050919050565b600061418d602e836146a1565b915061419882614e9e565b604082019050919050565b60006141b06017836146a1565b91506141bb82614eed565b602082019050919050565b60006141d36016836146a1565b91506141de82614f16565b602082019050919050565b6141f281614846565b82525050565b61420181614846565b82525050565b60006142138284613de1565b60148201915081905092915050565b600061422e8285613f17565b915061423a8284613ee6565b9150614245826140d1565b91508190509392505050565b60006020820190506142666000830184613dd2565b92915050565b60006080820190506142816000830187613dd2565b61428e6020830186613dd2565b61429b60408301856141f8565b81810360608301526142ad8184613e74565b905095945050505050565b600060208201905081810360008301526142d28184613df8565b905092915050565b60006020820190506142ef6000830184613e56565b92915050565b600060208201905061430a6000830184613e65565b92915050565b6000602082019050818103600083015261432a8184613ead565b905092915050565b6000602082019050818103600083015261434b81613f96565b9050919050565b6000602082019050818103600083015261436b81613fb9565b9050919050565b6000602082019050818103600083015261438b81613fdc565b9050919050565b600060208201905081810360008301526143ab81613fff565b9050919050565b600060208201905081810360008301526143cb81614022565b9050919050565b600060208201905081810360008301526143eb81614045565b9050919050565b6000602082019050818103600083015261440b81614068565b9050919050565b6000602082019050818103600083015261442b8161408b565b9050919050565b6000602082019050818103600083015261444b816140ae565b9050919050565b6000602082019050818103600083015261446b816140f4565b9050919050565b6000602082019050818103600083015261448b81614117565b9050919050565b600060208201905081810360008301526144ab8161413a565b9050919050565b600060208201905081810360008301526144cb8161415d565b9050919050565b600060208201905081810360008301526144eb81614180565b9050919050565b6000602082019050818103600083015261450b816141a3565b9050919050565b6000602082019050818103600083015261452b816141c6565b9050919050565b600060208201905061454760008301846141f8565b92915050565b6000614557614568565b905061456382826148c4565b919050565b6000604051905090565b600067ffffffffffffffff82111561458d5761458c614a7e565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156145b9576145b8614a7e565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156145e5576145e4614a7e565b5b6145ee82614ac6565b9050602081019050919050565b600067ffffffffffffffff82111561461657614615614a7e565b5b61461f82614ac6565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006146c882614846565b91506146d383614846565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614708576147076149c2565b5b828201905092915050565b600061471e82614846565b915061472983614846565b925082614739576147386149f1565b5b828204905092915050565b600061474f82614846565b915061475a83614846565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614793576147926149c2565b5b828202905092915050565b60006147a982614846565b91506147b483614846565b9250828210156147c7576147c66149c2565b5b828203905092915050565b60006147dd82614826565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561487d578082015181840152602081019050614862565b8381111561488c576000848401525b50505050565b600060028204905060018216806148aa57607f821691505b602082108114156148be576148bd614a20565b5b50919050565b6148cd82614ac6565b810181811067ffffffffffffffff821117156148ec576148eb614a7e565b5b80604052505050565b600061490082614846565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614933576149326149c2565b5b600182019050919050565b600061494982614950565b9050919050565b600061495b82614ad7565b9050919050565b600061496d82614846565b915061497883614846565b925082614988576149876149f1565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f484f444c65522053686f6573203a3a205465616d20616c7265616479206d696e60008201527f7465640000000000000000000000000000000000000000000000000000000000602082015250565b7f484f444c65522053686f6573203a3a204d696e74696e67206973206f6e20506160008201527f7573650000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f484f444c65522053686f6573203a3a2043616e6e6f74206d696e74206265796f60008201527f6e642077686974656c697374206d6178206d696e742100000000000000000000602082015250565b7f484f444c65522053686f6573203a3a2042656c6f772000000000000000000000600082015250565b7f484f444c65522053686f6573203a3a204e6f7420596574204163746976652e00600082015250565b7f484f444c65522053686f6573203a3a204265796f6e64204d617820537570706c60008201527f7900000000000000000000000000000000000000000000000000000000000000602082015250565b7f484f444c65522053686f6573203a3a2043616e6e6f74206d696e74206265796f60008201527f6e64206d617820737570706c7900000000000000000000000000000000000000602082015250565b7f484f444c65522053686f6573203a3a205061796d656e742069732062656c6f7760008201527f2074686520707269636500000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f484f444c65522053686f6573203a3a20596f7520617265206e6f74207768697460008201527f656c697374656400000000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f484f444c65522053686f6573203a3a20416c7265616479206d696e746564203360008201527f2074696d65732100000000000000000000000000000000000000000000000000602082015250565b7f484f444c65522053686f6573203a3a2043616e6e6f742062652063616c6c656460008201527f206279206120636f6e7472616374000000000000000000000000000000000000602082015250565b7f6d696e74206174206c65617374206f6e6520746f6b656e000000000000000000600082015250565b7f6e6f7420656e6f75676820746f6b656e73206c65667400000000000000000000600082015250565b614f48816147d2565b8114614f5357600080fd5b50565b614f5f816147e4565b8114614f6a57600080fd5b50565b614f76816147f0565b8114614f8157600080fd5b50565b614f8d816147fa565b8114614f9857600080fd5b50565b614fa481614846565b8114614faf57600080fd5b5056fea26469706673582212206c59aeb5fd0eadb2eaaa595421fc0206e1462c51f1c5847b4da7455a4c6d282964736f6c63430008070033
Deployed Bytecode
0x6080604052600436106102935760003560e01c806370a082311161015a578063b88d4fde116100c1578063e222c7f91161007a578063e222c7f9146109a0578063e2a70eaf146109b7578063e8b5498d146109e0578063e985e9c514610a0b578063eeb9052f14610a48578063f2fde38b14610a7157610293565b8063b88d4fde146108b6578063ba7a86b8146108df578063bc912e1a146108f6578063c08dfd3c14610921578063c4ae31681461094c578063c87b56dd1461096357610293565b80638bb64a8c116101135780638bb64a8c146107db5780638da5cb5b146107f257806395d89b411461081d578063a0712d6814610848578063a22cb46514610864578063b0962c531461088d57610293565b806370a08231146106dd578063715018a61461071a5780637cb647591461073157806383a974a21461075a5780638456cb591461078557806386a173ee146107b057610293565b806332cb6b0c116101fe5780634f6ccce7116101b75780634f6ccce7146105cd57806354214f691461060a5780635b8ad429146106355780636352211e1461064c57806363adc5a51461068957806365f13097146106b257610293565b806332cb6b0c146104e157806333bc1c5c1461050c5780633ccfd60b1461053757806342842e0e1461054e57806349590657146105775780634cf5f7a4146105a257610293565b8063095ea7b311610250578063095ea7b3146103ce57806318160ddd146103f75780631c16521c1461042257806323b872dd1461045f5780632904e6d9146104885780632f745c59146104a457610293565b806301ffc9a7146102985780630345e3cb146102d55780630675b7c61461031257806306fdde031461033b57806307e89ec014610366578063081812fc14610391575b600080fd5b3480156102a457600080fd5b506102bf60048036038101906102ba9190613cea565b610a9a565b6040516102cc91906142da565b60405180910390f35b3480156102e157600080fd5b506102fc60048036038101906102f79190613a42565b610be4565b6040516103099190614532565b60405180910390f35b34801561031e57600080fd5b5061033960048036038101906103349190613d44565b610bfc565b005b34801561034757600080fd5b50610350610c92565b60405161035d9190614310565b60405180910390f35b34801561037257600080fd5b5061037b610d24565b6040516103889190614532565b60405180910390f35b34801561039d57600080fd5b506103b860048036038101906103b39190613d8d565b610d2a565b6040516103c59190614251565b60405180910390f35b3480156103da57600080fd5b506103f560048036038101906103f09190613bc5565b610da6565b005b34801561040357600080fd5b5061040c610eb1565b6040516104199190614532565b60405180910390f35b34801561042e57600080fd5b5061044960048036038101906104449190613a42565b610eba565b6040516104569190614532565b60405180910390f35b34801561046b57600080fd5b5061048660048036038101906104819190613aaf565b610ed2565b005b6104a2600480360381019061049d9190613c61565b610ee2565b005b3480156104b057600080fd5b506104cb60048036038101906104c69190613bc5565b6111af565b6040516104d89190614532565b60405180910390f35b3480156104ed57600080fd5b506104f6611373565b6040516105039190614532565b60405180910390f35b34801561051857600080fd5b50610521611378565b60405161052e91906142da565b60405180910390f35b34801561054357600080fd5b5061054c61138b565b005b34801561055a57600080fd5b5061057560048036038101906105709190613aaf565b61145d565b005b34801561058357600080fd5b5061058c61147d565b60405161059991906142f5565b60405180910390f35b3480156105ae57600080fd5b506105b7611487565b6040516105c49190614310565b60405180910390f35b3480156105d957600080fd5b506105f460048036038101906105ef9190613d8d565b611515565b6040516106019190614532565b60405180910390f35b34801561061657600080fd5b5061061f61155f565b60405161062c91906142da565b60405180910390f35b34801561064157600080fd5b5061064a611572565b005b34801561065857600080fd5b50610673600480360381019061066e9190613d8d565b61161a565b6040516106809190614251565b60405180910390f35b34801561069557600080fd5b506106b060048036038101906106ab9190613d8d565b611630565b005b3480156106be57600080fd5b506106c76116b6565b6040516106d49190614532565b60405180910390f35b3480156106e957600080fd5b5061070460048036038101906106ff9190613a42565b6116bb565b6040516107119190614532565b60405180910390f35b34801561072657600080fd5b5061072f61179b565b005b34801561073d57600080fd5b5061075860048036038101906107539190613cbd565b611823565b005b34801561076657600080fd5b5061076f6118a9565b60405161077c91906142b8565b60405180910390f35b34801561079157600080fd5b5061079a61195b565b6040516107a791906142da565b60405180910390f35b3480156107bc57600080fd5b506107c561196e565b6040516107d291906142da565b60405180910390f35b3480156107e757600080fd5b506107f0611981565b005b3480156107fe57600080fd5b50610807611a29565b6040516108149190614251565b60405180910390f35b34801561082957600080fd5b50610832611a53565b60405161083f9190614310565b60405180910390f35b610862600480360381019061085d9190613d8d565b611ae5565b005b34801561087057600080fd5b5061088b60048036038101906108869190613b85565b611d39565b005b34801561089957600080fd5b506108b460048036038101906108af9190613d44565b611eb1565b005b3480156108c257600080fd5b506108dd60048036038101906108d89190613b02565b611f47565b005b3480156108eb57600080fd5b506108f4611f9a565b005b34801561090257600080fd5b5061090b61208e565b6040516109189190614532565b60405180910390f35b34801561092d57600080fd5b50610936612094565b6040516109439190614532565b60405180910390f35b34801561095857600080fd5b50610961612099565b005b34801561096f57600080fd5b5061098a60048036038101906109859190613d8d565b612141565b6040516109979190614310565b60405180910390f35b3480156109ac57600080fd5b506109b56122a3565b005b3480156109c357600080fd5b506109de60048036038101906109d99190613d8d565b61234b565b005b3480156109ec57600080fd5b506109f56123d1565b604051610a0291906142da565b60405180910390f35b348015610a1757600080fd5b50610a326004803603810190610a2d9190613a6f565b6123e4565b604051610a3f91906142da565b60405180910390f35b348015610a5457600080fd5b50610a6f6004803603810190610a6a9190613c05565b612478565b005b348015610a7d57600080fd5b50610a986004803603810190610a939190613a42565b6125d7565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b6557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bcd57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bdd5750610bdc826126cf565b5b9050919050565b600f6020528060005260406000206000915090505481565b610c04612739565b73ffffffffffffffffffffffffffffffffffffffff16610c22611a29565b73ffffffffffffffffffffffffffffffffffffffff1614610c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6f90614452565b60405180910390fd5b80600a9080519060200190610c8e9291906136cb565b5050565b606060018054610ca190614892565b80601f0160208091040260200160405190810160405280929190818152602001828054610ccd90614892565b8015610d1a5780601f10610cef57610100808354040283529160200191610d1a565b820191906000526020600020905b815481529060010190602001808311610cfd57829003601f168201915b5050505050905090565b60085481565b6000610d3582612741565b610d6b576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610db18261161a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e19576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e38612739565b73ffffffffffffffffffffffffffffffffffffffff1614158015610e6a5750610e6881610e63612739565b6123e4565b155b15610ea1576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610eac83838361274e565b505050565b60008054905090565b600e6020528060005260406000206000915090505481565b610edd838383612800565b505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610f50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f47906144d2565b60405180910390fd5b600c60029054906101000a900460ff16610f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9690614352565b60405180910390fd5b60c881610faa610eb1565b610fb491906146bd565b1115610ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fec90614412565b60405180910390fd5b600581600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461104291906146bd565b1115611083576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107a90614392565b60405180910390fd5b806009546110919190614744565b3410156110d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ca90614432565b60405180910390fd5b6000336040516020016110e69190614207565b60405160208183030381529060405280519060200120905061110b83600d5483612d25565b61114a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114190614472565b60405180910390fd5b81600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461119991906146bd565b925050819055506111aa3383612d3c565b505050565b60006111ba836116bb565b82106111f2576040517f0ddac30e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006111fc610eb1565b905060008060005b83811015611356576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146112f657806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611348578684141561133f57819550505050505061136d565b83806001019450505b508080600101915050611204565b50600061136657611365614993565b5b8193505050505b92915050565b60c881565b600c60019054906101000a900460ff1681565b611393612739565b73ffffffffffffffffffffffffffffffffffffffff166113b1611a29565b73ffffffffffffffffffffffffffffffffffffffff1614611407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fe90614452565b60405180910390fd5b6000479050611414611a29565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611459573d6000803e3d6000fd5b5050565b61147883838360405180602001604052806000815250611f47565b505050565b6000600d54905090565b600b805461149490614892565b80601f01602080910402602001604051908101604052809291908181526020018280546114c090614892565b801561150d5780601f106114e25761010080835404028352916020019161150d565b820191906000526020600020905b8154815290600101906020018083116114f057829003601f168201915b505050505081565b600061151f610eb1565b8210611557576040517fa723001c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b819050919050565b600c60009054906101000a900460ff1681565b61157a612739565b73ffffffffffffffffffffffffffffffffffffffff16611598611a29565b73ffffffffffffffffffffffffffffffffffffffff16146115ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e590614452565b60405180910390fd5b600c60009054906101000a900460ff1615600c60006101000a81548160ff021916908315150217905550565b600061162582612d5a565b600001519050919050565b611638612739565b73ffffffffffffffffffffffffffffffffffffffff16611656611a29565b73ffffffffffffffffffffffffffffffffffffffff16146116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a390614452565b60405180910390fd5b8060098190555050565b600581565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611723576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6117a3612739565b73ffffffffffffffffffffffffffffffffffffffff166117c1611a29565b73ffffffffffffffffffffffffffffffffffffffff1614611817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180e90614452565b60405180910390fd5b6118216000612ee2565b565b61182b612739565b73ffffffffffffffffffffffffffffffffffffffff16611849611a29565b73ffffffffffffffffffffffffffffffffffffffff161461189f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189690614452565b60405180910390fd5b80600d8190555050565b6060600033905060006118bb826116bb565b905060008167ffffffffffffffff8111156118d9576118d8614a7e565b5b6040519080825280602002602001820160405280156119075781602001602082028036833780820191505090505b50905060005b828110156119515761191f84826111af565b82828151811061193257611931614a4f565b5b6020026020010181815250508080611949906148f5565b91505061190d565b5080935050505090565b600c60039054906101000a900460ff1681565b600c60029054906101000a900460ff1681565b611989612739565b73ffffffffffffffffffffffffffffffffffffffff166119a7611a29565b73ffffffffffffffffffffffffffffffffffffffff16146119fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f490614452565b60405180910390fd5b600c60029054906101000a900460ff1615600c60026101000a81548160ff021916908315150217905550565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054611a6290614892565b80601f0160208091040260200160405190810160405280929190818152602001828054611a8e90614892565b8015611adb5780601f10611ab057610100808354040283529160200191611adb565b820191906000526020600020905b815481529060010190602001808311611abe57829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4a906144d2565b60405180910390fd5b600c60019054906101000a900460ff16611ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b99906143d2565b60405180910390fd5b60c881611bad610eb1565b611bb791906146bd565b1115611bf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bef906143f2565b60405180910390fd5b600581600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c4591906146bd565b1115611c86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7d906144b2565b60405180910390fd5b80600854611c949190614744565b341015611cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccd906143b2565b60405180910390fd5b80600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d2591906146bd565b92505081905550611d363382612d3c565b50565b611d41612739565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611da6576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060066000611db3612739565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611e60612739565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ea591906142da565b60405180910390a35050565b611eb9612739565b73ffffffffffffffffffffffffffffffffffffffff16611ed7611a29565b73ffffffffffffffffffffffffffffffffffffffff1614611f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2490614452565b60405180910390fd5b80600b9080519060200190611f439291906136cb565b5050565b611f52848484612800565b611f5e84848484612fa8565b611f94576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b611fa2612739565b73ffffffffffffffffffffffffffffffffffffffff16611fc0611a29565b73ffffffffffffffffffffffffffffffffffffffff1614612016576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200d90614452565b60405180910390fd5b600c60049054906101000a900460ff1615612066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205d90614332565b60405180910390fd5b6001600c60046101000a81548160ff02191690831515021790555061208c33600a612d3c565b565b60095481565b600581565b6120a1612739565b73ffffffffffffffffffffffffffffffffffffffff166120bf611a29565b73ffffffffffffffffffffffffffffffffffffffff1614612115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210c90614452565b60405180910390fd5b600c60039054906101000a900460ff1615600c60036101000a81548160ff021916908315150217905550565b606061214c82612741565b61218b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218290614492565b60405180910390fd5b600060018361219a91906146bd565b9050600c60009054906101000a900460ff1661224357600b80546121bd90614892565b80601f01602080910402602001604051908101604052809291908181526020018280546121e990614892565b80156122365780601f1061220b57610100808354040283529160200191612236565b820191906000526020600020905b81548152906001019060200180831161221957829003601f168201915b505050505091505061229e565b6000600a805461225290614892565b90501161226e576040518060200160405280600081525061229a565b600a61227982613136565b60405160200161228a929190614222565b6040516020818303038152906040525b9150505b919050565b6122ab612739565b73ffffffffffffffffffffffffffffffffffffffff166122c9611a29565b73ffffffffffffffffffffffffffffffffffffffff161461231f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231690614452565b60405180910390fd5b600c60019054906101000a900460ff1615600c60016101000a81548160ff021916908315150217905550565b612353612739565b73ffffffffffffffffffffffffffffffffffffffff16612371611a29565b73ffffffffffffffffffffffffffffffffffffffff16146123c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123be90614452565b60405180910390fd5b8060088190555050565b600c60049054906101000a900460ff1681565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612480612739565b73ffffffffffffffffffffffffffffffffffffffff1661249e611a29565b73ffffffffffffffffffffffffffffffffffffffff16146124f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124eb90614452565b60405180910390fd5b6000825111612538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252f906144f2565b60405180910390fd5b60c88251612544610eb1565b61254e91906146bd565b111561258f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258690614512565b60405180910390fd5b60005b82518110156125d2576125bf8382815181106125b1576125b0614a4f565b5b602002602001015183612d3c565b80806125ca906148f5565b915050612592565b505050565b6125df612739565b73ffffffffffffffffffffffffffffffffffffffff166125fd611a29565b73ffffffffffffffffffffffffffffffffffffffff1614612653576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264a90614452565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ba90614372565b60405180910390fd5b6126cc81612ee2565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6000805482109050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061280b82612d5a565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612832612739565b73ffffffffffffffffffffffffffffffffffffffff16148061288e5750612857612739565b73ffffffffffffffffffffffffffffffffffffffff1661287684610d2a565b73ffffffffffffffffffffffffffffffffffffffff16145b806128aa57506128a982600001516128a4612739565b6123e4565b5b9050806128e3576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461294c576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156129b3576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6129c08585856001613297565b6129d0600084846000015161274e565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612cb557612c1481612741565b15612cb45782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612d1e858585600161329d565b5050505050565b600082612d3285846132a3565b1490509392505050565b612d56828260405180602001604052806000815250613318565b5050565b612d62613751565b612d6b82612741565b612da1576040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008290505b60008110612eaa576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612e9b578092505050612edd565b50808060019003915050612da7565b506040517fe7c0edfb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612fc98473ffffffffffffffffffffffffffffffffffffffff1661332a565b15613129578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ff2612739565b8786866040518563ffffffff1660e01b8152600401613014949392919061426c565b602060405180830381600087803b15801561302e57600080fd5b505af192505050801561305f57506040513d601f19601f8201168201806040525081019061305c9190613d17565b60015b6130d9573d806000811461308f576040519150601f19603f3d011682016040523d82523d6000602084013e613094565b606091505b506000815114156130d1576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061312e565b600190505b949350505050565b6060600082141561317e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613292565b600082905060005b600082146131b0578080613199906148f5565b915050600a826131a99190614713565b9150613186565b60008167ffffffffffffffff8111156131cc576131cb614a7e565b5b6040519080825280601f01601f1916602001820160405280156131fe5781602001600182028036833780820191505090505b5090505b6000851461328b57600182613217919061479e565b9150600a856132269190614962565b603061323291906146bd565b60f81b81838151811061324857613247614a4f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132849190614713565b9450613202565b8093505050505b919050565b50505050565b50505050565b60008082905060005b845181101561330d5760008582815181106132ca576132c9614a4f565b5b602002602001015190508083116132ec576132e5838261334d565b92506132f9565b6132f6818461334d565b92505b508080613305906148f5565b9150506132ac565b508091505092915050565b6133258383836001613364565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082600052816020526040600020905092915050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156133d1576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084141561340c576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134196000868387613297565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b858110156136ae57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a483801561366257506136606000888488612fa8565b155b15613699576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818060010192505080806001019150506135e7565b5080600081905550506136c4600086838761329d565b5050505050565b8280546136d790614892565b90600052602060002090601f0160209004810192826136f95760008555613740565b82601f1061371257805160ff1916838001178555613740565b82800160010185558215613740579182015b8281111561373f578251825591602001919060010190613724565b5b50905061374d919061378b565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b808211156137a457600081600090555060010161378c565b5090565b60006137bb6137b684614572565b61454d565b905080838252602082019050828560208602820111156137de576137dd614ab2565b5b60005b8581101561380e57816137f4888261390c565b8452602084019350602083019250506001810190506137e1565b5050509392505050565b600061382b6138268461459e565b61454d565b9050808382526020820190508285602086028201111561384e5761384d614ab2565b5b60005b8581101561387e57816138648882613992565b845260208401935060208301925050600181019050613851565b5050509392505050565b600061389b613896846145ca565b61454d565b9050828152602081018484840111156138b7576138b6614ab7565b5b6138c2848285614850565b509392505050565b60006138dd6138d8846145fb565b61454d565b9050828152602081018484840111156138f9576138f8614ab7565b5b613904848285614850565b509392505050565b60008135905061391b81614f3f565b92915050565b600082601f83011261393657613935614aad565b5b81356139468482602086016137a8565b91505092915050565b600082601f83011261396457613963614aad565b5b8135613974848260208601613818565b91505092915050565b60008135905061398c81614f56565b92915050565b6000813590506139a181614f6d565b92915050565b6000813590506139b681614f84565b92915050565b6000815190506139cb81614f84565b92915050565b600082601f8301126139e6576139e5614aad565b5b81356139f6848260208601613888565b91505092915050565b600082601f830112613a1457613a13614aad565b5b8135613a248482602086016138ca565b91505092915050565b600081359050613a3c81614f9b565b92915050565b600060208284031215613a5857613a57614ac1565b5b6000613a668482850161390c565b91505092915050565b60008060408385031215613a8657613a85614ac1565b5b6000613a948582860161390c565b9250506020613aa58582860161390c565b9150509250929050565b600080600060608486031215613ac857613ac7614ac1565b5b6000613ad68682870161390c565b9350506020613ae78682870161390c565b9250506040613af886828701613a2d565b9150509250925092565b60008060008060808587031215613b1c57613b1b614ac1565b5b6000613b2a8782880161390c565b9450506020613b3b8782880161390c565b9350506040613b4c87828801613a2d565b925050606085013567ffffffffffffffff811115613b6d57613b6c614abc565b5b613b79878288016139d1565b91505092959194509250565b60008060408385031215613b9c57613b9b614ac1565b5b6000613baa8582860161390c565b9250506020613bbb8582860161397d565b9150509250929050565b60008060408385031215613bdc57613bdb614ac1565b5b6000613bea8582860161390c565b9250506020613bfb85828601613a2d565b9150509250929050565b60008060408385031215613c1c57613c1b614ac1565b5b600083013567ffffffffffffffff811115613c3a57613c39614abc565b5b613c4685828601613921565b9250506020613c5785828601613a2d565b9150509250929050565b60008060408385031215613c7857613c77614ac1565b5b600083013567ffffffffffffffff811115613c9657613c95614abc565b5b613ca28582860161394f565b9250506020613cb385828601613a2d565b9150509250929050565b600060208284031215613cd357613cd2614ac1565b5b6000613ce184828501613992565b91505092915050565b600060208284031215613d0057613cff614ac1565b5b6000613d0e848285016139a7565b91505092915050565b600060208284031215613d2d57613d2c614ac1565b5b6000613d3b848285016139bc565b91505092915050565b600060208284031215613d5a57613d59614ac1565b5b600082013567ffffffffffffffff811115613d7857613d77614abc565b5b613d84848285016139ff565b91505092915050565b600060208284031215613da357613da2614ac1565b5b6000613db184828501613a2d565b91505092915050565b6000613dc683836141e9565b60208301905092915050565b613ddb816147d2565b82525050565b613df2613ded826147d2565b61493e565b82525050565b6000613e0382614651565b613e0d818561467f565b9350613e188361462c565b8060005b83811015613e49578151613e308882613dba565b9750613e3b83614672565b925050600181019050613e1c565b5085935050505092915050565b613e5f816147e4565b82525050565b613e6e816147f0565b82525050565b6000613e7f8261465c565b613e898185614690565b9350613e9981856020860161485f565b613ea281614ac6565b840191505092915050565b6000613eb882614667565b613ec281856146a1565b9350613ed281856020860161485f565b613edb81614ac6565b840191505092915050565b6000613ef182614667565b613efb81856146b2565b9350613f0b81856020860161485f565b80840191505092915050565b60008154613f2481614892565b613f2e81866146b2565b94506001821660008114613f495760018114613f5a57613f8d565b60ff19831686528186019350613f8d565b613f638561463c565b60005b83811015613f8557815481890152600182019150602081019050613f66565b838801955050505b50505092915050565b6000613fa36023836146a1565b9150613fae82614ae4565b604082019050919050565b6000613fc66023836146a1565b9150613fd182614b33565b604082019050919050565b6000613fe96026836146a1565b9150613ff482614b82565b604082019050919050565b600061400c6036836146a1565b915061401782614bd1565b604082019050919050565b600061402f6016836146a1565b915061403a82614c20565b602082019050919050565b6000614052601f836146a1565b915061405d82614c49565b602082019050919050565b60006140756021836146a1565b915061408082614c72565b604082019050919050565b6000614098602d836146a1565b91506140a382614cc1565b604082019050919050565b60006140bb602a836146a1565b91506140c682614d10565b604082019050919050565b60006140de6005836146b2565b91506140e982614d5f565b600582019050919050565b60006141016020836146a1565b915061410c82614d88565b602082019050919050565b60006141246027836146a1565b915061412f82614db1565b604082019050919050565b6000614147602f836146a1565b915061415282614e00565b604082019050919050565b600061416a6027836146a1565b915061417582614e4f565b604082019050919050565b600061418d602e836146a1565b915061419882614e9e565b604082019050919050565b60006141b06017836146a1565b91506141bb82614eed565b602082019050919050565b60006141d36016836146a1565b91506141de82614f16565b602082019050919050565b6141f281614846565b82525050565b61420181614846565b82525050565b60006142138284613de1565b60148201915081905092915050565b600061422e8285613f17565b915061423a8284613ee6565b9150614245826140d1565b91508190509392505050565b60006020820190506142666000830184613dd2565b92915050565b60006080820190506142816000830187613dd2565b61428e6020830186613dd2565b61429b60408301856141f8565b81810360608301526142ad8184613e74565b905095945050505050565b600060208201905081810360008301526142d28184613df8565b905092915050565b60006020820190506142ef6000830184613e56565b92915050565b600060208201905061430a6000830184613e65565b92915050565b6000602082019050818103600083015261432a8184613ead565b905092915050565b6000602082019050818103600083015261434b81613f96565b9050919050565b6000602082019050818103600083015261436b81613fb9565b9050919050565b6000602082019050818103600083015261438b81613fdc565b9050919050565b600060208201905081810360008301526143ab81613fff565b9050919050565b600060208201905081810360008301526143cb81614022565b9050919050565b600060208201905081810360008301526143eb81614045565b9050919050565b6000602082019050818103600083015261440b81614068565b9050919050565b6000602082019050818103600083015261442b8161408b565b9050919050565b6000602082019050818103600083015261444b816140ae565b9050919050565b6000602082019050818103600083015261446b816140f4565b9050919050565b6000602082019050818103600083015261448b81614117565b9050919050565b600060208201905081810360008301526144ab8161413a565b9050919050565b600060208201905081810360008301526144cb8161415d565b9050919050565b600060208201905081810360008301526144eb81614180565b9050919050565b6000602082019050818103600083015261450b816141a3565b9050919050565b6000602082019050818103600083015261452b816141c6565b9050919050565b600060208201905061454760008301846141f8565b92915050565b6000614557614568565b905061456382826148c4565b919050565b6000604051905090565b600067ffffffffffffffff82111561458d5761458c614a7e565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156145b9576145b8614a7e565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156145e5576145e4614a7e565b5b6145ee82614ac6565b9050602081019050919050565b600067ffffffffffffffff82111561461657614615614a7e565b5b61461f82614ac6565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006146c882614846565b91506146d383614846565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614708576147076149c2565b5b828201905092915050565b600061471e82614846565b915061472983614846565b925082614739576147386149f1565b5b828204905092915050565b600061474f82614846565b915061475a83614846565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614793576147926149c2565b5b828202905092915050565b60006147a982614846565b91506147b483614846565b9250828210156147c7576147c66149c2565b5b828203905092915050565b60006147dd82614826565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561487d578082015181840152602081019050614862565b8381111561488c576000848401525b50505050565b600060028204905060018216806148aa57607f821691505b602082108114156148be576148bd614a20565b5b50919050565b6148cd82614ac6565b810181811067ffffffffffffffff821117156148ec576148eb614a7e565b5b80604052505050565b600061490082614846565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614933576149326149c2565b5b600182019050919050565b600061494982614950565b9050919050565b600061495b82614ad7565b9050919050565b600061496d82614846565b915061497883614846565b925082614988576149876149f1565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f484f444c65522053686f6573203a3a205465616d20616c7265616479206d696e60008201527f7465640000000000000000000000000000000000000000000000000000000000602082015250565b7f484f444c65522053686f6573203a3a204d696e74696e67206973206f6e20506160008201527f7573650000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f484f444c65522053686f6573203a3a2043616e6e6f74206d696e74206265796f60008201527f6e642077686974656c697374206d6178206d696e742100000000000000000000602082015250565b7f484f444c65522053686f6573203a3a2042656c6f772000000000000000000000600082015250565b7f484f444c65522053686f6573203a3a204e6f7420596574204163746976652e00600082015250565b7f484f444c65522053686f6573203a3a204265796f6e64204d617820537570706c60008201527f7900000000000000000000000000000000000000000000000000000000000000602082015250565b7f484f444c65522053686f6573203a3a2043616e6e6f74206d696e74206265796f60008201527f6e64206d617820737570706c7900000000000000000000000000000000000000602082015250565b7f484f444c65522053686f6573203a3a205061796d656e742069732062656c6f7760008201527f2074686520707269636500000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f484f444c65522053686f6573203a3a20596f7520617265206e6f74207768697460008201527f656c697374656400000000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f484f444c65522053686f6573203a3a20416c7265616479206d696e746564203360008201527f2074696d65732100000000000000000000000000000000000000000000000000602082015250565b7f484f444c65522053686f6573203a3a2043616e6e6f742062652063616c6c656460008201527f206279206120636f6e7472616374000000000000000000000000000000000000602082015250565b7f6d696e74206174206c65617374206f6e6520746f6b656e000000000000000000600082015250565b7f6e6f7420656e6f75676820746f6b656e73206c65667400000000000000000000600082015250565b614f48816147d2565b8114614f5357600080fd5b50565b614f5f816147e4565b8114614f6a57600080fd5b50565b614f76816147f0565b8114614f8157600080fd5b50565b614f8d816147fa565b8114614f9857600080fd5b50565b614fa481614846565b8114614faf57600080fd5b5056fea26469706673582212206c59aeb5fd0eadb2eaaa595421fc0206e1462c51f1c5847b4da7455a4c6d282964736f6c63430008070033
Deployed Bytecode Sourcemap
43439:5375:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30712:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44208:53;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47222:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32528:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43670:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34005:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33594:345;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28950:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44151:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34862:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45029:859;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29604:1036;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43520:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44000:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48675:136;;;;;;;;;;;;;:::i;:::-;;35103:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47606:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43812:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29128:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43971:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48582:85;;;;;;;;;;;;;:::i;:::-;;32337:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48105:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43567:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31148:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7448:103;;;;;;;;;;;;;:::i;:::-;;47493:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46808:406;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44061:17;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44029:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47788:98;;;;;;;;;;;;;:::i;:::-;;6797:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32697:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44480:541;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34281:279;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47343:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35359:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45896:180;;;;;;;;;;;;;:::i;:::-;;43721:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43617:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47706:74;;;;;;;;;;;;;:::i;:::-;;46241:473;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47894:89;;;;;;;;;;;;;:::i;:::-;;47992:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44085:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34631:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48217:357;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7706:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30712:372;30814:4;30866:25;30851:40;;;:11;:40;;;;:105;;;;30923:33;30908:48;;;:11;:48;;;;30851:105;:172;;;;30988:35;30973:50;;;:11;:50;;;;30851:172;:225;;;;31040:36;31064:11;31040:23;:36::i;:::-;30851:225;30831:245;;30712:372;;;:::o;44208:53::-;;;;;;;;;;;;;;;;;:::o;47222:115::-;7028:12;:10;:12::i;:::-;7017:23;;:7;:5;:7::i;:::-;:23;;;7009:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47316:13:::1;47301:12;:28;;;;;;;;;;;;:::i;:::-;;47222:115:::0;:::o;32528:100::-;32582:13;32615:5;32608:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32528:100;:::o;43670:44::-;;;;:::o;34005:204::-;34073:7;34098:16;34106:7;34098;:16::i;:::-;34093:64;;34123:34;;;;;;;;;;;;;;34093:64;34177:15;:24;34193:7;34177:24;;;;;;;;;;;;;;;;;;;;;34170:31;;34005:204;;;:::o;33594:345::-;33667:13;33683:24;33699:7;33683:15;:24::i;:::-;33667:40;;33728:5;33722:11;;:2;:11;;;33718:48;;;33742:24;;;;;;;;;;;;;;33718:48;33799:5;33783:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;33809:37;33826:5;33833:12;:10;:12::i;:::-;33809:16;:37::i;:::-;33808:38;33783:63;33779:111;;;33855:35;;;;;;;;;;;;;;33779:111;33903:28;33912:2;33916:7;33925:5;33903:8;:28::i;:::-;33656:283;33594:345;;:::o;28950:101::-;29003:7;29030:13;;29023:20;;28950:101;:::o;44151:50::-;;;;;;;;;;;;;;;;;:::o;34862:170::-;34996:28;35006:4;35012:2;35016:7;34996:9;:28::i;:::-;34862:170;;;:::o;45029:859::-;44391:10;44378:23;;:9;:23;;;44370:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;45150:13:::1;;;;;;;;;;;45142:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;43557:3;45239:9;45223:13;:11;:13::i;:::-;:25;;;;:::i;:::-;45222:41;;45214:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;43662:1;45366:9;45333:18;:30;45352:10;45333:30;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;45332:67;;45324:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;45514:9;45491:20;;:32;;;;:::i;:::-;45477:9;:47;;45469:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;45610:14;45654:10;45637:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;45627:39;;;;;;45610:56;;45685:52;45704:12;45718:10;;45730:6;45685:18;:52::i;:::-;45677:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;45828:9;45794:18;:30;45813:10;45794:30;;;;;;;;;;;;;;;;:43;;;;;;;:::i;:::-;;;;;;;;45848:32;45858:10;45870:9;45848;:32::i;:::-;45131:757;45029:859:::0;;:::o;29604:1036::-;29693:7;29726:16;29736:5;29726:9;:16::i;:::-;29717:5;:25;29713:61;;29751:23;;;;;;;;;;;;;;29713:61;29785:22;29810:13;:11;:13::i;:::-;29785:38;;29834:19;29864:25;30053:9;30048:466;30068:14;30064:1;:18;30048:466;;;30108:31;30142:11;:14;30154:1;30142:14;;;;;;;;;;;30108:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30205:1;30179:28;;:9;:14;;;:28;;;30175:111;;30252:9;:14;;;30232:34;;30175:111;30329:5;30308:26;;:17;:26;;;30304:195;;;30378:5;30363:11;:20;30359:85;;;30419:1;30412:8;;;;;;;;;30359:85;30466:13;;;;;;;30304:195;30089:425;30084:3;;;;;;;30048:466;;;;30597:5;30590:13;;;;:::i;:::-;;30621:11;30614:18;;;;;29604:1036;;;;;:::o;43520:40::-;43557:3;43520:40;:::o;44000:22::-;;;;;;;;;;;;;:::o;48675:136::-;7028:12;:10;:12::i;:::-;7017:23;;:7;:5;:7::i;:::-;:23;;;7009:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48716:13:::1;48732:21;48716:37;;48772:7;:5;:7::i;:::-;48764:25;;:36;48790:8;48764:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;48713:98;48675:136::o:0;35103:185::-;35241:39;35258:4;35264:2;35268:7;35241:39;;;;;;;;;;;;:16;:39::i;:::-;35103:185;;;:::o;47606:92::-;47654:7;47680:10;;47673:17;;47606:92;:::o;43812:35::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29128:176::-;29195:7;29228:13;:11;:13::i;:::-;29219:5;:22;29215:58;;29250:23;;;;;;;;;;;;;;29215:58;29291:5;29284:12;;29128:176;;;:::o;43971:22::-;;;;;;;;;;;;;:::o;48582:85::-;7028:12;:10;:12::i;:::-;7017:23;;:7;:5;:7::i;:::-;:23;;;7009:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48649:10:::1;;;;;;;;;;;48648:11;48635:10;;:24;;;;;;;;;;;;;;;;;;48582:85::o:0;32337:124::-;32401:7;32428:20;32440:7;32428:11;:20::i;:::-;:25;;;32421:32;;32337:124;;;:::o;48105:108::-;7028:12;:10;:12::i;:::-;7017:23;;:7;:5;:7::i;:::-;:23;;;7009:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48200:5:::1;48177:20;:28;;;;48105:108:::0;:::o;43567:43::-;43609:1;43567:43;:::o;31148:206::-;31212:7;31253:1;31236:19;;:5;:19;;;31232:60;;;31264:28;;;;;;;;;;;;;;31232:60;31318:12;:19;31331:5;31318:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;31310:36;;31303:43;;31148:206;;;:::o;7448:103::-;7028:12;:10;:12::i;:::-;7017:23;;:7;:5;:7::i;:::-;:23;;;7009:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7513:30:::1;7540:1;7513:18;:30::i;:::-;7448:103::o:0;47493:105::-;7028:12;:10;:12::i;:::-;7017:23;;:7;:5;:7::i;:::-;:23;;;7009:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47579:11:::1;47566:10;:24;;;;47493:105:::0;:::o;46808:406::-;46850:16;46878:14;46895:10;46878:27;;46916:24;46943:17;46953:6;46943:9;:17::i;:::-;46916:44;;46971:25;47013:16;46999:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46971:59;;47047:13;47043:136;47074:16;47066:5;:24;47043:136;;;47133:34;47153:6;47161:5;47133:19;:34::i;:::-;47115:8;47124:5;47115:15;;;;;;;;:::i;:::-;;;;;;;:52;;;;;47092:7;;;;;:::i;:::-;;;;47043:136;;;;47198:8;47191:15;;;;;46808:406;:::o;44061:17::-;;;;;;;;;;;;;:::o;44029:25::-;;;;;;;;;;;;;:::o;47788:98::-;7028:12;:10;:12::i;:::-;7017:23;;:7;:5;:7::i;:::-;:23;;;7009:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47865:13:::1;;;;;;;;;;;47864:14;47848:13;;:30;;;;;;;;;;;;;;;;;;47788:98::o:0;6797:87::-;6843:7;6870:6;;;;;;;;;;;6863:13;;6797:87;:::o;32697:104::-;32753:13;32786:7;32779:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32697:104;:::o;44480:541::-;44391:10;44378:23;;:9;:23;;;44370:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;44561:10:::1;;;;;;;;;;;44553:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;43557:3;44643:9;44627:13;:11;:13::i;:::-;:25;;;;:::i;:::-;44626:41;;44618:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;43609:1;44754:9;44725:15;:27;44741:10;44725:27;;;;;;;;;;;;;;;;:38;;;;:::i;:::-;44724:59;;44716:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;44880:9;44860:17;;:29;;;;:::i;:::-;44846:9;:44;;44838:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;44961:9;44930:15;:27;44946:10;44930:27;;;;;;;;;;;;;;;;:40;;;;;;;:::i;:::-;;;;;;;;44981:32;44991:10;45003:9;44981;:32::i;:::-;44480:541:::0;:::o;34281:279::-;34384:12;:10;:12::i;:::-;34372:24;;:8;:24;;;34368:54;;;34405:17;;;;;;;;;;;;;;34368:54;34480:8;34435:18;:32;34454:12;:10;:12::i;:::-;34435:32;;;;;;;;;;;;;;;:42;34468:8;34435:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;34533:8;34504:48;;34519:12;:10;:12::i;:::-;34504:48;;;34543:8;34504:48;;;;;;:::i;:::-;;;;;;;;34281:279;;:::o;47343:142::-;7028:12;:10;:12::i;:::-;7017:23;;:7;:5;:7::i;:::-;:23;;;7009:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47457:20:::1;47435:19;:42;;;;;;;;;;;;:::i;:::-;;47343:142:::0;:::o;35359:308::-;35518:28;35528:4;35534:2;35538:7;35518:9;:28::i;:::-;35562:48;35585:4;35591:2;35595:7;35604:5;35562:22;:48::i;:::-;35557:102;;35619:40;;;;;;;;;;;;;;35557:102;35359:308;;;;:::o;45896:180::-;7028:12;:10;:12::i;:::-;7017:23;;:7;:5;:7::i;:::-;:23;;;7009:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45954:10:::1;;;;;;;;;;;45953:11;45945:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;46028:4;46015:10;;:17;;;;;;;;;;;;;;;;;;46043:25;46053:10;46065:2;46043:9;:25::i;:::-;45896:180::o:0;43721:47::-;;;;:::o;43617:46::-;43662:1;43617:46;:::o;47706:74::-;7028:12;:10;:12::i;:::-;7017:23;;:7;:5;:7::i;:::-;:23;;;7009:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47767:5:::1;;;;;;;;;;;47766:6;47758:5;;:14;;;;;;;;;;;;;;;;;;47706:74::o:0;46241:473::-;46314:13;46348:16;46356:7;46348;:16::i;:::-;46340:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;46429:14;46456:1;46446:7;:11;;;;:::i;:::-;46429:28;;46474:10;;;;;;;;;;;46470:68;;46507:19;46500:26;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46470:68;46631:1;46608:12;46602:26;;;;;:::i;:::-;;;:30;:104;;;;;;;;;;;;;;;;;46659:12;46673:17;:6;:15;:17::i;:::-;46642:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46602:104;46595:111;;;46241:473;;;;:::o;47894:89::-;7028:12;:10;:12::i;:::-;7017:23;;:7;:5;:7::i;:::-;:23;;;7009:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47965:10:::1;;;;;;;;;;;47964:11;47951:10;;:24;;;;;;;;;;;;;;;;;;47894:89::o:0;47992:104::-;7028:12;:10;:12::i;:::-;7017:23;;:7;:5;:7::i;:::-;:23;;;7009:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48083:5:::1;48063:17;:25;;;;47992:104:::0;:::o;44085:22::-;;;;;;;;;;;;;:::o;34631:164::-;34728:4;34752:18;:25;34771:5;34752:25;;;;;;;;;;;;;;;:35;34778:8;34752:35;;;;;;;;;;;;;;;;;;;;;;;;;34745:42;;34631:164;;;;:::o;48217:357::-;7028:12;:10;:12::i;:::-;7017:23;;:7;:5;:7::i;:::-;:23;;;7009:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48327:1:::1;48309:8;:15;:19;48301:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;43557:3;48391:8;:15;48375:13;:11;:13::i;:::-;:31;;;;:::i;:::-;:45;;48367:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;48463:6;48458:109;48479:8;:15;48475:1;:19;48458:109;;;48525:30;48535:8;48544:1;48535:11;;;;;;;;:::i;:::-;;;;;;;;48548:6;48525:9;:30::i;:::-;48496:3;;;;;:::i;:::-;;;;48458:109;;;;48217:357:::0;;:::o;7706:201::-;7028:12;:10;:12::i;:::-;7017:23;;:7;:5;:7::i;:::-;:23;;;7009:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7815:1:::1;7795:22;;:8;:22;;;;7787:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7871:28;7890:8;7871:18;:28::i;:::-;7706:201:::0;:::o;19604:157::-;19689:4;19728:25;19713:40;;;:11;:40;;;;19706:47;;19604:157;;;:::o;5521:98::-;5574:7;5601:10;5594:17;;5521:98;:::o;35922:112::-;35979:4;36013:13;;36003:7;:23;35996:30;;35922:112;;;:::o;40685:196::-;40827:2;40800:15;:24;40816:7;40800:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;40865:7;40861:2;40845:28;;40854:5;40845:28;;;;;;;;;;;;40685:196;;;:::o;38605:1962::-;38720:35;38758:20;38770:7;38758:11;:20::i;:::-;38720:58;;38791:22;38833:13;:18;;;38817:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;38892:12;:10;:12::i;:::-;38868:36;;:20;38880:7;38868:11;:20::i;:::-;:36;;;38817:87;:154;;;;38921:50;38938:13;:18;;;38958:12;:10;:12::i;:::-;38921:16;:50::i;:::-;38817:154;38791:181;;38990:17;38985:66;;39016:35;;;;;;;;;;;;;;38985:66;39088:4;39066:26;;:13;:18;;;:26;;;39062:67;;39101:28;;;;;;;;;;;;;;39062:67;39158:1;39144:16;;:2;:16;;;39140:52;;;39169:23;;;;;;;;;;;;;;39140:52;39205:43;39227:4;39233:2;39237:7;39246:1;39205:21;:43::i;:::-;39313:49;39330:1;39334:7;39343:13;:18;;;39313:8;:49::i;:::-;39688:1;39658:12;:18;39671:4;39658:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39732:1;39704:12;:16;39717:2;39704:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39778:2;39750:11;:20;39762:7;39750:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;39840:15;39795:11;:20;39807:7;39795:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;40108:19;40140:1;40130:7;:11;40108:33;;40201:1;40160:43;;:11;:24;40172:11;40160:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;40156:295;;;40228:20;40236:11;40228:7;:20::i;:::-;40224:212;;;40305:13;:18;;;40273:11;:24;40285:11;40273:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;40388:13;:28;;;40346:11;:24;40358:11;40346:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;40224:212;40156:295;39633:829;40498:7;40494:2;40479:27;;40488:4;40479:27;;;;;;;;;;;;40517:42;40538:4;40544:2;40548:7;40557:1;40517:20;:42::i;:::-;38709:1858;;38605:1962;;;:::o;1253:190::-;1378:4;1431;1402:25;1415:5;1422:4;1402:12;:25::i;:::-;:33;1395:40;;1253:190;;;;;:::o;36042:104::-;36111:27;36121:2;36125:8;36111:27;;;;;;;;;;;;:9;:27::i;:::-;36042:104;;:::o;31771:504::-;31832:21;;:::i;:::-;31871:16;31879:7;31871;:16::i;:::-;31866:61;;31896:31;;;;;;;;;;;;;;31866:61;31970:12;31985:7;31970:22;;31965:245;32002:1;31994:4;:9;31965:245;;32032:31;32066:11;:17;32078:4;32066:17;;;;;;;;;;;32032:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32132:1;32106:28;;:9;:14;;;:28;;;32102:93;;32166:9;32159:16;;;;;;32102:93;32013:197;32005:6;;;;;;;;31965:245;;;;32240:27;;;;;;;;;;;;;;31771:504;;;;:::o;8067:191::-;8141:16;8160:6;;;;;;;;;;;8141:25;;8186:8;8177:6;;:17;;;;;;;;;;;;;;;;;;8241:8;8210:40;;8231:8;8210:40;;;;;;;;;;;;8130:128;8067:191;:::o;41446:765::-;41601:4;41622:15;:2;:13;;;:15::i;:::-;41618:586;;;41674:2;41658:36;;;41695:12;:10;:12::i;:::-;41709:4;41715:7;41724:5;41658:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;41654:495;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41921:1;41904:6;:13;:18;41900:234;;;41931:40;;;;;;;;;;;;;;41900:234;42084:6;42078:13;42069:6;42065:2;42061:15;42054:38;41654:495;41791:45;;;41781:55;;;:6;:55;;;;41774:62;;;;;41618:586;42188:4;42181:11;;41446:765;;;;;;;:::o;3083:723::-;3139:13;3369:1;3360:5;:10;3356:53;;;3387:10;;;;;;;;;;;;;;;;;;;;;3356:53;3419:12;3434:5;3419:20;;3450:14;3475:78;3490:1;3482:4;:9;3475:78;;3508:8;;;;;:::i;:::-;;;;3539:2;3531:10;;;;;:::i;:::-;;;3475:78;;;3563:19;3595:6;3585:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3563:39;;3613:154;3629:1;3620:5;:10;3613:154;;3657:1;3647:11;;;;;:::i;:::-;;;3724:2;3716:5;:10;;;;:::i;:::-;3703:2;:24;;;;:::i;:::-;3690:39;;3673:6;3680;3673:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3753:2;3744:11;;;;;:::i;:::-;;;3613:154;;;3791:6;3777:21;;;;;3083:723;;;;:::o;42699:159::-;;;;;:::o;43270:158::-;;;;;:::o;1804:675::-;1887:7;1907:20;1930:4;1907:27;;1950:9;1945:497;1969:5;:12;1965:1;:16;1945:497;;;2003:20;2026:5;2032:1;2026:8;;;;;;;;:::i;:::-;;;;;;;;2003:31;;2069:12;2053;:28;2049:382;;2196:42;2211:12;2225;2196:14;:42::i;:::-;2181:57;;2049:382;;;2373:42;2388:12;2402;2373:14;:42::i;:::-;2358:57;;2049:382;1988:454;1983:3;;;;;:::i;:::-;;;;1945:497;;;;2459:12;2452:19;;;1804:675;;;;:::o;36509:163::-;36632:32;36638:2;36642:8;36652:5;36659:4;36632:5;:32::i;:::-;36509:163;;;:::o;9498:326::-;9558:4;9815:1;9793:7;:19;;;:23;9786:30;;9498:326;;;:::o;2487:224::-;2555:13;2618:1;2612:4;2605:15;2647:1;2641:4;2634:15;2688:4;2682;2672:21;2663:30;;2487:224;;;;:::o;36931:1420::-;37070:20;37093:13;;37070:36;;37135:1;37121:16;;:2;:16;;;37117:48;;;37146:19;;;;;;;;;;;;;;37117:48;37192:1;37180:8;:13;37176:44;;;37202:18;;;;;;;;;;;;;;37176:44;37233:61;37263:1;37267:2;37271:12;37285:8;37233:21;:61::i;:::-;37609:8;37573:12;:16;37586:2;37573:16;;;;;;;;;;;;;;;:24;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37674:8;37633:12;:16;37646:2;37633:16;;;;;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37733:2;37700:11;:25;37712:12;37700:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;37800:15;37750:11;:25;37762:12;37750:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;37833:20;37856:12;37833:35;;37890:9;37885:330;37905:8;37901:1;:12;37885:330;;;37969:12;37965:2;37944:38;;37961:1;37944:38;;;;;;;;;;;;38005:4;:68;;;;;38014:59;38045:1;38049:2;38053:12;38067:5;38014:22;:59::i;:::-;38013:60;38005:68;38001:164;;;38105:40;;;;;;;;;;;;;;38001:164;38185:14;;;;;;;37915:3;;;;;;;37885:330;;;;38247:12;38231:13;:28;;;;37548:723;38283:60;38312:1;38316:2;38320:12;38334:8;38283:20;:60::i;:::-;37059:1292;36931:1420;;;;:::o;-1:-1:-1:-;;;;;;;:::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;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2886:::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:122;;3014:79;;:::i;:::-;2973:122;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;2886:370;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3262:133;;;;:::o;3401:139::-;3447:5;3485:6;3472:20;3463:29;;3501:33;3528:5;3501:33;:::i;:::-;3401:139;;;;:::o;3546:137::-;3591:5;3629:6;3616:20;3607:29;;3645:32;3671:5;3645:32;:::i;:::-;3546:137;;;;:::o;3689:141::-;3745:5;3776:6;3770:13;3761:22;;3792:32;3818:5;3792:32;:::i;:::-;3689:141;;;;:::o;3849:338::-;3904:5;3953:3;3946:4;3938:6;3934:17;3930:27;3920:122;;3961:79;;:::i;:::-;3920:122;4078:6;4065:20;4103:78;4177:3;4169:6;4162:4;4154:6;4150:17;4103:78;:::i;:::-;4094:87;;3910:277;3849:338;;;;:::o;4207:340::-;4263:5;4312:3;4305:4;4297:6;4293:17;4289:27;4279:122;;4320:79;;:::i;:::-;4279:122;4437:6;4424:20;4462:79;4537:3;4529:6;4522:4;4514:6;4510:17;4462:79;:::i;:::-;4453:88;;4269:278;4207:340;;;;:::o;4553:139::-;4599:5;4637:6;4624:20;4615:29;;4653:33;4680:5;4653:33;:::i;:::-;4553:139;;;;:::o;4698:329::-;4757:6;4806:2;4794:9;4785:7;4781:23;4777:32;4774:119;;;4812:79;;:::i;:::-;4774:119;4932:1;4957:53;5002:7;4993:6;4982:9;4978:22;4957:53;:::i;:::-;4947:63;;4903:117;4698:329;;;;:::o;5033:474::-;5101:6;5109;5158:2;5146:9;5137:7;5133:23;5129:32;5126:119;;;5164:79;;:::i;:::-;5126:119;5284:1;5309:53;5354:7;5345:6;5334:9;5330:22;5309:53;:::i;:::-;5299:63;;5255:117;5411:2;5437:53;5482:7;5473:6;5462:9;5458:22;5437:53;:::i;:::-;5427:63;;5382:118;5033:474;;;;;:::o;5513:619::-;5590:6;5598;5606;5655:2;5643:9;5634:7;5630:23;5626:32;5623:119;;;5661:79;;:::i;:::-;5623:119;5781:1;5806:53;5851:7;5842:6;5831:9;5827:22;5806:53;:::i;:::-;5796:63;;5752:117;5908:2;5934:53;5979:7;5970:6;5959:9;5955:22;5934:53;:::i;:::-;5924:63;;5879:118;6036:2;6062:53;6107:7;6098:6;6087:9;6083:22;6062:53;:::i;:::-;6052:63;;6007:118;5513:619;;;;;:::o;6138:943::-;6233:6;6241;6249;6257;6306:3;6294:9;6285:7;6281:23;6277:33;6274:120;;;6313:79;;:::i;:::-;6274:120;6433:1;6458:53;6503:7;6494:6;6483:9;6479:22;6458:53;:::i;:::-;6448:63;;6404:117;6560:2;6586:53;6631:7;6622:6;6611:9;6607:22;6586:53;:::i;:::-;6576:63;;6531:118;6688:2;6714:53;6759:7;6750:6;6739:9;6735:22;6714:53;:::i;:::-;6704:63;;6659:118;6844:2;6833:9;6829:18;6816:32;6875:18;6867:6;6864:30;6861:117;;;6897:79;;:::i;:::-;6861:117;7002:62;7056:7;7047:6;7036:9;7032:22;7002:62;:::i;:::-;6992:72;;6787:287;6138:943;;;;;;;:::o;7087:468::-;7152:6;7160;7209:2;7197:9;7188:7;7184:23;7180:32;7177:119;;;7215:79;;:::i;:::-;7177:119;7335:1;7360:53;7405:7;7396:6;7385:9;7381:22;7360:53;:::i;:::-;7350:63;;7306:117;7462:2;7488:50;7530:7;7521:6;7510:9;7506:22;7488:50;:::i;:::-;7478:60;;7433:115;7087:468;;;;;:::o;7561:474::-;7629:6;7637;7686:2;7674:9;7665:7;7661:23;7657:32;7654:119;;;7692:79;;:::i;:::-;7654:119;7812:1;7837:53;7882:7;7873:6;7862:9;7858:22;7837:53;:::i;:::-;7827:63;;7783:117;7939:2;7965:53;8010:7;8001:6;7990:9;7986:22;7965:53;:::i;:::-;7955:63;;7910:118;7561:474;;;;;:::o;8041:684::-;8134:6;8142;8191:2;8179:9;8170:7;8166:23;8162:32;8159:119;;;8197:79;;:::i;:::-;8159:119;8345:1;8334:9;8330:17;8317:31;8375:18;8367:6;8364:30;8361:117;;;8397:79;;:::i;:::-;8361:117;8502:78;8572:7;8563:6;8552:9;8548:22;8502:78;:::i;:::-;8492:88;;8288:302;8629:2;8655:53;8700:7;8691:6;8680:9;8676:22;8655:53;:::i;:::-;8645:63;;8600:118;8041:684;;;;;:::o;8731:::-;8824:6;8832;8881:2;8869:9;8860:7;8856:23;8852:32;8849:119;;;8887:79;;:::i;:::-;8849:119;9035:1;9024:9;9020:17;9007:31;9065:18;9057:6;9054:30;9051:117;;;9087:79;;:::i;:::-;9051:117;9192:78;9262:7;9253:6;9242:9;9238:22;9192:78;:::i;:::-;9182:88;;8978:302;9319:2;9345:53;9390:7;9381:6;9370:9;9366:22;9345:53;:::i;:::-;9335:63;;9290:118;8731:684;;;;;:::o;9421:329::-;9480:6;9529:2;9517:9;9508:7;9504:23;9500:32;9497:119;;;9535:79;;:::i;:::-;9497:119;9655:1;9680:53;9725:7;9716:6;9705:9;9701:22;9680:53;:::i;:::-;9670:63;;9626:117;9421:329;;;;:::o;9756:327::-;9814:6;9863:2;9851:9;9842:7;9838:23;9834:32;9831:119;;;9869:79;;:::i;:::-;9831:119;9989:1;10014:52;10058:7;10049:6;10038:9;10034:22;10014:52;:::i;:::-;10004:62;;9960:116;9756:327;;;;:::o;10089:349::-;10158:6;10207:2;10195:9;10186:7;10182:23;10178:32;10175:119;;;10213:79;;:::i;:::-;10175:119;10333:1;10358:63;10413:7;10404:6;10393:9;10389:22;10358:63;:::i;:::-;10348:73;;10304:127;10089:349;;;;:::o;10444:509::-;10513:6;10562:2;10550:9;10541:7;10537:23;10533:32;10530:119;;;10568:79;;:::i;:::-;10530:119;10716:1;10705:9;10701:17;10688:31;10746:18;10738:6;10735:30;10732:117;;;10768:79;;:::i;:::-;10732:117;10873:63;10928:7;10919:6;10908:9;10904:22;10873:63;:::i;:::-;10863:73;;10659:287;10444:509;;;;:::o;10959:329::-;11018:6;11067:2;11055:9;11046:7;11042:23;11038:32;11035:119;;;11073:79;;:::i;:::-;11035:119;11193:1;11218:53;11263:7;11254:6;11243:9;11239:22;11218:53;:::i;:::-;11208:63;;11164:117;10959:329;;;;:::o;11294:179::-;11363:10;11384:46;11426:3;11418:6;11384:46;:::i;:::-;11462:4;11457:3;11453:14;11439:28;;11294:179;;;;:::o;11479:118::-;11566:24;11584:5;11566:24;:::i;:::-;11561:3;11554:37;11479:118;;:::o;11603:157::-;11708:45;11728:24;11746:5;11728:24;:::i;:::-;11708:45;:::i;:::-;11703:3;11696:58;11603:157;;:::o;11796:732::-;11915:3;11944:54;11992:5;11944:54;:::i;:::-;12014:86;12093:6;12088:3;12014:86;:::i;:::-;12007:93;;12124:56;12174:5;12124:56;:::i;:::-;12203:7;12234:1;12219:284;12244:6;12241:1;12238:13;12219:284;;;12320:6;12314:13;12347:63;12406:3;12391:13;12347:63;:::i;:::-;12340:70;;12433:60;12486:6;12433:60;:::i;:::-;12423:70;;12279:224;12266:1;12263;12259:9;12254:14;;12219:284;;;12223:14;12519:3;12512:10;;11920:608;;;11796:732;;;;:::o;12534:109::-;12615:21;12630:5;12615:21;:::i;:::-;12610:3;12603:34;12534:109;;:::o;12649:118::-;12736:24;12754:5;12736:24;:::i;:::-;12731:3;12724:37;12649:118;;:::o;12773:360::-;12859:3;12887:38;12919:5;12887:38;:::i;:::-;12941:70;13004:6;12999:3;12941:70;:::i;:::-;12934:77;;13020:52;13065:6;13060:3;13053:4;13046:5;13042:16;13020:52;:::i;:::-;13097:29;13119:6;13097:29;:::i;:::-;13092:3;13088:39;13081:46;;12863:270;12773:360;;;;:::o;13139:364::-;13227:3;13255:39;13288:5;13255:39;:::i;:::-;13310:71;13374:6;13369:3;13310:71;:::i;:::-;13303:78;;13390:52;13435:6;13430:3;13423:4;13416:5;13412:16;13390:52;:::i;:::-;13467:29;13489:6;13467:29;:::i;:::-;13462:3;13458:39;13451:46;;13231:272;13139:364;;;;:::o;13509:377::-;13615:3;13643:39;13676:5;13643:39;:::i;:::-;13698:89;13780:6;13775:3;13698:89;:::i;:::-;13691:96;;13796:52;13841:6;13836:3;13829:4;13822:5;13818:16;13796:52;:::i;:::-;13873:6;13868:3;13864:16;13857:23;;13619:267;13509:377;;;;:::o;13916:845::-;14019:3;14056:5;14050:12;14085:36;14111:9;14085:36;:::i;:::-;14137:89;14219:6;14214:3;14137:89;:::i;:::-;14130:96;;14257:1;14246:9;14242:17;14273:1;14268:137;;;;14419:1;14414:341;;;;14235:520;;14268:137;14352:4;14348:9;14337;14333:25;14328:3;14321:38;14388:6;14383:3;14379:16;14372:23;;14268:137;;14414:341;14481:38;14513:5;14481:38;:::i;:::-;14541:1;14555:154;14569:6;14566:1;14563:13;14555:154;;;14643:7;14637:14;14633:1;14628:3;14624:11;14617:35;14693:1;14684:7;14680:15;14669:26;;14591:4;14588:1;14584:12;14579:17;;14555:154;;;14738:6;14733:3;14729:16;14722:23;;14421:334;;14235:520;;14023:738;;13916:845;;;;:::o;14767:366::-;14909:3;14930:67;14994:2;14989:3;14930:67;:::i;:::-;14923:74;;15006:93;15095:3;15006:93;:::i;:::-;15124:2;15119:3;15115:12;15108:19;;14767:366;;;:::o;15139:::-;15281:3;15302:67;15366:2;15361:3;15302:67;:::i;:::-;15295:74;;15378:93;15467:3;15378:93;:::i;:::-;15496:2;15491:3;15487:12;15480:19;;15139:366;;;:::o;15511:::-;15653:3;15674:67;15738:2;15733:3;15674:67;:::i;:::-;15667:74;;15750:93;15839:3;15750:93;:::i;:::-;15868:2;15863:3;15859:12;15852:19;;15511:366;;;:::o;15883:::-;16025:3;16046:67;16110:2;16105:3;16046:67;:::i;:::-;16039:74;;16122:93;16211:3;16122:93;:::i;:::-;16240:2;16235:3;16231:12;16224:19;;15883:366;;;:::o;16255:::-;16397:3;16418:67;16482:2;16477:3;16418:67;:::i;:::-;16411:74;;16494:93;16583:3;16494:93;:::i;:::-;16612:2;16607:3;16603:12;16596:19;;16255:366;;;:::o;16627:::-;16769:3;16790:67;16854:2;16849:3;16790:67;:::i;:::-;16783:74;;16866:93;16955:3;16866:93;:::i;:::-;16984:2;16979:3;16975:12;16968:19;;16627:366;;;:::o;16999:::-;17141:3;17162:67;17226:2;17221:3;17162:67;:::i;:::-;17155:74;;17238:93;17327:3;17238:93;:::i;:::-;17356:2;17351:3;17347:12;17340:19;;16999:366;;;:::o;17371:::-;17513:3;17534:67;17598:2;17593:3;17534:67;:::i;:::-;17527:74;;17610:93;17699:3;17610:93;:::i;:::-;17728:2;17723:3;17719:12;17712:19;;17371:366;;;:::o;17743:::-;17885:3;17906:67;17970:2;17965:3;17906:67;:::i;:::-;17899:74;;17982:93;18071:3;17982:93;:::i;:::-;18100:2;18095:3;18091:12;18084:19;;17743:366;;;:::o;18115:400::-;18275:3;18296:84;18378:1;18373:3;18296:84;:::i;:::-;18289:91;;18389:93;18478:3;18389:93;:::i;:::-;18507:1;18502:3;18498:11;18491:18;;18115:400;;;:::o;18521:366::-;18663:3;18684:67;18748:2;18743:3;18684:67;:::i;:::-;18677:74;;18760:93;18849:3;18760:93;:::i;:::-;18878:2;18873:3;18869:12;18862:19;;18521:366;;;:::o;18893:::-;19035:3;19056:67;19120:2;19115:3;19056:67;:::i;:::-;19049:74;;19132:93;19221:3;19132:93;:::i;:::-;19250:2;19245:3;19241:12;19234:19;;18893:366;;;:::o;19265:::-;19407:3;19428:67;19492:2;19487:3;19428:67;:::i;:::-;19421:74;;19504:93;19593:3;19504:93;:::i;:::-;19622:2;19617:3;19613:12;19606:19;;19265:366;;;:::o;19637:::-;19779:3;19800:67;19864:2;19859:3;19800:67;:::i;:::-;19793:74;;19876:93;19965:3;19876:93;:::i;:::-;19994:2;19989:3;19985:12;19978:19;;19637:366;;;:::o;20009:::-;20151:3;20172:67;20236:2;20231:3;20172:67;:::i;:::-;20165:74;;20248:93;20337:3;20248:93;:::i;:::-;20366:2;20361:3;20357:12;20350:19;;20009:366;;;:::o;20381:::-;20523:3;20544:67;20608:2;20603:3;20544:67;:::i;:::-;20537:74;;20620:93;20709:3;20620:93;:::i;:::-;20738:2;20733:3;20729:12;20722:19;;20381:366;;;:::o;20753:::-;20895:3;20916:67;20980:2;20975:3;20916:67;:::i;:::-;20909:74;;20992:93;21081:3;20992:93;:::i;:::-;21110:2;21105:3;21101:12;21094:19;;20753:366;;;:::o;21125:108::-;21202:24;21220:5;21202:24;:::i;:::-;21197:3;21190:37;21125:108;;:::o;21239:118::-;21326:24;21344:5;21326:24;:::i;:::-;21321:3;21314:37;21239:118;;:::o;21363:256::-;21475:3;21490:75;21561:3;21552:6;21490:75;:::i;:::-;21590:2;21585:3;21581:12;21574:19;;21610:3;21603:10;;21363:256;;;;:::o;21625:695::-;21903:3;21925:92;22013:3;22004:6;21925:92;:::i;:::-;21918:99;;22034:95;22125:3;22116:6;22034:95;:::i;:::-;22027:102;;22146:148;22290:3;22146:148;:::i;:::-;22139:155;;22311:3;22304:10;;21625:695;;;;;:::o;22326:222::-;22419:4;22457:2;22446:9;22442:18;22434:26;;22470:71;22538:1;22527:9;22523:17;22514:6;22470:71;:::i;:::-;22326:222;;;;:::o;22554:640::-;22749:4;22787:3;22776:9;22772:19;22764:27;;22801:71;22869:1;22858:9;22854:17;22845:6;22801:71;:::i;:::-;22882:72;22950:2;22939:9;22935:18;22926:6;22882:72;:::i;:::-;22964;23032:2;23021:9;23017:18;23008:6;22964:72;:::i;:::-;23083:9;23077:4;23073:20;23068:2;23057:9;23053:18;23046:48;23111:76;23182:4;23173:6;23111:76;:::i;:::-;23103:84;;22554:640;;;;;;;:::o;23200:373::-;23343:4;23381:2;23370:9;23366:18;23358:26;;23430:9;23424:4;23420:20;23416:1;23405:9;23401:17;23394:47;23458:108;23561:4;23552:6;23458:108;:::i;:::-;23450:116;;23200:373;;;;:::o;23579:210::-;23666:4;23704:2;23693:9;23689:18;23681:26;;23717:65;23779:1;23768:9;23764:17;23755:6;23717:65;:::i;:::-;23579:210;;;;:::o;23795:222::-;23888:4;23926:2;23915:9;23911:18;23903:26;;23939:71;24007:1;23996:9;23992:17;23983:6;23939:71;:::i;:::-;23795:222;;;;:::o;24023:313::-;24136:4;24174:2;24163:9;24159:18;24151:26;;24223:9;24217:4;24213:20;24209:1;24198:9;24194:17;24187:47;24251:78;24324:4;24315:6;24251:78;:::i;:::-;24243:86;;24023:313;;;;:::o;24342:419::-;24508:4;24546:2;24535:9;24531:18;24523:26;;24595:9;24589:4;24585:20;24581:1;24570:9;24566:17;24559:47;24623:131;24749:4;24623:131;:::i;:::-;24615:139;;24342:419;;;:::o;24767:::-;24933:4;24971:2;24960:9;24956:18;24948:26;;25020:9;25014:4;25010:20;25006:1;24995:9;24991:17;24984:47;25048:131;25174:4;25048:131;:::i;:::-;25040:139;;24767:419;;;:::o;25192:::-;25358:4;25396:2;25385:9;25381:18;25373:26;;25445:9;25439:4;25435:20;25431:1;25420:9;25416:17;25409:47;25473:131;25599:4;25473:131;:::i;:::-;25465:139;;25192:419;;;:::o;25617:::-;25783:4;25821:2;25810:9;25806:18;25798:26;;25870:9;25864:4;25860:20;25856:1;25845:9;25841:17;25834:47;25898:131;26024:4;25898:131;:::i;:::-;25890:139;;25617:419;;;:::o;26042:::-;26208:4;26246:2;26235:9;26231:18;26223:26;;26295:9;26289:4;26285:20;26281:1;26270:9;26266:17;26259:47;26323:131;26449:4;26323:131;:::i;:::-;26315:139;;26042:419;;;:::o;26467:::-;26633:4;26671:2;26660:9;26656:18;26648:26;;26720:9;26714:4;26710:20;26706:1;26695:9;26691:17;26684:47;26748:131;26874:4;26748:131;:::i;:::-;26740:139;;26467:419;;;:::o;26892:::-;27058:4;27096:2;27085:9;27081:18;27073:26;;27145:9;27139:4;27135:20;27131:1;27120:9;27116:17;27109:47;27173:131;27299:4;27173:131;:::i;:::-;27165:139;;26892:419;;;:::o;27317:::-;27483:4;27521:2;27510:9;27506:18;27498:26;;27570:9;27564:4;27560:20;27556:1;27545:9;27541:17;27534:47;27598:131;27724:4;27598:131;:::i;:::-;27590:139;;27317:419;;;:::o;27742:::-;27908:4;27946:2;27935:9;27931:18;27923:26;;27995:9;27989:4;27985:20;27981:1;27970:9;27966:17;27959:47;28023:131;28149:4;28023:131;:::i;:::-;28015:139;;27742:419;;;:::o;28167:::-;28333:4;28371:2;28360:9;28356:18;28348:26;;28420:9;28414:4;28410:20;28406:1;28395:9;28391:17;28384:47;28448:131;28574:4;28448:131;:::i;:::-;28440:139;;28167:419;;;:::o;28592:::-;28758:4;28796:2;28785:9;28781:18;28773:26;;28845:9;28839:4;28835:20;28831:1;28820:9;28816:17;28809:47;28873:131;28999:4;28873:131;:::i;:::-;28865:139;;28592:419;;;:::o;29017:::-;29183:4;29221:2;29210:9;29206:18;29198:26;;29270:9;29264:4;29260:20;29256:1;29245:9;29241:17;29234:47;29298:131;29424:4;29298:131;:::i;:::-;29290:139;;29017:419;;;:::o;29442:::-;29608:4;29646:2;29635:9;29631:18;29623:26;;29695:9;29689:4;29685:20;29681:1;29670:9;29666:17;29659:47;29723:131;29849:4;29723:131;:::i;:::-;29715:139;;29442:419;;;:::o;29867:::-;30033:4;30071:2;30060:9;30056:18;30048:26;;30120:9;30114:4;30110:20;30106:1;30095:9;30091:17;30084:47;30148:131;30274:4;30148:131;:::i;:::-;30140:139;;29867:419;;;:::o;30292:::-;30458:4;30496:2;30485:9;30481:18;30473:26;;30545:9;30539:4;30535:20;30531:1;30520:9;30516:17;30509:47;30573:131;30699:4;30573:131;:::i;:::-;30565:139;;30292:419;;;:::o;30717:::-;30883:4;30921:2;30910:9;30906:18;30898:26;;30970:9;30964:4;30960:20;30956:1;30945:9;30941:17;30934:47;30998:131;31124:4;30998:131;:::i;:::-;30990:139;;30717:419;;;:::o;31142:222::-;31235:4;31273:2;31262:9;31258:18;31250:26;;31286:71;31354:1;31343:9;31339:17;31330:6;31286:71;:::i;:::-;31142:222;;;;:::o;31370:129::-;31404:6;31431:20;;:::i;:::-;31421:30;;31460:33;31488:4;31480:6;31460:33;:::i;:::-;31370:129;;;:::o;31505:75::-;31538:6;31571:2;31565:9;31555:19;;31505:75;:::o;31586:311::-;31663:4;31753:18;31745:6;31742:30;31739:56;;;31775:18;;:::i;:::-;31739:56;31825:4;31817:6;31813:17;31805:25;;31885:4;31879;31875:15;31867:23;;31586:311;;;:::o;31903:::-;31980:4;32070:18;32062:6;32059:30;32056:56;;;32092:18;;:::i;:::-;32056:56;32142:4;32134:6;32130:17;32122:25;;32202:4;32196;32192:15;32184:23;;31903:311;;;:::o;32220:307::-;32281:4;32371:18;32363:6;32360:30;32357:56;;;32393:18;;:::i;:::-;32357:56;32431:29;32453:6;32431:29;:::i;:::-;32423:37;;32515:4;32509;32505:15;32497:23;;32220:307;;;:::o;32533:308::-;32595:4;32685:18;32677:6;32674:30;32671:56;;;32707:18;;:::i;:::-;32671:56;32745:29;32767:6;32745:29;:::i;:::-;32737:37;;32829:4;32823;32819:15;32811:23;;32533:308;;;:::o;32847:132::-;32914:4;32937:3;32929:11;;32967:4;32962:3;32958:14;32950:22;;32847:132;;;:::o;32985:141::-;33034:4;33057:3;33049:11;;33080:3;33077:1;33070:14;33114:4;33111:1;33101:18;33093:26;;32985:141;;;:::o;33132:114::-;33199:6;33233:5;33227:12;33217:22;;33132:114;;;:::o;33252:98::-;33303:6;33337:5;33331:12;33321:22;;33252:98;;;:::o;33356:99::-;33408:6;33442:5;33436:12;33426:22;;33356:99;;;:::o;33461:113::-;33531:4;33563;33558:3;33554:14;33546:22;;33461:113;;;:::o;33580:184::-;33679:11;33713:6;33708:3;33701:19;33753:4;33748:3;33744:14;33729:29;;33580:184;;;;:::o;33770:168::-;33853:11;33887:6;33882:3;33875:19;33927:4;33922:3;33918:14;33903:29;;33770:168;;;;:::o;33944:169::-;34028:11;34062:6;34057:3;34050:19;34102:4;34097:3;34093:14;34078:29;;33944:169;;;;:::o;34119:148::-;34221:11;34258:3;34243:18;;34119:148;;;;:::o;34273:305::-;34313:3;34332:20;34350:1;34332:20;:::i;:::-;34327:25;;34366:20;34384:1;34366:20;:::i;:::-;34361:25;;34520:1;34452:66;34448:74;34445:1;34442:81;34439:107;;;34526:18;;:::i;:::-;34439:107;34570:1;34567;34563:9;34556:16;;34273:305;;;;:::o;34584:185::-;34624:1;34641:20;34659:1;34641:20;:::i;:::-;34636:25;;34675:20;34693:1;34675:20;:::i;:::-;34670:25;;34714:1;34704:35;;34719:18;;:::i;:::-;34704:35;34761:1;34758;34754:9;34749:14;;34584:185;;;;:::o;34775:348::-;34815:7;34838:20;34856:1;34838:20;:::i;:::-;34833:25;;34872:20;34890:1;34872:20;:::i;:::-;34867:25;;35060:1;34992:66;34988:74;34985:1;34982:81;34977:1;34970:9;34963:17;34959:105;34956:131;;;35067:18;;:::i;:::-;34956:131;35115:1;35112;35108:9;35097:20;;34775:348;;;;:::o;35129:191::-;35169:4;35189:20;35207:1;35189:20;:::i;:::-;35184:25;;35223:20;35241:1;35223:20;:::i;:::-;35218:25;;35262:1;35259;35256:8;35253:34;;;35267:18;;:::i;:::-;35253:34;35312:1;35309;35305:9;35297:17;;35129:191;;;;:::o;35326:96::-;35363:7;35392:24;35410:5;35392:24;:::i;:::-;35381:35;;35326:96;;;:::o;35428:90::-;35462:7;35505:5;35498:13;35491:21;35480:32;;35428:90;;;:::o;35524:77::-;35561:7;35590:5;35579:16;;35524:77;;;:::o;35607:149::-;35643:7;35683:66;35676:5;35672:78;35661:89;;35607:149;;;:::o;35762:126::-;35799:7;35839:42;35832:5;35828:54;35817:65;;35762:126;;;:::o;35894:77::-;35931:7;35960:5;35949:16;;35894:77;;;:::o;35977:154::-;36061:6;36056:3;36051;36038:30;36123:1;36114:6;36109:3;36105:16;36098:27;35977:154;;;:::o;36137:307::-;36205:1;36215:113;36229:6;36226:1;36223:13;36215:113;;;36314:1;36309:3;36305:11;36299:18;36295:1;36290:3;36286:11;36279:39;36251:2;36248:1;36244:10;36239:15;;36215:113;;;36346:6;36343:1;36340:13;36337:101;;;36426:1;36417:6;36412:3;36408:16;36401:27;36337:101;36186:258;36137:307;;;:::o;36450:320::-;36494:6;36531:1;36525:4;36521:12;36511:22;;36578:1;36572:4;36568:12;36599:18;36589:81;;36655:4;36647:6;36643:17;36633:27;;36589:81;36717:2;36709:6;36706:14;36686:18;36683:38;36680:84;;;36736:18;;:::i;:::-;36680:84;36501:269;36450:320;;;:::o;36776:281::-;36859:27;36881:4;36859:27;:::i;:::-;36851:6;36847:40;36989:6;36977:10;36974:22;36953:18;36941:10;36938:34;36935:62;36932:88;;;37000:18;;:::i;:::-;36932:88;37040:10;37036:2;37029:22;36819:238;36776:281;;:::o;37063:233::-;37102:3;37125:24;37143:5;37125:24;:::i;:::-;37116:33;;37171:66;37164:5;37161:77;37158:103;;;37241:18;;:::i;:::-;37158:103;37288:1;37281:5;37277:13;37270:20;;37063:233;;;:::o;37302:100::-;37341:7;37370:26;37390:5;37370:26;:::i;:::-;37359:37;;37302:100;;;:::o;37408:94::-;37447:7;37476:20;37490:5;37476:20;:::i;:::-;37465:31;;37408:94;;;:::o;37508:176::-;37540:1;37557:20;37575:1;37557:20;:::i;:::-;37552:25;;37591:20;37609:1;37591:20;:::i;:::-;37586:25;;37630:1;37620:35;;37635:18;;:::i;:::-;37620:35;37676:1;37673;37669:9;37664:14;;37508:176;;;;:::o;37690:180::-;37738:77;37735:1;37728:88;37835:4;37832:1;37825:15;37859:4;37856:1;37849:15;37876:180;37924:77;37921:1;37914:88;38021:4;38018:1;38011:15;38045:4;38042:1;38035:15;38062:180;38110:77;38107:1;38100:88;38207:4;38204:1;38197:15;38231:4;38228:1;38221:15;38248:180;38296:77;38293:1;38286:88;38393:4;38390:1;38383:15;38417:4;38414:1;38407:15;38434:180;38482:77;38479:1;38472:88;38579:4;38576:1;38569:15;38603:4;38600:1;38593:15;38620:180;38668:77;38665:1;38658:88;38765:4;38762:1;38755:15;38789:4;38786:1;38779:15;38806:117;38915:1;38912;38905:12;38929:117;39038:1;39035;39028:12;39052:117;39161:1;39158;39151:12;39175:117;39284:1;39281;39274:12;39298:117;39407:1;39404;39397:12;39421:102;39462:6;39513:2;39509:7;39504:2;39497:5;39493:14;39489:28;39479:38;;39421:102;;;:::o;39529:94::-;39562:8;39610:5;39606:2;39602:14;39581:35;;39529:94;;;:::o;39629:222::-;39769:34;39765:1;39757:6;39753:14;39746:58;39838:5;39833:2;39825:6;39821:15;39814:30;39629:222;:::o;39857:::-;39997:34;39993:1;39985:6;39981:14;39974:58;40066:5;40061:2;40053:6;40049:15;40042:30;39857:222;:::o;40085:225::-;40225:34;40221:1;40213:6;40209:14;40202:58;40294:8;40289:2;40281:6;40277:15;40270:33;40085:225;:::o;40316:241::-;40456:34;40452:1;40444:6;40440:14;40433:58;40525:24;40520:2;40512:6;40508:15;40501:49;40316:241;:::o;40563:172::-;40703:24;40699:1;40691:6;40687:14;40680:48;40563:172;:::o;40741:181::-;40881:33;40877:1;40869:6;40865:14;40858:57;40741:181;:::o;40928:220::-;41068:34;41064:1;41056:6;41052:14;41045:58;41137:3;41132:2;41124:6;41120:15;41113:28;40928:220;:::o;41154:232::-;41294:34;41290:1;41282:6;41278:14;41271:58;41363:15;41358:2;41350:6;41346:15;41339:40;41154:232;:::o;41392:229::-;41532:34;41528:1;41520:6;41516:14;41509:58;41601:12;41596:2;41588:6;41584:15;41577:37;41392:229;:::o;41627:155::-;41767:7;41763:1;41755:6;41751:14;41744:31;41627:155;:::o;41788:182::-;41928:34;41924:1;41916:6;41912:14;41905:58;41788:182;:::o;41976:226::-;42116:34;42112:1;42104:6;42100:14;42093:58;42185:9;42180:2;42172:6;42168:15;42161:34;41976:226;:::o;42208:234::-;42348:34;42344:1;42336:6;42332:14;42325:58;42417:17;42412:2;42404:6;42400:15;42393:42;42208:234;:::o;42448:226::-;42588:34;42584:1;42576:6;42572:14;42565:58;42657:9;42652:2;42644:6;42640:15;42633:34;42448:226;:::o;42680:233::-;42820:34;42816:1;42808:6;42804:14;42797:58;42889:16;42884:2;42876:6;42872:15;42865:41;42680:233;:::o;42919:173::-;43059:25;43055:1;43047:6;43043:14;43036:49;42919:173;:::o;43098:172::-;43238:24;43234:1;43226:6;43222:14;43215:48;43098:172;:::o;43276:122::-;43349:24;43367:5;43349:24;:::i;:::-;43342:5;43339:35;43329:63;;43388:1;43385;43378:12;43329:63;43276:122;:::o;43404:116::-;43474:21;43489:5;43474:21;:::i;:::-;43467:5;43464:32;43454:60;;43510:1;43507;43500:12;43454:60;43404:116;:::o;43526:122::-;43599:24;43617:5;43599:24;:::i;:::-;43592:5;43589:35;43579:63;;43638:1;43635;43628:12;43579:63;43526:122;:::o;43654:120::-;43726:23;43743:5;43726:23;:::i;:::-;43719:5;43716:34;43706:62;;43764:1;43761;43754:12;43706:62;43654:120;:::o;43780:122::-;43853:24;43871:5;43853:24;:::i;:::-;43846:5;43843:35;43833:63;;43892:1;43889;43882:12;43833:63;43780:122;:::o
Swarm Source
ipfs://6c59aeb5fd0eadb2eaaa595421fc0206e1462c51f1c5847b4da7455a4c6d2829
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.