Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
1,777 Tyskos
Holders
268
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
10 TyskosLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Tyskos
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-06 */ // File: @openzeppelin/contracts/utils/Counters.sol /* ╭━━━━╮╱╱╱╱╱╭╮ ┃╭╮╭╮┃╱╱╱╱╱┃┃ ╰╯┃┃┣┫╱╭┳━━┫┃╭┳━━┳━━╮ ╱╱┃┃┃┃╱┃┃━━┫╰╯┫╭╮┃━━┫ ╱╱┃┃┃╰━╯┣━━┃╭╮┫╰╯┣━━┃ ╱╱╰╯╰━╮╭┻━━┻╯╰┻━━┻━━╯ ╱╱╱╱╭━╯┃ ╱╱╱╱╰━━╯ */ // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/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 v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // 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 Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @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 || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @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. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: 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`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * 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 ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @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.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * 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`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: contracts/Tyskos.sol /* ╭━━━━╮╱╱╱╱╱╭╮ ┃╭╮╭╮┃╱╱╱╱╱┃┃ ╰╯┃┃┣┫╱╭┳━━┫┃╭┳━━┳━━╮ ╱╱┃┃┃┃╱┃┃━━┫╰╯┫╭╮┃━━┫ ╱╱┃┃┃╰━╯┣━━┃╭╮┫╰╯┣━━┃ ╱╱╰╯╰━╮╭┻━━┻╯╰┻━━┻━━╯ ╱╱╱╱╭━╯┃ ╱╱╱╱╰━━╯ */ pragma solidity >=0.7.0 <0.9.0; contract Tyskos is ERC721, Ownable { using Strings for uint256; using Counters for Counters.Counter; Counters.Counter private supply; string public uriPrefix = "https://uetar.mypinata.cloud/ipfs/QmQ5z34vwupyrE5r5vW6EVwZ2CxrPSkfniKKZyWUSWGpHU/"; string public uriSuffix = ".json"; string public hiddenMetadataUri; uint256 public publicMintCost = 0.055 ether; uint256 public preMintCost = 0.045 ether; uint256 public maxSupply = 1777; uint256 public maxMintAmountPerTx = 100; //bool public paused = false; bool public preMintPaused = true; bool public publicMintPaused = true; bool public revealed = false; uint256 preMintLimit = 3; uint256 publicMintLimit = 10; mapping(address => uint256) public preMintCount; mapping(address => uint256) public publicMintCount; mapping(address => bool) public whitelisted; constructor() ERC721("Tyskos", "Tyskos") { setHiddenMetadataUri("https://uetar.mypinata.cloud/ipfs/QmWaAyjjSP2UKHARbUQWakpCQQ9a7dszwhWfZPfCWmHWZu"); mintForAddress(100, owner()); } modifier mintCompliance(uint256 _mintAmount) { require(_mintAmount > 0 && _mintAmount <= maxMintAmountPerTx, "Invalid mint amount!"); require(supply.current() + _mintAmount <= maxSupply, "Max supply exceeded!"); _; } function totalSupply() public view returns (uint256) { return supply.current(); } function publicMint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) { require(!publicMintPaused, "Public mint is paused!"); require(msg.value >= publicMintCost * _mintAmount, "Insufficient funds!"); require(publicMintCount[msg.sender] + _mintAmount <= publicMintLimit, "public mint limit exceeded"); _mintLoop(msg.sender, _mintAmount); publicMintCount[msg.sender] += _mintAmount; } function whitelistMint(uint256 _mintAmount) public payable mintCompliance(_mintAmount){ require(!preMintPaused, "Premint paused is paused!"); require(msg.value >= preMintCost * _mintAmount, "Insufficient funds!"); require(whitelisted[msg.sender], "sender is not in whitelist"); require(preMintCount[msg.sender] + _mintAmount <= preMintLimit, "premint limit exceeded"); _mintLoop(msg.sender, _mintAmount); preMintCount[msg.sender] += _mintAmount; } function mintForAddress(uint256 _mintAmount, address _receiver) public mintCompliance(_mintAmount) onlyOwner { _mintLoop(_receiver, _mintAmount); } function getPreMintCount() public view returns (uint256){ return preMintCount[msg.sender]; } function getPublicMintCount() public view returns (uint256){ return publicMintCount[msg.sender]; } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount); uint256 currentTokenId = 1; uint256 ownedTokenIndex = 0; while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) { address currentTokenOwner = ownerOf(currentTokenId); if (currentTokenOwner == _owner) { ownedTokenIds[ownedTokenIndex] = currentTokenId; ownedTokenIndex++; } currentTokenId++; } return ownedTokenIds; } function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { require( _exists(_tokenId), "ERC721Metadata: URI query for nonexistent token" ); if (revealed == false) { return hiddenMetadataUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, (_tokenId-1).toString(), uriSuffix)) : ""; } function setpreMintPaused(bool _state) public onlyOwner { preMintPaused = _state; } function setPublicMintPaused(bool _state) public onlyOwner { publicMintPaused = _state; } function setRevealed(bool _state) public onlyOwner { revealed = _state; } function setPublicCost(uint256 _cost) public onlyOwner { publicMintCost = _cost; } function setPreCost(uint256 _cost) public onlyOwner { preMintCost = _cost; } function whitelistUser(address _user) external onlyOwner { whitelisted[_user] = true; } function removeWhitelistUser(address _user) external onlyOwner { whitelisted[_user] = false; } function setMaxMintAmountPerTx(uint256 _maxMintAmountPerTx) public onlyOwner { maxMintAmountPerTx = _maxMintAmountPerTx; } function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner { hiddenMetadataUri = _hiddenMetadataUri; } function setUriPrefix(string memory _uriPrefix) public onlyOwner { uriPrefix = _uriPrefix; } function setUriSuffix(string memory _uriSuffix) public onlyOwner { uriSuffix = _uriSuffix; } function withdraw() public onlyOwner { (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); } function _mintLoop(address _receiver, uint256 _mintAmount) internal { for (uint256 i = 0; i < _mintAmount; i++) { supply.increment(); _safeMint(_receiver, supply.current()); } } function _baseURI() internal view virtual override returns (string memory) { return uriPrefix; } }
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":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPreMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPublicMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preMintCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"preMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preMintPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicMintCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"publicMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicMintPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removeWhitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setPreCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setPublicCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPublicMintPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setpreMintPaused","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":"_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":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"whitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260405180608001604052806051815260200162005f2f60519139600890805190602001906200003592919062000a6c565b506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600990805190602001906200008392919062000a6c565b5066c3663566a58000600b55669fdf42f6e48000600c556106f1600d556064600e556001600f60006101000a81548160ff0219169083151502179055506001600f60016101000a81548160ff0219169083151502179055506000600f60026101000a81548160ff0219169083151502179055506003601055600a6011553480156200010d57600080fd5b506040518060400160405280600681526020017f5479736b6f7300000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f5479736b6f73000000000000000000000000000000000000000000000000000081525081600090805190602001906200019292919062000a6c565b508060019080519060200190620001ab92919062000a6c565b505050620001ce620001c26200022060201b60201c565b6200022860201b60201c565b620001f860405180608001604052806050815260200162005edf60509139620002ee60201b60201c565b6200021a60646200020e6200039960201b60201c565b620003c360201b60201c565b6200112a565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002fe6200022060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003246200039960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200037d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003749062000d8e565b60405180910390fd5b80600a90805190602001906200039592919062000a6c565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b81600081118015620003d75750600e548111155b62000419576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004109062000d4a565b60405180910390fd5b600d54816200043460076200052a60201b620026961760201c565b62000440919062000dff565b111562000484576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200047b9062000db0565b60405180910390fd5b620004946200022060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620004ba6200039960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000513576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200050a9062000d8e565b60405180910390fd5b6200052582846200053860201b60201c565b505050565b600081600001549050919050565b60005b8181101562000599576200055b60076200059e60201b620026a41760201c565b62000583836200057760076200052a60201b620026961760201c565b620005b460201b60201c565b8080620005909062000f32565b9150506200053b565b505050565b6001816000016000828254019250508190555050565b620005d6828260405180602001604052806000815250620005da60201b60201c565b5050565b620005ec83836200064860201b60201c565b6200060160008484846200082e60201b60201c565b62000643576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200063a9062000d06565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620006bb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006b29062000d6c565b60405180910390fd5b620006cc81620009e860201b60201c565b156200070f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007069062000d28565b60405180910390fd5b620007236000838362000a5460201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000775919062000dff565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60006200085c8473ffffffffffffffffffffffffffffffffffffffff1662000a5960201b620026ba1760201c565b15620009db578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026200088e6200022060201b60201c565b8786866040518563ffffffff1660e01b8152600401620008b2949392919062000cb2565b602060405180830381600087803b158015620008cd57600080fd5b505af19250505080156200090157506040513d601f19601f82011682018060405250810190620008fe919062000b33565b60015b6200098a573d806000811462000934576040519150601f19603f3d011682016040523d82523d6000602084013e62000939565b606091505b5060008151141562000982576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009799062000d06565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050620009e0565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b600080823b905060008111915050919050565b82805462000a7a9062000efc565b90600052602060002090601f01602090048101928262000a9e576000855562000aea565b82601f1062000ab957805160ff191683800117855562000aea565b8280016001018555821562000aea579182015b8281111562000ae957825182559160200191906001019062000acc565b5b50905062000af9919062000afd565b5090565b5b8082111562000b1857600081600090555060010162000afe565b5090565b60008151905062000b2d8162001110565b92915050565b60006020828403121562000b4c5762000b4b62000fde565b5b600062000b5c8482850162000b1c565b91505092915050565b62000b708162000e5c565b82525050565b600062000b838262000dd2565b62000b8f818562000ddd565b935062000ba181856020860162000ec6565b62000bac8162000fe3565b840191505092915050565b600062000bc660328362000dee565b915062000bd38262000ff4565b604082019050919050565b600062000bed601c8362000dee565b915062000bfa8262001043565b602082019050919050565b600062000c1460148362000dee565b915062000c21826200106c565b602082019050919050565b600062000c3b60208362000dee565b915062000c488262001095565b602082019050919050565b600062000c6260208362000dee565b915062000c6f82620010be565b602082019050919050565b600062000c8960148362000dee565b915062000c9682620010e7565b602082019050919050565b62000cac8162000ebc565b82525050565b600060808201905062000cc9600083018762000b65565b62000cd8602083018662000b65565b62000ce7604083018562000ca1565b818103606083015262000cfb818462000b76565b905095945050505050565b6000602082019050818103600083015262000d218162000bb7565b9050919050565b6000602082019050818103600083015262000d438162000bde565b9050919050565b6000602082019050818103600083015262000d658162000c05565b9050919050565b6000602082019050818103600083015262000d878162000c2c565b9050919050565b6000602082019050818103600083015262000da98162000c53565b9050919050565b6000602082019050818103600083015262000dcb8162000c7a565b9050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600062000e0c8262000ebc565b915062000e198362000ebc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000e515762000e5062000f80565b5b828201905092915050565b600062000e698262000e9c565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562000ee657808201518184015260208101905062000ec9565b8381111562000ef6576000848401525b50505050565b6000600282049050600182168062000f1557607f821691505b6020821081141562000f2c5762000f2b62000faf565b5b50919050565b600062000f3f8262000ebc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562000f755762000f7462000f80565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b6200111b8162000e70565b81146200112757600080fd5b50565b614da5806200113a6000396000f3fe6080604052600436106102935760003560e01c806370a082311161015a578063a45ba8e7116100c1578063d936547e1161007a578063d936547e146109c0578063e0a80853146109fd578063e985e9c514610a26578063efbd73f414610a63578063f2fde38b14610a8c578063fafe84d214610ab557610293565b8063a45ba8e7146108b0578063b071401b146108db578063b88d4fde14610904578063c87b56dd1461092d578063d4ab1db51461096a578063d5abeb011461099557610293565b80638c770067116101135780638c7700671461079e5780638da5cb5b146107c957806394354fd0146107f457806395d89b411461081f57806396330b5f1461084a578063a22cb4651461088757610293565b806370a08231146106b1578063715018a6146106ee5780637ec4a65914610705578063811d24371461072e5780638283f30b14610757578063868ff4a21461078257610293565b806333949348116101fe5780634fdd43cb116101b75780634fdd43cb1461059f57806351830227146105c85780635503a0e8146105f357806362b99ad41461061e5780636352211e1461064957806368abfea91461068657610293565b806333949348146104a557806333d9d5fd146104ce5780633ccfd60b146104f957806342842e0e14610510578063438b6300146105395780634a4c560d1461057657610293565b806316ba10e01161025057806316ba10e0146103ba57806318160ddd146103e357806323b872dd1461040e5780632db11544146104375780633018f54f1461045357806330cc7ae01461047c57610293565b8063013218581461029857806301ffc9a7146102c357806306fdde0314610300578063081812fc1461032b578063095ea7b3146103685780630d94092e14610391575b600080fd5b3480156102a457600080fd5b506102ad610af2565b6040516102ba919061427a565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e5919061381f565b610b39565b6040516102f79190613f3d565b60405180910390f35b34801561030c57600080fd5b50610315610c1b565b6040516103229190613f58565b60405180910390f35b34801561033757600080fd5b50610352600480360381019061034d91906138c2565b610cad565b60405161035f9190613eb4565b60405180910390f35b34801561037457600080fd5b5061038f600480360381019061038a91906137b2565b610d32565b005b34801561039d57600080fd5b506103b860048036038101906103b391906137f2565b610e4a565b005b3480156103c657600080fd5b506103e160048036038101906103dc9190613879565b610ee3565b005b3480156103ef57600080fd5b506103f8610f79565b604051610405919061427a565b60405180910390f35b34801561041a57600080fd5b506104356004803603810190610430919061369c565b610f8a565b005b610451600480360381019061044c91906138c2565b610fea565b005b34801561045f57600080fd5b5061047a600480360381019061047591906138c2565b611228565b005b34801561048857600080fd5b506104a3600480360381019061049e919061362f565b6112ae565b005b3480156104b157600080fd5b506104cc60048036038101906104c791906137f2565b611385565b005b3480156104da57600080fd5b506104e361141e565b6040516104f09190613f3d565b60405180910390f35b34801561050557600080fd5b5061050e611431565b005b34801561051c57600080fd5b506105376004803603810190610532919061369c565b61152d565b005b34801561054557600080fd5b50610560600480360381019061055b919061362f565b61154d565b60405161056d9190613f1b565b60405180910390f35b34801561058257600080fd5b5061059d6004803603810190610598919061362f565b611658565b005b3480156105ab57600080fd5b506105c660048036038101906105c19190613879565b61172f565b005b3480156105d457600080fd5b506105dd6117c5565b6040516105ea9190613f3d565b60405180910390f35b3480156105ff57600080fd5b506106086117d8565b6040516106159190613f58565b60405180910390f35b34801561062a57600080fd5b50610633611866565b6040516106409190613f58565b60405180910390f35b34801561065557600080fd5b50610670600480360381019061066b91906138c2565b6118f4565b60405161067d9190613eb4565b60405180910390f35b34801561069257600080fd5b5061069b6119a6565b6040516106a89190613f3d565b60405180910390f35b3480156106bd57600080fd5b506106d860048036038101906106d3919061362f565b6119b9565b6040516106e5919061427a565b60405180910390f35b3480156106fa57600080fd5b50610703611a71565b005b34801561071157600080fd5b5061072c60048036038101906107279190613879565b611af9565b005b34801561073a57600080fd5b50610755600480360381019061075091906138c2565b611b8f565b005b34801561076357600080fd5b5061076c611c15565b604051610779919061427a565b60405180910390f35b61079c600480360381019061079791906138c2565b611c5c565b005b3480156107aa57600080fd5b506107b3611f26565b6040516107c0919061427a565b60405180910390f35b3480156107d557600080fd5b506107de611f2c565b6040516107eb9190613eb4565b60405180910390f35b34801561080057600080fd5b50610809611f56565b604051610816919061427a565b60405180910390f35b34801561082b57600080fd5b50610834611f5c565b6040516108419190613f58565b60405180910390f35b34801561085657600080fd5b50610871600480360381019061086c919061362f565b611fee565b60405161087e919061427a565b60405180910390f35b34801561089357600080fd5b506108ae60048036038101906108a99190613772565b612006565b005b3480156108bc57600080fd5b506108c561201c565b6040516108d29190613f58565b60405180910390f35b3480156108e757600080fd5b5061090260048036038101906108fd91906138c2565b6120aa565b005b34801561091057600080fd5b5061092b600480360381019061092691906136ef565b612130565b005b34801561093957600080fd5b50610954600480360381019061094f91906138c2565b612192565b6040516109619190613f58565b60405180910390f35b34801561097657600080fd5b5061097f6122f7565b60405161098c919061427a565b60405180910390f35b3480156109a157600080fd5b506109aa6122fd565b6040516109b7919061427a565b60405180910390f35b3480156109cc57600080fd5b506109e760048036038101906109e2919061362f565b612303565b6040516109f49190613f3d565b60405180910390f35b348015610a0957600080fd5b50610a246004803603810190610a1f91906137f2565b612323565b005b348015610a3257600080fd5b50610a4d6004803603810190610a48919061365c565b6123bc565b604051610a5a9190613f3d565b60405180910390f35b348015610a6f57600080fd5b50610a8a6004803603810190610a8591906138ef565b612450565b005b348015610a9857600080fd5b50610ab36004803603810190610aae919061362f565b612586565b005b348015610ac157600080fd5b50610adc6004803603810190610ad7919061362f565b61267e565b604051610ae9919061427a565b60405180910390f35b6000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610c0457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c145750610c13826126cd565b5b9050919050565b606060008054610c2a90614583565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5690614583565b8015610ca35780601f10610c7857610100808354040283529160200191610ca3565b820191906000526020600020905b815481529060010190602001808311610c8657829003601f168201915b5050505050905090565b6000610cb882612737565b610cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cee9061413a565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d3d826118f4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da5906141da565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610dcd6127a3565b73ffffffffffffffffffffffffffffffffffffffff161480610dfc5750610dfb81610df66127a3565b6123bc565b5b610e3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e329061409a565b60405180910390fd5b610e4583836127ab565b505050565b610e526127a3565b73ffffffffffffffffffffffffffffffffffffffff16610e70611f2c565b73ffffffffffffffffffffffffffffffffffffffff1614610ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebd9061415a565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b610eeb6127a3565b73ffffffffffffffffffffffffffffffffffffffff16610f09611f2c565b73ffffffffffffffffffffffffffffffffffffffff1614610f5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f569061415a565b60405180910390fd5b8060099080519060200190610f75929190613443565b5050565b6000610f856007612696565b905090565b610f9b610f956127a3565b82612864565b610fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd19061423a565b60405180910390fd5b610fe5838383612942565b505050565b80600081118015610ffd5750600e548111155b61103c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103390613ffa565b60405180910390fd5b600d548161104a6007612696565b61105491906143b8565b1115611095576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108c9061421a565b60405180910390fd5b600f60019054906101000a900460ff16156110e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dc906141fa565b60405180910390fd5b81600b546110f3919061443f565b341015611135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112c9061425a565b60405180910390fd5b60115482601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461118391906143b8565b11156111c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bb906140fa565b60405180910390fd5b6111ce3383612b9e565b81601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461121d91906143b8565b925050819055505050565b6112306127a3565b73ffffffffffffffffffffffffffffffffffffffff1661124e611f2c565b73ffffffffffffffffffffffffffffffffffffffff16146112a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129b9061415a565b60405180910390fd5b80600c8190555050565b6112b66127a3565b73ffffffffffffffffffffffffffffffffffffffff166112d4611f2c565b73ffffffffffffffffffffffffffffffffffffffff161461132a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113219061415a565b60405180910390fd5b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61138d6127a3565b73ffffffffffffffffffffffffffffffffffffffff166113ab611f2c565b73ffffffffffffffffffffffffffffffffffffffff1614611401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f89061415a565b60405180910390fd5b80600f60016101000a81548160ff02191690831515021790555050565b600f60019054906101000a900460ff1681565b6114396127a3565b73ffffffffffffffffffffffffffffffffffffffff16611457611f2c565b73ffffffffffffffffffffffffffffffffffffffff16146114ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a49061415a565b60405180910390fd5b60006114b7611f2c565b73ffffffffffffffffffffffffffffffffffffffff16476040516114da90613e9f565b60006040518083038185875af1925050503d8060008114611517576040519150601f19603f3d011682016040523d82523d6000602084013e61151c565b606091505b505090508061152a57600080fd5b50565b61154883838360405180602001604052806000815250612130565b505050565b6060600061155a836119b9565b905060008167ffffffffffffffff8111156115785761157761471c565b5b6040519080825280602002602001820160405280156115a65781602001602082028036833780820191505090505b50905060006001905060005b83811080156115c35750600d548211155b1561164c5760006115d3836118f4565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611638578284838151811061161d5761161c6146ed565b5b6020026020010181815250508180611634906145e6565b9250505b8280611643906145e6565b935050506115b2565b82945050505050919050565b6116606127a3565b73ffffffffffffffffffffffffffffffffffffffff1661167e611f2c565b73ffffffffffffffffffffffffffffffffffffffff16146116d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cb9061415a565b60405180910390fd5b6001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6117376127a3565b73ffffffffffffffffffffffffffffffffffffffff16611755611f2c565b73ffffffffffffffffffffffffffffffffffffffff16146117ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a29061415a565b60405180910390fd5b80600a90805190602001906117c1929190613443565b5050565b600f60029054906101000a900460ff1681565b600980546117e590614583565b80601f016020809104026020016040519081016040528092919081815260200182805461181190614583565b801561185e5780601f106118335761010080835404028352916020019161185e565b820191906000526020600020905b81548152906001019060200180831161184157829003601f168201915b505050505081565b6008805461187390614583565b80601f016020809104026020016040519081016040528092919081815260200182805461189f90614583565b80156118ec5780601f106118c1576101008083540402835291602001916118ec565b820191906000526020600020905b8154815290600101906020018083116118cf57829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561199d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611994906140da565b60405180910390fd5b80915050919050565b600f60009054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a21906140ba565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a796127a3565b73ffffffffffffffffffffffffffffffffffffffff16611a97611f2c565b73ffffffffffffffffffffffffffffffffffffffff1614611aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae49061415a565b60405180910390fd5b611af76000612bde565b565b611b016127a3565b73ffffffffffffffffffffffffffffffffffffffff16611b1f611f2c565b73ffffffffffffffffffffffffffffffffffffffff1614611b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6c9061415a565b60405180910390fd5b8060089080519060200190611b8b929190613443565b5050565b611b976127a3565b73ffffffffffffffffffffffffffffffffffffffff16611bb5611f2c565b73ffffffffffffffffffffffffffffffffffffffff1614611c0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c029061415a565b60405180910390fd5b80600b8190555050565b6000601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b80600081118015611c6f5750600e548111155b611cae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca590613ffa565b60405180910390fd5b600d5481611cbc6007612696565b611cc691906143b8565b1115611d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfe9061421a565b60405180910390fd5b600f60009054906101000a900460ff1615611d57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4e9061405a565b60405180910390fd5b81600c54611d65919061443f565b341015611da7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9e9061425a565b60405180910390fd5b601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611e33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2a9061417a565b60405180910390fd5b60105482601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e8191906143b8565b1115611ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb990613f7a565b60405180910390fd5b611ecc3383612b9e565b81601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f1b91906143b8565b925050819055505050565b600b5481565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e5481565b606060018054611f6b90614583565b80601f0160208091040260200160405190810160405280929190818152602001828054611f9790614583565b8015611fe45780601f10611fb957610100808354040283529160200191611fe4565b820191906000526020600020905b815481529060010190602001808311611fc757829003601f168201915b5050505050905090565b60136020528060005260406000206000915090505481565b6120186120116127a3565b8383612ca4565b5050565b600a805461202990614583565b80601f016020809104026020016040519081016040528092919081815260200182805461205590614583565b80156120a25780601f10612077576101008083540402835291602001916120a2565b820191906000526020600020905b81548152906001019060200180831161208557829003601f168201915b505050505081565b6120b26127a3565b73ffffffffffffffffffffffffffffffffffffffff166120d0611f2c565b73ffffffffffffffffffffffffffffffffffffffff1614612126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211d9061415a565b60405180910390fd5b80600e8190555050565b61214161213b6127a3565b83612864565b612180576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121779061423a565b60405180910390fd5b61218c84848484612e11565b50505050565b606061219d82612737565b6121dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d3906141ba565b60405180910390fd5b60001515600f60029054906101000a900460ff161515141561228a57600a805461220590614583565b80601f016020809104026020016040519081016040528092919081815260200182805461223190614583565b801561227e5780601f106122535761010080835404028352916020019161227e565b820191906000526020600020905b81548152906001019060200180831161226157829003601f168201915b505050505090506122f2565b6000612294612e6d565b905060008151116122b457604051806020016040528060008152506122ee565b806122ca6001856122c59190614499565b612eff565b60096040516020016122de93929190613e6e565b6040516020818303038152906040525b9150505b919050565b600c5481565b600d5481565b60146020528060005260406000206000915054906101000a900460ff1681565b61232b6127a3565b73ffffffffffffffffffffffffffffffffffffffff16612349611f2c565b73ffffffffffffffffffffffffffffffffffffffff161461239f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123969061415a565b60405180910390fd5b80600f60026101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b816000811180156124635750600e548111155b6124a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249990613ffa565b60405180910390fd5b600d54816124b06007612696565b6124ba91906143b8565b11156124fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f29061421a565b60405180910390fd5b6125036127a3565b73ffffffffffffffffffffffffffffffffffffffff16612521611f2c565b73ffffffffffffffffffffffffffffffffffffffff1614612577576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256e9061415a565b60405180910390fd5b6125818284612b9e565b505050565b61258e6127a3565b73ffffffffffffffffffffffffffffffffffffffff166125ac611f2c565b73ffffffffffffffffffffffffffffffffffffffff1614612602576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f99061415a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266990613fba565b60405180910390fd5b61267b81612bde565b50565b60126020528060005260406000206000915090505481565b600081600001549050919050565b6001816000016000828254019250508190555050565b600080823b905060008111915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661281e836118f4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061286f82612737565b6128ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a59061407a565b60405180910390fd5b60006128b9836118f4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061292857508373ffffffffffffffffffffffffffffffffffffffff1661291084610cad565b73ffffffffffffffffffffffffffffffffffffffff16145b80612939575061293881856123bc565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612962826118f4565b73ffffffffffffffffffffffffffffffffffffffff16146129b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129af9061419a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1f9061401a565b60405180910390fd5b612a33838383613060565b612a3e6000826127ab565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a8e9190614499565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ae591906143b8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60005b81811015612bd957612bb360076126a4565b612bc683612bc16007612696565b613065565b8080612bd1906145e6565b915050612ba1565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0a9061403a565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612e049190613f3d565b60405180910390a3505050565b612e1c848484612942565b612e2884848484613083565b612e67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5e90613f9a565b60405180910390fd5b50505050565b606060088054612e7c90614583565b80601f0160208091040260200160405190810160405280929190818152602001828054612ea890614583565b8015612ef55780601f10612eca57610100808354040283529160200191612ef5565b820191906000526020600020905b815481529060010190602001808311612ed857829003601f168201915b5050505050905090565b60606000821415612f47576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061305b565b600082905060005b60008214612f79578080612f62906145e6565b915050600a82612f72919061440e565b9150612f4f565b60008167ffffffffffffffff811115612f9557612f9461471c565b5b6040519080825280601f01601f191660200182016040528015612fc75781602001600182028036833780820191505090505b5090505b6000851461305457600182612fe09190614499565b9150600a85612fef919061462f565b6030612ffb91906143b8565b60f81b818381518110613011576130106146ed565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561304d919061440e565b9450612fcb565b8093505050505b919050565b505050565b61307f82826040518060200160405280600081525061321a565b5050565b60006130a48473ffffffffffffffffffffffffffffffffffffffff166126ba565b1561320d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026130cd6127a3565b8786866040518563ffffffff1660e01b81526004016130ef9493929190613ecf565b602060405180830381600087803b15801561310957600080fd5b505af192505050801561313a57506040513d601f19601f82011682018060405250810190613137919061384c565b60015b6131bd573d806000811461316a576040519150601f19603f3d011682016040523d82523d6000602084013e61316f565b606091505b506000815114156131b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ac90613f9a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613212565b600190505b949350505050565b6132248383613275565b6132316000848484613083565b613270576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326790613f9a565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132dc9061411a565b60405180910390fd5b6132ee81612737565b1561332e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332590613fda565b60405180910390fd5b61333a60008383613060565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461338a91906143b8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b82805461344f90614583565b90600052602060002090601f01602090048101928261347157600085556134b8565b82601f1061348a57805160ff19168380011785556134b8565b828001600101855582156134b8579182015b828111156134b757825182559160200191906001019061349c565b5b5090506134c591906134c9565b5090565b5b808211156134e25760008160009055506001016134ca565b5090565b60006134f96134f4846142ba565b614295565b90508281526020810184848401111561351557613514614750565b5b613520848285614541565b509392505050565b600061353b613536846142eb565b614295565b90508281526020810184848401111561355757613556614750565b5b613562848285614541565b509392505050565b60008135905061357981614d13565b92915050565b60008135905061358e81614d2a565b92915050565b6000813590506135a381614d41565b92915050565b6000815190506135b881614d41565b92915050565b600082601f8301126135d3576135d261474b565b5b81356135e38482602086016134e6565b91505092915050565b600082601f8301126136015761360061474b565b5b8135613611848260208601613528565b91505092915050565b60008135905061362981614d58565b92915050565b6000602082840312156136455761364461475a565b5b60006136538482850161356a565b91505092915050565b600080604083850312156136735761367261475a565b5b60006136818582860161356a565b92505060206136928582860161356a565b9150509250929050565b6000806000606084860312156136b5576136b461475a565b5b60006136c38682870161356a565b93505060206136d48682870161356a565b92505060406136e58682870161361a565b9150509250925092565b600080600080608085870312156137095761370861475a565b5b60006137178782880161356a565b94505060206137288782880161356a565b93505060406137398782880161361a565b925050606085013567ffffffffffffffff81111561375a57613759614755565b5b613766878288016135be565b91505092959194509250565b600080604083850312156137895761378861475a565b5b60006137978582860161356a565b92505060206137a88582860161357f565b9150509250929050565b600080604083850312156137c9576137c861475a565b5b60006137d78582860161356a565b92505060206137e88582860161361a565b9150509250929050565b6000602082840312156138085761380761475a565b5b60006138168482850161357f565b91505092915050565b6000602082840312156138355761383461475a565b5b600061384384828501613594565b91505092915050565b6000602082840312156138625761386161475a565b5b6000613870848285016135a9565b91505092915050565b60006020828403121561388f5761388e61475a565b5b600082013567ffffffffffffffff8111156138ad576138ac614755565b5b6138b9848285016135ec565b91505092915050565b6000602082840312156138d8576138d761475a565b5b60006138e68482850161361a565b91505092915050565b600080604083850312156139065761390561475a565b5b60006139148582860161361a565b92505060206139258582860161356a565b9150509250929050565b600061393b8383613e50565b60208301905092915050565b613950816144cd565b82525050565b600061396182614341565b61396b818561436f565b93506139768361431c565b8060005b838110156139a757815161398e888261392f565b975061399983614362565b92505060018101905061397a565b5085935050505092915050565b6139bd816144df565b82525050565b60006139ce8261434c565b6139d88185614380565b93506139e8818560208601614550565b6139f18161475f565b840191505092915050565b6000613a0782614357565b613a11818561439c565b9350613a21818560208601614550565b613a2a8161475f565b840191505092915050565b6000613a4082614357565b613a4a81856143ad565b9350613a5a818560208601614550565b80840191505092915050565b60008154613a7381614583565b613a7d81866143ad565b94506001821660008114613a985760018114613aa957613adc565b60ff19831686528186019350613adc565b613ab28561432c565b60005b83811015613ad457815481890152600182019150602081019050613ab5565b838801955050505b50505092915050565b6000613af260168361439c565b9150613afd82614770565b602082019050919050565b6000613b1560328361439c565b9150613b2082614799565b604082019050919050565b6000613b3860268361439c565b9150613b43826147e8565b604082019050919050565b6000613b5b601c8361439c565b9150613b6682614837565b602082019050919050565b6000613b7e60148361439c565b9150613b8982614860565b602082019050919050565b6000613ba160248361439c565b9150613bac82614889565b604082019050919050565b6000613bc460198361439c565b9150613bcf826148d8565b602082019050919050565b6000613be760198361439c565b9150613bf282614901565b602082019050919050565b6000613c0a602c8361439c565b9150613c158261492a565b604082019050919050565b6000613c2d60388361439c565b9150613c3882614979565b604082019050919050565b6000613c50602a8361439c565b9150613c5b826149c8565b604082019050919050565b6000613c7360298361439c565b9150613c7e82614a17565b604082019050919050565b6000613c96601a8361439c565b9150613ca182614a66565b602082019050919050565b6000613cb960208361439c565b9150613cc482614a8f565b602082019050919050565b6000613cdc602c8361439c565b9150613ce782614ab8565b604082019050919050565b6000613cff60208361439c565b9150613d0a82614b07565b602082019050919050565b6000613d22601a8361439c565b9150613d2d82614b30565b602082019050919050565b6000613d4560298361439c565b9150613d5082614b59565b604082019050919050565b6000613d68602f8361439c565b9150613d7382614ba8565b604082019050919050565b6000613d8b60218361439c565b9150613d9682614bf7565b604082019050919050565b6000613dae60168361439c565b9150613db982614c46565b602082019050919050565b6000613dd1600083614391565b9150613ddc82614c6f565b600082019050919050565b6000613df460148361439c565b9150613dff82614c72565b602082019050919050565b6000613e1760318361439c565b9150613e2282614c9b565b604082019050919050565b6000613e3a60138361439c565b9150613e4582614cea565b602082019050919050565b613e5981614537565b82525050565b613e6881614537565b82525050565b6000613e7a8286613a35565b9150613e868285613a35565b9150613e928284613a66565b9150819050949350505050565b6000613eaa82613dc4565b9150819050919050565b6000602082019050613ec96000830184613947565b92915050565b6000608082019050613ee46000830187613947565b613ef16020830186613947565b613efe6040830185613e5f565b8181036060830152613f1081846139c3565b905095945050505050565b60006020820190508181036000830152613f358184613956565b905092915050565b6000602082019050613f5260008301846139b4565b92915050565b60006020820190508181036000830152613f7281846139fc565b905092915050565b60006020820190508181036000830152613f9381613ae5565b9050919050565b60006020820190508181036000830152613fb381613b08565b9050919050565b60006020820190508181036000830152613fd381613b2b565b9050919050565b60006020820190508181036000830152613ff381613b4e565b9050919050565b6000602082019050818103600083015261401381613b71565b9050919050565b6000602082019050818103600083015261403381613b94565b9050919050565b6000602082019050818103600083015261405381613bb7565b9050919050565b6000602082019050818103600083015261407381613bda565b9050919050565b6000602082019050818103600083015261409381613bfd565b9050919050565b600060208201905081810360008301526140b381613c20565b9050919050565b600060208201905081810360008301526140d381613c43565b9050919050565b600060208201905081810360008301526140f381613c66565b9050919050565b6000602082019050818103600083015261411381613c89565b9050919050565b6000602082019050818103600083015261413381613cac565b9050919050565b6000602082019050818103600083015261415381613ccf565b9050919050565b6000602082019050818103600083015261417381613cf2565b9050919050565b6000602082019050818103600083015261419381613d15565b9050919050565b600060208201905081810360008301526141b381613d38565b9050919050565b600060208201905081810360008301526141d381613d5b565b9050919050565b600060208201905081810360008301526141f381613d7e565b9050919050565b6000602082019050818103600083015261421381613da1565b9050919050565b6000602082019050818103600083015261423381613de7565b9050919050565b6000602082019050818103600083015261425381613e0a565b9050919050565b6000602082019050818103600083015261427381613e2d565b9050919050565b600060208201905061428f6000830184613e5f565b92915050565b600061429f6142b0565b90506142ab82826145b5565b919050565b6000604051905090565b600067ffffffffffffffff8211156142d5576142d461471c565b5b6142de8261475f565b9050602081019050919050565b600067ffffffffffffffff8211156143065761430561471c565b5b61430f8261475f565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006143c382614537565b91506143ce83614537565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561440357614402614660565b5b828201905092915050565b600061441982614537565b915061442483614537565b9250826144345761443361468f565b5b828204905092915050565b600061444a82614537565b915061445583614537565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561448e5761448d614660565b5b828202905092915050565b60006144a482614537565b91506144af83614537565b9250828210156144c2576144c1614660565b5b828203905092915050565b60006144d882614517565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561456e578082015181840152602081019050614553565b8381111561457d576000848401525b50505050565b6000600282049050600182168061459b57607f821691505b602082108114156145af576145ae6146be565b5b50919050565b6145be8261475f565b810181811067ffffffffffffffff821117156145dd576145dc61471c565b5b80604052505050565b60006145f182614537565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561462457614623614660565b5b600182019050919050565b600061463a82614537565b915061464583614537565b9250826146555761465461468f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f7072656d696e74206c696d697420657863656564656400000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5072656d696e7420706175736564206973207061757365642100000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f7075626c6963206d696e74206c696d6974206578636565646564000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f73656e646572206973206e6f7420696e2077686974656c697374000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f5075626c6963206d696e74206973207061757365642100000000000000000000600082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b614d1c816144cd565b8114614d2757600080fd5b50565b614d33816144df565b8114614d3e57600080fd5b50565b614d4a816144eb565b8114614d5557600080fd5b50565b614d6181614537565b8114614d6c57600080fd5b5056fea2646970667358221220e90dbb5ac03cb15dd1e3c969d0aa92557c8073d2369464175c581d44926a1e3e64736f6c6343000807003368747470733a2f2f75657461722e6d7970696e6174612e636c6f75642f697066732f516d576141796a6a535032554b48415262555157616b7043515139613764737a776857665a506643576d48575a7568747470733a2f2f75657461722e6d7970696e6174612e636c6f75642f697066732f516d51357a3334767775707972453572357657364556775a3243787250536b666e694b4b5a7957555357477048552f
Deployed Bytecode
0x6080604052600436106102935760003560e01c806370a082311161015a578063a45ba8e7116100c1578063d936547e1161007a578063d936547e146109c0578063e0a80853146109fd578063e985e9c514610a26578063efbd73f414610a63578063f2fde38b14610a8c578063fafe84d214610ab557610293565b8063a45ba8e7146108b0578063b071401b146108db578063b88d4fde14610904578063c87b56dd1461092d578063d4ab1db51461096a578063d5abeb011461099557610293565b80638c770067116101135780638c7700671461079e5780638da5cb5b146107c957806394354fd0146107f457806395d89b411461081f57806396330b5f1461084a578063a22cb4651461088757610293565b806370a08231146106b1578063715018a6146106ee5780637ec4a65914610705578063811d24371461072e5780638283f30b14610757578063868ff4a21461078257610293565b806333949348116101fe5780634fdd43cb116101b75780634fdd43cb1461059f57806351830227146105c85780635503a0e8146105f357806362b99ad41461061e5780636352211e1461064957806368abfea91461068657610293565b806333949348146104a557806333d9d5fd146104ce5780633ccfd60b146104f957806342842e0e14610510578063438b6300146105395780634a4c560d1461057657610293565b806316ba10e01161025057806316ba10e0146103ba57806318160ddd146103e357806323b872dd1461040e5780632db11544146104375780633018f54f1461045357806330cc7ae01461047c57610293565b8063013218581461029857806301ffc9a7146102c357806306fdde0314610300578063081812fc1461032b578063095ea7b3146103685780630d94092e14610391575b600080fd5b3480156102a457600080fd5b506102ad610af2565b6040516102ba919061427a565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e5919061381f565b610b39565b6040516102f79190613f3d565b60405180910390f35b34801561030c57600080fd5b50610315610c1b565b6040516103229190613f58565b60405180910390f35b34801561033757600080fd5b50610352600480360381019061034d91906138c2565b610cad565b60405161035f9190613eb4565b60405180910390f35b34801561037457600080fd5b5061038f600480360381019061038a91906137b2565b610d32565b005b34801561039d57600080fd5b506103b860048036038101906103b391906137f2565b610e4a565b005b3480156103c657600080fd5b506103e160048036038101906103dc9190613879565b610ee3565b005b3480156103ef57600080fd5b506103f8610f79565b604051610405919061427a565b60405180910390f35b34801561041a57600080fd5b506104356004803603810190610430919061369c565b610f8a565b005b610451600480360381019061044c91906138c2565b610fea565b005b34801561045f57600080fd5b5061047a600480360381019061047591906138c2565b611228565b005b34801561048857600080fd5b506104a3600480360381019061049e919061362f565b6112ae565b005b3480156104b157600080fd5b506104cc60048036038101906104c791906137f2565b611385565b005b3480156104da57600080fd5b506104e361141e565b6040516104f09190613f3d565b60405180910390f35b34801561050557600080fd5b5061050e611431565b005b34801561051c57600080fd5b506105376004803603810190610532919061369c565b61152d565b005b34801561054557600080fd5b50610560600480360381019061055b919061362f565b61154d565b60405161056d9190613f1b565b60405180910390f35b34801561058257600080fd5b5061059d6004803603810190610598919061362f565b611658565b005b3480156105ab57600080fd5b506105c660048036038101906105c19190613879565b61172f565b005b3480156105d457600080fd5b506105dd6117c5565b6040516105ea9190613f3d565b60405180910390f35b3480156105ff57600080fd5b506106086117d8565b6040516106159190613f58565b60405180910390f35b34801561062a57600080fd5b50610633611866565b6040516106409190613f58565b60405180910390f35b34801561065557600080fd5b50610670600480360381019061066b91906138c2565b6118f4565b60405161067d9190613eb4565b60405180910390f35b34801561069257600080fd5b5061069b6119a6565b6040516106a89190613f3d565b60405180910390f35b3480156106bd57600080fd5b506106d860048036038101906106d3919061362f565b6119b9565b6040516106e5919061427a565b60405180910390f35b3480156106fa57600080fd5b50610703611a71565b005b34801561071157600080fd5b5061072c60048036038101906107279190613879565b611af9565b005b34801561073a57600080fd5b50610755600480360381019061075091906138c2565b611b8f565b005b34801561076357600080fd5b5061076c611c15565b604051610779919061427a565b60405180910390f35b61079c600480360381019061079791906138c2565b611c5c565b005b3480156107aa57600080fd5b506107b3611f26565b6040516107c0919061427a565b60405180910390f35b3480156107d557600080fd5b506107de611f2c565b6040516107eb9190613eb4565b60405180910390f35b34801561080057600080fd5b50610809611f56565b604051610816919061427a565b60405180910390f35b34801561082b57600080fd5b50610834611f5c565b6040516108419190613f58565b60405180910390f35b34801561085657600080fd5b50610871600480360381019061086c919061362f565b611fee565b60405161087e919061427a565b60405180910390f35b34801561089357600080fd5b506108ae60048036038101906108a99190613772565b612006565b005b3480156108bc57600080fd5b506108c561201c565b6040516108d29190613f58565b60405180910390f35b3480156108e757600080fd5b5061090260048036038101906108fd91906138c2565b6120aa565b005b34801561091057600080fd5b5061092b600480360381019061092691906136ef565b612130565b005b34801561093957600080fd5b50610954600480360381019061094f91906138c2565b612192565b6040516109619190613f58565b60405180910390f35b34801561097657600080fd5b5061097f6122f7565b60405161098c919061427a565b60405180910390f35b3480156109a157600080fd5b506109aa6122fd565b6040516109b7919061427a565b60405180910390f35b3480156109cc57600080fd5b506109e760048036038101906109e2919061362f565b612303565b6040516109f49190613f3d565b60405180910390f35b348015610a0957600080fd5b50610a246004803603810190610a1f91906137f2565b612323565b005b348015610a3257600080fd5b50610a4d6004803603810190610a48919061365c565b6123bc565b604051610a5a9190613f3d565b60405180910390f35b348015610a6f57600080fd5b50610a8a6004803603810190610a8591906138ef565b612450565b005b348015610a9857600080fd5b50610ab36004803603810190610aae919061362f565b612586565b005b348015610ac157600080fd5b50610adc6004803603810190610ad7919061362f565b61267e565b604051610ae9919061427a565b60405180910390f35b6000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610c0457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c145750610c13826126cd565b5b9050919050565b606060008054610c2a90614583565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5690614583565b8015610ca35780601f10610c7857610100808354040283529160200191610ca3565b820191906000526020600020905b815481529060010190602001808311610c8657829003601f168201915b5050505050905090565b6000610cb882612737565b610cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cee9061413a565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d3d826118f4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da5906141da565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610dcd6127a3565b73ffffffffffffffffffffffffffffffffffffffff161480610dfc5750610dfb81610df66127a3565b6123bc565b5b610e3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e329061409a565b60405180910390fd5b610e4583836127ab565b505050565b610e526127a3565b73ffffffffffffffffffffffffffffffffffffffff16610e70611f2c565b73ffffffffffffffffffffffffffffffffffffffff1614610ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebd9061415a565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b610eeb6127a3565b73ffffffffffffffffffffffffffffffffffffffff16610f09611f2c565b73ffffffffffffffffffffffffffffffffffffffff1614610f5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f569061415a565b60405180910390fd5b8060099080519060200190610f75929190613443565b5050565b6000610f856007612696565b905090565b610f9b610f956127a3565b82612864565b610fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd19061423a565b60405180910390fd5b610fe5838383612942565b505050565b80600081118015610ffd5750600e548111155b61103c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103390613ffa565b60405180910390fd5b600d548161104a6007612696565b61105491906143b8565b1115611095576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108c9061421a565b60405180910390fd5b600f60019054906101000a900460ff16156110e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dc906141fa565b60405180910390fd5b81600b546110f3919061443f565b341015611135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112c9061425a565b60405180910390fd5b60115482601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461118391906143b8565b11156111c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bb906140fa565b60405180910390fd5b6111ce3383612b9e565b81601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461121d91906143b8565b925050819055505050565b6112306127a3565b73ffffffffffffffffffffffffffffffffffffffff1661124e611f2c565b73ffffffffffffffffffffffffffffffffffffffff16146112a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129b9061415a565b60405180910390fd5b80600c8190555050565b6112b66127a3565b73ffffffffffffffffffffffffffffffffffffffff166112d4611f2c565b73ffffffffffffffffffffffffffffffffffffffff161461132a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113219061415a565b60405180910390fd5b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61138d6127a3565b73ffffffffffffffffffffffffffffffffffffffff166113ab611f2c565b73ffffffffffffffffffffffffffffffffffffffff1614611401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f89061415a565b60405180910390fd5b80600f60016101000a81548160ff02191690831515021790555050565b600f60019054906101000a900460ff1681565b6114396127a3565b73ffffffffffffffffffffffffffffffffffffffff16611457611f2c565b73ffffffffffffffffffffffffffffffffffffffff16146114ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a49061415a565b60405180910390fd5b60006114b7611f2c565b73ffffffffffffffffffffffffffffffffffffffff16476040516114da90613e9f565b60006040518083038185875af1925050503d8060008114611517576040519150601f19603f3d011682016040523d82523d6000602084013e61151c565b606091505b505090508061152a57600080fd5b50565b61154883838360405180602001604052806000815250612130565b505050565b6060600061155a836119b9565b905060008167ffffffffffffffff8111156115785761157761471c565b5b6040519080825280602002602001820160405280156115a65781602001602082028036833780820191505090505b50905060006001905060005b83811080156115c35750600d548211155b1561164c5760006115d3836118f4565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611638578284838151811061161d5761161c6146ed565b5b6020026020010181815250508180611634906145e6565b9250505b8280611643906145e6565b935050506115b2565b82945050505050919050565b6116606127a3565b73ffffffffffffffffffffffffffffffffffffffff1661167e611f2c565b73ffffffffffffffffffffffffffffffffffffffff16146116d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cb9061415a565b60405180910390fd5b6001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6117376127a3565b73ffffffffffffffffffffffffffffffffffffffff16611755611f2c565b73ffffffffffffffffffffffffffffffffffffffff16146117ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a29061415a565b60405180910390fd5b80600a90805190602001906117c1929190613443565b5050565b600f60029054906101000a900460ff1681565b600980546117e590614583565b80601f016020809104026020016040519081016040528092919081815260200182805461181190614583565b801561185e5780601f106118335761010080835404028352916020019161185e565b820191906000526020600020905b81548152906001019060200180831161184157829003601f168201915b505050505081565b6008805461187390614583565b80601f016020809104026020016040519081016040528092919081815260200182805461189f90614583565b80156118ec5780601f106118c1576101008083540402835291602001916118ec565b820191906000526020600020905b8154815290600101906020018083116118cf57829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561199d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611994906140da565b60405180910390fd5b80915050919050565b600f60009054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a21906140ba565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a796127a3565b73ffffffffffffffffffffffffffffffffffffffff16611a97611f2c565b73ffffffffffffffffffffffffffffffffffffffff1614611aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae49061415a565b60405180910390fd5b611af76000612bde565b565b611b016127a3565b73ffffffffffffffffffffffffffffffffffffffff16611b1f611f2c565b73ffffffffffffffffffffffffffffffffffffffff1614611b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6c9061415a565b60405180910390fd5b8060089080519060200190611b8b929190613443565b5050565b611b976127a3565b73ffffffffffffffffffffffffffffffffffffffff16611bb5611f2c565b73ffffffffffffffffffffffffffffffffffffffff1614611c0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c029061415a565b60405180910390fd5b80600b8190555050565b6000601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b80600081118015611c6f5750600e548111155b611cae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca590613ffa565b60405180910390fd5b600d5481611cbc6007612696565b611cc691906143b8565b1115611d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfe9061421a565b60405180910390fd5b600f60009054906101000a900460ff1615611d57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4e9061405a565b60405180910390fd5b81600c54611d65919061443f565b341015611da7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9e9061425a565b60405180910390fd5b601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611e33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2a9061417a565b60405180910390fd5b60105482601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e8191906143b8565b1115611ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb990613f7a565b60405180910390fd5b611ecc3383612b9e565b81601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f1b91906143b8565b925050819055505050565b600b5481565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e5481565b606060018054611f6b90614583565b80601f0160208091040260200160405190810160405280929190818152602001828054611f9790614583565b8015611fe45780601f10611fb957610100808354040283529160200191611fe4565b820191906000526020600020905b815481529060010190602001808311611fc757829003601f168201915b5050505050905090565b60136020528060005260406000206000915090505481565b6120186120116127a3565b8383612ca4565b5050565b600a805461202990614583565b80601f016020809104026020016040519081016040528092919081815260200182805461205590614583565b80156120a25780601f10612077576101008083540402835291602001916120a2565b820191906000526020600020905b81548152906001019060200180831161208557829003601f168201915b505050505081565b6120b26127a3565b73ffffffffffffffffffffffffffffffffffffffff166120d0611f2c565b73ffffffffffffffffffffffffffffffffffffffff1614612126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211d9061415a565b60405180910390fd5b80600e8190555050565b61214161213b6127a3565b83612864565b612180576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121779061423a565b60405180910390fd5b61218c84848484612e11565b50505050565b606061219d82612737565b6121dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d3906141ba565b60405180910390fd5b60001515600f60029054906101000a900460ff161515141561228a57600a805461220590614583565b80601f016020809104026020016040519081016040528092919081815260200182805461223190614583565b801561227e5780601f106122535761010080835404028352916020019161227e565b820191906000526020600020905b81548152906001019060200180831161226157829003601f168201915b505050505090506122f2565b6000612294612e6d565b905060008151116122b457604051806020016040528060008152506122ee565b806122ca6001856122c59190614499565b612eff565b60096040516020016122de93929190613e6e565b6040516020818303038152906040525b9150505b919050565b600c5481565b600d5481565b60146020528060005260406000206000915054906101000a900460ff1681565b61232b6127a3565b73ffffffffffffffffffffffffffffffffffffffff16612349611f2c565b73ffffffffffffffffffffffffffffffffffffffff161461239f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123969061415a565b60405180910390fd5b80600f60026101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b816000811180156124635750600e548111155b6124a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249990613ffa565b60405180910390fd5b600d54816124b06007612696565b6124ba91906143b8565b11156124fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f29061421a565b60405180910390fd5b6125036127a3565b73ffffffffffffffffffffffffffffffffffffffff16612521611f2c565b73ffffffffffffffffffffffffffffffffffffffff1614612577576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256e9061415a565b60405180910390fd5b6125818284612b9e565b505050565b61258e6127a3565b73ffffffffffffffffffffffffffffffffffffffff166125ac611f2c565b73ffffffffffffffffffffffffffffffffffffffff1614612602576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f99061415a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266990613fba565b60405180910390fd5b61267b81612bde565b50565b60126020528060005260406000206000915090505481565b600081600001549050919050565b6001816000016000828254019250508190555050565b600080823b905060008111915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661281e836118f4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061286f82612737565b6128ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a59061407a565b60405180910390fd5b60006128b9836118f4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061292857508373ffffffffffffffffffffffffffffffffffffffff1661291084610cad565b73ffffffffffffffffffffffffffffffffffffffff16145b80612939575061293881856123bc565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612962826118f4565b73ffffffffffffffffffffffffffffffffffffffff16146129b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129af9061419a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1f9061401a565b60405180910390fd5b612a33838383613060565b612a3e6000826127ab565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a8e9190614499565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ae591906143b8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60005b81811015612bd957612bb360076126a4565b612bc683612bc16007612696565b613065565b8080612bd1906145e6565b915050612ba1565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0a9061403a565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612e049190613f3d565b60405180910390a3505050565b612e1c848484612942565b612e2884848484613083565b612e67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5e90613f9a565b60405180910390fd5b50505050565b606060088054612e7c90614583565b80601f0160208091040260200160405190810160405280929190818152602001828054612ea890614583565b8015612ef55780601f10612eca57610100808354040283529160200191612ef5565b820191906000526020600020905b815481529060010190602001808311612ed857829003601f168201915b5050505050905090565b60606000821415612f47576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061305b565b600082905060005b60008214612f79578080612f62906145e6565b915050600a82612f72919061440e565b9150612f4f565b60008167ffffffffffffffff811115612f9557612f9461471c565b5b6040519080825280601f01601f191660200182016040528015612fc75781602001600182028036833780820191505090505b5090505b6000851461305457600182612fe09190614499565b9150600a85612fef919061462f565b6030612ffb91906143b8565b60f81b818381518110613011576130106146ed565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561304d919061440e565b9450612fcb565b8093505050505b919050565b505050565b61307f82826040518060200160405280600081525061321a565b5050565b60006130a48473ffffffffffffffffffffffffffffffffffffffff166126ba565b1561320d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026130cd6127a3565b8786866040518563ffffffff1660e01b81526004016130ef9493929190613ecf565b602060405180830381600087803b15801561310957600080fd5b505af192505050801561313a57506040513d601f19601f82011682018060405250810190613137919061384c565b60015b6131bd573d806000811461316a576040519150601f19603f3d011682016040523d82523d6000602084013e61316f565b606091505b506000815114156131b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ac90613f9a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613212565b600190505b949350505050565b6132248383613275565b6132316000848484613083565b613270576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326790613f9a565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132dc9061411a565b60405180910390fd5b6132ee81612737565b1561332e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332590613fda565b60405180910390fd5b61333a60008383613060565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461338a91906143b8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b82805461344f90614583565b90600052602060002090601f01602090048101928261347157600085556134b8565b82601f1061348a57805160ff19168380011785556134b8565b828001600101855582156134b8579182015b828111156134b757825182559160200191906001019061349c565b5b5090506134c591906134c9565b5090565b5b808211156134e25760008160009055506001016134ca565b5090565b60006134f96134f4846142ba565b614295565b90508281526020810184848401111561351557613514614750565b5b613520848285614541565b509392505050565b600061353b613536846142eb565b614295565b90508281526020810184848401111561355757613556614750565b5b613562848285614541565b509392505050565b60008135905061357981614d13565b92915050565b60008135905061358e81614d2a565b92915050565b6000813590506135a381614d41565b92915050565b6000815190506135b881614d41565b92915050565b600082601f8301126135d3576135d261474b565b5b81356135e38482602086016134e6565b91505092915050565b600082601f8301126136015761360061474b565b5b8135613611848260208601613528565b91505092915050565b60008135905061362981614d58565b92915050565b6000602082840312156136455761364461475a565b5b60006136538482850161356a565b91505092915050565b600080604083850312156136735761367261475a565b5b60006136818582860161356a565b92505060206136928582860161356a565b9150509250929050565b6000806000606084860312156136b5576136b461475a565b5b60006136c38682870161356a565b93505060206136d48682870161356a565b92505060406136e58682870161361a565b9150509250925092565b600080600080608085870312156137095761370861475a565b5b60006137178782880161356a565b94505060206137288782880161356a565b93505060406137398782880161361a565b925050606085013567ffffffffffffffff81111561375a57613759614755565b5b613766878288016135be565b91505092959194509250565b600080604083850312156137895761378861475a565b5b60006137978582860161356a565b92505060206137a88582860161357f565b9150509250929050565b600080604083850312156137c9576137c861475a565b5b60006137d78582860161356a565b92505060206137e88582860161361a565b9150509250929050565b6000602082840312156138085761380761475a565b5b60006138168482850161357f565b91505092915050565b6000602082840312156138355761383461475a565b5b600061384384828501613594565b91505092915050565b6000602082840312156138625761386161475a565b5b6000613870848285016135a9565b91505092915050565b60006020828403121561388f5761388e61475a565b5b600082013567ffffffffffffffff8111156138ad576138ac614755565b5b6138b9848285016135ec565b91505092915050565b6000602082840312156138d8576138d761475a565b5b60006138e68482850161361a565b91505092915050565b600080604083850312156139065761390561475a565b5b60006139148582860161361a565b92505060206139258582860161356a565b9150509250929050565b600061393b8383613e50565b60208301905092915050565b613950816144cd565b82525050565b600061396182614341565b61396b818561436f565b93506139768361431c565b8060005b838110156139a757815161398e888261392f565b975061399983614362565b92505060018101905061397a565b5085935050505092915050565b6139bd816144df565b82525050565b60006139ce8261434c565b6139d88185614380565b93506139e8818560208601614550565b6139f18161475f565b840191505092915050565b6000613a0782614357565b613a11818561439c565b9350613a21818560208601614550565b613a2a8161475f565b840191505092915050565b6000613a4082614357565b613a4a81856143ad565b9350613a5a818560208601614550565b80840191505092915050565b60008154613a7381614583565b613a7d81866143ad565b94506001821660008114613a985760018114613aa957613adc565b60ff19831686528186019350613adc565b613ab28561432c565b60005b83811015613ad457815481890152600182019150602081019050613ab5565b838801955050505b50505092915050565b6000613af260168361439c565b9150613afd82614770565b602082019050919050565b6000613b1560328361439c565b9150613b2082614799565b604082019050919050565b6000613b3860268361439c565b9150613b43826147e8565b604082019050919050565b6000613b5b601c8361439c565b9150613b6682614837565b602082019050919050565b6000613b7e60148361439c565b9150613b8982614860565b602082019050919050565b6000613ba160248361439c565b9150613bac82614889565b604082019050919050565b6000613bc460198361439c565b9150613bcf826148d8565b602082019050919050565b6000613be760198361439c565b9150613bf282614901565b602082019050919050565b6000613c0a602c8361439c565b9150613c158261492a565b604082019050919050565b6000613c2d60388361439c565b9150613c3882614979565b604082019050919050565b6000613c50602a8361439c565b9150613c5b826149c8565b604082019050919050565b6000613c7360298361439c565b9150613c7e82614a17565b604082019050919050565b6000613c96601a8361439c565b9150613ca182614a66565b602082019050919050565b6000613cb960208361439c565b9150613cc482614a8f565b602082019050919050565b6000613cdc602c8361439c565b9150613ce782614ab8565b604082019050919050565b6000613cff60208361439c565b9150613d0a82614b07565b602082019050919050565b6000613d22601a8361439c565b9150613d2d82614b30565b602082019050919050565b6000613d4560298361439c565b9150613d5082614b59565b604082019050919050565b6000613d68602f8361439c565b9150613d7382614ba8565b604082019050919050565b6000613d8b60218361439c565b9150613d9682614bf7565b604082019050919050565b6000613dae60168361439c565b9150613db982614c46565b602082019050919050565b6000613dd1600083614391565b9150613ddc82614c6f565b600082019050919050565b6000613df460148361439c565b9150613dff82614c72565b602082019050919050565b6000613e1760318361439c565b9150613e2282614c9b565b604082019050919050565b6000613e3a60138361439c565b9150613e4582614cea565b602082019050919050565b613e5981614537565b82525050565b613e6881614537565b82525050565b6000613e7a8286613a35565b9150613e868285613a35565b9150613e928284613a66565b9150819050949350505050565b6000613eaa82613dc4565b9150819050919050565b6000602082019050613ec96000830184613947565b92915050565b6000608082019050613ee46000830187613947565b613ef16020830186613947565b613efe6040830185613e5f565b8181036060830152613f1081846139c3565b905095945050505050565b60006020820190508181036000830152613f358184613956565b905092915050565b6000602082019050613f5260008301846139b4565b92915050565b60006020820190508181036000830152613f7281846139fc565b905092915050565b60006020820190508181036000830152613f9381613ae5565b9050919050565b60006020820190508181036000830152613fb381613b08565b9050919050565b60006020820190508181036000830152613fd381613b2b565b9050919050565b60006020820190508181036000830152613ff381613b4e565b9050919050565b6000602082019050818103600083015261401381613b71565b9050919050565b6000602082019050818103600083015261403381613b94565b9050919050565b6000602082019050818103600083015261405381613bb7565b9050919050565b6000602082019050818103600083015261407381613bda565b9050919050565b6000602082019050818103600083015261409381613bfd565b9050919050565b600060208201905081810360008301526140b381613c20565b9050919050565b600060208201905081810360008301526140d381613c43565b9050919050565b600060208201905081810360008301526140f381613c66565b9050919050565b6000602082019050818103600083015261411381613c89565b9050919050565b6000602082019050818103600083015261413381613cac565b9050919050565b6000602082019050818103600083015261415381613ccf565b9050919050565b6000602082019050818103600083015261417381613cf2565b9050919050565b6000602082019050818103600083015261419381613d15565b9050919050565b600060208201905081810360008301526141b381613d38565b9050919050565b600060208201905081810360008301526141d381613d5b565b9050919050565b600060208201905081810360008301526141f381613d7e565b9050919050565b6000602082019050818103600083015261421381613da1565b9050919050565b6000602082019050818103600083015261423381613de7565b9050919050565b6000602082019050818103600083015261425381613e0a565b9050919050565b6000602082019050818103600083015261427381613e2d565b9050919050565b600060208201905061428f6000830184613e5f565b92915050565b600061429f6142b0565b90506142ab82826145b5565b919050565b6000604051905090565b600067ffffffffffffffff8211156142d5576142d461471c565b5b6142de8261475f565b9050602081019050919050565b600067ffffffffffffffff8211156143065761430561471c565b5b61430f8261475f565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006143c382614537565b91506143ce83614537565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561440357614402614660565b5b828201905092915050565b600061441982614537565b915061442483614537565b9250826144345761443361468f565b5b828204905092915050565b600061444a82614537565b915061445583614537565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561448e5761448d614660565b5b828202905092915050565b60006144a482614537565b91506144af83614537565b9250828210156144c2576144c1614660565b5b828203905092915050565b60006144d882614517565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561456e578082015181840152602081019050614553565b8381111561457d576000848401525b50505050565b6000600282049050600182168061459b57607f821691505b602082108114156145af576145ae6146be565b5b50919050565b6145be8261475f565b810181811067ffffffffffffffff821117156145dd576145dc61471c565b5b80604052505050565b60006145f182614537565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561462457614623614660565b5b600182019050919050565b600061463a82614537565b915061464583614537565b9250826146555761465461468f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f7072656d696e74206c696d697420657863656564656400000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5072656d696e7420706175736564206973207061757365642100000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f7075626c6963206d696e74206c696d6974206578636565646564000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f73656e646572206973206e6f7420696e2077686974656c697374000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f5075626c6963206d696e74206973207061757365642100000000000000000000600082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b614d1c816144cd565b8114614d2757600080fd5b50565b614d33816144df565b8114614d3e57600080fd5b50565b614d4a816144eb565b8114614d5557600080fd5b50565b614d6181614537565b8114614d6c57600080fd5b5056fea2646970667358221220e90dbb5ac03cb15dd1e3c969d0aa92557c8073d2369464175c581d44926a1e3e64736f6c63430008070033
Deployed Bytecode Sourcemap
40523:5503:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43028:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26605:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27550:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29109:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28632:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44391:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45454:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41849:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29859:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41944:427;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44774:84;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44966:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44488:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41110:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45562:141;;;;;;;;;;;;;:::i;:::-;;30269:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43246:635;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44864:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45210:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41150:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40787:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40673:109;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27244:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41073:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26974:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7593:103;;;;;;;;;;;;;:::i;:::-;;45348:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44678:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43134:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42377:482;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40865:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6942:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40994:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27719:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41299:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29402:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40825:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45074:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30525:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43887:498;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40913:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40958:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41356:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44591:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29628:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42867:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7851:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41247:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43028:100;43076:7;43098:12;:24;43111:10;43098:24;;;;;;;;;;;;;;;;43091:31;;43028:100;:::o;26605:305::-;26707:4;26759:25;26744:40;;;:11;:40;;;;:105;;;;26816:33;26801:48;;;:11;:48;;;;26744:105;:158;;;;26866:36;26890:11;26866:23;:36::i;:::-;26744:158;26724:178;;26605:305;;;:::o;27550:100::-;27604:13;27637:5;27630:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27550:100;:::o;29109:221::-;29185:7;29213:16;29221:7;29213;:16::i;:::-;29205:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29298:15;:24;29314:7;29298:24;;;;;;;;;;;;;;;;;;;;;29291:31;;29109:221;;;:::o;28632:411::-;28713:13;28729:23;28744:7;28729:14;:23::i;:::-;28713:39;;28777:5;28771:11;;:2;:11;;;;28763:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28871:5;28855:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28880:37;28897:5;28904:12;:10;:12::i;:::-;28880:16;:37::i;:::-;28855:62;28833:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;29014:21;29023:2;29027:7;29014:8;:21::i;:::-;28702:341;28632:411;;:::o;44391:91::-;7173:12;:10;:12::i;:::-;7162:23;;:7;:5;:7::i;:::-;:23;;;7154:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44470:6:::1;44454:13;;:22;;;;;;;;;;;;;;;;;;44391:91:::0;:::o;45454:100::-;7173:12;:10;:12::i;:::-;7162:23;;:7;:5;:7::i;:::-;:23;;;7154:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45538:10:::1;45526:9;:22;;;;;;;;;;;;:::i;:::-;;45454:100:::0;:::o;41849:89::-;41893:7;41916:16;:6;:14;:16::i;:::-;41909:23;;41849:89;:::o;29859:339::-;30054:41;30073:12;:10;:12::i;:::-;30087:7;30054:18;:41::i;:::-;30046:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30162:28;30172:4;30178:2;30182:7;30162:9;:28::i;:::-;29859:339;;;:::o;41944:427::-;42015:11;41679:1;41665:11;:15;:52;;;;;41699:18;;41684:11;:33;;41665:52;41657:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;41791:9;;41776:11;41757:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;41749:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;42044:16:::1;;;;;;;;;;;42043:17;42035:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;42132:11;42115:14;;:28;;;;:::i;:::-;42102:9;:41;;42094:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42227:15;;42212:11;42182:15;:27;42198:10;42182:27;;;;;;;;;;;;;;;;:41;;;;:::i;:::-;:60;;42174:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;42282:34;42292:10;42304:11;42282:9;:34::i;:::-;42354:11;42323:15;:27;42339:10;42323:27;;;;;;;;;;;;;;;;:42;;;;;;;:::i;:::-;;;;;;;;41944:427:::0;;:::o;44774:84::-;7173:12;:10;:12::i;:::-;7162:23;;:7;:5;:7::i;:::-;:23;;;7154:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44847:5:::1;44833:11;:19;;;;44774:84:::0;:::o;44966:102::-;7173:12;:10;:12::i;:::-;7162:23;;:7;:5;:7::i;:::-;:23;;;7154:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45057:5:::1;45036:11;:18;45048:5;45036:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;44966:102:::0;:::o;44488:97::-;7173:12;:10;:12::i;:::-;7162:23;;:7;:5;:7::i;:::-;:23;;;7154:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44573:6:::1;44554:16;;:25;;;;;;;;;;;;;;;;;;44488:97:::0;:::o;41110:35::-;;;;;;;;;;;;;:::o;45562:141::-;7173:12;:10;:12::i;:::-;7162:23;;:7;:5;:7::i;:::-;:23;;;7154:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45611:7:::1;45632;:5;:7::i;:::-;45624:21;;45653;45624:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45610:69;;;45694:2;45686:11;;;::::0;::::1;;45599:104;45562:141::o:0;30269:185::-;30407:39;30424:4;30430:2;30434:7;30407:39;;;;;;;;;;;;:16;:39::i;:::-;30269:185;;;:::o;43246:635::-;43321:16;43349:23;43375:17;43385:6;43375:9;:17::i;:::-;43349:43;;43399:30;43446:15;43432:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43399:63;;43469:22;43494:1;43469:26;;43502:23;43538:309;43563:15;43545;:33;:64;;;;;43600:9;;43582:14;:27;;43545:64;43538:309;;;43620:25;43648:23;43656:14;43648:7;:23::i;:::-;43620:51;;43707:6;43686:27;;:17;:27;;;43682:131;;;43759:14;43726:13;43740:15;43726:30;;;;;;;;:::i;:::-;;;;;;;:47;;;;;43786:17;;;;;:::i;:::-;;;;43682:131;43823:16;;;;;:::i;:::-;;;;43611:236;43538:309;;;43862:13;43855:20;;;;;;43246:635;;;:::o;44864:95::-;7173:12;:10;:12::i;:::-;7162:23;;:7;:5;:7::i;:::-;:23;;;7154:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44949:4:::1;44928:11;:18;44940:5;44928:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;44864:95:::0;:::o;45210:132::-;7173:12;:10;:12::i;:::-;7162:23;;:7;:5;:7::i;:::-;:23;;;7154:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45318:18:::1;45298:17;:38;;;;;;;;;;;;:::i;:::-;;45210:132:::0;:::o;41150:28::-;;;;;;;;;;;;;:::o;40787:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40673:109::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27244:239::-;27316:7;27336:13;27352:7;:16;27360:7;27352:16;;;;;;;;;;;;;;;;;;;;;27336:32;;27404:1;27387:19;;:5;:19;;;;27379:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27470:5;27463:12;;;27244:239;;;:::o;41073:32::-;;;;;;;;;;;;;:::o;26974:208::-;27046:7;27091:1;27074:19;;:5;:19;;;;27066:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;27158:9;:16;27168:5;27158:16;;;;;;;;;;;;;;;;27151:23;;26974:208;;;:::o;7593:103::-;7173:12;:10;:12::i;:::-;7162:23;;:7;:5;:7::i;:::-;:23;;;7154:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7658:30:::1;7685:1;7658:18;:30::i;:::-;7593:103::o:0;45348:100::-;7173:12;:10;:12::i;:::-;7162:23;;:7;:5;:7::i;:::-;:23;;;7154:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45432:10:::1;45420:9;:22;;;;;;;;;;;;:::i;:::-;;45348:100:::0;:::o;44678:90::-;7173:12;:10;:12::i;:::-;7162:23;;:7;:5;:7::i;:::-;:23;;;7154:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44757:5:::1;44740:14;:22;;;;44678:90:::0;:::o;43134:106::-;43185:7;43207:15;:27;43223:10;43207:27;;;;;;;;;;;;;;;;43200:34;;43134:106;:::o;42377:482::-;42451:11;41679:1;41665:11;:15;:52;;;;;41699:18;;41684:11;:33;;41665:52;41657:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;41791:9;;41776:11;41757:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;41749:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;42479:13:::1;;;;;;;;;;;42478:14;42470:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;42564:11;42550;;:25;;;;:::i;:::-;42537:9;:38;;42529:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;42614:11;:23;42626:10;42614:23;;;;;;;;;;;;;;;;;;;;;;;;;42606:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;42725:12;;42710:11;42683:12;:24;42696:10;42683:24;;;;;;;;;;;;;;;;:38;;;;:::i;:::-;:54;;42675:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;42773:34;42783:10;42795:11;42773:9;:34::i;:::-;42842:11;42814:12;:24;42827:10;42814:24;;;;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;;;;;;;;42377:482:::0;;:::o;40865:43::-;;;;:::o;6942:87::-;6988:7;7015:6;;;;;;;;;;;7008:13;;6942:87;:::o;40994:39::-;;;;:::o;27719:104::-;27775:13;27808:7;27801:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27719:104;:::o;41299:50::-;;;;;;;;;;;;;;;;;:::o;29402:155::-;29497:52;29516:12;:10;:12::i;:::-;29530:8;29540;29497:18;:52::i;:::-;29402:155;;:::o;40825:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45074:130::-;7173:12;:10;:12::i;:::-;7162:23;;:7;:5;:7::i;:::-;:23;;;7154:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45179:19:::1;45158:18;:40;;;;45074:130:::0;:::o;30525:328::-;30700:41;30719:12;:10;:12::i;:::-;30733:7;30700:18;:41::i;:::-;30692:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30806:39;30820:4;30826:2;30830:7;30839:5;30806:13;:39::i;:::-;30525:328;;;;:::o;43887:498::-;43986:13;44027:17;44035:8;44027:7;:17::i;:::-;44011:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;44134:5;44122:17;;:8;;;;;;;;;;;:17;;;44118:64;;;44157:17;44150:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44118:64;44190:28;44221:10;:8;:10::i;:::-;44190:41;;44276:1;44251:14;44245:28;:32;:134;;;;;;;;;;;;;;;;;44313:14;44329:23;44339:1;44330:8;:10;;;;:::i;:::-;44329:21;:23::i;:::-;44354:9;44296:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44245:134;44238:141;;;43887:498;;;;:::o;40913:40::-;;;;:::o;40958:31::-;;;;:::o;41356:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;44591:81::-;7173:12;:10;:12::i;:::-;7162:23;;:7;:5;:7::i;:::-;:23;;;7154:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44660:6:::1;44649:8;;:17;;;;;;;;;;;;;;;;;;44591:81:::0;:::o;29628:164::-;29725:4;29749:18;:25;29768:5;29749:25;;;;;;;;;;;;;;;:35;29775:8;29749:35;;;;;;;;;;;;;;;;;;;;;;;;;29742:42;;29628:164;;;;:::o;42867:155::-;42953:11;41679:1;41665:11;:15;:52;;;;;41699:18;;41684:11;:33;;41665:52;41657:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;41791:9;;41776:11;41757:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;41749:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;7173:12:::1;:10;:12::i;:::-;7162:23;;:7;:5;:7::i;:::-;:23;;;7154:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42983:33:::2;42993:9;43004:11;42983:9;:33::i;:::-;42867:155:::0;;;:::o;7851:201::-;7173:12;:10;:12::i;:::-;7162:23;;:7;:5;:7::i;:::-;:23;;;7154:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7960:1:::1;7940:22;;:8;:22;;;;7932:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;8016:28;8035:8;8016:18;:28::i;:::-;7851:201:::0;:::o;41247:47::-;;;;;;;;;;;;;;;;;:::o;2270:114::-;2335:7;2362;:14;;;2355:21;;2270:114;;;:::o;2392:127::-;2499:1;2481:7;:14;;;:19;;;;;;;;;;;2392:127;:::o;9230:387::-;9290:4;9498:12;9565:7;9553:20;9545:28;;9608:1;9601:4;:8;9594:15;;;9230:387;;;:::o;19374:157::-;19459:4;19498:25;19483:40;;;:11;:40;;;;19476:47;;19374:157;;;:::o;32363:127::-;32428:4;32480:1;32452:30;;:7;:16;32460:7;32452:16;;;;;;;;;;;;;;;;;;;;;:30;;;;32445:37;;32363:127;;;:::o;5666:98::-;5719:7;5746:10;5739:17;;5666:98;:::o;36345:174::-;36447:2;36420:15;:24;36436:7;36420:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36503:7;36499:2;36465:46;;36474:23;36489:7;36474:14;:23::i;:::-;36465:46;;;;;;;;;;;;36345:174;;:::o;32657:348::-;32750:4;32775:16;32783:7;32775;:16::i;:::-;32767:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32851:13;32867:23;32882:7;32867:14;:23::i;:::-;32851:39;;32920:5;32909:16;;:7;:16;;;:51;;;;32953:7;32929:31;;:20;32941:7;32929:11;:20::i;:::-;:31;;;32909:51;:87;;;;32964:32;32981:5;32988:7;32964:16;:32::i;:::-;32909:87;32901:96;;;32657:348;;;;:::o;35649:578::-;35808:4;35781:31;;:23;35796:7;35781:14;:23::i;:::-;:31;;;35773:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;35891:1;35877:16;;:2;:16;;;;35869:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35947:39;35968:4;35974:2;35978:7;35947:20;:39::i;:::-;36051:29;36068:1;36072:7;36051:8;:29::i;:::-;36112:1;36093:9;:15;36103:4;36093:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;36141:1;36124:9;:13;36134:2;36124:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36172:2;36153:7;:16;36161:7;36153:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36211:7;36207:2;36192:27;;36201:4;36192:27;;;;;;;;;;;;35649:578;;;:::o;45709:204::-;45789:9;45784:124;45808:11;45804:1;:15;45784:124;;;45835:18;:6;:16;:18::i;:::-;45862:38;45872:9;45883:16;:6;:14;:16::i;:::-;45862:9;:38::i;:::-;45821:3;;;;;:::i;:::-;;;;45784:124;;;;45709:204;;:::o;8212:191::-;8286:16;8305:6;;;;;;;;;;;8286:25;;8331:8;8322:6;;:17;;;;;;;;;;;;;;;;;;8386:8;8355:40;;8376:8;8355:40;;;;;;;;;;;;8275:128;8212:191;:::o;36661:315::-;36816:8;36807:17;;:5;:17;;;;36799:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36903:8;36865:18;:25;36884:5;36865:25;;;;;;;;;;;;;;;:35;36891:8;36865:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36949:8;36927:41;;36942:5;36927:41;;;36959:8;36927:41;;;;;;:::i;:::-;;;;;;;;36661:315;;;:::o;31735:::-;31892:28;31902:4;31908:2;31912:7;31892:9;:28::i;:::-;31939:48;31962:4;31968:2;31972:7;31981:5;31939:22;:48::i;:::-;31931:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;31735:315;;;;:::o;45919:104::-;45979:13;46008:9;46001:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45919:104;:::o;3228:723::-;3284:13;3514:1;3505:5;:10;3501:53;;;3532:10;;;;;;;;;;;;;;;;;;;;;3501:53;3564:12;3579:5;3564:20;;3595:14;3620:78;3635:1;3627:4;:9;3620:78;;3653:8;;;;;:::i;:::-;;;;3684:2;3676:10;;;;;:::i;:::-;;;3620:78;;;3708:19;3740:6;3730:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3708:39;;3758:154;3774:1;3765:5;:10;3758:154;;3802:1;3792:11;;;;;:::i;:::-;;;3869:2;3861:5;:10;;;;:::i;:::-;3848:2;:24;;;;:::i;:::-;3835:39;;3818:6;3825;3818:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3898:2;3889:11;;;;;:::i;:::-;;;3758:154;;;3936:6;3922:21;;;;;3228:723;;;;:::o;38912:126::-;;;;:::o;33347:110::-;33423:26;33433:2;33437:7;33423:26;;;;;;;;;;;;:9;:26::i;:::-;33347:110;;:::o;37541:799::-;37696:4;37717:15;:2;:13;;;:15::i;:::-;37713:620;;;37769:2;37753:36;;;37790:12;:10;:12::i;:::-;37804:4;37810:7;37819:5;37753:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37749:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38012:1;37995:6;:13;:18;37991:272;;;38038:60;;;;;;;;;;:::i;:::-;;;;;;;;37991:272;38213:6;38207:13;38198:6;38194:2;38190:15;38183:38;37749:529;37886:41;;;37876:51;;;:6;:51;;;;37869:58;;;;;37713:620;38317:4;38310:11;;37541:799;;;;;;;:::o;33684:321::-;33814:18;33820:2;33824:7;33814:5;:18::i;:::-;33865:54;33896:1;33900:2;33904:7;33913:5;33865:22;:54::i;:::-;33843:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;33684:321;;;:::o;34341:382::-;34435:1;34421:16;;:2;:16;;;;34413:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34494:16;34502:7;34494;:16::i;:::-;34493:17;34485:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34556:45;34585:1;34589:2;34593:7;34556:20;:45::i;:::-;34631:1;34614:9;:13;34624:2;34614:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34662:2;34643:7;:16;34651:7;34643:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34707:7;34703:2;34682:33;;34699:1;34682:33;;;;;;;;;;;;34341:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::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:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:119;;;5731:79;;:::i;:::-;5693:119;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5620:323;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:119;;;6062:79;;:::i;:::-;6024:119;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;5949:327;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6282:349;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:119;;;6761:79;;:::i;:::-;6723:119;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:117;;;6961:79;;:::i;:::-;6925:117;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6637:509;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:119;;;7266:79;;:::i;:::-;7228:119;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7152:329;;;;:::o;7487:474::-;7555:6;7563;7612:2;7600:9;7591:7;7587:23;7583:32;7580:119;;;7618:79;;:::i;:::-;7580:119;7738:1;7763:53;7808:7;7799:6;7788:9;7784:22;7763:53;:::i;:::-;7753:63;;7709:117;7865:2;7891:53;7936:7;7927:6;7916:9;7912:22;7891:53;:::i;:::-;7881:63;;7836:118;7487:474;;;;;:::o;7967:179::-;8036:10;8057:46;8099:3;8091:6;8057:46;:::i;:::-;8135:4;8130:3;8126:14;8112:28;;7967:179;;;;:::o;8152:118::-;8239:24;8257:5;8239:24;:::i;:::-;8234:3;8227:37;8152:118;;:::o;8306:732::-;8425:3;8454:54;8502:5;8454:54;:::i;:::-;8524:86;8603:6;8598:3;8524:86;:::i;:::-;8517:93;;8634:56;8684:5;8634:56;:::i;:::-;8713:7;8744:1;8729:284;8754:6;8751:1;8748:13;8729:284;;;8830:6;8824:13;8857:63;8916:3;8901:13;8857:63;:::i;:::-;8850:70;;8943:60;8996:6;8943:60;:::i;:::-;8933:70;;8789:224;8776:1;8773;8769:9;8764:14;;8729:284;;;8733:14;9029:3;9022:10;;8430:608;;;8306:732;;;;:::o;9044:109::-;9125:21;9140:5;9125:21;:::i;:::-;9120:3;9113:34;9044:109;;:::o;9159:360::-;9245:3;9273:38;9305:5;9273:38;:::i;:::-;9327:70;9390:6;9385:3;9327:70;:::i;:::-;9320:77;;9406:52;9451:6;9446:3;9439:4;9432:5;9428:16;9406:52;:::i;:::-;9483:29;9505:6;9483:29;:::i;:::-;9478:3;9474:39;9467:46;;9249:270;9159:360;;;;:::o;9525:364::-;9613:3;9641:39;9674:5;9641:39;:::i;:::-;9696:71;9760:6;9755:3;9696:71;:::i;:::-;9689:78;;9776:52;9821:6;9816:3;9809:4;9802:5;9798:16;9776:52;:::i;:::-;9853:29;9875:6;9853:29;:::i;:::-;9848:3;9844:39;9837:46;;9617:272;9525:364;;;;:::o;9895:377::-;10001:3;10029:39;10062:5;10029:39;:::i;:::-;10084:89;10166:6;10161:3;10084:89;:::i;:::-;10077:96;;10182:52;10227:6;10222:3;10215:4;10208:5;10204:16;10182:52;:::i;:::-;10259:6;10254:3;10250:16;10243:23;;10005:267;9895:377;;;;:::o;10302:845::-;10405:3;10442:5;10436:12;10471:36;10497:9;10471:36;:::i;:::-;10523:89;10605:6;10600:3;10523:89;:::i;:::-;10516:96;;10643:1;10632:9;10628:17;10659:1;10654:137;;;;10805:1;10800:341;;;;10621:520;;10654:137;10738:4;10734:9;10723;10719:25;10714:3;10707:38;10774:6;10769:3;10765:16;10758:23;;10654:137;;10800:341;10867:38;10899:5;10867:38;:::i;:::-;10927:1;10941:154;10955:6;10952:1;10949:13;10941:154;;;11029:7;11023:14;11019:1;11014:3;11010:11;11003:35;11079:1;11070:7;11066:15;11055:26;;10977:4;10974:1;10970:12;10965:17;;10941:154;;;11124:6;11119:3;11115:16;11108:23;;10807:334;;10621:520;;10409:738;;10302:845;;;;:::o;11153:366::-;11295:3;11316:67;11380:2;11375:3;11316:67;:::i;:::-;11309:74;;11392:93;11481:3;11392:93;:::i;:::-;11510:2;11505:3;11501:12;11494:19;;11153:366;;;:::o;11525:::-;11667:3;11688:67;11752:2;11747:3;11688:67;:::i;:::-;11681:74;;11764:93;11853:3;11764:93;:::i;:::-;11882:2;11877:3;11873:12;11866:19;;11525:366;;;:::o;11897:::-;12039:3;12060:67;12124:2;12119:3;12060:67;:::i;:::-;12053:74;;12136:93;12225:3;12136:93;:::i;:::-;12254:2;12249:3;12245:12;12238:19;;11897:366;;;:::o;12269:::-;12411:3;12432:67;12496:2;12491:3;12432:67;:::i;:::-;12425:74;;12508:93;12597:3;12508:93;:::i;:::-;12626:2;12621:3;12617:12;12610:19;;12269:366;;;:::o;12641:::-;12783:3;12804:67;12868:2;12863:3;12804:67;:::i;:::-;12797:74;;12880:93;12969:3;12880:93;:::i;:::-;12998:2;12993:3;12989:12;12982:19;;12641:366;;;:::o;13013:::-;13155:3;13176:67;13240:2;13235:3;13176:67;:::i;:::-;13169:74;;13252:93;13341:3;13252:93;:::i;:::-;13370:2;13365:3;13361:12;13354:19;;13013:366;;;:::o;13385:::-;13527:3;13548:67;13612:2;13607:3;13548:67;:::i;:::-;13541:74;;13624:93;13713:3;13624:93;:::i;:::-;13742:2;13737:3;13733:12;13726:19;;13385:366;;;:::o;13757:::-;13899:3;13920:67;13984:2;13979:3;13920:67;:::i;:::-;13913:74;;13996:93;14085:3;13996:93;:::i;:::-;14114:2;14109:3;14105:12;14098:19;;13757:366;;;:::o;14129:::-;14271:3;14292:67;14356:2;14351:3;14292:67;:::i;:::-;14285:74;;14368:93;14457:3;14368:93;:::i;:::-;14486:2;14481:3;14477:12;14470:19;;14129:366;;;:::o;14501:::-;14643:3;14664:67;14728:2;14723:3;14664:67;:::i;:::-;14657:74;;14740:93;14829:3;14740:93;:::i;:::-;14858:2;14853:3;14849:12;14842:19;;14501:366;;;:::o;14873:::-;15015:3;15036:67;15100:2;15095:3;15036:67;:::i;:::-;15029:74;;15112:93;15201:3;15112:93;:::i;:::-;15230:2;15225:3;15221:12;15214:19;;14873:366;;;:::o;15245:::-;15387:3;15408:67;15472:2;15467:3;15408:67;:::i;:::-;15401:74;;15484:93;15573:3;15484:93;:::i;:::-;15602:2;15597:3;15593:12;15586:19;;15245:366;;;:::o;15617:::-;15759:3;15780:67;15844:2;15839:3;15780:67;:::i;:::-;15773:74;;15856:93;15945:3;15856:93;:::i;:::-;15974:2;15969:3;15965:12;15958:19;;15617:366;;;:::o;15989:::-;16131:3;16152:67;16216:2;16211:3;16152:67;:::i;:::-;16145:74;;16228:93;16317:3;16228:93;:::i;:::-;16346:2;16341:3;16337:12;16330:19;;15989:366;;;:::o;16361:::-;16503:3;16524:67;16588:2;16583:3;16524:67;:::i;:::-;16517:74;;16600:93;16689:3;16600:93;:::i;:::-;16718:2;16713:3;16709:12;16702:19;;16361:366;;;:::o;16733:::-;16875:3;16896:67;16960:2;16955:3;16896:67;:::i;:::-;16889:74;;16972:93;17061:3;16972:93;:::i;:::-;17090:2;17085:3;17081:12;17074:19;;16733:366;;;:::o;17105:::-;17247:3;17268:67;17332:2;17327:3;17268:67;:::i;:::-;17261:74;;17344:93;17433:3;17344:93;:::i;:::-;17462:2;17457:3;17453:12;17446:19;;17105:366;;;:::o;17477:::-;17619:3;17640:67;17704:2;17699:3;17640:67;:::i;:::-;17633:74;;17716:93;17805:3;17716:93;:::i;:::-;17834:2;17829:3;17825:12;17818:19;;17477:366;;;:::o;17849:::-;17991:3;18012:67;18076:2;18071:3;18012:67;:::i;:::-;18005:74;;18088:93;18177:3;18088:93;:::i;:::-;18206:2;18201:3;18197:12;18190:19;;17849:366;;;:::o;18221:::-;18363:3;18384:67;18448:2;18443:3;18384:67;:::i;:::-;18377:74;;18460:93;18549:3;18460:93;:::i;:::-;18578:2;18573:3;18569:12;18562:19;;18221:366;;;:::o;18593:::-;18735:3;18756:67;18820:2;18815:3;18756:67;:::i;:::-;18749:74;;18832:93;18921:3;18832:93;:::i;:::-;18950:2;18945:3;18941:12;18934:19;;18593:366;;;:::o;18965:398::-;19124:3;19145:83;19226:1;19221:3;19145:83;:::i;:::-;19138:90;;19237:93;19326:3;19237:93;:::i;:::-;19355:1;19350:3;19346:11;19339:18;;18965:398;;;:::o;19369:366::-;19511:3;19532:67;19596:2;19591:3;19532:67;:::i;:::-;19525:74;;19608:93;19697:3;19608:93;:::i;:::-;19726:2;19721:3;19717:12;19710:19;;19369:366;;;:::o;19741:::-;19883:3;19904:67;19968:2;19963:3;19904:67;:::i;:::-;19897:74;;19980:93;20069:3;19980:93;:::i;:::-;20098:2;20093:3;20089:12;20082:19;;19741:366;;;:::o;20113:::-;20255:3;20276:67;20340:2;20335:3;20276:67;:::i;:::-;20269:74;;20352:93;20441:3;20352:93;:::i;:::-;20470:2;20465:3;20461:12;20454:19;;20113:366;;;:::o;20485:108::-;20562:24;20580:5;20562:24;:::i;:::-;20557:3;20550:37;20485:108;;:::o;20599:118::-;20686:24;20704:5;20686:24;:::i;:::-;20681:3;20674:37;20599:118;;:::o;20723:589::-;20948:3;20970:95;21061:3;21052:6;20970:95;:::i;:::-;20963:102;;21082:95;21173:3;21164:6;21082:95;:::i;:::-;21075:102;;21194:92;21282:3;21273:6;21194:92;:::i;:::-;21187:99;;21303:3;21296:10;;20723:589;;;;;;:::o;21318:379::-;21502:3;21524:147;21667:3;21524:147;:::i;:::-;21517:154;;21688:3;21681:10;;21318:379;;;:::o;21703:222::-;21796:4;21834:2;21823:9;21819:18;21811:26;;21847:71;21915:1;21904:9;21900:17;21891:6;21847:71;:::i;:::-;21703:222;;;;:::o;21931:640::-;22126:4;22164:3;22153:9;22149:19;22141:27;;22178:71;22246:1;22235:9;22231:17;22222:6;22178:71;:::i;:::-;22259:72;22327:2;22316:9;22312:18;22303:6;22259:72;:::i;:::-;22341;22409:2;22398:9;22394:18;22385:6;22341:72;:::i;:::-;22460:9;22454:4;22450:20;22445:2;22434:9;22430:18;22423:48;22488:76;22559:4;22550:6;22488:76;:::i;:::-;22480:84;;21931:640;;;;;;;:::o;22577:373::-;22720:4;22758:2;22747:9;22743:18;22735:26;;22807:9;22801:4;22797:20;22793:1;22782:9;22778:17;22771:47;22835:108;22938:4;22929:6;22835:108;:::i;:::-;22827:116;;22577:373;;;;:::o;22956:210::-;23043:4;23081:2;23070:9;23066:18;23058:26;;23094:65;23156:1;23145:9;23141:17;23132:6;23094:65;:::i;:::-;22956:210;;;;:::o;23172:313::-;23285:4;23323:2;23312:9;23308:18;23300:26;;23372:9;23366:4;23362:20;23358:1;23347:9;23343:17;23336:47;23400:78;23473:4;23464:6;23400:78;:::i;:::-;23392:86;;23172:313;;;;:::o;23491:419::-;23657:4;23695:2;23684:9;23680:18;23672:26;;23744:9;23738:4;23734:20;23730:1;23719:9;23715:17;23708:47;23772:131;23898:4;23772:131;:::i;:::-;23764:139;;23491:419;;;:::o;23916:::-;24082:4;24120:2;24109:9;24105:18;24097:26;;24169:9;24163:4;24159:20;24155:1;24144:9;24140:17;24133:47;24197:131;24323:4;24197:131;:::i;:::-;24189:139;;23916:419;;;:::o;24341:::-;24507:4;24545:2;24534:9;24530:18;24522:26;;24594:9;24588:4;24584:20;24580:1;24569:9;24565:17;24558:47;24622:131;24748:4;24622:131;:::i;:::-;24614:139;;24341:419;;;:::o;24766:::-;24932:4;24970:2;24959:9;24955:18;24947:26;;25019:9;25013:4;25009:20;25005:1;24994:9;24990:17;24983:47;25047:131;25173:4;25047:131;:::i;:::-;25039:139;;24766:419;;;:::o;25191:::-;25357:4;25395:2;25384:9;25380:18;25372:26;;25444:9;25438:4;25434:20;25430:1;25419:9;25415:17;25408:47;25472:131;25598:4;25472:131;:::i;:::-;25464:139;;25191:419;;;:::o;25616:::-;25782:4;25820:2;25809:9;25805:18;25797:26;;25869:9;25863:4;25859:20;25855:1;25844:9;25840:17;25833:47;25897:131;26023:4;25897:131;:::i;:::-;25889:139;;25616:419;;;:::o;26041:::-;26207:4;26245:2;26234:9;26230:18;26222:26;;26294:9;26288:4;26284:20;26280:1;26269:9;26265:17;26258:47;26322:131;26448:4;26322:131;:::i;:::-;26314:139;;26041:419;;;:::o;26466:::-;26632:4;26670:2;26659:9;26655:18;26647:26;;26719:9;26713:4;26709:20;26705:1;26694:9;26690:17;26683:47;26747:131;26873:4;26747:131;:::i;:::-;26739:139;;26466:419;;;:::o;26891:::-;27057:4;27095:2;27084:9;27080:18;27072:26;;27144:9;27138:4;27134:20;27130:1;27119:9;27115:17;27108:47;27172:131;27298:4;27172:131;:::i;:::-;27164:139;;26891:419;;;:::o;27316:::-;27482:4;27520:2;27509:9;27505:18;27497:26;;27569:9;27563:4;27559:20;27555:1;27544:9;27540:17;27533:47;27597:131;27723:4;27597:131;:::i;:::-;27589:139;;27316:419;;;:::o;27741:::-;27907:4;27945:2;27934:9;27930:18;27922:26;;27994:9;27988:4;27984:20;27980:1;27969:9;27965:17;27958:47;28022:131;28148:4;28022:131;:::i;:::-;28014:139;;27741:419;;;:::o;28166:::-;28332:4;28370:2;28359:9;28355:18;28347:26;;28419:9;28413:4;28409:20;28405:1;28394:9;28390:17;28383:47;28447:131;28573:4;28447:131;:::i;:::-;28439:139;;28166:419;;;:::o;28591:::-;28757:4;28795:2;28784:9;28780:18;28772:26;;28844:9;28838:4;28834:20;28830:1;28819:9;28815:17;28808:47;28872:131;28998:4;28872:131;:::i;:::-;28864:139;;28591:419;;;:::o;29016:::-;29182:4;29220:2;29209:9;29205:18;29197:26;;29269:9;29263:4;29259:20;29255:1;29244:9;29240:17;29233:47;29297:131;29423:4;29297:131;:::i;:::-;29289:139;;29016:419;;;:::o;29441:::-;29607:4;29645:2;29634:9;29630:18;29622:26;;29694:9;29688:4;29684:20;29680:1;29669:9;29665:17;29658:47;29722:131;29848:4;29722:131;:::i;:::-;29714:139;;29441:419;;;:::o;29866:::-;30032:4;30070:2;30059:9;30055:18;30047:26;;30119:9;30113:4;30109:20;30105:1;30094:9;30090:17;30083:47;30147:131;30273:4;30147:131;:::i;:::-;30139:139;;29866:419;;;:::o;30291:::-;30457:4;30495:2;30484:9;30480:18;30472:26;;30544:9;30538:4;30534:20;30530:1;30519:9;30515:17;30508:47;30572:131;30698:4;30572:131;:::i;:::-;30564:139;;30291:419;;;:::o;30716:::-;30882:4;30920:2;30909:9;30905:18;30897:26;;30969:9;30963:4;30959:20;30955:1;30944:9;30940:17;30933:47;30997:131;31123:4;30997:131;:::i;:::-;30989:139;;30716:419;;;:::o;31141:::-;31307:4;31345:2;31334:9;31330:18;31322:26;;31394:9;31388:4;31384:20;31380:1;31369:9;31365:17;31358:47;31422:131;31548:4;31422:131;:::i;:::-;31414:139;;31141:419;;;:::o;31566:::-;31732:4;31770:2;31759:9;31755:18;31747:26;;31819:9;31813:4;31809:20;31805:1;31794:9;31790:17;31783:47;31847:131;31973:4;31847:131;:::i;:::-;31839:139;;31566:419;;;:::o;31991:::-;32157:4;32195:2;32184:9;32180:18;32172:26;;32244:9;32238:4;32234:20;32230:1;32219:9;32215:17;32208:47;32272:131;32398:4;32272:131;:::i;:::-;32264:139;;31991:419;;;:::o;32416:::-;32582:4;32620:2;32609:9;32605:18;32597:26;;32669:9;32663:4;32659:20;32655:1;32644:9;32640:17;32633:47;32697:131;32823:4;32697:131;:::i;:::-;32689:139;;32416:419;;;:::o;32841:::-;33007:4;33045:2;33034:9;33030:18;33022:26;;33094:9;33088:4;33084:20;33080:1;33069:9;33065:17;33058:47;33122:131;33248:4;33122:131;:::i;:::-;33114:139;;32841:419;;;:::o;33266:::-;33432:4;33470:2;33459:9;33455:18;33447:26;;33519:9;33513:4;33509:20;33505:1;33494:9;33490:17;33483:47;33547:131;33673:4;33547:131;:::i;:::-;33539:139;;33266:419;;;:::o;33691:222::-;33784:4;33822:2;33811:9;33807:18;33799:26;;33835:71;33903:1;33892:9;33888:17;33879:6;33835:71;:::i;:::-;33691:222;;;;:::o;33919:129::-;33953:6;33980:20;;:::i;:::-;33970:30;;34009:33;34037:4;34029:6;34009:33;:::i;:::-;33919:129;;;:::o;34054:75::-;34087:6;34120:2;34114:9;34104:19;;34054:75;:::o;34135:307::-;34196:4;34286:18;34278:6;34275:30;34272:56;;;34308:18;;:::i;:::-;34272:56;34346:29;34368:6;34346:29;:::i;:::-;34338:37;;34430:4;34424;34420:15;34412:23;;34135:307;;;:::o;34448:308::-;34510:4;34600:18;34592:6;34589:30;34586:56;;;34622:18;;:::i;:::-;34586:56;34660:29;34682:6;34660:29;:::i;:::-;34652:37;;34744:4;34738;34734:15;34726:23;;34448:308;;;:::o;34762:132::-;34829:4;34852:3;34844:11;;34882:4;34877:3;34873:14;34865:22;;34762:132;;;:::o;34900:141::-;34949:4;34972:3;34964:11;;34995:3;34992:1;34985:14;35029:4;35026:1;35016:18;35008:26;;34900:141;;;:::o;35047:114::-;35114:6;35148:5;35142:12;35132:22;;35047:114;;;:::o;35167:98::-;35218:6;35252:5;35246:12;35236:22;;35167:98;;;:::o;35271:99::-;35323:6;35357:5;35351:12;35341:22;;35271:99;;;:::o;35376:113::-;35446:4;35478;35473:3;35469:14;35461:22;;35376:113;;;:::o;35495:184::-;35594:11;35628:6;35623:3;35616:19;35668:4;35663:3;35659:14;35644:29;;35495:184;;;;:::o;35685:168::-;35768:11;35802:6;35797:3;35790:19;35842:4;35837:3;35833:14;35818:29;;35685:168;;;;:::o;35859:147::-;35960:11;35997:3;35982:18;;35859:147;;;;:::o;36012:169::-;36096:11;36130:6;36125:3;36118:19;36170:4;36165:3;36161:14;36146:29;;36012:169;;;;:::o;36187:148::-;36289:11;36326:3;36311:18;;36187:148;;;;:::o;36341:305::-;36381:3;36400:20;36418:1;36400:20;:::i;:::-;36395:25;;36434:20;36452:1;36434:20;:::i;:::-;36429:25;;36588:1;36520:66;36516:74;36513:1;36510:81;36507:107;;;36594:18;;:::i;:::-;36507:107;36638:1;36635;36631:9;36624:16;;36341:305;;;;:::o;36652:185::-;36692:1;36709:20;36727:1;36709:20;:::i;:::-;36704:25;;36743:20;36761:1;36743:20;:::i;:::-;36738:25;;36782:1;36772:35;;36787:18;;:::i;:::-;36772:35;36829:1;36826;36822:9;36817:14;;36652:185;;;;:::o;36843:348::-;36883:7;36906:20;36924:1;36906:20;:::i;:::-;36901:25;;36940:20;36958:1;36940:20;:::i;:::-;36935:25;;37128:1;37060:66;37056:74;37053:1;37050:81;37045:1;37038:9;37031:17;37027:105;37024:131;;;37135:18;;:::i;:::-;37024:131;37183:1;37180;37176:9;37165:20;;36843:348;;;;:::o;37197:191::-;37237:4;37257:20;37275:1;37257:20;:::i;:::-;37252:25;;37291:20;37309:1;37291:20;:::i;:::-;37286:25;;37330:1;37327;37324:8;37321:34;;;37335:18;;:::i;:::-;37321:34;37380:1;37377;37373:9;37365:17;;37197:191;;;;:::o;37394:96::-;37431:7;37460:24;37478:5;37460:24;:::i;:::-;37449:35;;37394:96;;;:::o;37496:90::-;37530:7;37573:5;37566:13;37559:21;37548:32;;37496:90;;;:::o;37592:149::-;37628:7;37668:66;37661:5;37657:78;37646:89;;37592:149;;;:::o;37747:126::-;37784:7;37824:42;37817:5;37813:54;37802:65;;37747:126;;;:::o;37879:77::-;37916:7;37945:5;37934:16;;37879:77;;;:::o;37962:154::-;38046:6;38041:3;38036;38023:30;38108:1;38099:6;38094:3;38090:16;38083:27;37962:154;;;:::o;38122:307::-;38190:1;38200:113;38214:6;38211:1;38208:13;38200:113;;;38299:1;38294:3;38290:11;38284:18;38280:1;38275:3;38271:11;38264:39;38236:2;38233:1;38229:10;38224:15;;38200:113;;;38331:6;38328:1;38325:13;38322:101;;;38411:1;38402:6;38397:3;38393:16;38386:27;38322:101;38171:258;38122:307;;;:::o;38435:320::-;38479:6;38516:1;38510:4;38506:12;38496:22;;38563:1;38557:4;38553:12;38584:18;38574:81;;38640:4;38632:6;38628:17;38618:27;;38574:81;38702:2;38694:6;38691:14;38671:18;38668:38;38665:84;;;38721:18;;:::i;:::-;38665:84;38486:269;38435:320;;;:::o;38761:281::-;38844:27;38866:4;38844:27;:::i;:::-;38836:6;38832:40;38974:6;38962:10;38959:22;38938:18;38926:10;38923:34;38920:62;38917:88;;;38985:18;;:::i;:::-;38917:88;39025:10;39021:2;39014:22;38804:238;38761:281;;:::o;39048:233::-;39087:3;39110:24;39128:5;39110:24;:::i;:::-;39101:33;;39156:66;39149:5;39146:77;39143:103;;;39226:18;;:::i;:::-;39143:103;39273:1;39266:5;39262:13;39255:20;;39048:233;;;:::o;39287:176::-;39319:1;39336:20;39354:1;39336:20;:::i;:::-;39331:25;;39370:20;39388:1;39370:20;:::i;:::-;39365:25;;39409:1;39399:35;;39414:18;;:::i;:::-;39399:35;39455:1;39452;39448:9;39443:14;;39287:176;;;;:::o;39469:180::-;39517:77;39514:1;39507:88;39614:4;39611:1;39604:15;39638:4;39635:1;39628:15;39655:180;39703:77;39700:1;39693:88;39800:4;39797:1;39790:15;39824:4;39821:1;39814:15;39841:180;39889:77;39886:1;39879:88;39986:4;39983:1;39976:15;40010:4;40007:1;40000:15;40027:180;40075:77;40072:1;40065:88;40172:4;40169:1;40162:15;40196:4;40193:1;40186:15;40213:180;40261:77;40258:1;40251:88;40358:4;40355:1;40348:15;40382:4;40379:1;40372:15;40399:117;40508:1;40505;40498:12;40522:117;40631:1;40628;40621:12;40645:117;40754:1;40751;40744:12;40768:117;40877:1;40874;40867:12;40891:102;40932:6;40983:2;40979:7;40974:2;40967:5;40963:14;40959:28;40949:38;;40891:102;;;:::o;40999:172::-;41139:24;41135:1;41127:6;41123:14;41116:48;40999:172;:::o;41177:237::-;41317:34;41313:1;41305:6;41301:14;41294:58;41386:20;41381:2;41373:6;41369:15;41362:45;41177:237;:::o;41420:225::-;41560:34;41556:1;41548:6;41544:14;41537:58;41629:8;41624:2;41616:6;41612:15;41605:33;41420:225;:::o;41651:178::-;41791:30;41787:1;41779:6;41775:14;41768:54;41651:178;:::o;41835:170::-;41975:22;41971:1;41963:6;41959:14;41952:46;41835:170;:::o;42011:223::-;42151:34;42147:1;42139:6;42135:14;42128:58;42220:6;42215:2;42207:6;42203:15;42196:31;42011:223;:::o;42240:175::-;42380:27;42376:1;42368:6;42364:14;42357:51;42240:175;:::o;42421:::-;42561:27;42557:1;42549:6;42545:14;42538:51;42421:175;:::o;42602:231::-;42742:34;42738:1;42730:6;42726:14;42719:58;42811:14;42806:2;42798:6;42794:15;42787:39;42602:231;:::o;42839:243::-;42979:34;42975:1;42967:6;42963:14;42956:58;43048:26;43043:2;43035:6;43031:15;43024:51;42839:243;:::o;43088:229::-;43228:34;43224:1;43216:6;43212:14;43205:58;43297:12;43292:2;43284:6;43280:15;43273:37;43088:229;:::o;43323:228::-;43463:34;43459:1;43451:6;43447:14;43440:58;43532:11;43527:2;43519:6;43515:15;43508:36;43323:228;:::o;43557:176::-;43697:28;43693:1;43685:6;43681:14;43674:52;43557:176;:::o;43739:182::-;43879:34;43875:1;43867:6;43863:14;43856:58;43739:182;:::o;43927:231::-;44067:34;44063:1;44055:6;44051:14;44044:58;44136:14;44131:2;44123:6;44119:15;44112:39;43927:231;:::o;44164:182::-;44304:34;44300:1;44292:6;44288:14;44281:58;44164:182;:::o;44352:176::-;44492:28;44488:1;44480:6;44476:14;44469:52;44352:176;:::o;44534:228::-;44674:34;44670:1;44662:6;44658:14;44651:58;44743:11;44738:2;44730:6;44726:15;44719:36;44534:228;:::o;44768:234::-;44908:34;44904:1;44896:6;44892:14;44885:58;44977:17;44972:2;44964:6;44960:15;44953:42;44768:234;:::o;45008:220::-;45148:34;45144:1;45136:6;45132:14;45125:58;45217:3;45212:2;45204:6;45200:15;45193:28;45008:220;:::o;45234:172::-;45374:24;45370:1;45362:6;45358:14;45351:48;45234:172;:::o;45412:114::-;;:::o;45532:170::-;45672:22;45668:1;45660:6;45656:14;45649:46;45532:170;:::o;45708:236::-;45848:34;45844:1;45836:6;45832:14;45825:58;45917:19;45912:2;45904:6;45900:15;45893:44;45708:236;:::o;45950:169::-;46090:21;46086:1;46078:6;46074:14;46067:45;45950:169;:::o;46125:122::-;46198:24;46216:5;46198:24;:::i;:::-;46191:5;46188:35;46178:63;;46237:1;46234;46227:12;46178:63;46125:122;:::o;46253:116::-;46323:21;46338:5;46323:21;:::i;:::-;46316:5;46313:32;46303:60;;46359:1;46356;46349:12;46303:60;46253:116;:::o;46375:120::-;46447:23;46464:5;46447:23;:::i;:::-;46440:5;46437:34;46427:62;;46485:1;46482;46475:12;46427:62;46375:120;:::o;46501:122::-;46574:24;46592:5;46574:24;:::i;:::-;46567:5;46564:35;46554:63;;46613:1;46610;46603:12;46554:63;46501:122;:::o
Swarm Source
ipfs://e90dbb5ac03cb15dd1e3c969d0aa92557c8073d2369464175c581d44926a1e3e
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.