ERC-721
Overview
Max Total Supply
550 Sc2022
Holders
119
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
5 Sc2022Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
scamstreet2022
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-11 */ // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/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/ERC721A.sol pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..). * * Assumes the number of issuable tokens (collection size) is capped and fits in a uint128. * * Does not support burning tokens to address(0). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 private currentIndex = 0; uint256 internal immutable collectionSize; uint256 internal immutable maxBatchSize; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) private _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev * `maxBatchSize` refers to how much a minter can mint at a time. * `collectionSize_` refers to how many tokens are in the collection. */ constructor( string memory name_, string memory symbol_, uint256 maxBatchSize_, uint256 collectionSize_ ) { require( collectionSize_ > 0, "ERC721A: collection must have a nonzero supply" ); require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero"); _name = name_; _symbol = symbol_; maxBatchSize = maxBatchSize_; collectionSize = collectionSize_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return currentIndex; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), "ERC721A: global index out of bounds"); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(collectionSize). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { require(index < balanceOf(owner), "ERC721A: owner index out of bounds"); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx = 0; address currOwnershipAddr = address(0); for (uint256 i = 0; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } revert("ERC721A: unable to get token of owner by index"); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { require( owner != address(0), "ERC721A: balance query for the zero address" ); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require( owner != address(0), "ERC721A: number minted query for the zero address" ); return uint256(_addressData[owner].numberMinted); } function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), "ERC721A: owner query for nonexistent token"); uint256 lowestTokenToCheck; if (tokenId >= maxBatchSize) { lowestTokenToCheck = tokenId - maxBatchSize + 1; } for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } revert("ERC721A: unable to determine the owner of token"); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, (tokenId + 1).toString(), ".json")) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); require(to != owner, "ERC721A: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721A: approve caller is not owner nor approved for all" ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require( _exists(tokenId), "ERC721A: approved query for nonexistent token" ); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), "ERC721A: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721A: transfer to non ERC721Receiver implementer" ); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ""); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - there must be `quantity` tokens remaining unminted in the total collection. * - `to` cannot be the zero address. * - `quantity` cannot be larger than the max batch size. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = currentIndex; require(to != address(0), "ERC721A: mint to the zero address"); // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering. require(!_exists(startTokenId), "ERC721A: token already minted"); require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high"); _beforeTokenTransfers(address(0), to, startTokenId, quantity); AddressData memory addressData = _addressData[to]; _addressData[to] = AddressData( addressData.balance + uint128(quantity), addressData.numberMinted + uint128(quantity) ); _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp)); uint256 updatedIndex = startTokenId; for (uint256 i = 0; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); require( _checkOnERC721Received(address(0), to, updatedIndex, _data), "ERC721A: transfer to non ERC721Receiver implementer" ); updatedIndex++; } currentIndex = updatedIndex; _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require( isApprovedOrOwner, "ERC721A: transfer caller is not owner nor approved" ); require( prevOwnership.addr == from, "ERC721A: transfer from incorrect owner" ); require(to != address(0), "ERC721A: transfer to the zero address"); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp)); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId] = TokenOwnership( prevOwnership.addr, prevOwnership.startTimestamp ); } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } uint256 public nextOwnerToExplicitlySet = 0; /** * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf(). */ function _setOwnersExplicit(uint256 quantity) internal { uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet; require(quantity > 0, "quantity must be nonzero"); uint256 endIndex = oldNextOwnerToSet + quantity - 1; if (endIndex > collectionSize - 1) { endIndex = collectionSize - 1; } // We know if the last one in the group exists, all in the group exist, due to serial ordering. require(_exists(endIndex), "not enough minted yet for this cleanup"); for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) { if (_ownerships[i].addr == address(0)) { TokenOwnership memory ownership = ownershipOf(i); _ownerships[i] = TokenOwnership( ownership.addr, ownership.startTimestamp ); } } nextOwnerToExplicitlySet = endIndex + 1; } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received( _msgSender(), from, tokenId, _data ) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert( "ERC721A: transfer to non ERC721Receiver implementer" ); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // File: contracts/4_scamstreet.sol pragma solidity ^0.8.4; contract scamstreet2022 is Ownable, ERC721A, ReentrancyGuard { uint256 public immutable maxPerAddressDuringMint; uint256 public immutable publicPrice; mapping(address => uint256) public allowlist; constructor() ERC721A("scamstreet 2022", "Sc2022", 5, 2022) { maxPerAddressDuringMint = 5; publicPrice = 0.008 ether; } modifier callerIsUser() { require(tx.origin == msg.sender, "The caller is another contract"); _; } function publicSaleMint(uint256 quantity) external payable callerIsUser { require(isPublicSaleOn(), "public sale has not begun yet"); require( totalSupply() + quantity <= collectionSize, "reached max supply" ); require( numberMinted(msg.sender) + quantity <= maxPerAddressDuringMint, "can not mint this many" ); require(priceFitsQuantity(totalSupply(), msg .value, quantity), "Need to send more ETH."); _safeMint(msg.sender, quantity); } function devMint(uint256 quantity) external onlyOwner { for (uint256 i = 0; i < quantity; i++) { _safeMint(msg.sender, maxPerAddressDuringMint); } } string private _baseTokenURI; bool private _isPublicSaleActive; function isPublicSaleOn() public view returns (bool) { return _isPublicSaleActive; } function priceFitsQuantity(uint256 currentIndex, uint256 price, uint256 quantity) internal view returns (bool) { if (currentIndex < 500) { return true; } else { if (price < publicPrice * quantity) { return false; } else { return true; } } } function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } function setBaseURI(string calldata baseURI) external onlyOwner { _baseTokenURI = baseURI; } function setPublicSaleState(bool state) external onlyOwner { _isPublicSaleActive = state; } function withdrawMoney() external onlyOwner nonReentrant { (bool success, ) = msg.sender.call{value: address(this).balance}(""); require(success, "Transfer failed."); } function setOwnersExplicit(uint256 quantity) external onlyOwner nonReentrant { _setOwnersExplicit(quantity); } function numberMinted(address owner) public view returns (uint256) { return _numberMinted(owner); } function getOwnershipData(uint256 tokenId) external view returns (TokenOwnership memory) { return ownershipOf(tokenId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowlist","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"quantity","type":"uint256"}],"name":"devMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPublicSaleOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerAddressDuringMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"publicSaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"setOwnersExplicit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setPublicSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
610100604052600060015560006008553480156200001c57600080fd5b506040518060400160405280600f81526020017f7363616d737472656574203230323200000000000000000000000000000000008152506040518060400160405280600681526020017f536332303232000000000000000000000000000000000000000000000000000081525060056107e6620000ae620000a2620001a660201b60201c565b620001ae60201b60201c565b60008111620000f4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000eb9062000392565b60405180910390fd5b600082116200013a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001319062000370565b60405180910390fd5b83600290805190602001906200015292919062000272565b5082600390805190602001906200016b92919062000272565b508160a081815250508060808181525050505050506001600981905550600560c08181525050661c6bf52634000060e08181525050620004c8565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200028090620003c5565b90600052602060002090601f016020900481019282620002a45760008555620002f0565b82601f10620002bf57805160ff1916838001178555620002f0565b82800160010185558215620002f0579182015b82811115620002ef578251825591602001919060010190620002d2565b5b509050620002ff919062000303565b5090565b5b808211156200031e57600081600090555060010162000304565b5090565b600062000331602783620003b4565b91506200033e826200042a565b604082019050919050565b600062000358602e83620003b4565b9150620003658262000479565b604082019050919050565b600060208201905081810360008301526200038b8162000322565b9050919050565b60006020820190508181036000830152620003ad8162000349565b9050919050565b600082825260208201905092915050565b60006002820490506001821680620003de57607f821691505b60208210811415620003f557620003f4620003fb565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b60805160a05160c05160e051614e1d62000533600039600081816114c90152612793015260008181610ec0015281816111a00152611798015260008181612508015281816125310152612d190152600081816117230152818161227201526122a60152614e1d6000f3fe6080604052600436106101e35760003560e01c80638bc35c2f11610102578063ac44600211610095578063d7224ba011610064578063d7224ba0146106f5578063dc33e68114610720578063e985e9c51461075d578063f2fde38b1461079a576101e3565b8063ac4460021461065c578063b3ab66b014610673578063b88d4fde1461068f578063c87b56dd146106b8576101e3565b806395d89b41116100d157806395d89b41146105a0578063a22cb465146105cb578063a7cd52cb146105f4578063a945bf8014610631576101e3565b80638bc35c2f146104e45780638da5cb5b1461050f5780639231ab2a1461053a5780639293a5c714610577576101e3565b8063375a069a1161017a57806355f804b31161014957806355f804b31461042a5780636352211e1461045357806370a0823114610490578063715018a6146104cd576101e3565b8063375a069a146103705780633f5e47411461039957806342842e0e146103c45780634f6ccce7146103ed576101e3565b806318160ddd116101b657806318160ddd146102b657806323b872dd146102e15780632d20fb601461030a5780632f745c5914610333576101e3565b806301ffc9a7146101e857806306fdde0314610225578063081812fc14610250578063095ea7b31461028d575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190613556565b6107c3565b60405161021c9190613c52565b60405180910390f35b34801561023157600080fd5b5061023a61090d565b6040516102479190613c6d565b60405180910390f35b34801561025c57600080fd5b50610277600480360381019061027291906135fd565b61099f565b6040516102849190613beb565b60405180910390f35b34801561029957600080fd5b506102b460048036038101906102af91906134e9565b610a24565b005b3480156102c257600080fd5b506102cb610b3d565b6040516102d8919061406a565b60405180910390f35b3480156102ed57600080fd5b50610308600480360381019061030391906133d3565b610b47565b005b34801561031657600080fd5b50610331600480360381019061032c91906135fd565b610b57565b005b34801561033f57600080fd5b5061035a600480360381019061035591906134e9565b610c35565b604051610367919061406a565b60405180910390f35b34801561037c57600080fd5b50610397600480360381019061039291906135fd565b610e33565b005b3480156103a557600080fd5b506103ae610efb565b6040516103bb9190613c52565b60405180910390f35b3480156103d057600080fd5b506103eb60048036038101906103e691906133d3565b610f12565b005b3480156103f957600080fd5b50610414600480360381019061040f91906135fd565b610f32565b604051610421919061406a565b60405180910390f35b34801561043657600080fd5b50610451600480360381019061044c91906135b0565b610f85565b005b34801561045f57600080fd5b5061047a600480360381019061047591906135fd565b611017565b6040516104879190613beb565b60405180910390f35b34801561049c57600080fd5b506104b760048036038101906104b29190613366565b61102d565b6040516104c4919061406a565b60405180910390f35b3480156104d957600080fd5b506104e2611116565b005b3480156104f057600080fd5b506104f961119e565b604051610506919061406a565b60405180910390f35b34801561051b57600080fd5b506105246111c2565b6040516105319190613beb565b60405180910390f35b34801561054657600080fd5b50610561600480360381019061055c91906135fd565b6111eb565b60405161056e919061404f565b60405180910390f35b34801561058357600080fd5b5061059e60048036038101906105999190613529565b611203565b005b3480156105ac57600080fd5b506105b561129c565b6040516105c29190613c6d565b60405180910390f35b3480156105d757600080fd5b506105f260048036038101906105ed91906134a9565b61132e565b005b34801561060057600080fd5b5061061b60048036038101906106169190613366565b6114af565b604051610628919061406a565b60405180910390f35b34801561063d57600080fd5b506106466114c7565b604051610653919061406a565b60405180910390f35b34801561066857600080fd5b506106716114eb565b005b61068d600480360381019061068891906135fd565b61166c565b005b34801561069b57600080fd5b506106b660048036038101906106b19190613426565b61186a565b005b3480156106c457600080fd5b506106df60048036038101906106da91906135fd565b6118c6565b6040516106ec9190613c6d565b60405180910390f35b34801561070157600080fd5b5061070a611979565b604051610717919061406a565b60405180910390f35b34801561072c57600080fd5b5061074760048036038101906107429190613366565b61197f565b604051610754919061406a565b60405180910390f35b34801561076957600080fd5b50610784600480360381019061077f9190613393565b611991565b6040516107919190613c52565b60405180910390f35b3480156107a657600080fd5b506107c160048036038101906107bc9190613366565b611a25565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061088e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108f657507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610906575061090582611b1d565b5b9050919050565b60606002805461091c906143c8565b80601f0160208091040260200160405190810160405280929190818152602001828054610948906143c8565b80156109955780601f1061096a57610100808354040283529160200191610995565b820191906000526020600020905b81548152906001019060200180831161097857829003601f168201915b5050505050905090565b60006109aa82611b87565b6109e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e09061400f565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a2f82611017565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9790613eaf565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610abf611b95565b73ffffffffffffffffffffffffffffffffffffffff161480610aee5750610aed81610ae8611b95565b611991565b5b610b2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2490613d6f565b60405180910390fd5b610b38838383611b9d565b505050565b6000600154905090565b610b52838383611c4f565b505050565b610b5f611b95565b73ffffffffffffffffffffffffffffffffffffffff16610b7d6111c2565b73ffffffffffffffffffffffffffffffffffffffff1614610bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bca90613e0f565b60405180910390fd5b60026009541415610c19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1090613fcf565b60405180910390fd5b6002600981905550610c2a81612208565b600160098190555050565b6000610c408361102d565b8210610c81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7890613c8f565b60405180910390fd5b6000610c8b610b3d565b905060008060005b83811015610df1576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610d8557806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ddd5786841415610dce578195505050505050610e2d565b8380610dd99061442b565b9450505b508080610de99061442b565b915050610c93565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2490613f8f565b60405180910390fd5b92915050565b610e3b611b95565b73ffffffffffffffffffffffffffffffffffffffff16610e596111c2565b73ffffffffffffffffffffffffffffffffffffffff1614610eaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea690613e0f565b60405180910390fd5b60005b81811015610ef757610ee4337f0000000000000000000000000000000000000000000000000000000000000000612496565b8080610eef9061442b565b915050610eb2565b5050565b6000600c60009054906101000a900460ff16905090565b610f2d8383836040518060200160405280600081525061186a565b505050565b6000610f3c610b3d565b8210610f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7490613cef565b60405180910390fd5b819050919050565b610f8d611b95565b73ffffffffffffffffffffffffffffffffffffffff16610fab6111c2565b73ffffffffffffffffffffffffffffffffffffffff1614611001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff890613e0f565b60405180910390fd5b8181600b919061101292919061315a565b505050565b6000611022826124b4565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561109e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109590613daf565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61111e611b95565b73ffffffffffffffffffffffffffffffffffffffff1661113c6111c2565b73ffffffffffffffffffffffffffffffffffffffff1614611192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118990613e0f565b60405180910390fd5b61119c60006126b7565b565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6111f36131e0565b6111fc826124b4565b9050919050565b61120b611b95565b73ffffffffffffffffffffffffffffffffffffffff166112296111c2565b73ffffffffffffffffffffffffffffffffffffffff161461127f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127690613e0f565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b6060600380546112ab906143c8565b80601f01602080910402602001604051908101604052809291908181526020018280546112d7906143c8565b80156113245780601f106112f957610100808354040283529160200191611324565b820191906000526020600020905b81548152906001019060200180831161130757829003601f168201915b5050505050905090565b611336611b95565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139b90613e4f565b60405180910390fd5b80600760006113b1611b95565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661145e611b95565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114a39190613c52565b60405180910390a35050565b600a6020528060005260406000206000915090505481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6114f3611b95565b73ffffffffffffffffffffffffffffffffffffffff166115116111c2565b73ffffffffffffffffffffffffffffffffffffffff1614611567576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155e90613e0f565b60405180910390fd5b600260095414156115ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a490613fcf565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff16476040516115db90613bd6565b60006040518083038185875af1925050503d8060008114611618576040519150601f19603f3d011682016040523d82523d6000602084013e61161d565b606091505b5050905080611661576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165890613ecf565b60405180910390fd5b506001600981905550565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146116da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d190613d4f565b60405180910390fd5b6116e2610efb565b611721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171890613e8f565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008161174b610b3d565b611755919061416f565b1115611796576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178d90613dcf565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000816117c13361197f565b6117cb919061416f565b111561180c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180390613f6f565b60405180910390fd5b61181e611817610b3d565b348361277b565b61185d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185490613f0f565b60405180910390fd5b6118673382612496565b50565b611875848484611c4f565b611881848484846127d8565b6118c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b790613eef565b60405180910390fd5b50505050565b60606118d182611b87565b611910576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190790613e2f565b60405180910390fd5b600061191a61296f565b9050600081511161193a5760405180602001604052806000815250611971565b8061195060018561194b919061416f565b612a01565b604051602001611961929190613ba7565b6040516020818303038152906040525b915050919050565b60085481565b600061198a82612b62565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a2d611b95565b73ffffffffffffffffffffffffffffffffffffffff16611a4b6111c2565b73ffffffffffffffffffffffffffffffffffffffff1614611aa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9890613e0f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0890613caf565b60405180910390fd5b611b1a816126b7565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611c5a826124b4565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611c81611b95565b73ffffffffffffffffffffffffffffffffffffffff161480611cdd5750611ca6611b95565b73ffffffffffffffffffffffffffffffffffffffff16611cc58461099f565b73ffffffffffffffffffffffffffffffffffffffff16145b80611cf95750611cf88260000151611cf3611b95565b611991565b5b905080611d3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3290613e6f565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da490613def565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1490613d0f565b60405180910390fd5b611e2a8585856001612c4b565b611e3a6000848460000151611b9d565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611ea89190614250565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611f4c9190614129565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184612052919061416f565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612198576120c881611b87565b15612197576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46122008686866001612c51565b505050505050565b6000600854905060008211612252576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224990613d8f565b60405180910390fd5b600060018383612262919061416f565b61226c9190614284565b905060017f000000000000000000000000000000000000000000000000000000000000000061229b9190614284565b8111156122d25760017f00000000000000000000000000000000000000000000000000000000000000006122cf9190614284565b90505b6122db81611b87565b61231a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231190613faf565b60405180910390fd5b60008290505b81811161247d57600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561246a57600061239d826124b4565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b80806124759061442b565b915050612320565b5060018161248b919061416f565b600881905550505050565b6124b0828260405180602001604052806000815250612c57565b5050565b6124bc6131e0565b6124c582611b87565b612504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fb90613ccf565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000083106125685760017f00000000000000000000000000000000000000000000000000000000000000008461255b9190614284565b612565919061416f565b90505b60008390505b818110612676576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612662578093505050506126b2565b50808061266e9061439e565b91505061256e565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a990613fef565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006101f484101561279057600190506127d1565b817f00000000000000000000000000000000000000000000000000000000000000006127bc91906141f6565b8310156127cc57600090506127d1565b600190505b9392505050565b60006127f98473ffffffffffffffffffffffffffffffffffffffff16613137565b15612962578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612822611b95565b8786866040518563ffffffff1660e01b81526004016128449493929190613c06565b602060405180830381600087803b15801561285e57600080fd5b505af192505050801561288f57506040513d601f19601f8201168201806040525081019061288c9190613583565b60015b612912573d80600081146128bf576040519150601f19603f3d011682016040523d82523d6000602084013e6128c4565b606091505b5060008151141561290a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290190613eef565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612967565b600190505b949350505050565b6060600b805461297e906143c8565b80601f01602080910402602001604051908101604052809291908181526020018280546129aa906143c8565b80156129f75780601f106129cc576101008083540402835291602001916129f7565b820191906000526020600020905b8154815290600101906020018083116129da57829003601f168201915b5050505050905090565b60606000821415612a49576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b5d565b600082905060005b60008214612a7b578080612a649061442b565b915050600a82612a7491906141c5565b9150612a51565b60008167ffffffffffffffff811115612a9757612a96614561565b5b6040519080825280601f01601f191660200182016040528015612ac95781602001600182028036833780820191505090505b5090505b60008514612b5657600182612ae29190614284565b9150600a85612af19190614474565b6030612afd919061416f565b60f81b818381518110612b1357612b12614532565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b4f91906141c5565b9450612acd565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bca90613d2f565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612cce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc590613f4f565b60405180910390fd5b612cd781611b87565b15612d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0e90613f2f565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000831115612d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d719061402f565b60405180910390fd5b612d876000858386612c4b565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151612e849190614129565b6fffffffffffffffffffffffffffffffff168152602001858360200151612eab9190614129565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561311a57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46130ba60008884886127d8565b6130f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130f090613eef565b60405180910390fd5b81806131049061442b565b92505080806131129061442b565b915050613049565b508060018190555061312f6000878588612c51565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054613166906143c8565b90600052602060002090601f01602090048101928261318857600085556131cf565b82601f106131a157803560ff19168380011785556131cf565b828001600101855582156131cf579182015b828111156131ce5782358255916020019190600101906131b3565b5b5090506131dc919061321a565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561323357600081600090555060010161321b565b5090565b600061324a613245846140aa565b614085565b9050828152602081018484840111156132665761326561459f565b5b61327184828561435c565b509392505050565b60008135905061328881614d8b565b92915050565b60008135905061329d81614da2565b92915050565b6000813590506132b281614db9565b92915050565b6000815190506132c781614db9565b92915050565b600082601f8301126132e2576132e1614595565b5b81356132f2848260208601613237565b91505092915050565b60008083601f84011261331157613310614595565b5b8235905067ffffffffffffffff81111561332e5761332d614590565b5b60208301915083600182028301111561334a5761334961459a565b5b9250929050565b60008135905061336081614dd0565b92915050565b60006020828403121561337c5761337b6145a9565b5b600061338a84828501613279565b91505092915050565b600080604083850312156133aa576133a96145a9565b5b60006133b885828601613279565b92505060206133c985828601613279565b9150509250929050565b6000806000606084860312156133ec576133eb6145a9565b5b60006133fa86828701613279565b935050602061340b86828701613279565b925050604061341c86828701613351565b9150509250925092565b600080600080608085870312156134405761343f6145a9565b5b600061344e87828801613279565b945050602061345f87828801613279565b935050604061347087828801613351565b925050606085013567ffffffffffffffff811115613491576134906145a4565b5b61349d878288016132cd565b91505092959194509250565b600080604083850312156134c0576134bf6145a9565b5b60006134ce85828601613279565b92505060206134df8582860161328e565b9150509250929050565b60008060408385031215613500576134ff6145a9565b5b600061350e85828601613279565b925050602061351f85828601613351565b9150509250929050565b60006020828403121561353f5761353e6145a9565b5b600061354d8482850161328e565b91505092915050565b60006020828403121561356c5761356b6145a9565b5b600061357a848285016132a3565b91505092915050565b600060208284031215613599576135986145a9565b5b60006135a7848285016132b8565b91505092915050565b600080602083850312156135c7576135c66145a9565b5b600083013567ffffffffffffffff8111156135e5576135e46145a4565b5b6135f1858286016132fb565b92509250509250929050565b600060208284031215613613576136126145a9565b5b600061362184828501613351565b91505092915050565b613633816142b8565b82525050565b613642816142b8565b82525050565b613651816142ca565b82525050565b6000613662826140db565b61366c81856140f1565b935061367c81856020860161436b565b613685816145ae565b840191505092915050565b600061369b826140e6565b6136a5818561410d565b93506136b581856020860161436b565b6136be816145ae565b840191505092915050565b60006136d4826140e6565b6136de818561411e565b93506136ee81856020860161436b565b80840191505092915050565b600061370760228361410d565b9150613712826145bf565b604082019050919050565b600061372a60268361410d565b91506137358261460e565b604082019050919050565b600061374d602a8361410d565b91506137588261465d565b604082019050919050565b600061377060238361410d565b915061377b826146ac565b604082019050919050565b600061379360258361410d565b915061379e826146fb565b604082019050919050565b60006137b660318361410d565b91506137c18261474a565b604082019050919050565b60006137d9601e8361410d565b91506137e482614799565b602082019050919050565b60006137fc60398361410d565b9150613807826147c2565b604082019050919050565b600061381f60188361410d565b915061382a82614811565b602082019050919050565b6000613842602b8361410d565b915061384d8261483a565b604082019050919050565b600061386560128361410d565b915061387082614889565b602082019050919050565b600061388860268361410d565b9150613893826148b2565b604082019050919050565b60006138ab60058361411e565b91506138b682614901565b600582019050919050565b60006138ce60208361410d565b91506138d98261492a565b602082019050919050565b60006138f1602f8361410d565b91506138fc82614953565b604082019050919050565b6000613914601a8361410d565b915061391f826149a2565b602082019050919050565b600061393760328361410d565b9150613942826149cb565b604082019050919050565b600061395a601d8361410d565b915061396582614a1a565b602082019050919050565b600061397d60228361410d565b915061398882614a43565b604082019050919050565b60006139a0600083614102565b91506139ab82614a92565b600082019050919050565b60006139c360108361410d565b91506139ce82614a95565b602082019050919050565b60006139e660338361410d565b91506139f182614abe565b604082019050919050565b6000613a0960168361410d565b9150613a1482614b0d565b602082019050919050565b6000613a2c601d8361410d565b9150613a3782614b36565b602082019050919050565b6000613a4f60218361410d565b9150613a5a82614b5f565b604082019050919050565b6000613a7260168361410d565b9150613a7d82614bae565b602082019050919050565b6000613a95602e8361410d565b9150613aa082614bd7565b604082019050919050565b6000613ab860268361410d565b9150613ac382614c26565b604082019050919050565b6000613adb601f8361410d565b9150613ae682614c75565b602082019050919050565b6000613afe602f8361410d565b9150613b0982614c9e565b604082019050919050565b6000613b21602d8361410d565b9150613b2c82614ced565b604082019050919050565b6000613b4460228361410d565b9150613b4f82614d3c565b604082019050919050565b604082016000820151613b70600085018261362a565b506020820151613b836020850182613b98565b50505050565b613b928161433e565b82525050565b613ba181614348565b82525050565b6000613bb382856136c9565b9150613bbf82846136c9565b9150613bca8261389e565b91508190509392505050565b6000613be182613993565b9150819050919050565b6000602082019050613c006000830184613639565b92915050565b6000608082019050613c1b6000830187613639565b613c286020830186613639565b613c356040830185613b89565b8181036060830152613c478184613657565b905095945050505050565b6000602082019050613c676000830184613648565b92915050565b60006020820190508181036000830152613c878184613690565b905092915050565b60006020820190508181036000830152613ca8816136fa565b9050919050565b60006020820190508181036000830152613cc88161371d565b9050919050565b60006020820190508181036000830152613ce881613740565b9050919050565b60006020820190508181036000830152613d0881613763565b9050919050565b60006020820190508181036000830152613d2881613786565b9050919050565b60006020820190508181036000830152613d48816137a9565b9050919050565b60006020820190508181036000830152613d68816137cc565b9050919050565b60006020820190508181036000830152613d88816137ef565b9050919050565b60006020820190508181036000830152613da881613812565b9050919050565b60006020820190508181036000830152613dc881613835565b9050919050565b60006020820190508181036000830152613de881613858565b9050919050565b60006020820190508181036000830152613e088161387b565b9050919050565b60006020820190508181036000830152613e28816138c1565b9050919050565b60006020820190508181036000830152613e48816138e4565b9050919050565b60006020820190508181036000830152613e6881613907565b9050919050565b60006020820190508181036000830152613e888161392a565b9050919050565b60006020820190508181036000830152613ea88161394d565b9050919050565b60006020820190508181036000830152613ec881613970565b9050919050565b60006020820190508181036000830152613ee8816139b6565b9050919050565b60006020820190508181036000830152613f08816139d9565b9050919050565b60006020820190508181036000830152613f28816139fc565b9050919050565b60006020820190508181036000830152613f4881613a1f565b9050919050565b60006020820190508181036000830152613f6881613a42565b9050919050565b60006020820190508181036000830152613f8881613a65565b9050919050565b60006020820190508181036000830152613fa881613a88565b9050919050565b60006020820190508181036000830152613fc881613aab565b9050919050565b60006020820190508181036000830152613fe881613ace565b9050919050565b6000602082019050818103600083015261400881613af1565b9050919050565b6000602082019050818103600083015261402881613b14565b9050919050565b6000602082019050818103600083015261404881613b37565b9050919050565b60006040820190506140646000830184613b5a565b92915050565b600060208201905061407f6000830184613b89565b92915050565b600061408f6140a0565b905061409b82826143fa565b919050565b6000604051905090565b600067ffffffffffffffff8211156140c5576140c4614561565b5b6140ce826145ae565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061413482614302565b915061413f83614302565b9250826fffffffffffffffffffffffffffffffff03821115614164576141636144a5565b5b828201905092915050565b600061417a8261433e565b91506141858361433e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141ba576141b96144a5565b5b828201905092915050565b60006141d08261433e565b91506141db8361433e565b9250826141eb576141ea6144d4565b5b828204905092915050565b60006142018261433e565b915061420c8361433e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614245576142446144a5565b5b828202905092915050565b600061425b82614302565b915061426683614302565b925082821015614279576142786144a5565b5b828203905092915050565b600061428f8261433e565b915061429a8361433e565b9250828210156142ad576142ac6144a5565b5b828203905092915050565b60006142c38261431e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b8381101561438957808201518184015260208101905061436e565b83811115614398576000848401525b50505050565b60006143a98261433e565b915060008214156143bd576143bc6144a5565b5b600182039050919050565b600060028204905060018216806143e057607f821691505b602082108114156143f4576143f3614503565b5b50919050565b614403826145ae565b810181811067ffffffffffffffff8211171561442257614421614561565b5b80604052505050565b60006144368261433e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614469576144686144a5565b5b600182019050919050565b600061447f8261433e565b915061448a8361433e565b92508261449a576144996144d4565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f7075626c69632073616c6520686173206e6f7420626567756e20796574000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b614d94816142b8565b8114614d9f57600080fd5b50565b614dab816142ca565b8114614db657600080fd5b50565b614dc2816142d6565b8114614dcd57600080fd5b50565b614dd98161433e565b8114614de457600080fd5b5056fea2646970667358221220458f55df8176ab5dc55d996360f580a7f02732354cabc287e01e88de6ee228c364736f6c63430008070033
Deployed Bytecode
0x6080604052600436106101e35760003560e01c80638bc35c2f11610102578063ac44600211610095578063d7224ba011610064578063d7224ba0146106f5578063dc33e68114610720578063e985e9c51461075d578063f2fde38b1461079a576101e3565b8063ac4460021461065c578063b3ab66b014610673578063b88d4fde1461068f578063c87b56dd146106b8576101e3565b806395d89b41116100d157806395d89b41146105a0578063a22cb465146105cb578063a7cd52cb146105f4578063a945bf8014610631576101e3565b80638bc35c2f146104e45780638da5cb5b1461050f5780639231ab2a1461053a5780639293a5c714610577576101e3565b8063375a069a1161017a57806355f804b31161014957806355f804b31461042a5780636352211e1461045357806370a0823114610490578063715018a6146104cd576101e3565b8063375a069a146103705780633f5e47411461039957806342842e0e146103c45780634f6ccce7146103ed576101e3565b806318160ddd116101b657806318160ddd146102b657806323b872dd146102e15780632d20fb601461030a5780632f745c5914610333576101e3565b806301ffc9a7146101e857806306fdde0314610225578063081812fc14610250578063095ea7b31461028d575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190613556565b6107c3565b60405161021c9190613c52565b60405180910390f35b34801561023157600080fd5b5061023a61090d565b6040516102479190613c6d565b60405180910390f35b34801561025c57600080fd5b50610277600480360381019061027291906135fd565b61099f565b6040516102849190613beb565b60405180910390f35b34801561029957600080fd5b506102b460048036038101906102af91906134e9565b610a24565b005b3480156102c257600080fd5b506102cb610b3d565b6040516102d8919061406a565b60405180910390f35b3480156102ed57600080fd5b50610308600480360381019061030391906133d3565b610b47565b005b34801561031657600080fd5b50610331600480360381019061032c91906135fd565b610b57565b005b34801561033f57600080fd5b5061035a600480360381019061035591906134e9565b610c35565b604051610367919061406a565b60405180910390f35b34801561037c57600080fd5b50610397600480360381019061039291906135fd565b610e33565b005b3480156103a557600080fd5b506103ae610efb565b6040516103bb9190613c52565b60405180910390f35b3480156103d057600080fd5b506103eb60048036038101906103e691906133d3565b610f12565b005b3480156103f957600080fd5b50610414600480360381019061040f91906135fd565b610f32565b604051610421919061406a565b60405180910390f35b34801561043657600080fd5b50610451600480360381019061044c91906135b0565b610f85565b005b34801561045f57600080fd5b5061047a600480360381019061047591906135fd565b611017565b6040516104879190613beb565b60405180910390f35b34801561049c57600080fd5b506104b760048036038101906104b29190613366565b61102d565b6040516104c4919061406a565b60405180910390f35b3480156104d957600080fd5b506104e2611116565b005b3480156104f057600080fd5b506104f961119e565b604051610506919061406a565b60405180910390f35b34801561051b57600080fd5b506105246111c2565b6040516105319190613beb565b60405180910390f35b34801561054657600080fd5b50610561600480360381019061055c91906135fd565b6111eb565b60405161056e919061404f565b60405180910390f35b34801561058357600080fd5b5061059e60048036038101906105999190613529565b611203565b005b3480156105ac57600080fd5b506105b561129c565b6040516105c29190613c6d565b60405180910390f35b3480156105d757600080fd5b506105f260048036038101906105ed91906134a9565b61132e565b005b34801561060057600080fd5b5061061b60048036038101906106169190613366565b6114af565b604051610628919061406a565b60405180910390f35b34801561063d57600080fd5b506106466114c7565b604051610653919061406a565b60405180910390f35b34801561066857600080fd5b506106716114eb565b005b61068d600480360381019061068891906135fd565b61166c565b005b34801561069b57600080fd5b506106b660048036038101906106b19190613426565b61186a565b005b3480156106c457600080fd5b506106df60048036038101906106da91906135fd565b6118c6565b6040516106ec9190613c6d565b60405180910390f35b34801561070157600080fd5b5061070a611979565b604051610717919061406a565b60405180910390f35b34801561072c57600080fd5b5061074760048036038101906107429190613366565b61197f565b604051610754919061406a565b60405180910390f35b34801561076957600080fd5b50610784600480360381019061077f9190613393565b611991565b6040516107919190613c52565b60405180910390f35b3480156107a657600080fd5b506107c160048036038101906107bc9190613366565b611a25565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061088e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108f657507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610906575061090582611b1d565b5b9050919050565b60606002805461091c906143c8565b80601f0160208091040260200160405190810160405280929190818152602001828054610948906143c8565b80156109955780601f1061096a57610100808354040283529160200191610995565b820191906000526020600020905b81548152906001019060200180831161097857829003601f168201915b5050505050905090565b60006109aa82611b87565b6109e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e09061400f565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a2f82611017565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9790613eaf565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610abf611b95565b73ffffffffffffffffffffffffffffffffffffffff161480610aee5750610aed81610ae8611b95565b611991565b5b610b2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2490613d6f565b60405180910390fd5b610b38838383611b9d565b505050565b6000600154905090565b610b52838383611c4f565b505050565b610b5f611b95565b73ffffffffffffffffffffffffffffffffffffffff16610b7d6111c2565b73ffffffffffffffffffffffffffffffffffffffff1614610bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bca90613e0f565b60405180910390fd5b60026009541415610c19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1090613fcf565b60405180910390fd5b6002600981905550610c2a81612208565b600160098190555050565b6000610c408361102d565b8210610c81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7890613c8f565b60405180910390fd5b6000610c8b610b3d565b905060008060005b83811015610df1576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610d8557806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ddd5786841415610dce578195505050505050610e2d565b8380610dd99061442b565b9450505b508080610de99061442b565b915050610c93565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2490613f8f565b60405180910390fd5b92915050565b610e3b611b95565b73ffffffffffffffffffffffffffffffffffffffff16610e596111c2565b73ffffffffffffffffffffffffffffffffffffffff1614610eaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea690613e0f565b60405180910390fd5b60005b81811015610ef757610ee4337f0000000000000000000000000000000000000000000000000000000000000005612496565b8080610eef9061442b565b915050610eb2565b5050565b6000600c60009054906101000a900460ff16905090565b610f2d8383836040518060200160405280600081525061186a565b505050565b6000610f3c610b3d565b8210610f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7490613cef565b60405180910390fd5b819050919050565b610f8d611b95565b73ffffffffffffffffffffffffffffffffffffffff16610fab6111c2565b73ffffffffffffffffffffffffffffffffffffffff1614611001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff890613e0f565b60405180910390fd5b8181600b919061101292919061315a565b505050565b6000611022826124b4565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561109e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109590613daf565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61111e611b95565b73ffffffffffffffffffffffffffffffffffffffff1661113c6111c2565b73ffffffffffffffffffffffffffffffffffffffff1614611192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118990613e0f565b60405180910390fd5b61119c60006126b7565b565b7f000000000000000000000000000000000000000000000000000000000000000581565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6111f36131e0565b6111fc826124b4565b9050919050565b61120b611b95565b73ffffffffffffffffffffffffffffffffffffffff166112296111c2565b73ffffffffffffffffffffffffffffffffffffffff161461127f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127690613e0f565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b6060600380546112ab906143c8565b80601f01602080910402602001604051908101604052809291908181526020018280546112d7906143c8565b80156113245780601f106112f957610100808354040283529160200191611324565b820191906000526020600020905b81548152906001019060200180831161130757829003601f168201915b5050505050905090565b611336611b95565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139b90613e4f565b60405180910390fd5b80600760006113b1611b95565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661145e611b95565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114a39190613c52565b60405180910390a35050565b600a6020528060005260406000206000915090505481565b7f000000000000000000000000000000000000000000000000001c6bf52634000081565b6114f3611b95565b73ffffffffffffffffffffffffffffffffffffffff166115116111c2565b73ffffffffffffffffffffffffffffffffffffffff1614611567576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155e90613e0f565b60405180910390fd5b600260095414156115ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a490613fcf565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff16476040516115db90613bd6565b60006040518083038185875af1925050503d8060008114611618576040519150601f19603f3d011682016040523d82523d6000602084013e61161d565b606091505b5050905080611661576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165890613ecf565b60405180910390fd5b506001600981905550565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146116da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d190613d4f565b60405180910390fd5b6116e2610efb565b611721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171890613e8f565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000007e68161174b610b3d565b611755919061416f565b1115611796576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178d90613dcf565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000005816117c13361197f565b6117cb919061416f565b111561180c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180390613f6f565b60405180910390fd5b61181e611817610b3d565b348361277b565b61185d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185490613f0f565b60405180910390fd5b6118673382612496565b50565b611875848484611c4f565b611881848484846127d8565b6118c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b790613eef565b60405180910390fd5b50505050565b60606118d182611b87565b611910576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190790613e2f565b60405180910390fd5b600061191a61296f565b9050600081511161193a5760405180602001604052806000815250611971565b8061195060018561194b919061416f565b612a01565b604051602001611961929190613ba7565b6040516020818303038152906040525b915050919050565b60085481565b600061198a82612b62565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a2d611b95565b73ffffffffffffffffffffffffffffffffffffffff16611a4b6111c2565b73ffffffffffffffffffffffffffffffffffffffff1614611aa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9890613e0f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0890613caf565b60405180910390fd5b611b1a816126b7565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611c5a826124b4565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611c81611b95565b73ffffffffffffffffffffffffffffffffffffffff161480611cdd5750611ca6611b95565b73ffffffffffffffffffffffffffffffffffffffff16611cc58461099f565b73ffffffffffffffffffffffffffffffffffffffff16145b80611cf95750611cf88260000151611cf3611b95565b611991565b5b905080611d3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3290613e6f565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da490613def565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1490613d0f565b60405180910390fd5b611e2a8585856001612c4b565b611e3a6000848460000151611b9d565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611ea89190614250565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611f4c9190614129565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184612052919061416f565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612198576120c881611b87565b15612197576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46122008686866001612c51565b505050505050565b6000600854905060008211612252576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224990613d8f565b60405180910390fd5b600060018383612262919061416f565b61226c9190614284565b905060017f00000000000000000000000000000000000000000000000000000000000007e661229b9190614284565b8111156122d25760017f00000000000000000000000000000000000000000000000000000000000007e66122cf9190614284565b90505b6122db81611b87565b61231a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231190613faf565b60405180910390fd5b60008290505b81811161247d57600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561246a57600061239d826124b4565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b80806124759061442b565b915050612320565b5060018161248b919061416f565b600881905550505050565b6124b0828260405180602001604052806000815250612c57565b5050565b6124bc6131e0565b6124c582611b87565b612504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fb90613ccf565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000583106125685760017f00000000000000000000000000000000000000000000000000000000000000058461255b9190614284565b612565919061416f565b90505b60008390505b818110612676576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612662578093505050506126b2565b50808061266e9061439e565b91505061256e565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a990613fef565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006101f484101561279057600190506127d1565b817f000000000000000000000000000000000000000000000000001c6bf5263400006127bc91906141f6565b8310156127cc57600090506127d1565b600190505b9392505050565b60006127f98473ffffffffffffffffffffffffffffffffffffffff16613137565b15612962578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612822611b95565b8786866040518563ffffffff1660e01b81526004016128449493929190613c06565b602060405180830381600087803b15801561285e57600080fd5b505af192505050801561288f57506040513d601f19601f8201168201806040525081019061288c9190613583565b60015b612912573d80600081146128bf576040519150601f19603f3d011682016040523d82523d6000602084013e6128c4565b606091505b5060008151141561290a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290190613eef565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612967565b600190505b949350505050565b6060600b805461297e906143c8565b80601f01602080910402602001604051908101604052809291908181526020018280546129aa906143c8565b80156129f75780601f106129cc576101008083540402835291602001916129f7565b820191906000526020600020905b8154815290600101906020018083116129da57829003601f168201915b5050505050905090565b60606000821415612a49576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b5d565b600082905060005b60008214612a7b578080612a649061442b565b915050600a82612a7491906141c5565b9150612a51565b60008167ffffffffffffffff811115612a9757612a96614561565b5b6040519080825280601f01601f191660200182016040528015612ac95781602001600182028036833780820191505090505b5090505b60008514612b5657600182612ae29190614284565b9150600a85612af19190614474565b6030612afd919061416f565b60f81b818381518110612b1357612b12614532565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b4f91906141c5565b9450612acd565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bca90613d2f565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612cce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc590613f4f565b60405180910390fd5b612cd781611b87565b15612d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0e90613f2f565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000005831115612d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d719061402f565b60405180910390fd5b612d876000858386612c4b565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151612e849190614129565b6fffffffffffffffffffffffffffffffff168152602001858360200151612eab9190614129565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561311a57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46130ba60008884886127d8565b6130f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130f090613eef565b60405180910390fd5b81806131049061442b565b92505080806131129061442b565b915050613049565b508060018190555061312f6000878588612c51565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054613166906143c8565b90600052602060002090601f01602090048101928261318857600085556131cf565b82601f106131a157803560ff19168380011785556131cf565b828001600101855582156131cf579182015b828111156131ce5782358255916020019190600101906131b3565b5b5090506131dc919061321a565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561323357600081600090555060010161321b565b5090565b600061324a613245846140aa565b614085565b9050828152602081018484840111156132665761326561459f565b5b61327184828561435c565b509392505050565b60008135905061328881614d8b565b92915050565b60008135905061329d81614da2565b92915050565b6000813590506132b281614db9565b92915050565b6000815190506132c781614db9565b92915050565b600082601f8301126132e2576132e1614595565b5b81356132f2848260208601613237565b91505092915050565b60008083601f84011261331157613310614595565b5b8235905067ffffffffffffffff81111561332e5761332d614590565b5b60208301915083600182028301111561334a5761334961459a565b5b9250929050565b60008135905061336081614dd0565b92915050565b60006020828403121561337c5761337b6145a9565b5b600061338a84828501613279565b91505092915050565b600080604083850312156133aa576133a96145a9565b5b60006133b885828601613279565b92505060206133c985828601613279565b9150509250929050565b6000806000606084860312156133ec576133eb6145a9565b5b60006133fa86828701613279565b935050602061340b86828701613279565b925050604061341c86828701613351565b9150509250925092565b600080600080608085870312156134405761343f6145a9565b5b600061344e87828801613279565b945050602061345f87828801613279565b935050604061347087828801613351565b925050606085013567ffffffffffffffff811115613491576134906145a4565b5b61349d878288016132cd565b91505092959194509250565b600080604083850312156134c0576134bf6145a9565b5b60006134ce85828601613279565b92505060206134df8582860161328e565b9150509250929050565b60008060408385031215613500576134ff6145a9565b5b600061350e85828601613279565b925050602061351f85828601613351565b9150509250929050565b60006020828403121561353f5761353e6145a9565b5b600061354d8482850161328e565b91505092915050565b60006020828403121561356c5761356b6145a9565b5b600061357a848285016132a3565b91505092915050565b600060208284031215613599576135986145a9565b5b60006135a7848285016132b8565b91505092915050565b600080602083850312156135c7576135c66145a9565b5b600083013567ffffffffffffffff8111156135e5576135e46145a4565b5b6135f1858286016132fb565b92509250509250929050565b600060208284031215613613576136126145a9565b5b600061362184828501613351565b91505092915050565b613633816142b8565b82525050565b613642816142b8565b82525050565b613651816142ca565b82525050565b6000613662826140db565b61366c81856140f1565b935061367c81856020860161436b565b613685816145ae565b840191505092915050565b600061369b826140e6565b6136a5818561410d565b93506136b581856020860161436b565b6136be816145ae565b840191505092915050565b60006136d4826140e6565b6136de818561411e565b93506136ee81856020860161436b565b80840191505092915050565b600061370760228361410d565b9150613712826145bf565b604082019050919050565b600061372a60268361410d565b91506137358261460e565b604082019050919050565b600061374d602a8361410d565b91506137588261465d565b604082019050919050565b600061377060238361410d565b915061377b826146ac565b604082019050919050565b600061379360258361410d565b915061379e826146fb565b604082019050919050565b60006137b660318361410d565b91506137c18261474a565b604082019050919050565b60006137d9601e8361410d565b91506137e482614799565b602082019050919050565b60006137fc60398361410d565b9150613807826147c2565b604082019050919050565b600061381f60188361410d565b915061382a82614811565b602082019050919050565b6000613842602b8361410d565b915061384d8261483a565b604082019050919050565b600061386560128361410d565b915061387082614889565b602082019050919050565b600061388860268361410d565b9150613893826148b2565b604082019050919050565b60006138ab60058361411e565b91506138b682614901565b600582019050919050565b60006138ce60208361410d565b91506138d98261492a565b602082019050919050565b60006138f1602f8361410d565b91506138fc82614953565b604082019050919050565b6000613914601a8361410d565b915061391f826149a2565b602082019050919050565b600061393760328361410d565b9150613942826149cb565b604082019050919050565b600061395a601d8361410d565b915061396582614a1a565b602082019050919050565b600061397d60228361410d565b915061398882614a43565b604082019050919050565b60006139a0600083614102565b91506139ab82614a92565b600082019050919050565b60006139c360108361410d565b91506139ce82614a95565b602082019050919050565b60006139e660338361410d565b91506139f182614abe565b604082019050919050565b6000613a0960168361410d565b9150613a1482614b0d565b602082019050919050565b6000613a2c601d8361410d565b9150613a3782614b36565b602082019050919050565b6000613a4f60218361410d565b9150613a5a82614b5f565b604082019050919050565b6000613a7260168361410d565b9150613a7d82614bae565b602082019050919050565b6000613a95602e8361410d565b9150613aa082614bd7565b604082019050919050565b6000613ab860268361410d565b9150613ac382614c26565b604082019050919050565b6000613adb601f8361410d565b9150613ae682614c75565b602082019050919050565b6000613afe602f8361410d565b9150613b0982614c9e565b604082019050919050565b6000613b21602d8361410d565b9150613b2c82614ced565b604082019050919050565b6000613b4460228361410d565b9150613b4f82614d3c565b604082019050919050565b604082016000820151613b70600085018261362a565b506020820151613b836020850182613b98565b50505050565b613b928161433e565b82525050565b613ba181614348565b82525050565b6000613bb382856136c9565b9150613bbf82846136c9565b9150613bca8261389e565b91508190509392505050565b6000613be182613993565b9150819050919050565b6000602082019050613c006000830184613639565b92915050565b6000608082019050613c1b6000830187613639565b613c286020830186613639565b613c356040830185613b89565b8181036060830152613c478184613657565b905095945050505050565b6000602082019050613c676000830184613648565b92915050565b60006020820190508181036000830152613c878184613690565b905092915050565b60006020820190508181036000830152613ca8816136fa565b9050919050565b60006020820190508181036000830152613cc88161371d565b9050919050565b60006020820190508181036000830152613ce881613740565b9050919050565b60006020820190508181036000830152613d0881613763565b9050919050565b60006020820190508181036000830152613d2881613786565b9050919050565b60006020820190508181036000830152613d48816137a9565b9050919050565b60006020820190508181036000830152613d68816137cc565b9050919050565b60006020820190508181036000830152613d88816137ef565b9050919050565b60006020820190508181036000830152613da881613812565b9050919050565b60006020820190508181036000830152613dc881613835565b9050919050565b60006020820190508181036000830152613de881613858565b9050919050565b60006020820190508181036000830152613e088161387b565b9050919050565b60006020820190508181036000830152613e28816138c1565b9050919050565b60006020820190508181036000830152613e48816138e4565b9050919050565b60006020820190508181036000830152613e6881613907565b9050919050565b60006020820190508181036000830152613e888161392a565b9050919050565b60006020820190508181036000830152613ea88161394d565b9050919050565b60006020820190508181036000830152613ec881613970565b9050919050565b60006020820190508181036000830152613ee8816139b6565b9050919050565b60006020820190508181036000830152613f08816139d9565b9050919050565b60006020820190508181036000830152613f28816139fc565b9050919050565b60006020820190508181036000830152613f4881613a1f565b9050919050565b60006020820190508181036000830152613f6881613a42565b9050919050565b60006020820190508181036000830152613f8881613a65565b9050919050565b60006020820190508181036000830152613fa881613a88565b9050919050565b60006020820190508181036000830152613fc881613aab565b9050919050565b60006020820190508181036000830152613fe881613ace565b9050919050565b6000602082019050818103600083015261400881613af1565b9050919050565b6000602082019050818103600083015261402881613b14565b9050919050565b6000602082019050818103600083015261404881613b37565b9050919050565b60006040820190506140646000830184613b5a565b92915050565b600060208201905061407f6000830184613b89565b92915050565b600061408f6140a0565b905061409b82826143fa565b919050565b6000604051905090565b600067ffffffffffffffff8211156140c5576140c4614561565b5b6140ce826145ae565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061413482614302565b915061413f83614302565b9250826fffffffffffffffffffffffffffffffff03821115614164576141636144a5565b5b828201905092915050565b600061417a8261433e565b91506141858361433e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141ba576141b96144a5565b5b828201905092915050565b60006141d08261433e565b91506141db8361433e565b9250826141eb576141ea6144d4565b5b828204905092915050565b60006142018261433e565b915061420c8361433e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614245576142446144a5565b5b828202905092915050565b600061425b82614302565b915061426683614302565b925082821015614279576142786144a5565b5b828203905092915050565b600061428f8261433e565b915061429a8361433e565b9250828210156142ad576142ac6144a5565b5b828203905092915050565b60006142c38261431e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b8381101561438957808201518184015260208101905061436e565b83811115614398576000848401525b50505050565b60006143a98261433e565b915060008214156143bd576143bc6144a5565b5b600182039050919050565b600060028204905060018216806143e057607f821691505b602082108114156143f4576143f3614503565b5b50919050565b614403826145ae565b810181811067ffffffffffffffff8211171561442257614421614561565b5b80604052505050565b60006144368261433e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614469576144686144a5565b5b600182019050919050565b600061447f8261433e565b915061448a8361433e565b92508261449a576144996144d4565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f7075626c69632073616c6520686173206e6f7420626567756e20796574000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b614d94816142b8565b8114614d9f57600080fd5b50565b614dab816142ca565b8114614db657600080fd5b50565b614dc2816142d6565b8114614dcd57600080fd5b50565b614dd98161433e565b8114614de457600080fd5b5056fea2646970667358221220458f55df8176ab5dc55d996360f580a7f02732354cabc287e01e88de6ee228c364736f6c63430008070033
Deployed Bytecode Sourcemap
44707:2815:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30689:422;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32650:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34360:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33881:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29045:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35387:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47067:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29753:864;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45781:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46049:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35620:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29222:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46641:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32459:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31175:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7489:103;;;;;;;;;;;;;:::i;:::-;;44775:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6838:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47352:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46755:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32819:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34724:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44875:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44830:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46868:191;;;;;;;;;;;;;:::i;:::-;;45207:566;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35868:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32994:483;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40749:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47231:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35106:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7747:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30689:422;30836:4;30893:25;30878:40;;;:11;:40;;;;:105;;;;30950:33;30935:48;;;:11;:48;;;;30878:105;:172;;;;31015:35;31000:50;;;:11;:50;;;;30878:172;:225;;;;31067:36;31091:11;31067:23;:36::i;:::-;30878:225;30858:245;;30689:422;;;:::o;32650:100::-;32704:13;32737:5;32730:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32650:100;:::o;34360:292::-;34464:7;34511:16;34519:7;34511;:16::i;:::-;34489:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;34620:15;:24;34636:7;34620:24;;;;;;;;;;;;;;;;;;;;;34613:31;;34360:292;;;:::o;33881:413::-;33954:13;33970:24;33986:7;33970:15;:24::i;:::-;33954:40;;34019:5;34013:11;;:2;:11;;;;34005:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34114:5;34098:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;34123:37;34140:5;34147:12;:10;:12::i;:::-;34123:16;:37::i;:::-;34098:62;34076:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;34258:28;34267:2;34271:7;34280:5;34258:8;:28::i;:::-;33943:351;33881:413;;:::o;29045:100::-;29098:7;29125:12;;29118:19;;29045:100;:::o;35387:162::-;35513:28;35523:4;35529:2;35533:7;35513:9;:28::i;:::-;35387:162;;;:::o;47067:156::-;7069:12;:10;:12::i;:::-;7058:23;;:7;:5;:7::i;:::-;:23;;;7050:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1812:1:::1;2410:7;;:19;;2402:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1812:1;2543:7;:18;;;;47187:28:::2;47206:8;47187:18;:28::i;:::-;1768:1:::1;2722:7;:22;;;;47067:156:::0;:::o;29753:864::-;29878:7;29919:16;29929:5;29919:9;:16::i;:::-;29911:5;:24;29903:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;29985:22;30010:13;:11;:13::i;:::-;29985:38;;30034:19;30068:25;30122:9;30117:426;30141:14;30137:1;:18;30117:426;;;30177:31;30211:11;:14;30223:1;30211:14;;;;;;;;;;;30177:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30270:1;30244:28;;:9;:14;;;:28;;;30240:103;;30313:9;:14;;;30293:34;;30240:103;30382:5;30361:26;;:17;:26;;;30357:175;;;30427:5;30412:11;:20;30408:77;;;30464:1;30457:8;;;;;;;;;30408:77;30503:13;;;;;:::i;:::-;;;;30357:175;30162:381;30157:3;;;;;:::i;:::-;;;;30117:426;;;;30553:56;;;;;;;;;;:::i;:::-;;;;;;;;29753:864;;;;;:::o;45781:184::-;7069:12;:10;:12::i;:::-;7058:23;;:7;:5;:7::i;:::-;:23;;;7050:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45851:9:::1;45846:112;45870:8;45866:1;:12;45846:112;;;45900:46;45910:10;45922:23;45900:9;:46::i;:::-;45880:3;;;;;:::i;:::-;;;;45846:112;;;;45781:184:::0;:::o;46049:98::-;46096:4;46120:19;;;;;;;;;;;46113:26;;46049:98;:::o;35620:177::-;35750:39;35767:4;35773:2;35777:7;35750:39;;;;;;;;;;;;:16;:39::i;:::-;35620:177;;;:::o;29222:228::-;29325:7;29366:13;:11;:13::i;:::-;29358:5;:21;29350:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;29437:5;29430:12;;29222:228;;;:::o;46641:106::-;7069:12;:10;:12::i;:::-;7058:23;;:7;:5;:7::i;:::-;:23;;;7050:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46732:7:::1;;46716:13;:23;;;;;;;:::i;:::-;;46641:106:::0;;:::o;32459:124::-;32523:7;32550:20;32562:7;32550:11;:20::i;:::-;:25;;;32543:32;;32459:124;;;:::o;31175:258::-;31239:7;31298:1;31281:19;;:5;:19;;;;31259:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;31397:12;:19;31410:5;31397:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;31389:36;;31382:43;;31175:258;;;:::o;7489:103::-;7069:12;:10;:12::i;:::-;7058:23;;:7;:5;:7::i;:::-;:23;;;7050:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7554:30:::1;7581:1;7554:18;:30::i;:::-;7489:103::o:0;44775:48::-;;;:::o;6838:87::-;6884:7;6911:6;;;;;;;;;;;6904:13;;6838:87;:::o;47352:167::-;47445:21;;:::i;:::-;47491:20;47503:7;47491:11;:20::i;:::-;47484:27;;47352:167;;;:::o;46755:105::-;7069:12;:10;:12::i;:::-;7058:23;;:7;:5;:7::i;:::-;:23;;;7050:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46847:5:::1;46825:19;;:27;;;;;;;;;;;;;;;;;;46755:105:::0;:::o;32819:104::-;32875:13;32908:7;32901:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32819:104;:::o;34724:311::-;34854:12;:10;:12::i;:::-;34842:24;;:8;:24;;;;34834:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;34955:8;34910:18;:32;34929:12;:10;:12::i;:::-;34910:32;;;;;;;;;;;;;;;:42;34943:8;34910:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;35008:8;34979:48;;34994:12;:10;:12::i;:::-;34979:48;;;35018:8;34979:48;;;;;;:::i;:::-;;;;;;;;34724:311;;:::o;44875:44::-;;;;;;;;;;;;;;;;;:::o;44830:36::-;;;:::o;46868:191::-;7069:12;:10;:12::i;:::-;7058:23;;:7;:5;:7::i;:::-;:23;;;7050:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1812:1:::1;2410:7;;:19;;2402:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1812:1;2543:7;:18;;;;46937:12:::2;46955:10;:15;;46978:21;46955:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46936:68;;;47023:7;47015:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;46925:134;1768:1:::1;2722:7;:22;;;;46868:191::o:0;45207:566::-;45134:10;45121:23;;:9;:23;;;45113:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;45298:16:::1;:14;:16::i;:::-;45290:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;45409:14;45397:8;45381:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:42;;45359:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;45541:23;45529:8;45502:24;45515:10;45502:12;:24::i;:::-;:35;;;;:::i;:::-;:62;;45480:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;45633:63;45651:13;:11;:13::i;:::-;45666:19;45687:8;45633:17;:63::i;:::-;45625:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;45734:31;45744:10;45756:8;45734:9;:31::i;:::-;45207:566:::0;:::o;35868:355::-;36027:28;36037:4;36043:2;36047:7;36027:9;:28::i;:::-;36088:48;36111:4;36117:2;36121:7;36130:5;36088:22;:48::i;:::-;36066:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;35868:355;;;;:::o;32994:483::-;33112:13;33165:16;33173:7;33165;:16::i;:::-;33143:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;33269:21;33293:10;:8;:10::i;:::-;33269:34;;33358:1;33340:7;33334:21;:25;:135;;;;;;;;;;;;;;;;;33403:7;33412:24;33423:1;33413:7;:11;;;;:::i;:::-;33412:22;:24::i;:::-;33386:60;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33334:135;33314:155;;;32994:483;;;:::o;40749:43::-;;;;:::o;47231:113::-;47289:7;47316:20;47330:5;47316:13;:20::i;:::-;47309:27;;47231:113;;;:::o;35106:214::-;35248:4;35277:18;:25;35296:5;35277:25;;;;;;;;;;;;;;;:35;35303:8;35277:35;;;;;;;;;;;;;;;;;;;;;;;;;35270:42;;35106:214;;;;:::o;7747:201::-;7069:12;:10;:12::i;:::-;7058:23;;:7;:5;:7::i;:::-;:23;;;7050:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7856:1:::1;7836:22;;:8;:22;;;;7828:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7912:28;7931:8;7912:18;:28::i;:::-;7747:201:::0;:::o;19645:157::-;19730:4;19769:25;19754:40;;;:11;:40;;;;19747:47;;19645:157;;;:::o;36478:111::-;36535:4;36569:12;;36559:7;:22;36552:29;;36478:111;;;:::o;5562:98::-;5615:7;5642:10;5635:17;;5562:98;:::o;40545:196::-;40687:2;40660:15;:24;40676:7;40660:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;40725:7;40721:2;40705:28;;40714:5;40705:28;;;;;;;;;;;;40545:196;;;:::o;38718:1709::-;38833:35;38871:20;38883:7;38871:11;:20::i;:::-;38833:58;;38904:22;38946:13;:18;;;38930:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;39005:12;:10;:12::i;:::-;38981:36;;:20;38993:7;38981:11;:20::i;:::-;:36;;;38930:87;:154;;;;39034:50;39051:13;:18;;;39071:12;:10;:12::i;:::-;39034:16;:50::i;:::-;38930:154;38904:181;;39120:17;39098:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;39272:4;39250:26;;:13;:18;;;:26;;;39228:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;39375:1;39361:16;;:2;:16;;;;39353:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;39432:43;39454:4;39460:2;39464:7;39473:1;39432:21;:43::i;:::-;39540:49;39557:1;39561:7;39570:13;:18;;;39540:8;:49::i;:::-;39632:1;39602:12;:18;39615:4;39602:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;39672:1;39644:12;:16;39657:2;39644:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;39707:43;;;;;;;;39722:2;39707:43;;;;;;39733:15;39707:43;;;;;39684:11;:20;39696:7;39684:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39990:19;40022:1;40012:7;:11;;;;:::i;:::-;39990:33;;40079:1;40038:43;;:11;:24;40050:11;40038:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;40034:288;;;40102:20;40110:11;40102:7;:20::i;:::-;40098:213;;;40170:125;;;;;;;;40207:13;:18;;;40170:125;;;;;;40248:13;:28;;;40170:125;;;;;40143:11;:24;40155:11;40143:24;;;;;;;;;;;:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40098:213;40034:288;40358:7;40354:2;40339:27;;40348:4;40339:27;;;;;;;;;;;;40377:42;40398:4;40404:2;40408:7;40417:1;40377:20;:42::i;:::-;38822:1605;;;38718:1709;;;:::o;40905:950::-;40971:25;40999:24;;40971:52;;41053:1;41042:8;:12;41034:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;41094:16;41144:1;41133:8;41113:17;:28;;;;:::i;:::-;:32;;;;:::i;:::-;41094:51;;41188:1;41171:14;:18;;;;:::i;:::-;41160:8;:29;41156:91;;;41234:1;41217:14;:18;;;;:::i;:::-;41206:29;;41156:91;41370:17;41378:8;41370:7;:17::i;:::-;41362:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41446:9;41458:17;41446:29;;41441:357;41482:8;41477:1;:13;41441:357;;41547:1;41516:33;;:11;:14;41528:1;41516:14;;;;;;;;;;;:19;;;;;;;;;;;;:33;;;41512:275;;;41570:31;41604:14;41616:1;41604:11;:14::i;:::-;41570:48;;41654:117;;;;;;;;41691:9;:14;;;41654:117;;;;;;41728:9;:24;;;41654:117;;;;;41637:11;:14;41649:1;41637:14;;;;;;;;;;;:134;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41551:236;41512:275;41492:3;;;;;:::i;:::-;;;;41441:357;;;;41846:1;41835:8;:12;;;;:::i;:::-;41808:24;:39;;;;40960:895;;40905:950;:::o;36597:104::-;36666:27;36676:2;36680:8;36666:27;;;;;;;;;;;;:9;:27::i;:::-;36597:104;;:::o;31715:682::-;31803:21;;:::i;:::-;31850:16;31858:7;31850;:16::i;:::-;31842:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;31926:26;31978:12;31967:7;:23;31963:103;;32053:1;32038:12;32028:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;32007:47;;31963:103;32083:12;32098:7;32083:22;;32078:242;32115:18;32107:4;:26;32078:242;;32158:31;32192:11;:17;32204:4;32192:17;;;;;;;;;;;32158:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32254:1;32228:28;;:9;:14;;;:28;;;32224:85;;32284:9;32277:16;;;;;;;32224:85;32143:177;32135:6;;;;;:::i;:::-;;;;32078:242;;;;32332:57;;;;;;;;;;:::i;:::-;;;;;;;;31715:682;;;;:::o;8108:191::-;8182:16;8201:6;;;;;;;;;;;8182:25;;8227:8;8218:6;;:17;;;;;;;;;;;;;;;;;;8282:8;8251:40;;8272:8;8251:40;;;;;;;;;;;;8171:128;8108:191;:::o;46153:358::-;46258:4;46294:3;46279:12;:18;46275:229;;;46321:4;46314:11;;;;46275:229;46384:8;46370:11;:22;;;;:::i;:::-;46362:5;:30;46358:135;;;46420:5;46413:12;;;;46358:135;46473:4;46466:11;;46153:358;;;;;;:::o;42420:985::-;42575:4;42596:15;:2;:13;;;:15::i;:::-;42592:806;;;42665:2;42649:36;;;42708:12;:10;:12::i;:::-;42743:4;42770:7;42800:5;42649:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;42628:715;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43028:1;43011:6;:13;:18;43007:321;;;43054:109;;;;;;;;;;:::i;:::-;;;;;;;;43007:321;43278:6;43272:13;43263:6;43259:2;43255:15;43248:38;42628:715;42898:45;;;42888:55;;;:6;:55;;;;42881:62;;;;;42592:806;43382:4;43375:11;;42420:985;;;;;;;:::o;46519:114::-;46579:13;46612;46605:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46519:114;:::o;3124:723::-;3180:13;3410:1;3401:5;:10;3397:53;;;3428:10;;;;;;;;;;;;;;;;;;;;;3397:53;3460:12;3475:5;3460:20;;3491:14;3516:78;3531:1;3523:4;:9;3516:78;;3549:8;;;;;:::i;:::-;;;;3580:2;3572:10;;;;;:::i;:::-;;;3516:78;;;3604:19;3636:6;3626:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3604:39;;3654:154;3670:1;3661:5;:10;3654:154;;3698:1;3688:11;;;;;:::i;:::-;;;3765:2;3757:5;:10;;;;:::i;:::-;3744:2;:24;;;;:::i;:::-;3731:39;;3714:6;3721;3714:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3794:2;3785:11;;;;;:::i;:::-;;;3654:154;;;3832:6;3818:21;;;;;3124:723;;;;:::o;31441:266::-;31502:7;31561:1;31544:19;;:5;:19;;;;31522:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;31666:12;:19;31679:5;31666:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;31658:41;;31651:48;;31441:266;;;:::o;43893:159::-;;;;;:::o;44464:158::-;;;;;:::o;37064:1400::-;37187:20;37210:12;;37187:35;;37255:1;37241:16;;:2;:16;;;;37233:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;37440:21;37448:12;37440:7;:21::i;:::-;37439:22;37431:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37526:12;37514:8;:24;;37506:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;37590:61;37620:1;37624:2;37628:12;37642:8;37590:21;:61::i;:::-;37664:30;37697:12;:16;37710:2;37697:16;;;;;;;;;;;;;;;37664:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37743:135;;;;;;;;37799:8;37769:11;:19;;;:39;;;;:::i;:::-;37743:135;;;;;;37858:8;37823:11;:24;;;:44;;;;:::i;:::-;37743:135;;;;;37724:12;:16;37737:2;37724:16;;;;;;;;;;;;;;;:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37917:43;;;;;;;;37932:2;37917:43;;;;;;37943:15;37917:43;;;;;37889:11;:25;37901:12;37889:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37973:20;37996:12;37973:35;;38026:9;38021:325;38045:8;38041:1;:12;38021:325;;;38105:12;38101:2;38080:38;;38097:1;38080:38;;;;;;;;;;;;38159:59;38190:1;38194:2;38198:12;38212:5;38159:22;:59::i;:::-;38133:172;;;;;;;;;;;;:::i;:::-;;;;;;;;;38320:14;;;;;:::i;:::-;;;;38055:3;;;;;:::i;:::-;;;;38021:325;;;;38373:12;38358;:27;;;;38396:60;38425:1;38429:2;38433:12;38447:8;38396:20;:60::i;:::-;37176:1288;;;37064:1400;;;:::o;9539:326::-;9599:4;9856:1;9834:7;:19;;;:23;9827:30;;9539:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;568:133;;;;:::o;707:137::-;752:5;790:6;777:20;768:29;;806:32;832:5;806:32;:::i;:::-;707:137;;;;:::o;850:141::-;906:5;937:6;931:13;922:22;;953:32;979:5;953:32;:::i;:::-;850:141;;;;:::o;1010:338::-;1065:5;1114:3;1107:4;1099:6;1095:17;1091:27;1081:122;;1122:79;;:::i;:::-;1081:122;1239:6;1226:20;1264:78;1338:3;1330:6;1323:4;1315:6;1311:17;1264:78;:::i;:::-;1255:87;;1071:277;1010:338;;;;:::o;1368:553::-;1426:8;1436:6;1486:3;1479:4;1471:6;1467:17;1463:27;1453:122;;1494:79;;:::i;:::-;1453:122;1607:6;1594:20;1584:30;;1637:18;1629:6;1626:30;1623:117;;;1659:79;;:::i;:::-;1623:117;1773:4;1765:6;1761:17;1749:29;;1827:3;1819:4;1811:6;1807:17;1797:8;1793:32;1790:41;1787:128;;;1834:79;;:::i;:::-;1787:128;1368:553;;;;;:::o;1927:139::-;1973:5;2011:6;1998:20;1989:29;;2027:33;2054:5;2027:33;:::i;:::-;1927:139;;;;:::o;2072:329::-;2131:6;2180:2;2168:9;2159:7;2155:23;2151:32;2148:119;;;2186:79;;:::i;:::-;2148:119;2306:1;2331:53;2376:7;2367:6;2356:9;2352:22;2331:53;:::i;:::-;2321:63;;2277:117;2072:329;;;;:::o;2407:474::-;2475:6;2483;2532:2;2520:9;2511:7;2507:23;2503:32;2500:119;;;2538:79;;:::i;:::-;2500:119;2658:1;2683:53;2728:7;2719:6;2708:9;2704:22;2683:53;:::i;:::-;2673:63;;2629:117;2785:2;2811:53;2856:7;2847:6;2836:9;2832:22;2811:53;:::i;:::-;2801:63;;2756:118;2407:474;;;;;:::o;2887:619::-;2964:6;2972;2980;3029:2;3017:9;3008:7;3004:23;3000:32;2997:119;;;3035:79;;:::i;:::-;2997:119;3155:1;3180:53;3225:7;3216:6;3205:9;3201:22;3180:53;:::i;:::-;3170:63;;3126:117;3282:2;3308:53;3353:7;3344:6;3333:9;3329:22;3308:53;:::i;:::-;3298:63;;3253:118;3410:2;3436:53;3481:7;3472:6;3461:9;3457:22;3436:53;:::i;:::-;3426:63;;3381:118;2887:619;;;;;:::o;3512:943::-;3607:6;3615;3623;3631;3680:3;3668:9;3659:7;3655:23;3651:33;3648:120;;;3687:79;;:::i;:::-;3648:120;3807:1;3832:53;3877:7;3868:6;3857:9;3853:22;3832:53;:::i;:::-;3822:63;;3778:117;3934:2;3960:53;4005:7;3996:6;3985:9;3981:22;3960:53;:::i;:::-;3950:63;;3905:118;4062:2;4088:53;4133:7;4124:6;4113:9;4109:22;4088:53;:::i;:::-;4078:63;;4033:118;4218:2;4207:9;4203:18;4190:32;4249:18;4241:6;4238:30;4235:117;;;4271:79;;:::i;:::-;4235:117;4376:62;4430:7;4421:6;4410:9;4406:22;4376:62;:::i;:::-;4366:72;;4161:287;3512:943;;;;;;;:::o;4461:468::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:50;4904:7;4895:6;4884:9;4880:22;4862:50;:::i;:::-;4852:60;;4807:115;4461:468;;;;;:::o;4935:474::-;5003:6;5011;5060:2;5048:9;5039:7;5035:23;5031:32;5028:119;;;5066:79;;:::i;:::-;5028:119;5186:1;5211:53;5256:7;5247:6;5236:9;5232:22;5211:53;:::i;:::-;5201:63;;5157:117;5313:2;5339:53;5384:7;5375:6;5364:9;5360:22;5339:53;:::i;:::-;5329:63;;5284:118;4935:474;;;;;:::o;5415:323::-;5471:6;5520:2;5508:9;5499:7;5495:23;5491:32;5488:119;;;5526:79;;:::i;:::-;5488:119;5646:1;5671:50;5713:7;5704:6;5693:9;5689:22;5671:50;:::i;:::-;5661:60;;5617:114;5415:323;;;;:::o;5744:327::-;5802:6;5851:2;5839:9;5830:7;5826:23;5822:32;5819:119;;;5857:79;;:::i;:::-;5819:119;5977:1;6002:52;6046:7;6037:6;6026:9;6022:22;6002:52;:::i;:::-;5992:62;;5948:116;5744:327;;;;:::o;6077:349::-;6146:6;6195:2;6183:9;6174:7;6170:23;6166:32;6163:119;;;6201:79;;:::i;:::-;6163:119;6321:1;6346:63;6401:7;6392:6;6381:9;6377:22;6346:63;:::i;:::-;6336:73;;6292:127;6077:349;;;;:::o;6432:529::-;6503:6;6511;6560:2;6548:9;6539:7;6535:23;6531:32;6528:119;;;6566:79;;:::i;:::-;6528:119;6714:1;6703:9;6699:17;6686:31;6744:18;6736:6;6733:30;6730:117;;;6766:79;;:::i;:::-;6730:117;6879:65;6936:7;6927:6;6916:9;6912:22;6879:65;:::i;:::-;6861:83;;;;6657:297;6432:529;;;;;:::o;6967:329::-;7026:6;7075:2;7063:9;7054:7;7050:23;7046:32;7043:119;;;7081:79;;:::i;:::-;7043:119;7201:1;7226:53;7271:7;7262:6;7251:9;7247:22;7226:53;:::i;:::-;7216:63;;7172:117;6967:329;;;;:::o;7302:108::-;7379:24;7397:5;7379:24;:::i;:::-;7374:3;7367:37;7302:108;;:::o;7416:118::-;7503:24;7521:5;7503:24;:::i;:::-;7498:3;7491:37;7416:118;;:::o;7540:109::-;7621:21;7636:5;7621:21;:::i;:::-;7616:3;7609:34;7540:109;;:::o;7655:360::-;7741:3;7769:38;7801:5;7769:38;:::i;:::-;7823:70;7886:6;7881:3;7823:70;:::i;:::-;7816:77;;7902:52;7947:6;7942:3;7935:4;7928:5;7924:16;7902:52;:::i;:::-;7979:29;8001:6;7979:29;:::i;:::-;7974:3;7970:39;7963:46;;7745:270;7655:360;;;;:::o;8021:364::-;8109:3;8137:39;8170:5;8137:39;:::i;:::-;8192:71;8256:6;8251:3;8192:71;:::i;:::-;8185:78;;8272:52;8317:6;8312:3;8305:4;8298:5;8294:16;8272:52;:::i;:::-;8349:29;8371:6;8349:29;:::i;:::-;8344:3;8340:39;8333:46;;8113:272;8021:364;;;;:::o;8391:377::-;8497:3;8525:39;8558:5;8525:39;:::i;:::-;8580:89;8662:6;8657:3;8580:89;:::i;:::-;8573:96;;8678:52;8723:6;8718:3;8711:4;8704:5;8700:16;8678:52;:::i;:::-;8755:6;8750:3;8746:16;8739:23;;8501:267;8391:377;;;;:::o;8774:366::-;8916:3;8937:67;9001:2;8996:3;8937:67;:::i;:::-;8930:74;;9013:93;9102:3;9013:93;:::i;:::-;9131:2;9126:3;9122:12;9115:19;;8774:366;;;:::o;9146:::-;9288:3;9309:67;9373:2;9368:3;9309:67;:::i;:::-;9302:74;;9385:93;9474:3;9385:93;:::i;:::-;9503:2;9498:3;9494:12;9487:19;;9146:366;;;:::o;9518:::-;9660:3;9681:67;9745:2;9740:3;9681:67;:::i;:::-;9674:74;;9757:93;9846:3;9757:93;:::i;:::-;9875:2;9870:3;9866:12;9859:19;;9518:366;;;:::o;9890:::-;10032:3;10053:67;10117:2;10112:3;10053:67;:::i;:::-;10046:74;;10129:93;10218:3;10129:93;:::i;:::-;10247:2;10242:3;10238:12;10231:19;;9890:366;;;:::o;10262:::-;10404:3;10425:67;10489:2;10484:3;10425:67;:::i;:::-;10418:74;;10501:93;10590:3;10501:93;:::i;:::-;10619:2;10614:3;10610:12;10603:19;;10262:366;;;:::o;10634:::-;10776:3;10797:67;10861:2;10856:3;10797:67;:::i;:::-;10790:74;;10873:93;10962:3;10873:93;:::i;:::-;10991:2;10986:3;10982:12;10975:19;;10634:366;;;:::o;11006:::-;11148:3;11169:67;11233:2;11228:3;11169:67;:::i;:::-;11162:74;;11245:93;11334:3;11245:93;:::i;:::-;11363:2;11358:3;11354:12;11347:19;;11006:366;;;:::o;11378:::-;11520:3;11541:67;11605:2;11600:3;11541:67;:::i;:::-;11534:74;;11617:93;11706:3;11617:93;:::i;:::-;11735:2;11730:3;11726:12;11719:19;;11378:366;;;:::o;11750:::-;11892:3;11913:67;11977:2;11972:3;11913:67;:::i;:::-;11906:74;;11989:93;12078:3;11989:93;:::i;:::-;12107:2;12102:3;12098:12;12091:19;;11750:366;;;:::o;12122:::-;12264:3;12285:67;12349:2;12344:3;12285:67;:::i;:::-;12278:74;;12361:93;12450:3;12361:93;:::i;:::-;12479:2;12474:3;12470:12;12463:19;;12122:366;;;:::o;12494:::-;12636:3;12657:67;12721:2;12716:3;12657:67;:::i;:::-;12650:74;;12733:93;12822:3;12733:93;:::i;:::-;12851:2;12846:3;12842:12;12835:19;;12494:366;;;:::o;12866:::-;13008:3;13029:67;13093:2;13088:3;13029:67;:::i;:::-;13022:74;;13105:93;13194:3;13105:93;:::i;:::-;13223:2;13218:3;13214:12;13207:19;;12866:366;;;:::o;13238:400::-;13398:3;13419:84;13501:1;13496:3;13419:84;:::i;:::-;13412:91;;13512:93;13601:3;13512:93;:::i;:::-;13630:1;13625:3;13621:11;13614:18;;13238:400;;;:::o;13644:366::-;13786:3;13807:67;13871:2;13866:3;13807:67;:::i;:::-;13800:74;;13883:93;13972:3;13883:93;:::i;:::-;14001:2;13996:3;13992:12;13985:19;;13644:366;;;:::o;14016:::-;14158:3;14179:67;14243:2;14238:3;14179:67;:::i;:::-;14172:74;;14255:93;14344:3;14255:93;:::i;:::-;14373:2;14368:3;14364:12;14357:19;;14016:366;;;:::o;14388:::-;14530:3;14551:67;14615:2;14610:3;14551:67;:::i;:::-;14544:74;;14627:93;14716:3;14627:93;:::i;:::-;14745:2;14740:3;14736:12;14729:19;;14388:366;;;:::o;14760:::-;14902:3;14923:67;14987:2;14982:3;14923:67;:::i;:::-;14916:74;;14999:93;15088:3;14999:93;:::i;:::-;15117:2;15112:3;15108:12;15101:19;;14760:366;;;:::o;15132:::-;15274:3;15295:67;15359:2;15354:3;15295:67;:::i;:::-;15288:74;;15371:93;15460:3;15371:93;:::i;:::-;15489:2;15484:3;15480:12;15473:19;;15132:366;;;:::o;15504:::-;15646:3;15667:67;15731:2;15726:3;15667:67;:::i;:::-;15660:74;;15743:93;15832:3;15743:93;:::i;:::-;15861:2;15856:3;15852:12;15845:19;;15504:366;;;:::o;15876:398::-;16035:3;16056:83;16137:1;16132:3;16056:83;:::i;:::-;16049:90;;16148:93;16237:3;16148:93;:::i;:::-;16266:1;16261:3;16257:11;16250:18;;15876:398;;;:::o;16280:366::-;16422:3;16443:67;16507:2;16502:3;16443:67;:::i;:::-;16436:74;;16519:93;16608:3;16519:93;:::i;:::-;16637:2;16632:3;16628:12;16621:19;;16280:366;;;:::o;16652:::-;16794:3;16815:67;16879:2;16874:3;16815:67;:::i;:::-;16808:74;;16891:93;16980:3;16891:93;:::i;:::-;17009:2;17004:3;17000:12;16993:19;;16652:366;;;:::o;17024:::-;17166:3;17187:67;17251:2;17246:3;17187:67;:::i;:::-;17180:74;;17263:93;17352:3;17263:93;:::i;:::-;17381:2;17376:3;17372:12;17365:19;;17024:366;;;:::o;17396:::-;17538:3;17559:67;17623:2;17618:3;17559:67;:::i;:::-;17552:74;;17635:93;17724:3;17635:93;:::i;:::-;17753:2;17748:3;17744:12;17737:19;;17396:366;;;:::o;17768:::-;17910:3;17931:67;17995:2;17990:3;17931:67;:::i;:::-;17924:74;;18007:93;18096:3;18007:93;:::i;:::-;18125:2;18120:3;18116:12;18109:19;;17768:366;;;:::o;18140:::-;18282:3;18303:67;18367:2;18362:3;18303:67;:::i;:::-;18296:74;;18379:93;18468:3;18379:93;:::i;:::-;18497:2;18492:3;18488:12;18481:19;;18140:366;;;:::o;18512:::-;18654:3;18675:67;18739:2;18734:3;18675:67;:::i;:::-;18668:74;;18751:93;18840:3;18751:93;:::i;:::-;18869:2;18864:3;18860:12;18853:19;;18512:366;;;:::o;18884:::-;19026:3;19047:67;19111:2;19106:3;19047:67;:::i;:::-;19040:74;;19123:93;19212:3;19123:93;:::i;:::-;19241:2;19236:3;19232:12;19225:19;;18884:366;;;:::o;19256:::-;19398:3;19419:67;19483:2;19478:3;19419:67;:::i;:::-;19412:74;;19495:93;19584:3;19495:93;:::i;:::-;19613:2;19608:3;19604:12;19597:19;;19256:366;;;:::o;19628:::-;19770:3;19791:67;19855:2;19850:3;19791:67;:::i;:::-;19784:74;;19867:93;19956:3;19867:93;:::i;:::-;19985:2;19980:3;19976:12;19969:19;;19628:366;;;:::o;20000:::-;20142:3;20163:67;20227:2;20222:3;20163:67;:::i;:::-;20156:74;;20239:93;20328:3;20239:93;:::i;:::-;20357:2;20352:3;20348:12;20341:19;;20000:366;;;:::o;20372:::-;20514:3;20535:67;20599:2;20594:3;20535:67;:::i;:::-;20528:74;;20611:93;20700:3;20611:93;:::i;:::-;20729:2;20724:3;20720:12;20713:19;;20372:366;;;:::o;20814:527::-;20973:4;20968:3;20964:14;21060:4;21053:5;21049:16;21043:23;21079:63;21136:4;21131:3;21127:14;21113:12;21079:63;:::i;:::-;20988:164;21244:4;21237:5;21233:16;21227:23;21263:61;21318:4;21313:3;21309:14;21295:12;21263:61;:::i;:::-;21162:172;20942:399;20814:527;;:::o;21347:118::-;21434:24;21452:5;21434:24;:::i;:::-;21429:3;21422:37;21347:118;;:::o;21471:105::-;21546:23;21563:5;21546:23;:::i;:::-;21541:3;21534:36;21471:105;;:::o;21582:701::-;21863:3;21885:95;21976:3;21967:6;21885:95;:::i;:::-;21878:102;;21997:95;22088:3;22079:6;21997:95;:::i;:::-;21990:102;;22109:148;22253:3;22109:148;:::i;:::-;22102:155;;22274:3;22267:10;;21582:701;;;;;:::o;22289:379::-;22473:3;22495:147;22638:3;22495:147;:::i;:::-;22488:154;;22659:3;22652:10;;22289:379;;;:::o;22674:222::-;22767:4;22805:2;22794:9;22790:18;22782:26;;22818:71;22886:1;22875:9;22871:17;22862:6;22818:71;:::i;:::-;22674:222;;;;:::o;22902:640::-;23097:4;23135:3;23124:9;23120:19;23112:27;;23149:71;23217:1;23206:9;23202:17;23193:6;23149:71;:::i;:::-;23230:72;23298:2;23287:9;23283:18;23274:6;23230:72;:::i;:::-;23312;23380:2;23369:9;23365:18;23356:6;23312:72;:::i;:::-;23431:9;23425:4;23421:20;23416:2;23405:9;23401:18;23394:48;23459:76;23530:4;23521:6;23459:76;:::i;:::-;23451:84;;22902:640;;;;;;;:::o;23548:210::-;23635:4;23673:2;23662:9;23658:18;23650:26;;23686:65;23748:1;23737:9;23733:17;23724:6;23686:65;:::i;:::-;23548:210;;;;:::o;23764:313::-;23877:4;23915:2;23904:9;23900:18;23892:26;;23964:9;23958:4;23954:20;23950:1;23939:9;23935:17;23928:47;23992:78;24065:4;24056:6;23992:78;:::i;:::-;23984:86;;23764:313;;;;:::o;24083:419::-;24249:4;24287:2;24276:9;24272:18;24264:26;;24336:9;24330:4;24326:20;24322:1;24311:9;24307:17;24300:47;24364:131;24490:4;24364:131;:::i;:::-;24356:139;;24083:419;;;:::o;24508:::-;24674:4;24712:2;24701:9;24697:18;24689:26;;24761:9;24755:4;24751:20;24747:1;24736:9;24732:17;24725:47;24789:131;24915:4;24789:131;:::i;:::-;24781:139;;24508:419;;;:::o;24933:::-;25099:4;25137:2;25126:9;25122:18;25114:26;;25186:9;25180:4;25176:20;25172:1;25161:9;25157:17;25150:47;25214:131;25340:4;25214:131;:::i;:::-;25206:139;;24933:419;;;:::o;25358:::-;25524:4;25562:2;25551:9;25547:18;25539:26;;25611:9;25605:4;25601:20;25597:1;25586:9;25582:17;25575:47;25639:131;25765:4;25639:131;:::i;:::-;25631:139;;25358:419;;;:::o;25783:::-;25949:4;25987:2;25976:9;25972:18;25964:26;;26036:9;26030:4;26026:20;26022:1;26011:9;26007:17;26000:47;26064:131;26190:4;26064:131;:::i;:::-;26056:139;;25783:419;;;:::o;26208:::-;26374:4;26412:2;26401:9;26397:18;26389:26;;26461:9;26455:4;26451:20;26447:1;26436:9;26432:17;26425:47;26489:131;26615:4;26489:131;:::i;:::-;26481:139;;26208:419;;;:::o;26633:::-;26799:4;26837:2;26826:9;26822:18;26814:26;;26886:9;26880:4;26876:20;26872:1;26861:9;26857:17;26850:47;26914:131;27040:4;26914:131;:::i;:::-;26906:139;;26633:419;;;:::o;27058:::-;27224:4;27262:2;27251:9;27247:18;27239:26;;27311:9;27305:4;27301:20;27297:1;27286:9;27282:17;27275:47;27339:131;27465:4;27339:131;:::i;:::-;27331:139;;27058:419;;;:::o;27483:::-;27649:4;27687:2;27676:9;27672:18;27664:26;;27736:9;27730:4;27726:20;27722:1;27711:9;27707:17;27700:47;27764:131;27890:4;27764:131;:::i;:::-;27756:139;;27483:419;;;:::o;27908:::-;28074:4;28112:2;28101:9;28097:18;28089:26;;28161:9;28155:4;28151:20;28147:1;28136:9;28132:17;28125:47;28189:131;28315:4;28189:131;:::i;:::-;28181:139;;27908:419;;;:::o;28333:::-;28499:4;28537:2;28526:9;28522:18;28514:26;;28586:9;28580:4;28576:20;28572:1;28561:9;28557:17;28550:47;28614:131;28740:4;28614:131;:::i;:::-;28606:139;;28333:419;;;:::o;28758:::-;28924:4;28962:2;28951:9;28947:18;28939:26;;29011:9;29005:4;29001:20;28997:1;28986:9;28982:17;28975:47;29039:131;29165:4;29039:131;:::i;:::-;29031:139;;28758:419;;;:::o;29183:::-;29349:4;29387:2;29376:9;29372:18;29364:26;;29436:9;29430:4;29426:20;29422:1;29411:9;29407:17;29400:47;29464:131;29590:4;29464:131;:::i;:::-;29456:139;;29183:419;;;:::o;29608:::-;29774:4;29812:2;29801:9;29797:18;29789:26;;29861:9;29855:4;29851:20;29847:1;29836:9;29832:17;29825:47;29889:131;30015:4;29889:131;:::i;:::-;29881:139;;29608:419;;;:::o;30033:::-;30199:4;30237:2;30226:9;30222:18;30214:26;;30286:9;30280:4;30276:20;30272:1;30261:9;30257:17;30250:47;30314:131;30440:4;30314:131;:::i;:::-;30306:139;;30033:419;;;:::o;30458:::-;30624:4;30662:2;30651:9;30647:18;30639:26;;30711:9;30705:4;30701:20;30697:1;30686:9;30682:17;30675:47;30739:131;30865:4;30739:131;:::i;:::-;30731:139;;30458:419;;;:::o;30883:::-;31049:4;31087:2;31076:9;31072:18;31064:26;;31136:9;31130:4;31126:20;31122:1;31111:9;31107:17;31100:47;31164:131;31290:4;31164:131;:::i;:::-;31156:139;;30883:419;;;:::o;31308:::-;31474:4;31512:2;31501:9;31497:18;31489:26;;31561:9;31555:4;31551:20;31547:1;31536:9;31532:17;31525:47;31589:131;31715:4;31589:131;:::i;:::-;31581:139;;31308:419;;;:::o;31733:::-;31899:4;31937:2;31926:9;31922:18;31914:26;;31986:9;31980:4;31976:20;31972:1;31961:9;31957:17;31950:47;32014:131;32140:4;32014:131;:::i;:::-;32006:139;;31733:419;;;:::o;32158:::-;32324:4;32362:2;32351:9;32347:18;32339:26;;32411:9;32405:4;32401:20;32397:1;32386:9;32382:17;32375:47;32439:131;32565:4;32439:131;:::i;:::-;32431:139;;32158:419;;;:::o;32583:::-;32749:4;32787:2;32776:9;32772:18;32764:26;;32836:9;32830:4;32826:20;32822:1;32811:9;32807:17;32800:47;32864:131;32990:4;32864:131;:::i;:::-;32856:139;;32583:419;;;:::o;33008:::-;33174:4;33212:2;33201:9;33197:18;33189:26;;33261:9;33255:4;33251:20;33247:1;33236:9;33232:17;33225:47;33289:131;33415:4;33289:131;:::i;:::-;33281:139;;33008:419;;;:::o;33433:::-;33599:4;33637:2;33626:9;33622:18;33614:26;;33686:9;33680:4;33676:20;33672:1;33661:9;33657:17;33650:47;33714:131;33840:4;33714:131;:::i;:::-;33706:139;;33433:419;;;:::o;33858:::-;34024:4;34062:2;34051:9;34047:18;34039:26;;34111:9;34105:4;34101:20;34097:1;34086:9;34082:17;34075:47;34139:131;34265:4;34139:131;:::i;:::-;34131:139;;33858:419;;;:::o;34283:::-;34449:4;34487:2;34476:9;34472:18;34464:26;;34536:9;34530:4;34526:20;34522:1;34511:9;34507:17;34500:47;34564:131;34690:4;34564:131;:::i;:::-;34556:139;;34283:419;;;:::o;34708:::-;34874:4;34912:2;34901:9;34897:18;34889:26;;34961:9;34955:4;34951:20;34947:1;34936:9;34932:17;34925:47;34989:131;35115:4;34989:131;:::i;:::-;34981:139;;34708:419;;;:::o;35133:::-;35299:4;35337:2;35326:9;35322:18;35314:26;;35386:9;35380:4;35376:20;35372:1;35361:9;35357:17;35350:47;35414:131;35540:4;35414:131;:::i;:::-;35406:139;;35133:419;;;:::o;35558:::-;35724:4;35762:2;35751:9;35747:18;35739:26;;35811:9;35805:4;35801:20;35797:1;35786:9;35782:17;35775:47;35839:131;35965:4;35839:131;:::i;:::-;35831:139;;35558:419;;;:::o;35983:::-;36149:4;36187:2;36176:9;36172:18;36164:26;;36236:9;36230:4;36226:20;36222:1;36211:9;36207:17;36200:47;36264:131;36390:4;36264:131;:::i;:::-;36256:139;;35983:419;;;:::o;36408:::-;36574:4;36612:2;36601:9;36597:18;36589:26;;36661:9;36655:4;36651:20;36647:1;36636:9;36632:17;36625:47;36689:131;36815:4;36689:131;:::i;:::-;36681:139;;36408:419;;;:::o;36833:346::-;36988:4;37026:2;37015:9;37011:18;37003:26;;37039:133;37169:1;37158:9;37154:17;37145:6;37039:133;:::i;:::-;36833:346;;;;:::o;37185:222::-;37278:4;37316:2;37305:9;37301:18;37293:26;;37329:71;37397:1;37386:9;37382:17;37373:6;37329:71;:::i;:::-;37185:222;;;;:::o;37413:129::-;37447:6;37474:20;;:::i;:::-;37464:30;;37503:33;37531:4;37523:6;37503:33;:::i;:::-;37413:129;;;:::o;37548:75::-;37581:6;37614:2;37608:9;37598:19;;37548:75;:::o;37629:307::-;37690:4;37780:18;37772:6;37769:30;37766:56;;;37802:18;;:::i;:::-;37766:56;37840:29;37862:6;37840:29;:::i;:::-;37832:37;;37924:4;37918;37914:15;37906:23;;37629:307;;;:::o;37942:98::-;37993:6;38027:5;38021:12;38011:22;;37942:98;;;:::o;38046:99::-;38098:6;38132:5;38126:12;38116:22;;38046:99;;;:::o;38151:168::-;38234:11;38268:6;38263:3;38256:19;38308:4;38303:3;38299:14;38284:29;;38151:168;;;;:::o;38325:147::-;38426:11;38463:3;38448:18;;38325:147;;;;:::o;38478:169::-;38562:11;38596:6;38591:3;38584:19;38636:4;38631:3;38627:14;38612:29;;38478:169;;;;:::o;38653:148::-;38755:11;38792:3;38777:18;;38653:148;;;;:::o;38807:273::-;38847:3;38866:20;38884:1;38866:20;:::i;:::-;38861:25;;38900:20;38918:1;38900:20;:::i;:::-;38895:25;;39022:1;38986:34;38982:42;38979:1;38976:49;38973:75;;;39028:18;;:::i;:::-;38973:75;39072:1;39069;39065:9;39058:16;;38807:273;;;;:::o;39086:305::-;39126:3;39145:20;39163:1;39145:20;:::i;:::-;39140:25;;39179:20;39197:1;39179:20;:::i;:::-;39174:25;;39333:1;39265:66;39261:74;39258:1;39255:81;39252:107;;;39339:18;;:::i;:::-;39252:107;39383:1;39380;39376:9;39369:16;;39086:305;;;;:::o;39397:185::-;39437:1;39454:20;39472:1;39454:20;:::i;:::-;39449:25;;39488:20;39506:1;39488:20;:::i;:::-;39483:25;;39527:1;39517:35;;39532:18;;:::i;:::-;39517:35;39574:1;39571;39567:9;39562:14;;39397:185;;;;:::o;39588:348::-;39628:7;39651:20;39669:1;39651:20;:::i;:::-;39646:25;;39685:20;39703:1;39685:20;:::i;:::-;39680:25;;39873:1;39805:66;39801:74;39798:1;39795:81;39790:1;39783:9;39776:17;39772:105;39769:131;;;39880:18;;:::i;:::-;39769:131;39928:1;39925;39921:9;39910:20;;39588:348;;;;:::o;39942:191::-;39982:4;40002:20;40020:1;40002:20;:::i;:::-;39997:25;;40036:20;40054:1;40036:20;:::i;:::-;40031:25;;40075:1;40072;40069:8;40066:34;;;40080:18;;:::i;:::-;40066:34;40125:1;40122;40118:9;40110:17;;39942:191;;;;:::o;40139:::-;40179:4;40199:20;40217:1;40199:20;:::i;:::-;40194:25;;40233:20;40251:1;40233:20;:::i;:::-;40228:25;;40272:1;40269;40266:8;40263:34;;;40277:18;;:::i;:::-;40263:34;40322:1;40319;40315:9;40307:17;;40139:191;;;;:::o;40336:96::-;40373:7;40402:24;40420:5;40402:24;:::i;:::-;40391:35;;40336:96;;;:::o;40438:90::-;40472:7;40515:5;40508:13;40501:21;40490:32;;40438:90;;;:::o;40534:149::-;40570:7;40610:66;40603:5;40599:78;40588:89;;40534:149;;;:::o;40689:118::-;40726:7;40766:34;40759:5;40755:46;40744:57;;40689:118;;;:::o;40813:126::-;40850:7;40890:42;40883:5;40879:54;40868:65;;40813:126;;;:::o;40945:77::-;40982:7;41011:5;41000:16;;40945:77;;;:::o;41028:101::-;41064:7;41104:18;41097:5;41093:30;41082:41;;41028:101;;;:::o;41135:154::-;41219:6;41214:3;41209;41196:30;41281:1;41272:6;41267:3;41263:16;41256:27;41135:154;;;:::o;41295:307::-;41363:1;41373:113;41387:6;41384:1;41381:13;41373:113;;;41472:1;41467:3;41463:11;41457:18;41453:1;41448:3;41444:11;41437:39;41409:2;41406:1;41402:10;41397:15;;41373:113;;;41504:6;41501:1;41498:13;41495:101;;;41584:1;41575:6;41570:3;41566:16;41559:27;41495:101;41344:258;41295:307;;;:::o;41608:171::-;41647:3;41670:24;41688:5;41670:24;:::i;:::-;41661:33;;41716:4;41709:5;41706:15;41703:41;;;41724:18;;:::i;:::-;41703:41;41771:1;41764:5;41760:13;41753:20;;41608:171;;;:::o;41785:320::-;41829:6;41866:1;41860:4;41856:12;41846:22;;41913:1;41907:4;41903:12;41934:18;41924:81;;41990:4;41982:6;41978:17;41968:27;;41924:81;42052:2;42044:6;42041:14;42021:18;42018:38;42015:84;;;42071:18;;:::i;:::-;42015:84;41836:269;41785:320;;;:::o;42111:281::-;42194:27;42216:4;42194:27;:::i;:::-;42186:6;42182:40;42324:6;42312:10;42309:22;42288:18;42276:10;42273:34;42270:62;42267:88;;;42335:18;;:::i;:::-;42267:88;42375:10;42371:2;42364:22;42154:238;42111:281;;:::o;42398:233::-;42437:3;42460:24;42478:5;42460:24;:::i;:::-;42451:33;;42506:66;42499:5;42496:77;42493:103;;;42576:18;;:::i;:::-;42493:103;42623:1;42616:5;42612:13;42605:20;;42398:233;;;:::o;42637:176::-;42669:1;42686:20;42704:1;42686:20;:::i;:::-;42681:25;;42720:20;42738:1;42720:20;:::i;:::-;42715:25;;42759:1;42749:35;;42764:18;;:::i;:::-;42749:35;42805:1;42802;42798:9;42793:14;;42637:176;;;;:::o;42819:180::-;42867:77;42864:1;42857:88;42964:4;42961:1;42954:15;42988:4;42985:1;42978:15;43005:180;43053:77;43050:1;43043:88;43150:4;43147:1;43140:15;43174:4;43171:1;43164:15;43191:180;43239:77;43236:1;43229:88;43336:4;43333:1;43326:15;43360:4;43357:1;43350:15;43377:180;43425:77;43422:1;43415:88;43522:4;43519:1;43512:15;43546:4;43543:1;43536:15;43563:180;43611:77;43608:1;43601:88;43708:4;43705:1;43698:15;43732:4;43729:1;43722:15;43749:117;43858:1;43855;43848:12;43872:117;43981:1;43978;43971:12;43995:117;44104:1;44101;44094:12;44118:117;44227:1;44224;44217:12;44241:117;44350:1;44347;44340:12;44364:117;44473:1;44470;44463:12;44487:102;44528:6;44579:2;44575:7;44570:2;44563:5;44559:14;44555:28;44545:38;;44487:102;;;:::o;44595:221::-;44735:34;44731:1;44723:6;44719:14;44712:58;44804:4;44799:2;44791:6;44787:15;44780:29;44595:221;:::o;44822:225::-;44962:34;44958:1;44950:6;44946:14;44939:58;45031:8;45026:2;45018:6;45014:15;45007:33;44822:225;:::o;45053:229::-;45193:34;45189:1;45181:6;45177:14;45170:58;45262:12;45257:2;45249:6;45245:15;45238:37;45053:229;:::o;45288:222::-;45428:34;45424:1;45416:6;45412:14;45405:58;45497:5;45492:2;45484:6;45480:15;45473:30;45288:222;:::o;45516:224::-;45656:34;45652:1;45644:6;45640:14;45633:58;45725:7;45720:2;45712:6;45708:15;45701:32;45516:224;:::o;45746:236::-;45886:34;45882:1;45874:6;45870:14;45863:58;45955:19;45950:2;45942:6;45938:15;45931:44;45746:236;:::o;45988:180::-;46128:32;46124:1;46116:6;46112:14;46105:56;45988:180;:::o;46174:244::-;46314:34;46310:1;46302:6;46298:14;46291:58;46383:27;46378:2;46370:6;46366:15;46359:52;46174:244;:::o;46424:174::-;46564:26;46560:1;46552:6;46548:14;46541:50;46424:174;:::o;46604:230::-;46744:34;46740:1;46732:6;46728:14;46721:58;46813:13;46808:2;46800:6;46796:15;46789:38;46604:230;:::o;46840:168::-;46980:20;46976:1;46968:6;46964:14;46957:44;46840:168;:::o;47014:225::-;47154:34;47150:1;47142:6;47138:14;47131:58;47223:8;47218:2;47210:6;47206:15;47199:33;47014:225;:::o;47245:155::-;47385:7;47381:1;47373:6;47369:14;47362:31;47245:155;:::o;47406:182::-;47546:34;47542:1;47534:6;47530:14;47523:58;47406:182;:::o;47594:234::-;47734:34;47730:1;47722:6;47718:14;47711:58;47803:17;47798:2;47790:6;47786:15;47779:42;47594:234;:::o;47834:176::-;47974:28;47970:1;47962:6;47958:14;47951:52;47834:176;:::o;48016:237::-;48156:34;48152:1;48144:6;48140:14;48133:58;48225:20;48220:2;48212:6;48208:15;48201:45;48016:237;:::o;48259:179::-;48399:31;48395:1;48387:6;48383:14;48376:55;48259:179;:::o;48444:221::-;48584:34;48580:1;48572:6;48568:14;48561:58;48653:4;48648:2;48640:6;48636:15;48629:29;48444:221;:::o;48671:114::-;;:::o;48791:166::-;48931:18;48927:1;48919:6;48915:14;48908:42;48791:166;:::o;48963:238::-;49103:34;49099:1;49091:6;49087:14;49080:58;49172:21;49167:2;49159:6;49155:15;49148:46;48963:238;:::o;49207:172::-;49347:24;49343:1;49335:6;49331:14;49324:48;49207:172;:::o;49385:179::-;49525:31;49521:1;49513:6;49509:14;49502:55;49385:179;:::o;49570:220::-;49710:34;49706:1;49698:6;49694:14;49687:58;49779:3;49774:2;49766:6;49762:15;49755:28;49570:220;:::o;49796:172::-;49936:24;49932:1;49924:6;49920:14;49913:48;49796:172;:::o;49974:233::-;50114:34;50110:1;50102:6;50098:14;50091:58;50183:16;50178:2;50170:6;50166:15;50159:41;49974:233;:::o;50213:225::-;50353:34;50349:1;50341:6;50337:14;50330:58;50422:8;50417:2;50409:6;50405:15;50398:33;50213:225;:::o;50444:181::-;50584:33;50580:1;50572:6;50568:14;50561:57;50444:181;:::o;50631:234::-;50771:34;50767:1;50759:6;50755:14;50748:58;50840:17;50835:2;50827:6;50823:15;50816:42;50631:234;:::o;50871:232::-;51011:34;51007:1;50999:6;50995:14;50988:58;51080:15;51075:2;51067:6;51063:15;51056:40;50871:232;:::o;51109:221::-;51249:34;51245:1;51237:6;51233:14;51226:58;51318:4;51313:2;51305:6;51301:15;51294:29;51109:221;:::o;51336:122::-;51409:24;51427:5;51409:24;:::i;:::-;51402:5;51399:35;51389:63;;51448:1;51445;51438:12;51389:63;51336:122;:::o;51464:116::-;51534:21;51549:5;51534:21;:::i;:::-;51527:5;51524:32;51514:60;;51570:1;51567;51560:12;51514:60;51464:116;:::o;51586:120::-;51658:23;51675:5;51658:23;:::i;:::-;51651:5;51648:34;51638:62;;51696:1;51693;51686:12;51638:62;51586:120;:::o;51712:122::-;51785:24;51803:5;51785:24;:::i;:::-;51778:5;51775:35;51765:63;;51824:1;51821;51814:12;51765:63;51712:122;:::o
Swarm Source
ipfs://458f55df8176ab5dc55d996360f580a7f02732354cabc287e01e88de6ee228c3
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.