Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 382 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 18845037 | 333 days ago | IN | 0 ETH | 0.00053588 | ||||
Set Approval For... | 18749003 | 346 days ago | IN | 0 ETH | 0.00165635 | ||||
Set Approval For... | 18584248 | 370 days ago | IN | 0 ETH | 0.00204417 | ||||
Set Approval For... | 17258438 | 555 days ago | IN | 0 ETH | 0.00185905 | ||||
Set Approval For... | 17099038 | 578 days ago | IN | 0 ETH | 0.00139551 | ||||
Safe Transfer Fr... | 16604220 | 648 days ago | IN | 0 ETH | 0.00084367 | ||||
Set Approval For... | 16433514 | 672 days ago | IN | 0 ETH | 0.00042165 | ||||
Set Approval For... | 16390038 | 678 days ago | IN | 0 ETH | 0.00076526 | ||||
Transfer From | 16322007 | 687 days ago | IN | 0 ETH | 0.00108239 | ||||
Set Approval For... | 16295234 | 691 days ago | IN | 0 ETH | 0.00065581 | ||||
Set Approval For... | 16286253 | 692 days ago | IN | 0 ETH | 0.00071644 | ||||
Set Approval For... | 16207667 | 703 days ago | IN | 0 ETH | 0.00062512 | ||||
Set Approval For... | 16023056 | 729 days ago | IN | 0 ETH | 0.00051938 | ||||
Set Approval For... | 16000114 | 732 days ago | IN | 0 ETH | 0.00057392 | ||||
Set Approval For... | 15993844 | 733 days ago | IN | 0 ETH | 0.0006358 | ||||
Set Approval For... | 15879696 | 749 days ago | IN | 0 ETH | 0.00068344 | ||||
Safe Transfer Fr... | 15877604 | 749 days ago | IN | 0 ETH | 0.00078405 | ||||
Set_base_url | 15769350 | 764 days ago | IN | 0 ETH | 0.00170391 | ||||
Set Approval For... | 15634593 | 783 days ago | IN | 0 ETH | 0.00045489 | ||||
Set Approval For... | 15628936 | 784 days ago | IN | 0 ETH | 0.00089286 | ||||
Set Approval For... | 15627782 | 784 days ago | IN | 0 ETH | 0.00040137 | ||||
Set Approval For... | 15411310 | 817 days ago | IN | 0 ETH | 0.00048174 | ||||
Set Approval For... | 15409517 | 817 days ago | IN | 0 ETH | 0.00109743 | ||||
Set Approval For... | 15364964 | 825 days ago | IN | 0 ETH | 0.00051784 | ||||
Set Approval For... | 15334459 | 829 days ago | IN | 0 ETH | 0.00039495 |
Latest 20 internal transactions
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
14281492 | 998 days ago | 0.25 ETH | ||||
14266425 | 1000 days ago | 0.25 ETH | ||||
14253832 | 1002 days ago | 0.25 ETH | ||||
14214205 | 1008 days ago | 0.25 ETH | ||||
14162737 | 1016 days ago | 0.25 ETH | ||||
14126192 | 1022 days ago | 0.75 ETH | ||||
14092400 | 1027 days ago | 0.25 ETH | ||||
14074416 | 1030 days ago | 0.5 ETH | ||||
14066116 | 1031 days ago | 0.5 ETH | ||||
14058631 | 1032 days ago | 0.25 ETH | ||||
14040451 | 1035 days ago | 0.5 ETH | ||||
14025955 | 1037 days ago | 0.5 ETH | ||||
13990881 | 1042 days ago | 0.25 ETH | ||||
13988669 | 1043 days ago | 0.75 ETH | ||||
13891436 | 1058 days ago | 0.25 ETH | ||||
13853268 | 1064 days ago | 1 ETH | ||||
13844816 | 1065 days ago | 3.5 ETH | ||||
13826765 | 1068 days ago | 4 ETH | ||||
13820135 | 1069 days ago | 12.5 ETH | ||||
13810591 | 1070 days ago | 0.25 ETH |
Loading...
Loading
Contract Name:
TheGANSMachine
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-15 */ /************************************************************** /* /* ________ _____ _______ ______________.___. /* / _____/ / _ \ \ \ / _____/\__ | | /* / \ ___ / /_\ \ / | \ \_____ \ / | | /* \ \_\ \/ | \/ | \ / \ \____ | /* \______ /\____|__ /\____|__ //_______ / / ______| /* \/ \/ \/ \/ \/ /* The official GANSY ERC-721 Smart Contract /* **************************************************************/ // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.0 (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.0 (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.0 (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/security/Pausable.sol // OpenZeppelin Contracts v4.4.0 (security/Pausable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.0 (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.0 (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.0 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `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.0 (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.0 (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.0 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, 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.0 (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.0 (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/gansy.sol pragma solidity ^0.8.0; contract TheGANSMachine is ERC721, Ownable, Pausable { using Counters for Counters.Counter; using Strings for uint256; address _address_for_withdrawal = 0x45C0728aE3aAf2fb2eB6052602d517d76B6A389E; Counters.Counter private _total; Counters.Counter private _reserved_total; mapping (address => uint256) private _whitelist; uint256 private _price = 0.25 ether; uint256 private _mint_supply = 1250; uint256 private _mint_reserved = 20; uint256 private _mint_limit = 10; string private _base_url = 'https://2-crypto.s3.amazonaws.com/the-gans-collective/NFT_META/'; bool private _is_whitelist_only = true; bool private _mint_limit_by_addy = false; //construct constructor() ERC721('The GANS Machine','GANS') { } //pausing of contract function pause() public onlyOwner { _pause(); } function unpause() public onlyOwner { _unpause(); } //whitelist function toggle_whitelist(bool change) public onlyOwner { _is_whitelist_only = change; } function add_to_whitelist(address[] memory addresses, uint256[] memory mint_nums) public onlyOwner { for(uint i=0;i<addresses.length;i++) { address user = addresses[i]; uint256 mint_num = mint_nums[i]; _whitelist[user] = mint_num; } } function remove_from_whitelist(address[] memory addresses) public onlyOwner { for(uint i=0;i<addresses.length;i++) { address user = addresses[i]; if(_whitelist[user] > 0) { _whitelist[user] = 0; } } } function is_whitelisted(address user) public view returns (bool) { if(_whitelist[user] > 0) { return true; } return false; } function is_whitelist_on() public view returns (bool) { return _is_whitelist_only; } function get_whitelisted_mint_num(address user) public view returns (uint256) { if(_whitelist[user] > 0) { return _whitelist[user]; } return 0; } //set function set_price(uint256 new_price) public onlyOwner() { _price = new_price; } function set_mint_supply(uint256 new_limit) public onlyOwner() { _mint_supply = new_limit; } function set_mint_reserve(uint256 new_limit) public onlyOwner() { _mint_reserved = new_limit; } function set_mint_limit(uint256 new_limit) public onlyOwner() { _mint_limit = new_limit; } function set_mint_limit_state(bool state) public onlyOwner() { _mint_limit_by_addy = state; } function set_base_url(string memory new_url) public onlyOwner() { _base_url = new_url; } //get function get_price() public view returns (uint256) { return _price; } function get_supply_limit() public view returns (uint256) { return _mint_supply; } function get_reserve_limit() public view returns (uint256) { return _mint_reserved; } function get_mint_limit() public view returns (uint256) { return _mint_limit; } function baseTokenURI() public view returns (string memory) { return _base_url; } function tokenURI(uint256 token_id) public view override returns (string memory) { require(_exists(token_id),'ERC721Metadata: URI query for nonexistent token'); return string(abi.encodePacked(_base_url,token_id.toString())); } function get_total_minted() public view returns (uint256) { return _total.current(); } function get_total_reserved() public view returns (uint256) { return _reserved_total.current(); } function totalSupply() public view returns (uint256) { return _total.current(); } //withdraw function withdraw() public payable onlyOwner { uint256 _each = address(this).balance / 1; require(payable(_address_for_withdrawal).send(_each)); } //mint function mint(uint256 mint_num) public payable { //must mint at least one require(mint_num > 0, 'Need to mint at least 1 NFT.'); //cannot mint more than allowance if(_mint_limit_by_addy) { uint256 token_count = balanceOf(msg.sender); require(token_count + mint_num <= _mint_limit, 'You have exceeded maximum mint limit.'); } else { require(mint_num <= _mint_limit, 'You have exceeded maximum mint limit.'); } //entire mint supply has been minted require(_total.current() - _reserved_total.current() + mint_num <= _mint_supply - _mint_reserved, 'You have exceeded the remaining mintable NFTs.'); //minter did not send enough ETH require(msg.value >= _price * mint_num, 'Did not send enough ETH.'); //if whitelist is on if(_is_whitelist_only == true) { //must be whitelisted require(is_whitelisted(msg.sender),'Not whitelisted.'); //cannot mint more than allowed uint256 whitelisted_mint_num = get_whitelisted_mint_num(msg.sender); uint256 token_count = balanceOf(msg.sender); require(token_count + mint_num <= whitelisted_mint_num, 'You have exceeded maximum mint limit.'); } //mint for(uint256 i;i<mint_num;i++) { _total.increment(); _safeMint(msg.sender,_total.current()); } } function mint_reserve(address address_to, uint256 mint_num) external onlyOwner() { //cannot mint more than allowance require(_reserved_total.current() + mint_num <= _mint_reserved, 'You have exceeded maximum reserved mint limit.'); //mint for(uint256 i;i<mint_num;i++) { _total.increment(); _reserved_total.increment(); _safeMint(address_to,_total.current()); } } function _beforeTokenTransfer(address from, address to, uint256 token_id) internal whenNotPaused override(ERC721) { super._beforeTokenTransfer(from, to, token_id); } }
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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"mint_nums","type":"uint256[]"}],"name":"add_to_whitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"get_mint_limit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"get_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"get_reserve_limit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"get_supply_limit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"get_total_minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"get_total_reserved","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"get_whitelisted_mint_num","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"is_whitelist_on","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"is_whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"mint_num","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"address_to","type":"address"},{"internalType":"uint256","name":"mint_num","type":"uint256"}],"name":"mint_reserve","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":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"remove_from_whitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"new_url","type":"string"}],"name":"set_base_url","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"new_limit","type":"uint256"}],"name":"set_mint_limit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"set_mint_limit_state","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"new_limit","type":"uint256"}],"name":"set_mint_reserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"new_limit","type":"uint256"}],"name":"set_mint_supply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"new_price","type":"uint256"}],"name":"set_price","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":"bool","name":"change","type":"bool"}],"name":"toggle_whitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"token_id","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":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040527345c0728ae3aaf2fb2eb6052602d517d76b6a389e600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506703782dace9d90000600b556104e2600c556014600d55600a600e556040518060600160405280603f815260200162004c36603f9139600f9080519060200190620000a69291906200029a565b506001601060006101000a81548160ff0219169083151502179055506000601060016101000a81548160ff021916908315150217905550348015620000ea57600080fd5b506040518060400160405280601081526020017f5468652047414e53204d616368696e65000000000000000000000000000000008152506040518060400160405280600481526020017f47414e530000000000000000000000000000000000000000000000000000000081525081600090805190602001906200016f9291906200029a565b508060019080519060200190620001889291906200029a565b505050620001ab6200019f620001cc60201b60201c565b620001d460201b60201c565b6000600660146101000a81548160ff021916908315150217905550620003af565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002a8906200034a565b90600052602060002090601f016020900481019282620002cc576000855562000318565b82601f10620002e757805160ff191683800117855562000318565b8280016001018555821562000318579182015b8281111562000317578251825591602001919060010190620002fa565b5b5090506200032791906200032b565b5090565b5b80821115620003465760008160009055506001016200032c565b5090565b600060028204905060018216806200036357607f821691505b602082108114156200037a576200037962000380565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61487780620003bf6000396000f3fe6080604052600436106102515760003560e01c8063779ee62811610139578063b97b808f116100b6578063c93b3f0e1161007a578063c93b3f0e14610858578063d547cfb714610881578063da065000146108ac578063de95a1a4146108d7578063e985e9c514610902578063f2fde38b1461093f57610251565b8063b97b808f14610775578063c2ce35521461079e578063c64d5af6146107c7578063c7dee0e7146107f0578063c87b56dd1461081b57610251565b8063a0712d68116100fd578063a0712d68146106b3578063a14a141f146106cf578063a22cb465146106fa578063a9dc23c214610723578063b88d4fde1461074c57610251565b8063779ee628146105cc5780638456cb59146106095780638da5cb5b1461062057806395d89b411461064b5780639f0aab541461067657610251565b80633ccfd60b116101d25780635c975abb116101965780635c975abb146104bc57806361138cda146104e75780636352211e1461051257806370a082311461054f578063715018a61461058c578063745862bf146105a357610251565b80633ccfd60b146104205780633f4ba83a1461042a57806342842e0e14610441578063516b475c1461046a5780635447fabf1461049357610251565b806311f37ceb1161021957806311f37ceb1461034f57806318160ddd1461037a57806323b872dd146103a557806328bf794d146103ce5780632c404089146103f757610251565b806301ffc9a71461025657806306fdde0314610293578063081812fc146102be578063095ea7b3146102fb5780630c1fd55314610324575b600080fd5b34801561026257600080fd5b5061027d60048036038101906102789190613538565b610968565b60405161028a9190614008565b60405180910390f35b34801561029f57600080fd5b506102a8610a4a565b6040516102b59190614023565b60405180910390f35b3480156102ca57600080fd5b506102e560048036038101906102e091906135cb565b610adc565b6040516102f29190613fa1565b60405180910390f35b34801561030757600080fd5b50610322600480360381019061031d9190613426565b610b61565b005b34801561033057600080fd5b50610339610c79565b6040516103469190614345565b60405180910390f35b34801561035b57600080fd5b50610364610c83565b6040516103719190614345565b60405180910390f35b34801561038657600080fd5b5061038f610c8d565b60405161039c9190614345565b60405180910390f35b3480156103b157600080fd5b506103cc60048036038101906103c79190613320565b610c9e565b005b3480156103da57600080fd5b506103f560048036038101906103f091906135cb565b610cfe565b005b34801561040357600080fd5b5061041e60048036038101906104199190613426565b610d84565b005b610428610ea3565b005b34801561043657600080fd5b5061043f610f93565b005b34801561044d57600080fd5b5061046860048036038101906104639190613320565b611019565b005b34801561047657600080fd5b50610491600480360381019061048c91906135cb565b611039565b005b34801561049f57600080fd5b506104ba60048036038101906104b591906135cb565b6110bf565b005b3480156104c857600080fd5b506104d1611145565b6040516104de9190614008565b60405180910390f35b3480156104f357600080fd5b506104fc61115c565b6040516105099190614345565b60405180910390f35b34801561051e57600080fd5b50610539600480360381019061053491906135cb565b611166565b6040516105469190613fa1565b60405180910390f35b34801561055b57600080fd5b50610576600480360381019061057191906132bb565b611218565b6040516105839190614345565b60405180910390f35b34801561059857600080fd5b506105a16112d0565b005b3480156105af57600080fd5b506105ca60048036038101906105c5919061358a565b611358565b005b3480156105d857600080fd5b506105f360048036038101906105ee91906132bb565b6113ee565b6040516106009190614008565b60405180910390f35b34801561061557600080fd5b5061061e61144a565b005b34801561062c57600080fd5b506106356114d0565b6040516106429190613fa1565b60405180910390f35b34801561065757600080fd5b506106606114fa565b60405161066d9190614023565b60405180910390f35b34801561068257600080fd5b5061069d600480360381019061069891906132bb565b61158c565b6040516106aa9190614345565b60405180910390f35b6106cd60048036038101906106c891906135cb565b611626565b005b3480156106db57600080fd5b506106e46118ff565b6040516106f19190614345565b60405180910390f35b34801561070657600080fd5b50610721600480360381019061071c91906133ea565b611910565b005b34801561072f57600080fd5b5061074a600480360381019061074591906134a3565b611926565b005b34801561075857600080fd5b50610773600480360381019061076e919061336f565b611a96565b005b34801561078157600080fd5b5061079c60048036038101906107979190613462565b611af8565b005b3480156107aa57600080fd5b506107c560048036038101906107c0919061350f565b611c6b565b005b3480156107d357600080fd5b506107ee60048036038101906107e991906135cb565b611d04565b005b3480156107fc57600080fd5b50610805611d8a565b6040516108129190614345565b60405180910390f35b34801561082757600080fd5b50610842600480360381019061083d91906135cb565b611d94565b60405161084f9190614023565b60405180910390f35b34801561086457600080fd5b5061087f600480360381019061087a919061350f565b611e10565b005b34801561088d57600080fd5b50610896611ea9565b6040516108a39190614023565b60405180910390f35b3480156108b857600080fd5b506108c1611f3b565b6040516108ce9190614008565b60405180910390f35b3480156108e357600080fd5b506108ec611f52565b6040516108f99190614345565b60405180910390f35b34801561090e57600080fd5b50610929600480360381019061092491906132e4565b611f63565b6040516109369190614008565b60405180910390f35b34801561094b57600080fd5b50610966600480360381019061096191906132bb565b611ff7565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a3357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a435750610a42826120ef565b5b9050919050565b606060008054610a599061466c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a859061466c565b8015610ad25780601f10610aa757610100808354040283529160200191610ad2565b820191906000526020600020905b815481529060010190602001808311610ab557829003601f168201915b5050505050905090565b6000610ae782612159565b610b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1d90614245565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b6c82611166565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd4906142e5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bfc6121c5565b73ffffffffffffffffffffffffffffffffffffffff161480610c2b5750610c2a81610c256121c5565b611f63565b5b610c6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c61906141a5565b60405180910390fd5b610c7483836121cd565b505050565b6000600c54905090565b6000600b54905090565b6000610c996008612286565b905090565b610caf610ca96121c5565b82612294565b610cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce590614305565b60405180910390fd5b610cf9838383612372565b505050565b610d066121c5565b73ffffffffffffffffffffffffffffffffffffffff16610d246114d0565b73ffffffffffffffffffffffffffffffffffffffff1614610d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7190614265565b60405180910390fd5b80600b8190555050565b610d8c6121c5565b73ffffffffffffffffffffffffffffffffffffffff16610daa6114d0565b73ffffffffffffffffffffffffffffffffffffffff1614610e00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df790614265565b60405180910390fd5b600d5481610e0e6009612286565b610e1891906144a1565b1115610e59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5090614285565b60405180910390fd5b60005b81811015610e9e57610e6e60086125ce565b610e7860096125ce565b610e8b83610e866008612286565b6125e4565b8080610e969061469e565b915050610e5c565b505050565b610eab6121c5565b73ffffffffffffffffffffffffffffffffffffffff16610ec96114d0565b73ffffffffffffffffffffffffffffffffffffffff1614610f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1690614265565b60405180910390fd5b6000600147610f2e91906144f7565b9050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050610f9057600080fd5b50565b610f9b6121c5565b73ffffffffffffffffffffffffffffffffffffffff16610fb96114d0565b73ffffffffffffffffffffffffffffffffffffffff161461100f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100690614265565b60405180910390fd5b611017612602565b565b61103483838360405180602001604052806000815250611a96565b505050565b6110416121c5565b73ffffffffffffffffffffffffffffffffffffffff1661105f6114d0565b73ffffffffffffffffffffffffffffffffffffffff16146110b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ac90614265565b60405180910390fd5b80600d8190555050565b6110c76121c5565b73ffffffffffffffffffffffffffffffffffffffff166110e56114d0565b73ffffffffffffffffffffffffffffffffffffffff161461113b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113290614265565b60405180910390fd5b80600c8190555050565b6000600660149054906101000a900460ff16905090565b6000600e54905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561120f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611206906141e5565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611289576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611280906141c5565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112d86121c5565b73ffffffffffffffffffffffffffffffffffffffff166112f66114d0565b73ffffffffffffffffffffffffffffffffffffffff161461134c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134390614265565b60405180910390fd5b61135660006126a4565b565b6113606121c5565b73ffffffffffffffffffffffffffffffffffffffff1661137e6114d0565b73ffffffffffffffffffffffffffffffffffffffff16146113d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cb90614265565b60405180910390fd5b80600f90805190602001906113ea929190612fb3565b5050565b600080600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156114405760019050611445565b600090505b919050565b6114526121c5565b73ffffffffffffffffffffffffffffffffffffffff166114706114d0565b73ffffffffffffffffffffffffffffffffffffffff16146114c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bd90614265565b60405180910390fd5b6114ce61276a565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546115099061466c565b80601f01602080910402602001604051908101604052809291908181526020018280546115359061466c565b80156115825780601f1061155757610100808354040283529160200191611582565b820191906000526020600020905b81548152906001019060200180831161156557829003601f168201915b5050505050905090565b600080600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561161c57600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611621565b600090505b919050565b60008111611669576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166090614065565b60405180910390fd5b601060019054906101000a900460ff16156116e157600061168933611218565b9050600e54828261169a91906144a1565b11156116db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d290614165565b60405180910390fd5b50611727565b600e54811115611726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171d90614165565b60405180910390fd5b5b600d54600c546117379190614582565b816117426009612286565b61174c6008612286565b6117569190614582565b61176091906144a1565b11156117a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611798906140e5565b60405180910390fd5b80600b546117af9190614528565b3410156117f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e890614205565b60405180910390fd5b60011515601060009054906101000a900460ff16151514156118c057611816336113ee565b611855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184c90614325565b60405180910390fd5b60006118603361158c565b9050600061186d33611218565b905081838261187c91906144a1565b11156118bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b490614165565b60405180910390fd5b50505b60005b818110156118fb576118d560086125ce565b6118e8336118e36008612286565b6125e4565b80806118f39061469e565b9150506118c3565b5050565b600061190b6009612286565b905090565b61192261191b6121c5565b838361280d565b5050565b61192e6121c5565b73ffffffffffffffffffffffffffffffffffffffff1661194c6114d0565b73ffffffffffffffffffffffffffffffffffffffff16146119a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199990614265565b60405180910390fd5b60005b8251811015611a915760008382815181106119e9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000838381518110611a2e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905080600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050508080611a899061469e565b9150506119a5565b505050565b611aa7611aa16121c5565b83612294565b611ae6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611add90614305565b60405180910390fd5b611af28484848461297a565b50505050565b611b006121c5565b73ffffffffffffffffffffffffffffffffffffffff16611b1e6114d0565b73ffffffffffffffffffffffffffffffffffffffff1614611b74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6b90614265565b60405180910390fd5b60005b8151811015611c67576000828281518110611bbb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611c53576000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b508080611c5f9061469e565b915050611b77565b5050565b611c736121c5565b73ffffffffffffffffffffffffffffffffffffffff16611c916114d0565b73ffffffffffffffffffffffffffffffffffffffff1614611ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cde90614265565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b611d0c6121c5565b73ffffffffffffffffffffffffffffffffffffffff16611d2a6114d0565b73ffffffffffffffffffffffffffffffffffffffff1614611d80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7790614265565b60405180910390fd5b80600e8190555050565b6000600d54905090565b6060611d9f82612159565b611dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd5906142c5565b60405180910390fd5b600f611de9836129d6565b604051602001611dfa929190613f7d565b6040516020818303038152906040529050919050565b611e186121c5565b73ffffffffffffffffffffffffffffffffffffffff16611e366114d0565b73ffffffffffffffffffffffffffffffffffffffff1614611e8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8390614265565b60405180910390fd5b80601060016101000a81548160ff02191690831515021790555050565b6060600f8054611eb89061466c565b80601f0160208091040260200160405190810160405280929190818152602001828054611ee49061466c565b8015611f315780601f10611f0657610100808354040283529160200191611f31565b820191906000526020600020905b815481529060010190602001808311611f1457829003601f168201915b5050505050905090565b6000601060009054906101000a900460ff16905090565b6000611f5e6008612286565b905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611fff6121c5565b73ffffffffffffffffffffffffffffffffffffffff1661201d6114d0565b73ffffffffffffffffffffffffffffffffffffffff1614612073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206a90614265565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120da906140a5565b60405180910390fd5b6120ec816126a4565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661224083611166565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b600061229f82612159565b6122de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d590614145565b60405180910390fd5b60006122e983611166565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061235857508373ffffffffffffffffffffffffffffffffffffffff1661234084610adc565b73ffffffffffffffffffffffffffffffffffffffff16145b8061236957506123688185611f63565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661239282611166565b73ffffffffffffffffffffffffffffffffffffffff16146123e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123df906142a5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244f90614105565b60405180910390fd5b612463838383612b83565b61246e6000826121cd565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124be9190614582565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461251591906144a1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6001816000016000828254019250508190555050565b6125fe828260405180602001604052806000815250612bdb565b5050565b61260a611145565b612649576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264090614045565b60405180910390fd5b6000600660146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61268d6121c5565b60405161269a9190613fa1565b60405180910390a1565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612772611145565b156127b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a990614185565b60405180910390fd5b6001600660146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586127f66121c5565b6040516128039190613fa1565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561287c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287390614125565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161296d9190614008565b60405180910390a3505050565b612985848484612372565b61299184848484612c36565b6129d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c790614085565b60405180910390fd5b50505050565b60606000821415612a1e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b7e565b600082905060005b60008214612a50578080612a399061469e565b915050600a82612a4991906144f7565b9150612a26565b60008167ffffffffffffffff811115612a92577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612ac45781602001600182028036833780820191505090505b5090505b60008514612b7757600182612add9190614582565b9150600a85612aec91906146e7565b6030612af891906144a1565b60f81b818381518110612b34577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b7091906144f7565b9450612ac8565b8093505050505b919050565b612b8b611145565b15612bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc290614185565b60405180910390fd5b612bd6838383612dcd565b505050565b612be58383612dd2565b612bf26000848484612c36565b612c31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2890614085565b60405180910390fd5b505050565b6000612c578473ffffffffffffffffffffffffffffffffffffffff16612fa0565b15612dc0578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c806121c5565b8786866040518563ffffffff1660e01b8152600401612ca29493929190613fbc565b602060405180830381600087803b158015612cbc57600080fd5b505af1925050508015612ced57506040513d601f19601f82011682018060405250810190612cea9190613561565b60015b612d70573d8060008114612d1d576040519150601f19603f3d011682016040523d82523d6000602084013e612d22565b606091505b50600081511415612d68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5f90614085565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612dc5565b600190505b949350505050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3990614225565b60405180910390fd5b612e4b81612159565b15612e8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e82906140c5565b60405180910390fd5b612e9760008383612b83565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ee791906144a1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612fbf9061466c565b90600052602060002090601f016020900481019282612fe15760008555613028565b82601f10612ffa57805160ff1916838001178555613028565b82800160010185558215613028579182015b8281111561302757825182559160200191906001019061300c565b5b5090506130359190613039565b5090565b5b8082111561305257600081600090555060010161303a565b5090565b600061306961306484614391565b614360565b9050808382526020820190508285602086028201111561308857600080fd5b60005b858110156130b8578161309e88826131aa565b84526020840193506020830192505060018101905061308b565b5050509392505050565b60006130d56130d0846143bd565b614360565b905080838252602082019050828560208602820111156130f457600080fd5b60005b85811015613124578161310a88826132a6565b8452602084019350602083019250506001810190506130f7565b5050509392505050565b600061314161313c846143e9565b614360565b90508281526020810184848401111561315957600080fd5b61316484828561462a565b509392505050565b600061317f61317a84614419565b614360565b90508281526020810184848401111561319757600080fd5b6131a284828561462a565b509392505050565b6000813590506131b9816147e5565b92915050565b600082601f8301126131d057600080fd5b81356131e0848260208601613056565b91505092915050565b600082601f8301126131fa57600080fd5b813561320a8482602086016130c2565b91505092915050565b600081359050613222816147fc565b92915050565b60008135905061323781614813565b92915050565b60008151905061324c81614813565b92915050565b600082601f83011261326357600080fd5b813561327384826020860161312e565b91505092915050565b600082601f83011261328d57600080fd5b813561329d84826020860161316c565b91505092915050565b6000813590506132b58161482a565b92915050565b6000602082840312156132cd57600080fd5b60006132db848285016131aa565b91505092915050565b600080604083850312156132f757600080fd5b6000613305858286016131aa565b9250506020613316858286016131aa565b9150509250929050565b60008060006060848603121561333557600080fd5b6000613343868287016131aa565b9350506020613354868287016131aa565b9250506040613365868287016132a6565b9150509250925092565b6000806000806080858703121561338557600080fd5b6000613393878288016131aa565b94505060206133a4878288016131aa565b93505060406133b5878288016132a6565b925050606085013567ffffffffffffffff8111156133d257600080fd5b6133de87828801613252565b91505092959194509250565b600080604083850312156133fd57600080fd5b600061340b858286016131aa565b925050602061341c85828601613213565b9150509250929050565b6000806040838503121561343957600080fd5b6000613447858286016131aa565b9250506020613458858286016132a6565b9150509250929050565b60006020828403121561347457600080fd5b600082013567ffffffffffffffff81111561348e57600080fd5b61349a848285016131bf565b91505092915050565b600080604083850312156134b657600080fd5b600083013567ffffffffffffffff8111156134d057600080fd5b6134dc858286016131bf565b925050602083013567ffffffffffffffff8111156134f957600080fd5b613505858286016131e9565b9150509250929050565b60006020828403121561352157600080fd5b600061352f84828501613213565b91505092915050565b60006020828403121561354a57600080fd5b600061355884828501613228565b91505092915050565b60006020828403121561357357600080fd5b60006135818482850161323d565b91505092915050565b60006020828403121561359c57600080fd5b600082013567ffffffffffffffff8111156135b657600080fd5b6135c28482850161327c565b91505092915050565b6000602082840312156135dd57600080fd5b60006135eb848285016132a6565b91505092915050565b6135fd816145b6565b82525050565b61360c816145c8565b82525050565b600061361d8261445e565b6136278185614474565b9350613637818560208601614639565b613640816147d4565b840191505092915050565b600061365682614469565b6136608185614485565b9350613670818560208601614639565b613679816147d4565b840191505092915050565b600061368f82614469565b6136998185614496565b93506136a9818560208601614639565b80840191505092915050565b600081546136c28161466c565b6136cc8186614496565b945060018216600081146136e757600181146136f85761372b565b60ff1983168652818601935061372b565b61370185614449565b60005b8381101561372357815481890152600182019150602081019050613704565b838801955050505b50505092915050565b6000613741601483614485565b91507f5061757361626c653a206e6f74207061757365640000000000000000000000006000830152602082019050919050565b6000613781601c83614485565b91507f4e65656420746f206d696e74206174206c656173742031204e46542e000000006000830152602082019050919050565b60006137c1603283614485565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000613827602683614485565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061388d601c83614485565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b60006138cd602e83614485565b91507f596f752068617665206578636565646564207468652072656d61696e696e672060008301527f6d696e7461626c65204e4654732e0000000000000000000000000000000000006020830152604082019050919050565b6000613933602483614485565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613999601983614485565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006139d9602c83614485565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613a3f602583614485565b91507f596f752068617665206578636565646564206d6178696d756d206d696e74206c60008301527f696d69742e0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613aa5601083614485565b91507f5061757361626c653a20706175736564000000000000000000000000000000006000830152602082019050919050565b6000613ae5603883614485565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000613b4b602a83614485565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613bb1602983614485565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613c17601883614485565b91507f446964206e6f742073656e6420656e6f756768204554482e00000000000000006000830152602082019050919050565b6000613c57602083614485565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000613c97602c83614485565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613cfd602083614485565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613d3d602e83614485565b91507f596f752068617665206578636565646564206d6178696d756d2072657365727660008301527f6564206d696e74206c696d69742e0000000000000000000000000000000000006020830152604082019050919050565b6000613da3602983614485565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613e09602f83614485565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613e6f602183614485565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613ed5603183614485565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613f3b601083614485565b91507f4e6f742077686974656c69737465642e000000000000000000000000000000006000830152602082019050919050565b613f7781614620565b82525050565b6000613f8982856136b5565b9150613f958284613684565b91508190509392505050565b6000602082019050613fb660008301846135f4565b92915050565b6000608082019050613fd160008301876135f4565b613fde60208301866135f4565b613feb6040830185613f6e565b8181036060830152613ffd8184613612565b905095945050505050565b600060208201905061401d6000830184613603565b92915050565b6000602082019050818103600083015261403d818461364b565b905092915050565b6000602082019050818103600083015261405e81613734565b9050919050565b6000602082019050818103600083015261407e81613774565b9050919050565b6000602082019050818103600083015261409e816137b4565b9050919050565b600060208201905081810360008301526140be8161381a565b9050919050565b600060208201905081810360008301526140de81613880565b9050919050565b600060208201905081810360008301526140fe816138c0565b9050919050565b6000602082019050818103600083015261411e81613926565b9050919050565b6000602082019050818103600083015261413e8161398c565b9050919050565b6000602082019050818103600083015261415e816139cc565b9050919050565b6000602082019050818103600083015261417e81613a32565b9050919050565b6000602082019050818103600083015261419e81613a98565b9050919050565b600060208201905081810360008301526141be81613ad8565b9050919050565b600060208201905081810360008301526141de81613b3e565b9050919050565b600060208201905081810360008301526141fe81613ba4565b9050919050565b6000602082019050818103600083015261421e81613c0a565b9050919050565b6000602082019050818103600083015261423e81613c4a565b9050919050565b6000602082019050818103600083015261425e81613c8a565b9050919050565b6000602082019050818103600083015261427e81613cf0565b9050919050565b6000602082019050818103600083015261429e81613d30565b9050919050565b600060208201905081810360008301526142be81613d96565b9050919050565b600060208201905081810360008301526142de81613dfc565b9050919050565b600060208201905081810360008301526142fe81613e62565b9050919050565b6000602082019050818103600083015261431e81613ec8565b9050919050565b6000602082019050818103600083015261433e81613f2e565b9050919050565b600060208201905061435a6000830184613f6e565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614387576143866147a5565b5b8060405250919050565b600067ffffffffffffffff8211156143ac576143ab6147a5565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156143d8576143d76147a5565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614404576144036147a5565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614434576144336147a5565b5b601f19601f8301169050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006144ac82614620565b91506144b783614620565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144ec576144eb614718565b5b828201905092915050565b600061450282614620565b915061450d83614620565b92508261451d5761451c614747565b5b828204905092915050565b600061453382614620565b915061453e83614620565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561457757614576614718565b5b828202905092915050565b600061458d82614620565b915061459883614620565b9250828210156145ab576145aa614718565b5b828203905092915050565b60006145c182614600565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561465757808201518184015260208101905061463c565b83811115614666576000848401525b50505050565b6000600282049050600182168061468457607f821691505b6020821081141561469857614697614776565b5b50919050565b60006146a982614620565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146dc576146db614718565b5b600182019050919050565b60006146f282614620565b91506146fd83614620565b92508261470d5761470c614747565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6147ee816145b6565b81146147f957600080fd5b50565b614805816145c8565b811461481057600080fd5b50565b61481c816145d4565b811461482757600080fd5b50565b61483381614620565b811461483e57600080fd5b5056fea2646970667358221220a3a42ad588611d8369908b1a8ece4776cc5d7dbf4533d995ef8e3df6620d296164736f6c6343000800003368747470733a2f2f322d63727970746f2e73332e616d617a6f6e6177732e636f6d2f7468652d67616e732d636f6c6c6563746976652f4e46545f4d4554412f
Deployed Bytecode
0x6080604052600436106102515760003560e01c8063779ee62811610139578063b97b808f116100b6578063c93b3f0e1161007a578063c93b3f0e14610858578063d547cfb714610881578063da065000146108ac578063de95a1a4146108d7578063e985e9c514610902578063f2fde38b1461093f57610251565b8063b97b808f14610775578063c2ce35521461079e578063c64d5af6146107c7578063c7dee0e7146107f0578063c87b56dd1461081b57610251565b8063a0712d68116100fd578063a0712d68146106b3578063a14a141f146106cf578063a22cb465146106fa578063a9dc23c214610723578063b88d4fde1461074c57610251565b8063779ee628146105cc5780638456cb59146106095780638da5cb5b1461062057806395d89b411461064b5780639f0aab541461067657610251565b80633ccfd60b116101d25780635c975abb116101965780635c975abb146104bc57806361138cda146104e75780636352211e1461051257806370a082311461054f578063715018a61461058c578063745862bf146105a357610251565b80633ccfd60b146104205780633f4ba83a1461042a57806342842e0e14610441578063516b475c1461046a5780635447fabf1461049357610251565b806311f37ceb1161021957806311f37ceb1461034f57806318160ddd1461037a57806323b872dd146103a557806328bf794d146103ce5780632c404089146103f757610251565b806301ffc9a71461025657806306fdde0314610293578063081812fc146102be578063095ea7b3146102fb5780630c1fd55314610324575b600080fd5b34801561026257600080fd5b5061027d60048036038101906102789190613538565b610968565b60405161028a9190614008565b60405180910390f35b34801561029f57600080fd5b506102a8610a4a565b6040516102b59190614023565b60405180910390f35b3480156102ca57600080fd5b506102e560048036038101906102e091906135cb565b610adc565b6040516102f29190613fa1565b60405180910390f35b34801561030757600080fd5b50610322600480360381019061031d9190613426565b610b61565b005b34801561033057600080fd5b50610339610c79565b6040516103469190614345565b60405180910390f35b34801561035b57600080fd5b50610364610c83565b6040516103719190614345565b60405180910390f35b34801561038657600080fd5b5061038f610c8d565b60405161039c9190614345565b60405180910390f35b3480156103b157600080fd5b506103cc60048036038101906103c79190613320565b610c9e565b005b3480156103da57600080fd5b506103f560048036038101906103f091906135cb565b610cfe565b005b34801561040357600080fd5b5061041e60048036038101906104199190613426565b610d84565b005b610428610ea3565b005b34801561043657600080fd5b5061043f610f93565b005b34801561044d57600080fd5b5061046860048036038101906104639190613320565b611019565b005b34801561047657600080fd5b50610491600480360381019061048c91906135cb565b611039565b005b34801561049f57600080fd5b506104ba60048036038101906104b591906135cb565b6110bf565b005b3480156104c857600080fd5b506104d1611145565b6040516104de9190614008565b60405180910390f35b3480156104f357600080fd5b506104fc61115c565b6040516105099190614345565b60405180910390f35b34801561051e57600080fd5b50610539600480360381019061053491906135cb565b611166565b6040516105469190613fa1565b60405180910390f35b34801561055b57600080fd5b50610576600480360381019061057191906132bb565b611218565b6040516105839190614345565b60405180910390f35b34801561059857600080fd5b506105a16112d0565b005b3480156105af57600080fd5b506105ca60048036038101906105c5919061358a565b611358565b005b3480156105d857600080fd5b506105f360048036038101906105ee91906132bb565b6113ee565b6040516106009190614008565b60405180910390f35b34801561061557600080fd5b5061061e61144a565b005b34801561062c57600080fd5b506106356114d0565b6040516106429190613fa1565b60405180910390f35b34801561065757600080fd5b506106606114fa565b60405161066d9190614023565b60405180910390f35b34801561068257600080fd5b5061069d600480360381019061069891906132bb565b61158c565b6040516106aa9190614345565b60405180910390f35b6106cd60048036038101906106c891906135cb565b611626565b005b3480156106db57600080fd5b506106e46118ff565b6040516106f19190614345565b60405180910390f35b34801561070657600080fd5b50610721600480360381019061071c91906133ea565b611910565b005b34801561072f57600080fd5b5061074a600480360381019061074591906134a3565b611926565b005b34801561075857600080fd5b50610773600480360381019061076e919061336f565b611a96565b005b34801561078157600080fd5b5061079c60048036038101906107979190613462565b611af8565b005b3480156107aa57600080fd5b506107c560048036038101906107c0919061350f565b611c6b565b005b3480156107d357600080fd5b506107ee60048036038101906107e991906135cb565b611d04565b005b3480156107fc57600080fd5b50610805611d8a565b6040516108129190614345565b60405180910390f35b34801561082757600080fd5b50610842600480360381019061083d91906135cb565b611d94565b60405161084f9190614023565b60405180910390f35b34801561086457600080fd5b5061087f600480360381019061087a919061350f565b611e10565b005b34801561088d57600080fd5b50610896611ea9565b6040516108a39190614023565b60405180910390f35b3480156108b857600080fd5b506108c1611f3b565b6040516108ce9190614008565b60405180910390f35b3480156108e357600080fd5b506108ec611f52565b6040516108f99190614345565b60405180910390f35b34801561090e57600080fd5b50610929600480360381019061092491906132e4565b611f63565b6040516109369190614008565b60405180910390f35b34801561094b57600080fd5b50610966600480360381019061096191906132bb565b611ff7565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a3357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a435750610a42826120ef565b5b9050919050565b606060008054610a599061466c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a859061466c565b8015610ad25780601f10610aa757610100808354040283529160200191610ad2565b820191906000526020600020905b815481529060010190602001808311610ab557829003601f168201915b5050505050905090565b6000610ae782612159565b610b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1d90614245565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b6c82611166565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd4906142e5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bfc6121c5565b73ffffffffffffffffffffffffffffffffffffffff161480610c2b5750610c2a81610c256121c5565b611f63565b5b610c6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c61906141a5565b60405180910390fd5b610c7483836121cd565b505050565b6000600c54905090565b6000600b54905090565b6000610c996008612286565b905090565b610caf610ca96121c5565b82612294565b610cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce590614305565b60405180910390fd5b610cf9838383612372565b505050565b610d066121c5565b73ffffffffffffffffffffffffffffffffffffffff16610d246114d0565b73ffffffffffffffffffffffffffffffffffffffff1614610d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7190614265565b60405180910390fd5b80600b8190555050565b610d8c6121c5565b73ffffffffffffffffffffffffffffffffffffffff16610daa6114d0565b73ffffffffffffffffffffffffffffffffffffffff1614610e00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df790614265565b60405180910390fd5b600d5481610e0e6009612286565b610e1891906144a1565b1115610e59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5090614285565b60405180910390fd5b60005b81811015610e9e57610e6e60086125ce565b610e7860096125ce565b610e8b83610e866008612286565b6125e4565b8080610e969061469e565b915050610e5c565b505050565b610eab6121c5565b73ffffffffffffffffffffffffffffffffffffffff16610ec96114d0565b73ffffffffffffffffffffffffffffffffffffffff1614610f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1690614265565b60405180910390fd5b6000600147610f2e91906144f7565b9050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050610f9057600080fd5b50565b610f9b6121c5565b73ffffffffffffffffffffffffffffffffffffffff16610fb96114d0565b73ffffffffffffffffffffffffffffffffffffffff161461100f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100690614265565b60405180910390fd5b611017612602565b565b61103483838360405180602001604052806000815250611a96565b505050565b6110416121c5565b73ffffffffffffffffffffffffffffffffffffffff1661105f6114d0565b73ffffffffffffffffffffffffffffffffffffffff16146110b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ac90614265565b60405180910390fd5b80600d8190555050565b6110c76121c5565b73ffffffffffffffffffffffffffffffffffffffff166110e56114d0565b73ffffffffffffffffffffffffffffffffffffffff161461113b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113290614265565b60405180910390fd5b80600c8190555050565b6000600660149054906101000a900460ff16905090565b6000600e54905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561120f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611206906141e5565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611289576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611280906141c5565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112d86121c5565b73ffffffffffffffffffffffffffffffffffffffff166112f66114d0565b73ffffffffffffffffffffffffffffffffffffffff161461134c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134390614265565b60405180910390fd5b61135660006126a4565b565b6113606121c5565b73ffffffffffffffffffffffffffffffffffffffff1661137e6114d0565b73ffffffffffffffffffffffffffffffffffffffff16146113d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cb90614265565b60405180910390fd5b80600f90805190602001906113ea929190612fb3565b5050565b600080600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156114405760019050611445565b600090505b919050565b6114526121c5565b73ffffffffffffffffffffffffffffffffffffffff166114706114d0565b73ffffffffffffffffffffffffffffffffffffffff16146114c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bd90614265565b60405180910390fd5b6114ce61276a565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546115099061466c565b80601f01602080910402602001604051908101604052809291908181526020018280546115359061466c565b80156115825780601f1061155757610100808354040283529160200191611582565b820191906000526020600020905b81548152906001019060200180831161156557829003601f168201915b5050505050905090565b600080600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561161c57600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611621565b600090505b919050565b60008111611669576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166090614065565b60405180910390fd5b601060019054906101000a900460ff16156116e157600061168933611218565b9050600e54828261169a91906144a1565b11156116db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d290614165565b60405180910390fd5b50611727565b600e54811115611726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171d90614165565b60405180910390fd5b5b600d54600c546117379190614582565b816117426009612286565b61174c6008612286565b6117569190614582565b61176091906144a1565b11156117a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611798906140e5565b60405180910390fd5b80600b546117af9190614528565b3410156117f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e890614205565b60405180910390fd5b60011515601060009054906101000a900460ff16151514156118c057611816336113ee565b611855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184c90614325565b60405180910390fd5b60006118603361158c565b9050600061186d33611218565b905081838261187c91906144a1565b11156118bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b490614165565b60405180910390fd5b50505b60005b818110156118fb576118d560086125ce565b6118e8336118e36008612286565b6125e4565b80806118f39061469e565b9150506118c3565b5050565b600061190b6009612286565b905090565b61192261191b6121c5565b838361280d565b5050565b61192e6121c5565b73ffffffffffffffffffffffffffffffffffffffff1661194c6114d0565b73ffffffffffffffffffffffffffffffffffffffff16146119a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199990614265565b60405180910390fd5b60005b8251811015611a915760008382815181106119e9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000838381518110611a2e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905080600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050508080611a899061469e565b9150506119a5565b505050565b611aa7611aa16121c5565b83612294565b611ae6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611add90614305565b60405180910390fd5b611af28484848461297a565b50505050565b611b006121c5565b73ffffffffffffffffffffffffffffffffffffffff16611b1e6114d0565b73ffffffffffffffffffffffffffffffffffffffff1614611b74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6b90614265565b60405180910390fd5b60005b8151811015611c67576000828281518110611bbb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611c53576000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b508080611c5f9061469e565b915050611b77565b5050565b611c736121c5565b73ffffffffffffffffffffffffffffffffffffffff16611c916114d0565b73ffffffffffffffffffffffffffffffffffffffff1614611ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cde90614265565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b611d0c6121c5565b73ffffffffffffffffffffffffffffffffffffffff16611d2a6114d0565b73ffffffffffffffffffffffffffffffffffffffff1614611d80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7790614265565b60405180910390fd5b80600e8190555050565b6000600d54905090565b6060611d9f82612159565b611dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd5906142c5565b60405180910390fd5b600f611de9836129d6565b604051602001611dfa929190613f7d565b6040516020818303038152906040529050919050565b611e186121c5565b73ffffffffffffffffffffffffffffffffffffffff16611e366114d0565b73ffffffffffffffffffffffffffffffffffffffff1614611e8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8390614265565b60405180910390fd5b80601060016101000a81548160ff02191690831515021790555050565b6060600f8054611eb89061466c565b80601f0160208091040260200160405190810160405280929190818152602001828054611ee49061466c565b8015611f315780601f10611f0657610100808354040283529160200191611f31565b820191906000526020600020905b815481529060010190602001808311611f1457829003601f168201915b5050505050905090565b6000601060009054906101000a900460ff16905090565b6000611f5e6008612286565b905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611fff6121c5565b73ffffffffffffffffffffffffffffffffffffffff1661201d6114d0565b73ffffffffffffffffffffffffffffffffffffffff1614612073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206a90614265565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120da906140a5565b60405180910390fd5b6120ec816126a4565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661224083611166565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b600061229f82612159565b6122de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d590614145565b60405180910390fd5b60006122e983611166565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061235857508373ffffffffffffffffffffffffffffffffffffffff1661234084610adc565b73ffffffffffffffffffffffffffffffffffffffff16145b8061236957506123688185611f63565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661239282611166565b73ffffffffffffffffffffffffffffffffffffffff16146123e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123df906142a5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244f90614105565b60405180910390fd5b612463838383612b83565b61246e6000826121cd565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124be9190614582565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461251591906144a1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6001816000016000828254019250508190555050565b6125fe828260405180602001604052806000815250612bdb565b5050565b61260a611145565b612649576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264090614045565b60405180910390fd5b6000600660146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61268d6121c5565b60405161269a9190613fa1565b60405180910390a1565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612772611145565b156127b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a990614185565b60405180910390fd5b6001600660146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586127f66121c5565b6040516128039190613fa1565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561287c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287390614125565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161296d9190614008565b60405180910390a3505050565b612985848484612372565b61299184848484612c36565b6129d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c790614085565b60405180910390fd5b50505050565b60606000821415612a1e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b7e565b600082905060005b60008214612a50578080612a399061469e565b915050600a82612a4991906144f7565b9150612a26565b60008167ffffffffffffffff811115612a92577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612ac45781602001600182028036833780820191505090505b5090505b60008514612b7757600182612add9190614582565b9150600a85612aec91906146e7565b6030612af891906144a1565b60f81b818381518110612b34577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b7091906144f7565b9450612ac8565b8093505050505b919050565b612b8b611145565b15612bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc290614185565b60405180910390fd5b612bd6838383612dcd565b505050565b612be58383612dd2565b612bf26000848484612c36565b612c31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2890614085565b60405180910390fd5b505050565b6000612c578473ffffffffffffffffffffffffffffffffffffffff16612fa0565b15612dc0578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c806121c5565b8786866040518563ffffffff1660e01b8152600401612ca29493929190613fbc565b602060405180830381600087803b158015612cbc57600080fd5b505af1925050508015612ced57506040513d601f19601f82011682018060405250810190612cea9190613561565b60015b612d70573d8060008114612d1d576040519150601f19603f3d011682016040523d82523d6000602084013e612d22565b606091505b50600081511415612d68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5f90614085565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612dc5565b600190505b949350505050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3990614225565b60405180910390fd5b612e4b81612159565b15612e8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e82906140c5565b60405180910390fd5b612e9760008383612b83565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ee791906144a1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612fbf9061466c565b90600052602060002090601f016020900481019282612fe15760008555613028565b82601f10612ffa57805160ff1916838001178555613028565b82800160010185558215613028579182015b8281111561302757825182559160200191906001019061300c565b5b5090506130359190613039565b5090565b5b8082111561305257600081600090555060010161303a565b5090565b600061306961306484614391565b614360565b9050808382526020820190508285602086028201111561308857600080fd5b60005b858110156130b8578161309e88826131aa565b84526020840193506020830192505060018101905061308b565b5050509392505050565b60006130d56130d0846143bd565b614360565b905080838252602082019050828560208602820111156130f457600080fd5b60005b85811015613124578161310a88826132a6565b8452602084019350602083019250506001810190506130f7565b5050509392505050565b600061314161313c846143e9565b614360565b90508281526020810184848401111561315957600080fd5b61316484828561462a565b509392505050565b600061317f61317a84614419565b614360565b90508281526020810184848401111561319757600080fd5b6131a284828561462a565b509392505050565b6000813590506131b9816147e5565b92915050565b600082601f8301126131d057600080fd5b81356131e0848260208601613056565b91505092915050565b600082601f8301126131fa57600080fd5b813561320a8482602086016130c2565b91505092915050565b600081359050613222816147fc565b92915050565b60008135905061323781614813565b92915050565b60008151905061324c81614813565b92915050565b600082601f83011261326357600080fd5b813561327384826020860161312e565b91505092915050565b600082601f83011261328d57600080fd5b813561329d84826020860161316c565b91505092915050565b6000813590506132b58161482a565b92915050565b6000602082840312156132cd57600080fd5b60006132db848285016131aa565b91505092915050565b600080604083850312156132f757600080fd5b6000613305858286016131aa565b9250506020613316858286016131aa565b9150509250929050565b60008060006060848603121561333557600080fd5b6000613343868287016131aa565b9350506020613354868287016131aa565b9250506040613365868287016132a6565b9150509250925092565b6000806000806080858703121561338557600080fd5b6000613393878288016131aa565b94505060206133a4878288016131aa565b93505060406133b5878288016132a6565b925050606085013567ffffffffffffffff8111156133d257600080fd5b6133de87828801613252565b91505092959194509250565b600080604083850312156133fd57600080fd5b600061340b858286016131aa565b925050602061341c85828601613213565b9150509250929050565b6000806040838503121561343957600080fd5b6000613447858286016131aa565b9250506020613458858286016132a6565b9150509250929050565b60006020828403121561347457600080fd5b600082013567ffffffffffffffff81111561348e57600080fd5b61349a848285016131bf565b91505092915050565b600080604083850312156134b657600080fd5b600083013567ffffffffffffffff8111156134d057600080fd5b6134dc858286016131bf565b925050602083013567ffffffffffffffff8111156134f957600080fd5b613505858286016131e9565b9150509250929050565b60006020828403121561352157600080fd5b600061352f84828501613213565b91505092915050565b60006020828403121561354a57600080fd5b600061355884828501613228565b91505092915050565b60006020828403121561357357600080fd5b60006135818482850161323d565b91505092915050565b60006020828403121561359c57600080fd5b600082013567ffffffffffffffff8111156135b657600080fd5b6135c28482850161327c565b91505092915050565b6000602082840312156135dd57600080fd5b60006135eb848285016132a6565b91505092915050565b6135fd816145b6565b82525050565b61360c816145c8565b82525050565b600061361d8261445e565b6136278185614474565b9350613637818560208601614639565b613640816147d4565b840191505092915050565b600061365682614469565b6136608185614485565b9350613670818560208601614639565b613679816147d4565b840191505092915050565b600061368f82614469565b6136998185614496565b93506136a9818560208601614639565b80840191505092915050565b600081546136c28161466c565b6136cc8186614496565b945060018216600081146136e757600181146136f85761372b565b60ff1983168652818601935061372b565b61370185614449565b60005b8381101561372357815481890152600182019150602081019050613704565b838801955050505b50505092915050565b6000613741601483614485565b91507f5061757361626c653a206e6f74207061757365640000000000000000000000006000830152602082019050919050565b6000613781601c83614485565b91507f4e65656420746f206d696e74206174206c656173742031204e46542e000000006000830152602082019050919050565b60006137c1603283614485565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000613827602683614485565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061388d601c83614485565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b60006138cd602e83614485565b91507f596f752068617665206578636565646564207468652072656d61696e696e672060008301527f6d696e7461626c65204e4654732e0000000000000000000000000000000000006020830152604082019050919050565b6000613933602483614485565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613999601983614485565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006139d9602c83614485565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613a3f602583614485565b91507f596f752068617665206578636565646564206d6178696d756d206d696e74206c60008301527f696d69742e0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613aa5601083614485565b91507f5061757361626c653a20706175736564000000000000000000000000000000006000830152602082019050919050565b6000613ae5603883614485565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000613b4b602a83614485565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613bb1602983614485565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613c17601883614485565b91507f446964206e6f742073656e6420656e6f756768204554482e00000000000000006000830152602082019050919050565b6000613c57602083614485565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000613c97602c83614485565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613cfd602083614485565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613d3d602e83614485565b91507f596f752068617665206578636565646564206d6178696d756d2072657365727660008301527f6564206d696e74206c696d69742e0000000000000000000000000000000000006020830152604082019050919050565b6000613da3602983614485565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613e09602f83614485565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613e6f602183614485565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613ed5603183614485565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613f3b601083614485565b91507f4e6f742077686974656c69737465642e000000000000000000000000000000006000830152602082019050919050565b613f7781614620565b82525050565b6000613f8982856136b5565b9150613f958284613684565b91508190509392505050565b6000602082019050613fb660008301846135f4565b92915050565b6000608082019050613fd160008301876135f4565b613fde60208301866135f4565b613feb6040830185613f6e565b8181036060830152613ffd8184613612565b905095945050505050565b600060208201905061401d6000830184613603565b92915050565b6000602082019050818103600083015261403d818461364b565b905092915050565b6000602082019050818103600083015261405e81613734565b9050919050565b6000602082019050818103600083015261407e81613774565b9050919050565b6000602082019050818103600083015261409e816137b4565b9050919050565b600060208201905081810360008301526140be8161381a565b9050919050565b600060208201905081810360008301526140de81613880565b9050919050565b600060208201905081810360008301526140fe816138c0565b9050919050565b6000602082019050818103600083015261411e81613926565b9050919050565b6000602082019050818103600083015261413e8161398c565b9050919050565b6000602082019050818103600083015261415e816139cc565b9050919050565b6000602082019050818103600083015261417e81613a32565b9050919050565b6000602082019050818103600083015261419e81613a98565b9050919050565b600060208201905081810360008301526141be81613ad8565b9050919050565b600060208201905081810360008301526141de81613b3e565b9050919050565b600060208201905081810360008301526141fe81613ba4565b9050919050565b6000602082019050818103600083015261421e81613c0a565b9050919050565b6000602082019050818103600083015261423e81613c4a565b9050919050565b6000602082019050818103600083015261425e81613c8a565b9050919050565b6000602082019050818103600083015261427e81613cf0565b9050919050565b6000602082019050818103600083015261429e81613d30565b9050919050565b600060208201905081810360008301526142be81613d96565b9050919050565b600060208201905081810360008301526142de81613dfc565b9050919050565b600060208201905081810360008301526142fe81613e62565b9050919050565b6000602082019050818103600083015261431e81613ec8565b9050919050565b6000602082019050818103600083015261433e81613f2e565b9050919050565b600060208201905061435a6000830184613f6e565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614387576143866147a5565b5b8060405250919050565b600067ffffffffffffffff8211156143ac576143ab6147a5565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156143d8576143d76147a5565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614404576144036147a5565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614434576144336147a5565b5b601f19601f8301169050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006144ac82614620565b91506144b783614620565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144ec576144eb614718565b5b828201905092915050565b600061450282614620565b915061450d83614620565b92508261451d5761451c614747565b5b828204905092915050565b600061453382614620565b915061453e83614620565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561457757614576614718565b5b828202905092915050565b600061458d82614620565b915061459883614620565b9250828210156145ab576145aa614718565b5b828203905092915050565b60006145c182614600565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561465757808201518184015260208101905061463c565b83811115614666576000848401525b50505050565b6000600282049050600182168061468457607f821691505b6020821081141561469857614697614776565b5b50919050565b60006146a982614620565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146dc576146db614718565b5b600182019050919050565b60006146f282614620565b91506146fd83614620565b92508261470d5761470c614747565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6147ee816145b6565b81146147f957600080fd5b50565b614805816145c8565b811461481057600080fd5b50565b61481c816145d4565b811461482757600080fd5b50565b61483381614620565b811461483e57600080fd5b5056fea2646970667358221220a3a42ad588611d8369908b1a8ece4776cc5d7dbf4533d995ef8e3df6620d296164736f6c63430008000033
Deployed Bytecode Sourcemap
40602:5556:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28093:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29038:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30597:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30120:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43222:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43145:74;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44017:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31347:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42549:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45582:398;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44121:154;;;:::i;:::-;;41486:56;;;;;;;;;;;;;:::i;:::-;;31757:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42737:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42637:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6182:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43405:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28732:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28462:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9081:103;;;;;;;;;;;;;:::i;:::-;;43039:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42142:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41431:52;;;;;;;;;;;;;:::i;:::-;;8430:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29207:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42376:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44289:1290;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43912:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30890:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41657:254;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32013:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41914:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41561:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42840:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43312:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43581:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42938:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43492:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42284:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43818:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31116:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9339:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28093:305;28195:4;28247:25;28232:40;;;:11;:40;;;;:105;;;;28304:33;28289:48;;;:11;:48;;;;28232:105;:158;;;;28354:36;28378:11;28354:23;:36::i;:::-;28232:158;28212:178;;28093:305;;;:::o;29038:100::-;29092:13;29125:5;29118:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29038:100;:::o;30597:221::-;30673:7;30701:16;30709:7;30701;:16::i;:::-;30693:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30786:15;:24;30802:7;30786:24;;;;;;;;;;;;;;;;;;;;;30779:31;;30597:221;;;:::o;30120:411::-;30201:13;30217:23;30232:7;30217:14;:23::i;:::-;30201:39;;30265:5;30259:11;;:2;:11;;;;30251:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;30359:5;30343:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;30368:37;30385:5;30392:12;:10;:12::i;:::-;30368:16;:37::i;:::-;30343:62;30321:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;30502:21;30511:2;30515:7;30502:8;:21::i;:::-;30120:411;;;:::o;43222:87::-;43271:7;43292:12;;43285:19;;43222:87;:::o;43145:74::-;43187:7;43208:6;;43201:13;;43145:74;:::o;44017:86::-;44061:7;44082:16;:6;:14;:16::i;:::-;44075:23;;44017:86;:::o;31347:339::-;31542:41;31561:12;:10;:12::i;:::-;31575:7;31542:18;:41::i;:::-;31534:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31650:28;31660:4;31666:2;31670:7;31650:9;:28::i;:::-;31347:339;;;:::o;42549:85::-;8661:12;:10;:12::i;:::-;8650:23;;:7;:5;:7::i;:::-;:23;;;8642:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42620:9:::1;42611:6;:18;;;;42549:85:::0;:::o;45582:398::-;8661:12;:10;:12::i;:::-;8650:23;;:7;:5;:7::i;:::-;:23;;;8642:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45755:14:::1;;45743:8;45715:25;:15;:23;:25::i;:::-;:36;;;;:::i;:::-;:54;;45707:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;45841:9;45837:137;45853:8;45851:1;:10;45837:137;;;45873:18;:6;:16;:18::i;:::-;45897:27;:15;:25;:27::i;:::-;45930:38;45940:10;45951:16;:6;:14;:16::i;:::-;45930:9;:38::i;:::-;45862:3;;;;;:::i;:::-;;;;45837:137;;;;45582:398:::0;;:::o;44121:154::-;8661:12;:10;:12::i;:::-;8650:23;;:7;:5;:7::i;:::-;:23;;;8642:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44171:13:::1;44211:1;44187:21;:25;;;;:::i;:::-;44171:41;;44233:23;;;;;;;;;;;44225:37;;:44;44263:5;44225:44;;;;;;;;;;;;;;;;;;;;;;;44217:53;;;::::0;::::1;;8721:1;44121:154::o:0;41486:56::-;8661:12;:10;:12::i;:::-;8650:23;;:7;:5;:7::i;:::-;:23;;;8642:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41527:10:::1;:8;:10::i;:::-;41486:56::o:0;31757:185::-;31895:39;31912:4;31918:2;31922:7;31895:39;;;;;;;;;;;;:16;:39::i;:::-;31757:185;;;:::o;42737:100::-;8661:12;:10;:12::i;:::-;8650:23;;:7;:5;:7::i;:::-;:23;;;8642:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42823:9:::1;42806:14;:26;;;;42737:100:::0;:::o;42637:97::-;8661:12;:10;:12::i;:::-;8650:23;;:7;:5;:7::i;:::-;:23;;;8642:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42720:9:::1;42705:12;:24;;;;42637:97:::0;:::o;6182:86::-;6229:4;6253:7;;;;;;;;;;;6246:14;;6182:86;:::o;43405:84::-;43452:7;43473:11;;43466:18;;43405:84;:::o;28732:239::-;28804:7;28824:13;28840:7;:16;28848:7;28840:16;;;;;;;;;;;;;;;;;;;;;28824:32;;28892:1;28875:19;;:5;:19;;;;28867:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28958:5;28951:12;;;28732:239;;;:::o;28462:208::-;28534:7;28579:1;28562:19;;:5;:19;;;;28554:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;28646:9;:16;28656:5;28646:16;;;;;;;;;;;;;;;;28639:23;;28462:208;;;:::o;9081:103::-;8661:12;:10;:12::i;:::-;8650:23;;:7;:5;:7::i;:::-;:23;;;8642:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9146:30:::1;9173:1;9146:18;:30::i;:::-;9081:103::o:0;43039:93::-;8661:12;:10;:12::i;:::-;8650:23;;:7;:5;:7::i;:::-;:23;;;8642:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43120:7:::1;43108:9;:19;;;;;;;;;;;;:::i;:::-;;43039:93:::0;:::o;42142:139::-;42201:4;42234:1;42215:10;:16;42226:4;42215:16;;;;;;;;;;;;;;;;:20;42212:48;;;42250:4;42243:11;;;;42212:48;42271:5;42264:12;;42142:139;;;;:::o;41431:52::-;8661:12;:10;:12::i;:::-;8650:23;;:7;:5;:7::i;:::-;:23;;;8642:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41470:8:::1;:6;:8::i;:::-;41431:52::o:0;8430:87::-;8476:7;8503:6;;;;;;;;;;;8496:13;;8430:87;:::o;29207:104::-;29263:13;29296:7;29289:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29207:104;:::o;42376:160::-;42445:7;42481:1;42462:10;:16;42473:4;42462:16;;;;;;;;;;;;;;;;:20;42459:60;;;42497:10;:16;42508:4;42497:16;;;;;;;;;;;;;;;;42490:23;;;;42459:60;42530:1;42523:8;;42376:160;;;;:::o;44289:1290::-;44390:1;44379:8;:12;44371:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;44471:19;;;;;;;;;;;44468:266;;;44498:19;44520:21;44530:10;44520:9;:21::i;:::-;44498:43;;44581:11;;44569:8;44555:11;:22;;;;:::i;:::-;:37;;44547:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;44468:266;;;;44675:11;;44663:8;:23;;44655:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;44468:266;44862:14;;44847:12;;:29;;;;:::i;:::-;44835:8;44807:25;:15;:23;:25::i;:::-;44788:16;:6;:14;:16::i;:::-;:44;;;;:::i;:::-;:55;;;;:::i;:::-;:88;;44780:147;;;;;;;;;;;;:::i;:::-;;;;;;;;;45000:8;44991:6;;:17;;;;:::i;:::-;44978:9;:30;;44970:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45093:4;45071:26;;:18;;;;;;;;;;;:26;;;45068:387;;;45141:26;45156:10;45141:14;:26::i;:::-;45133:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;45231:28;45262:36;45287:10;45262:24;:36::i;:::-;45231:67;;45304:19;45326:21;45336:10;45326:9;:21::i;:::-;45304:43;;45387:20;45375:8;45361:11;:22;;;;:::i;:::-;:46;;45353:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;45068:387;;;45475:9;45471:104;45487:8;45485:1;:10;45471:104;;;45507:18;:6;:16;:18::i;:::-;45531:38;45541:10;45552:16;:6;:14;:16::i;:::-;45531:9;:38::i;:::-;45496:3;;;;;:::i;:::-;;;;45471:104;;;;44289:1290;:::o;43912:102::-;43963:7;43984:25;:15;:23;:25::i;:::-;43977:32;;43912:102;:::o;30890:155::-;30985:52;31004:12;:10;:12::i;:::-;31018:8;31028;30985:18;:52::i;:::-;30890:155;;:::o;41657:254::-;8661:12;:10;:12::i;:::-;8650:23;;:7;:5;:7::i;:::-;:23;;;8642:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41765:6:::1;41761:146;41776:9;:16;41774:1;:18;41761:146;;;41804:12;41819:9;41829:1;41819:12;;;;;;;;;;;;;;;;;;;;;;41804:27;;41837:16;41856:9;41866:1;41856:12;;;;;;;;;;;;;;;;;;;;;;41837:31;;41893:8;41874:10;:16;41885:4;41874:16;;;;;;;;;;;;;;;:27;;;;41761:146;;41793:3;;;;;:::i;:::-;;;;41761:146;;;;41657:254:::0;;:::o;32013:328::-;32188:41;32207:12;:10;:12::i;:::-;32221:7;32188:18;:41::i;:::-;32180:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;32294:39;32308:4;32314:2;32318:7;32327:5;32294:13;:39::i;:::-;32013:328;;;;:::o;41914:225::-;8661:12;:10;:12::i;:::-;8650:23;;:7;:5;:7::i;:::-;:23;;;8642:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41999:6:::1;41995:140;42010:9;:16;42008:1;:18;41995:140;;;42038:12;42053:9;42063:1;42053:12;;;;;;;;;;;;;;;;;;;;;;42038:27;;42093:1;42074:10;:16;42085:4;42074:16;;;;;;;;;;;;;;;;:20;42071:59;;;42122:1;42103:10;:16;42114:4;42103:16;;;;;;;;;;;;;;;:20;;;;42071:59;41995:140;42027:3;;;;;:::i;:::-;;;;41995:140;;;;41914:225:::0;:::o;41561:93::-;8661:12;:10;:12::i;:::-;8650:23;;:7;:5;:7::i;:::-;:23;;;8642:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41643:6:::1;41622:18;;:27;;;;;;;;;;;;;;;;;;41561:93:::0;:::o;42840:95::-;8661:12;:10;:12::i;:::-;8650:23;;:7;:5;:7::i;:::-;:23;;;8642:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42921:9:::1;42907:11;:23;;;;42840:95:::0;:::o;43312:90::-;43362:7;43383:14;;43376:21;;43312:90;:::o;43581:234::-;43647:13;43675:17;43683:8;43675:7;:17::i;:::-;43667:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;43779:9;43789:19;:8;:17;:19::i;:::-;43762:47;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43748:62;;43581:234;;;:::o;42938:98::-;8661:12;:10;:12::i;:::-;8650:23;;:7;:5;:7::i;:::-;:23;;;8642:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43026:5:::1;43004:19;;:27;;;;;;;;;;;;;;;;;;42938:98:::0;:::o;43492:86::-;43537:13;43564:9;43557:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43492:86;:::o;42284:89::-;42332:4;42350:18;;;;;;;;;;;42343:25;;42284:89;:::o;43818:91::-;43867:7;43888:16;:6;:14;:16::i;:::-;43881:23;;43818:91;:::o;31116:164::-;31213:4;31237:18;:25;31256:5;31237:25;;;;;;;;;;;;;;;:35;31263:8;31237:35;;;;;;;;;;;;;;;;;;;;;;;;;31230:42;;31116:164;;;;:::o;9339:201::-;8661:12;:10;:12::i;:::-;8650:23;;:7;:5;:7::i;:::-;:23;;;8642:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9448:1:::1;9428:22;;:8;:22;;;;9420:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;9504:28;9523:8;9504:18;:28::i;:::-;9339:201:::0;:::o;20862:157::-;20947:4;20986:25;20971:40;;;:11;:40;;;;20964:47;;20862:157;;;:::o;33851:127::-;33916:4;33968:1;33940:30;;:7;:16;33948:7;33940:16;;;;;;;;;;;;;;;;;;;;;:30;;;;33933:37;;33851:127;;;:::o;4836:98::-;4889:7;4916:10;4909:17;;4836:98;:::o;37833:174::-;37935:2;37908:15;:24;37924:7;37908:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37991:7;37987:2;37953:46;;37962:23;37977:7;37962:14;:23::i;:::-;37953:46;;;;;;;;;;;;37833:174;;:::o;1440:114::-;1505:7;1532;:14;;;1525:21;;1440:114;;;:::o;34145:348::-;34238:4;34263:16;34271:7;34263;:16::i;:::-;34255:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34339:13;34355:23;34370:7;34355:14;:23::i;:::-;34339:39;;34408:5;34397:16;;:7;:16;;;:51;;;;34441:7;34417:31;;:20;34429:7;34417:11;:20::i;:::-;:31;;;34397:51;:87;;;;34452:32;34469:5;34476:7;34452:16;:32::i;:::-;34397:87;34389:96;;;34145:348;;;;:::o;37137:578::-;37296:4;37269:31;;:23;37284:7;37269:14;:23::i;:::-;:31;;;37261:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;37379:1;37365:16;;:2;:16;;;;37357:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;37435:39;37456:4;37462:2;37466:7;37435:20;:39::i;:::-;37539:29;37556:1;37560:7;37539:8;:29::i;:::-;37600:1;37581:9;:15;37591:4;37581:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;37629:1;37612:9;:13;37622:2;37612:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;37660:2;37641:7;:16;37649:7;37641:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;37699:7;37695:2;37680:27;;37689:4;37680:27;;;;;;;;;;;;37137:578;;;:::o;1562:127::-;1669:1;1651:7;:14;;;:19;;;;;;;;;;;1562:127;:::o;34835:110::-;34911:26;34921:2;34925:7;34911:26;;;;;;;;;;;;:9;:26::i;:::-;34835:110;;:::o;7241:120::-;6785:8;:6;:8::i;:::-;6777:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;7310:5:::1;7300:7;;:15;;;;;;;;;;;;;;;;;;7331:22;7340:12;:10;:12::i;:::-;7331:22;;;;;;:::i;:::-;;;;;;;;7241:120::o:0;9700:191::-;9774:16;9793:6;;;;;;;;;;;9774:25;;9819:8;9810:6;;:17;;;;;;;;;;;;;;;;;;9874:8;9843:40;;9864:8;9843:40;;;;;;;;;;;;9700:191;;:::o;6982:118::-;6508:8;:6;:8::i;:::-;6507:9;6499:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;7052:4:::1;7042:7;;:14;;;;;;;;;;;;;;;;;;7072:20;7079:12;:10;:12::i;:::-;7072:20;;;;;;:::i;:::-;;;;;;;;6982:118::o:0;38149:315::-;38304:8;38295:17;;:5;:17;;;;38287:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;38391:8;38353:18;:25;38372:5;38353:25;;;;;;;;;;;;;;;:35;38379:8;38353:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;38437:8;38415:41;;38430:5;38415:41;;;38447:8;38415:41;;;;;;:::i;:::-;;;;;;;;38149:315;;;:::o;33223:::-;33380:28;33390:4;33396:2;33400:7;33380:9;:28::i;:::-;33427:48;33450:4;33456:2;33460:7;33469:5;33427:22;:48::i;:::-;33419:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;33223:315;;;;:::o;2398:723::-;2454:13;2684:1;2675:5;:10;2671:53;;;2702:10;;;;;;;;;;;;;;;;;;;;;2671:53;2734:12;2749:5;2734:20;;2765:14;2790:78;2805:1;2797:4;:9;2790:78;;2823:8;;;;;:::i;:::-;;;;2854:2;2846:10;;;;;:::i;:::-;;;2790:78;;;2878:19;2910:6;2900:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2878:39;;2928:154;2944:1;2935:5;:10;2928:154;;2972:1;2962:11;;;;;:::i;:::-;;;3039:2;3031:5;:10;;;;:::i;:::-;3018:2;:24;;;;:::i;:::-;3005:39;;2988:6;2995;2988:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;3068:2;3059:11;;;;;:::i;:::-;;;2928:154;;;3106:6;3092:21;;;;;2398:723;;;;:::o;45983:170::-;6508:8;:6;:8::i;:::-;6507:9;6499:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;46102:46:::1;46129:4;46135:2;46139:8;46102:26;:46::i;:::-;45983:170:::0;;;:::o;35172:321::-;35302:18;35308:2;35312:7;35302:5;:18::i;:::-;35353:54;35384:1;35388:2;35392:7;35401:5;35353:22;:54::i;:::-;35331:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;35172:321;;;:::o;39029:799::-;39184:4;39205:15;:2;:13;;;:15::i;:::-;39201:620;;;39257:2;39241:36;;;39278:12;:10;:12::i;:::-;39292:4;39298:7;39307:5;39241:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39237:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39500:1;39483:6;:13;:18;39479:272;;;39526:60;;;;;;;;;;:::i;:::-;;;;;;;;39479:272;39701:6;39695:13;39686:6;39682:2;39678:15;39671:38;39237:529;39374:41;;;39364:51;;;:6;:51;;;;39357:58;;;;;39201:620;39805:4;39798:11;;39029:799;;;;;;;:::o;40400:126::-;;;;:::o;35829:382::-;35923:1;35909:16;;:2;:16;;;;35901:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35982:16;35990:7;35982;:16::i;:::-;35981:17;35973:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;36044:45;36073:1;36077:2;36081:7;36044:20;:45::i;:::-;36119:1;36102:9;:13;36112:2;36102:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36150:2;36131:7;:16;36139:7;36131:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36195:7;36191:2;36170:33;;36187:1;36170:33;;;;;;;;;;;;35829:382;;:::o;10718:387::-;10778:4;10986:12;11053:7;11041:20;11033:28;;11096:1;11089:4;:8;11082:15;;;10718:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:622:1:-;;145:80;160:64;217:6;160:64;:::i;:::-;145:80;:::i;:::-;136:89;;245:5;273:6;266:5;259:21;299:4;292:5;288:16;281:23;;324:6;374:3;366:4;358:6;354:17;349:3;345:27;342:36;339:2;;;391:1;388;381:12;339:2;419:1;404:236;429:6;426:1;423:13;404:236;;;496:3;524:37;557:3;545:10;524:37;:::i;:::-;519:3;512:50;591:4;586:3;582:14;575:21;;625:4;620:3;616:14;609:21;;464:176;451:1;448;444:9;439:14;;404:236;;;408:14;126:520;;;;;;;:::o;669:622::-;;790:80;805:64;862:6;805:64;:::i;:::-;790:80;:::i;:::-;781:89;;890:5;918:6;911:5;904:21;944:4;937:5;933:16;926:23;;969:6;1019:3;1011:4;1003:6;999:17;994:3;990:27;987:36;984:2;;;1036:1;1033;1026:12;984:2;1064:1;1049:236;1074:6;1071:1;1068:13;1049:236;;;1141:3;1169:37;1202:3;1190:10;1169:37;:::i;:::-;1164:3;1157:50;1236:4;1231:3;1227:14;1220:21;;1270:4;1265:3;1261:14;1254:21;;1109:176;1096:1;1093;1089:9;1084:14;;1049:236;;;1053:14;771:520;;;;;;;:::o;1297:342::-;;1399:64;1414:48;1455:6;1414:48;:::i;:::-;1399:64;:::i;:::-;1390:73;;1486:6;1479:5;1472:21;1524:4;1517:5;1513:16;1562:3;1553:6;1548:3;1544:16;1541:25;1538:2;;;1579:1;1576;1569:12;1538:2;1592:41;1626:6;1621:3;1616;1592:41;:::i;:::-;1380:259;;;;;;:::o;1645:344::-;;1748:65;1763:49;1805:6;1763:49;:::i;:::-;1748:65;:::i;:::-;1739:74;;1836:6;1829:5;1822:21;1874:4;1867:5;1863:16;1912:3;1903:6;1898:3;1894:16;1891:25;1888:2;;;1929:1;1926;1919:12;1888:2;1942:41;1976:6;1971:3;1966;1942:41;:::i;:::-;1729:260;;;;;;:::o;1995:139::-;;2079:6;2066:20;2057:29;;2095:33;2122:5;2095:33;:::i;:::-;2047:87;;;;:::o;2157:303::-;;2277:3;2270:4;2262:6;2258:17;2254:27;2244:2;;2295:1;2292;2285:12;2244:2;2335:6;2322:20;2360:94;2450:3;2442:6;2435:4;2427:6;2423:17;2360:94;:::i;:::-;2351:103;;2234:226;;;;;:::o;2483:303::-;;2603:3;2596:4;2588:6;2584:17;2580:27;2570:2;;2621:1;2618;2611:12;2570:2;2661:6;2648:20;2686:94;2776:3;2768:6;2761:4;2753:6;2749:17;2686:94;:::i;:::-;2677:103;;2560:226;;;;;:::o;2792:133::-;;2873:6;2860:20;2851:29;;2889:30;2913:5;2889:30;:::i;:::-;2841:84;;;;:::o;2931:137::-;;3014:6;3001:20;2992:29;;3030:32;3056:5;3030:32;:::i;:::-;2982:86;;;;:::o;3074:141::-;;3161:6;3155:13;3146:22;;3177:32;3203:5;3177:32;:::i;:::-;3136:79;;;;:::o;3234:271::-;;3338:3;3331:4;3323:6;3319:17;3315:27;3305:2;;3356:1;3353;3346:12;3305:2;3396:6;3383:20;3421:78;3495:3;3487:6;3480:4;3472:6;3468:17;3421:78;:::i;:::-;3412:87;;3295:210;;;;;:::o;3525:273::-;;3630:3;3623:4;3615:6;3611:17;3607:27;3597:2;;3648:1;3645;3638:12;3597:2;3688:6;3675:20;3713:79;3788:3;3780:6;3773:4;3765:6;3761:17;3713:79;:::i;:::-;3704:88;;3587:211;;;;;:::o;3804:139::-;;3888:6;3875:20;3866:29;;3904:33;3931:5;3904:33;:::i;:::-;3856:87;;;;:::o;3949:262::-;;4057:2;4045:9;4036:7;4032:23;4028:32;4025:2;;;4073:1;4070;4063:12;4025:2;4116:1;4141:53;4186:7;4177:6;4166:9;4162:22;4141:53;:::i;:::-;4131:63;;4087:117;4015:196;;;;:::o;4217:407::-;;;4342:2;4330:9;4321:7;4317:23;4313:32;4310:2;;;4358:1;4355;4348:12;4310:2;4401:1;4426:53;4471:7;4462:6;4451:9;4447:22;4426:53;:::i;:::-;4416:63;;4372:117;4528:2;4554:53;4599:7;4590:6;4579:9;4575:22;4554:53;:::i;:::-;4544:63;;4499:118;4300:324;;;;;:::o;4630:552::-;;;;4772:2;4760:9;4751:7;4747:23;4743:32;4740:2;;;4788:1;4785;4778:12;4740:2;4831:1;4856:53;4901:7;4892:6;4881:9;4877:22;4856:53;:::i;:::-;4846:63;;4802:117;4958:2;4984:53;5029:7;5020:6;5009:9;5005:22;4984:53;:::i;:::-;4974:63;;4929:118;5086:2;5112:53;5157:7;5148:6;5137:9;5133:22;5112:53;:::i;:::-;5102:63;;5057:118;4730:452;;;;;:::o;5188:809::-;;;;;5356:3;5344:9;5335:7;5331:23;5327:33;5324:2;;;5373:1;5370;5363:12;5324:2;5416:1;5441:53;5486:7;5477:6;5466:9;5462:22;5441:53;:::i;:::-;5431:63;;5387:117;5543:2;5569:53;5614:7;5605:6;5594:9;5590:22;5569:53;:::i;:::-;5559:63;;5514:118;5671:2;5697:53;5742:7;5733:6;5722:9;5718:22;5697:53;:::i;:::-;5687:63;;5642:118;5827:2;5816:9;5812:18;5799:32;5858:18;5850:6;5847:30;5844:2;;;5890:1;5887;5880:12;5844:2;5918:62;5972:7;5963:6;5952:9;5948:22;5918:62;:::i;:::-;5908:72;;5770:220;5314:683;;;;;;;:::o;6003:401::-;;;6125:2;6113:9;6104:7;6100:23;6096:32;6093:2;;;6141:1;6138;6131:12;6093:2;6184:1;6209:53;6254:7;6245:6;6234:9;6230:22;6209:53;:::i;:::-;6199:63;;6155:117;6311:2;6337:50;6379:7;6370:6;6359:9;6355:22;6337:50;:::i;:::-;6327:60;;6282:115;6083:321;;;;;:::o;6410:407::-;;;6535:2;6523:9;6514:7;6510:23;6506:32;6503:2;;;6551:1;6548;6541:12;6503:2;6594:1;6619:53;6664:7;6655:6;6644:9;6640:22;6619:53;:::i;:::-;6609:63;;6565:117;6721:2;6747:53;6792:7;6783:6;6772:9;6768:22;6747:53;:::i;:::-;6737:63;;6692:118;6493:324;;;;;:::o;6823:405::-;;6956:2;6944:9;6935:7;6931:23;6927:32;6924:2;;;6972:1;6969;6962:12;6924:2;7043:1;7032:9;7028:17;7015:31;7073:18;7065:6;7062:30;7059:2;;;7105:1;7102;7095:12;7059:2;7133:78;7203:7;7194:6;7183:9;7179:22;7133:78;:::i;:::-;7123:88;;6986:235;6914:314;;;;:::o;7234:693::-;;;7409:2;7397:9;7388:7;7384:23;7380:32;7377:2;;;7425:1;7422;7415:12;7377:2;7496:1;7485:9;7481:17;7468:31;7526:18;7518:6;7515:30;7512:2;;;7558:1;7555;7548:12;7512:2;7586:78;7656:7;7647:6;7636:9;7632:22;7586:78;:::i;:::-;7576:88;;7439:235;7741:2;7730:9;7726:18;7713:32;7772:18;7764:6;7761:30;7758:2;;;7804:1;7801;7794:12;7758:2;7832:78;7902:7;7893:6;7882:9;7878:22;7832:78;:::i;:::-;7822:88;;7684:236;7367:560;;;;;:::o;7933:256::-;;8038:2;8026:9;8017:7;8013:23;8009:32;8006:2;;;8054:1;8051;8044:12;8006:2;8097:1;8122:50;8164:7;8155:6;8144:9;8140:22;8122:50;:::i;:::-;8112:60;;8068:114;7996:193;;;;:::o;8195:260::-;;8302:2;8290:9;8281:7;8277:23;8273:32;8270:2;;;8318:1;8315;8308:12;8270:2;8361:1;8386:52;8430:7;8421:6;8410:9;8406:22;8386:52;:::i;:::-;8376:62;;8332:116;8260:195;;;;:::o;8461:282::-;;8579:2;8567:9;8558:7;8554:23;8550:32;8547:2;;;8595:1;8592;8585:12;8547:2;8638:1;8663:63;8718:7;8709:6;8698:9;8694:22;8663:63;:::i;:::-;8653:73;;8609:127;8537:206;;;;:::o;8749:375::-;;8867:2;8855:9;8846:7;8842:23;8838:32;8835:2;;;8883:1;8880;8873:12;8835:2;8954:1;8943:9;8939:17;8926:31;8984:18;8976:6;8973:30;8970:2;;;9016:1;9013;9006:12;8970:2;9044:63;9099:7;9090:6;9079:9;9075:22;9044:63;:::i;:::-;9034:73;;8897:220;8825:299;;;;:::o;9130:262::-;;9238:2;9226:9;9217:7;9213:23;9209:32;9206:2;;;9254:1;9251;9244:12;9206:2;9297:1;9322:53;9367:7;9358:6;9347:9;9343:22;9322:53;:::i;:::-;9312:63;;9268:117;9196:196;;;;:::o;9398:118::-;9485:24;9503:5;9485:24;:::i;:::-;9480:3;9473:37;9463:53;;:::o;9522:109::-;9603:21;9618:5;9603:21;:::i;:::-;9598:3;9591:34;9581:50;;:::o;9637:360::-;;9751:38;9783:5;9751:38;:::i;:::-;9805:70;9868:6;9863:3;9805:70;:::i;:::-;9798:77;;9884:52;9929:6;9924:3;9917:4;9910:5;9906:16;9884:52;:::i;:::-;9961:29;9983:6;9961:29;:::i;:::-;9956:3;9952:39;9945:46;;9727:270;;;;;:::o;10003:364::-;;10119:39;10152:5;10119:39;:::i;:::-;10174:71;10238:6;10233:3;10174:71;:::i;:::-;10167:78;;10254:52;10299:6;10294:3;10287:4;10280:5;10276:16;10254:52;:::i;:::-;10331:29;10353:6;10331:29;:::i;:::-;10326:3;10322:39;10315:46;;10095:272;;;;;:::o;10373:377::-;;10507:39;10540:5;10507:39;:::i;:::-;10562:89;10644:6;10639:3;10562:89;:::i;:::-;10555:96;;10660:52;10705:6;10700:3;10693:4;10686:5;10682:16;10660:52;:::i;:::-;10737:6;10732:3;10728:16;10721:23;;10483:267;;;;;:::o;10780:845::-;;10920:5;10914:12;10949:36;10975:9;10949:36;:::i;:::-;11001:89;11083:6;11078:3;11001:89;:::i;:::-;10994:96;;11121:1;11110:9;11106:17;11137:1;11132:137;;;;11283:1;11278:341;;;;11099:520;;11132:137;11216:4;11212:9;11201;11197:25;11192:3;11185:38;11252:6;11247:3;11243:16;11236:23;;11132:137;;11278:341;11345:38;11377:5;11345:38;:::i;:::-;11405:1;11419:154;11433:6;11430:1;11427:13;11419:154;;;11507:7;11501:14;11497:1;11492:3;11488:11;11481:35;11557:1;11548:7;11544:15;11533:26;;11455:4;11452:1;11448:12;11443:17;;11419:154;;;11602:6;11597:3;11593:16;11586:23;;11285:334;;11099:520;;10887:738;;;;;;:::o;11631:318::-;;11794:67;11858:2;11853:3;11794:67;:::i;:::-;11787:74;;11891:22;11887:1;11882:3;11878:11;11871:43;11940:2;11935:3;11931:12;11924:19;;11777:172;;;:::o;11955:326::-;;12118:67;12182:2;12177:3;12118:67;:::i;:::-;12111:74;;12215:30;12211:1;12206:3;12202:11;12195:51;12272:2;12267:3;12263:12;12256:19;;12101:180;;;:::o;12287:382::-;;12450:67;12514:2;12509:3;12450:67;:::i;:::-;12443:74;;12547:34;12543:1;12538:3;12534:11;12527:55;12613:20;12608:2;12603:3;12599:12;12592:42;12660:2;12655:3;12651:12;12644:19;;12433:236;;;:::o;12675:370::-;;12838:67;12902:2;12897:3;12838:67;:::i;:::-;12831:74;;12935:34;12931:1;12926:3;12922:11;12915:55;13001:8;12996:2;12991:3;12987:12;12980:30;13036:2;13031:3;13027:12;13020:19;;12821:224;;;:::o;13051:326::-;;13214:67;13278:2;13273:3;13214:67;:::i;:::-;13207:74;;13311:30;13307:1;13302:3;13298:11;13291:51;13368:2;13363:3;13359:12;13352:19;;13197:180;;;:::o;13383:378::-;;13546:67;13610:2;13605:3;13546:67;:::i;:::-;13539:74;;13643:34;13639:1;13634:3;13630:11;13623:55;13709:16;13704:2;13699:3;13695:12;13688:38;13752:2;13747:3;13743:12;13736:19;;13529:232;;;:::o;13767:368::-;;13930:67;13994:2;13989:3;13930:67;:::i;:::-;13923:74;;14027:34;14023:1;14018:3;14014:11;14007:55;14093:6;14088:2;14083:3;14079:12;14072:28;14126:2;14121:3;14117:12;14110:19;;13913:222;;;:::o;14141:323::-;;14304:67;14368:2;14363:3;14304:67;:::i;:::-;14297:74;;14401:27;14397:1;14392:3;14388:11;14381:48;14455:2;14450:3;14446:12;14439:19;;14287:177;;;:::o;14470:376::-;;14633:67;14697:2;14692:3;14633:67;:::i;:::-;14626:74;;14730:34;14726:1;14721:3;14717:11;14710:55;14796:14;14791:2;14786:3;14782:12;14775:36;14837:2;14832:3;14828:12;14821:19;;14616:230;;;:::o;14852:369::-;;15015:67;15079:2;15074:3;15015:67;:::i;:::-;15008:74;;15112:34;15108:1;15103:3;15099:11;15092:55;15178:7;15173:2;15168:3;15164:12;15157:29;15212:2;15207:3;15203:12;15196:19;;14998:223;;;:::o;15227:314::-;;15390:67;15454:2;15449:3;15390:67;:::i;:::-;15383:74;;15487:18;15483:1;15478:3;15474:11;15467:39;15532:2;15527:3;15523:12;15516:19;;15373:168;;;:::o;15547:388::-;;15710:67;15774:2;15769:3;15710:67;:::i;:::-;15703:74;;15807:34;15803:1;15798:3;15794:11;15787:55;15873:26;15868:2;15863:3;15859:12;15852:48;15926:2;15921:3;15917:12;15910:19;;15693:242;;;:::o;15941:374::-;;16104:67;16168:2;16163:3;16104:67;:::i;:::-;16097:74;;16201:34;16197:1;16192:3;16188:11;16181:55;16267:12;16262:2;16257:3;16253:12;16246:34;16306:2;16301:3;16297:12;16290:19;;16087:228;;;:::o;16321:373::-;;16484:67;16548:2;16543:3;16484:67;:::i;:::-;16477:74;;16581:34;16577:1;16572:3;16568:11;16561:55;16647:11;16642:2;16637:3;16633:12;16626:33;16685:2;16680:3;16676:12;16669:19;;16467:227;;;:::o;16700:322::-;;16863:67;16927:2;16922:3;16863:67;:::i;:::-;16856:74;;16960:26;16956:1;16951:3;16947:11;16940:47;17013:2;17008:3;17004:12;16997:19;;16846:176;;;:::o;17028:330::-;;17191:67;17255:2;17250:3;17191:67;:::i;:::-;17184:74;;17288:34;17284:1;17279:3;17275:11;17268:55;17349:2;17344:3;17340:12;17333:19;;17174:184;;;:::o;17364:376::-;;17527:67;17591:2;17586:3;17527:67;:::i;:::-;17520:74;;17624:34;17620:1;17615:3;17611:11;17604:55;17690:14;17685:2;17680:3;17676:12;17669:36;17731:2;17726:3;17722:12;17715:19;;17510:230;;;:::o;17746:330::-;;17909:67;17973:2;17968:3;17909:67;:::i;:::-;17902:74;;18006:34;18002:1;17997:3;17993:11;17986:55;18067:2;18062:3;18058:12;18051:19;;17892:184;;;:::o;18082:378::-;;18245:67;18309:2;18304:3;18245:67;:::i;:::-;18238:74;;18342:34;18338:1;18333:3;18329:11;18322:55;18408:16;18403:2;18398:3;18394:12;18387:38;18451:2;18446:3;18442:12;18435:19;;18228:232;;;:::o;18466:373::-;;18629:67;18693:2;18688:3;18629:67;:::i;:::-;18622:74;;18726:34;18722:1;18717:3;18713:11;18706:55;18792:11;18787:2;18782:3;18778:12;18771:33;18830:2;18825:3;18821:12;18814:19;;18612:227;;;:::o;18845:379::-;;19008:67;19072:2;19067:3;19008:67;:::i;:::-;19001:74;;19105:34;19101:1;19096:3;19092:11;19085:55;19171:17;19166:2;19161:3;19157:12;19150:39;19215:2;19210:3;19206:12;19199:19;;18991:233;;;:::o;19230:365::-;;19393:67;19457:2;19452:3;19393:67;:::i;:::-;19386:74;;19490:34;19486:1;19481:3;19477:11;19470:55;19556:3;19551:2;19546:3;19542:12;19535:25;19586:2;19581:3;19577:12;19570:19;;19376:219;;;:::o;19601:381::-;;19764:67;19828:2;19823:3;19764:67;:::i;:::-;19757:74;;19861:34;19857:1;19852:3;19848:11;19841:55;19927:19;19922:2;19917:3;19913:12;19906:41;19973:2;19968:3;19964:12;19957:19;;19747:235;;;:::o;19988:314::-;;20151:67;20215:2;20210:3;20151:67;:::i;:::-;20144:74;;20248:18;20244:1;20239:3;20235:11;20228:39;20293:2;20288:3;20284:12;20277:19;;20134:168;;;:::o;20308:118::-;20395:24;20413:5;20395:24;:::i;:::-;20390:3;20383:37;20373:53;;:::o;20432:429::-;;20631:92;20719:3;20710:6;20631:92;:::i;:::-;20624:99;;20740:95;20831:3;20822:6;20740:95;:::i;:::-;20733:102;;20852:3;20845:10;;20613:248;;;;;:::o;20867:222::-;;20998:2;20987:9;20983:18;20975:26;;21011:71;21079:1;21068:9;21064:17;21055:6;21011:71;:::i;:::-;20965:124;;;;:::o;21095:640::-;;21328:3;21317:9;21313:19;21305:27;;21342:71;21410:1;21399:9;21395:17;21386:6;21342:71;:::i;:::-;21423:72;21491:2;21480:9;21476:18;21467:6;21423:72;:::i;:::-;21505;21573:2;21562:9;21558:18;21549:6;21505:72;:::i;:::-;21624:9;21618:4;21614:20;21609:2;21598:9;21594:18;21587:48;21652:76;21723:4;21714:6;21652:76;:::i;:::-;21644:84;;21295:440;;;;;;;:::o;21741:210::-;;21866:2;21855:9;21851:18;21843:26;;21879:65;21941:1;21930:9;21926:17;21917:6;21879:65;:::i;:::-;21833:118;;;;:::o;21957:313::-;;22108:2;22097:9;22093:18;22085:26;;22157:9;22151:4;22147:20;22143:1;22132:9;22128:17;22121:47;22185:78;22258:4;22249:6;22185:78;:::i;:::-;22177:86;;22075:195;;;;:::o;22276:419::-;;22480:2;22469:9;22465:18;22457:26;;22529:9;22523:4;22519:20;22515:1;22504:9;22500:17;22493:47;22557:131;22683:4;22557:131;:::i;:::-;22549:139;;22447:248;;;:::o;22701:419::-;;22905:2;22894:9;22890:18;22882:26;;22954:9;22948:4;22944:20;22940:1;22929:9;22925:17;22918:47;22982:131;23108:4;22982:131;:::i;:::-;22974:139;;22872:248;;;:::o;23126:419::-;;23330:2;23319:9;23315:18;23307:26;;23379:9;23373:4;23369:20;23365:1;23354:9;23350:17;23343:47;23407:131;23533:4;23407:131;:::i;:::-;23399:139;;23297:248;;;:::o;23551:419::-;;23755:2;23744:9;23740:18;23732:26;;23804:9;23798:4;23794:20;23790:1;23779:9;23775:17;23768:47;23832:131;23958:4;23832:131;:::i;:::-;23824:139;;23722:248;;;:::o;23976:419::-;;24180:2;24169:9;24165:18;24157:26;;24229:9;24223:4;24219:20;24215:1;24204:9;24200:17;24193:47;24257:131;24383:4;24257:131;:::i;:::-;24249:139;;24147:248;;;:::o;24401:419::-;;24605:2;24594:9;24590:18;24582:26;;24654:9;24648:4;24644:20;24640:1;24629:9;24625:17;24618:47;24682:131;24808:4;24682:131;:::i;:::-;24674:139;;24572:248;;;:::o;24826:419::-;;25030:2;25019:9;25015:18;25007:26;;25079:9;25073:4;25069:20;25065:1;25054:9;25050:17;25043:47;25107:131;25233:4;25107:131;:::i;:::-;25099:139;;24997:248;;;:::o;25251:419::-;;25455:2;25444:9;25440:18;25432:26;;25504:9;25498:4;25494:20;25490:1;25479:9;25475:17;25468:47;25532:131;25658:4;25532:131;:::i;:::-;25524:139;;25422:248;;;:::o;25676:419::-;;25880:2;25869:9;25865:18;25857:26;;25929:9;25923:4;25919:20;25915:1;25904:9;25900:17;25893:47;25957:131;26083:4;25957:131;:::i;:::-;25949:139;;25847:248;;;:::o;26101:419::-;;26305:2;26294:9;26290:18;26282:26;;26354:9;26348:4;26344:20;26340:1;26329:9;26325:17;26318:47;26382:131;26508:4;26382:131;:::i;:::-;26374:139;;26272:248;;;:::o;26526:419::-;;26730:2;26719:9;26715:18;26707:26;;26779:9;26773:4;26769:20;26765:1;26754:9;26750:17;26743:47;26807:131;26933:4;26807:131;:::i;:::-;26799:139;;26697:248;;;:::o;26951:419::-;;27155:2;27144:9;27140:18;27132:26;;27204:9;27198:4;27194:20;27190:1;27179:9;27175:17;27168:47;27232:131;27358:4;27232:131;:::i;:::-;27224:139;;27122:248;;;:::o;27376:419::-;;27580:2;27569:9;27565:18;27557:26;;27629:9;27623:4;27619:20;27615:1;27604:9;27600:17;27593:47;27657:131;27783:4;27657:131;:::i;:::-;27649:139;;27547:248;;;:::o;27801:419::-;;28005:2;27994:9;27990:18;27982:26;;28054:9;28048:4;28044:20;28040:1;28029:9;28025:17;28018:47;28082:131;28208:4;28082:131;:::i;:::-;28074:139;;27972:248;;;:::o;28226:419::-;;28430:2;28419:9;28415:18;28407:26;;28479:9;28473:4;28469:20;28465:1;28454:9;28450:17;28443:47;28507:131;28633:4;28507:131;:::i;:::-;28499:139;;28397:248;;;:::o;28651:419::-;;28855:2;28844:9;28840:18;28832:26;;28904:9;28898:4;28894:20;28890:1;28879:9;28875:17;28868:47;28932:131;29058:4;28932:131;:::i;:::-;28924:139;;28822:248;;;:::o;29076:419::-;;29280:2;29269:9;29265:18;29257:26;;29329:9;29323:4;29319:20;29315:1;29304:9;29300:17;29293:47;29357:131;29483:4;29357:131;:::i;:::-;29349:139;;29247:248;;;:::o;29501:419::-;;29705:2;29694:9;29690:18;29682:26;;29754:9;29748:4;29744:20;29740:1;29729:9;29725:17;29718:47;29782:131;29908:4;29782:131;:::i;:::-;29774:139;;29672:248;;;:::o;29926:419::-;;30130:2;30119:9;30115:18;30107:26;;30179:9;30173:4;30169:20;30165:1;30154:9;30150:17;30143:47;30207:131;30333:4;30207:131;:::i;:::-;30199:139;;30097:248;;;:::o;30351:419::-;;30555:2;30544:9;30540:18;30532:26;;30604:9;30598:4;30594:20;30590:1;30579:9;30575:17;30568:47;30632:131;30758:4;30632:131;:::i;:::-;30624:139;;30522:248;;;:::o;30776:419::-;;30980:2;30969:9;30965:18;30957:26;;31029:9;31023:4;31019:20;31015:1;31004:9;31000:17;30993:47;31057:131;31183:4;31057:131;:::i;:::-;31049:139;;30947:248;;;:::o;31201:419::-;;31405:2;31394:9;31390:18;31382:26;;31454:9;31448:4;31444:20;31440:1;31429:9;31425:17;31418:47;31482:131;31608:4;31482:131;:::i;:::-;31474:139;;31372:248;;;:::o;31626:419::-;;31830:2;31819:9;31815:18;31807:26;;31879:9;31873:4;31869:20;31865:1;31854:9;31850:17;31843:47;31907:131;32033:4;31907:131;:::i;:::-;31899:139;;31797:248;;;:::o;32051:419::-;;32255:2;32244:9;32240:18;32232:26;;32304:9;32298:4;32294:20;32290:1;32279:9;32275:17;32268:47;32332:131;32458:4;32332:131;:::i;:::-;32324:139;;32222:248;;;:::o;32476:222::-;;32607:2;32596:9;32592:18;32584:26;;32620:71;32688:1;32677:9;32673:17;32664:6;32620:71;:::i;:::-;32574:124;;;;:::o;32704:283::-;;32770:2;32764:9;32754:19;;32812:4;32804:6;32800:17;32919:6;32907:10;32904:22;32883:18;32871:10;32868:34;32865:62;32862:2;;;32930:18;;:::i;:::-;32862:2;32970:10;32966:2;32959:22;32744:243;;;;:::o;32993:311::-;;33160:18;33152:6;33149:30;33146:2;;;33182:18;;:::i;:::-;33146:2;33232:4;33224:6;33220:17;33212:25;;33292:4;33286;33282:15;33274:23;;33075:229;;;:::o;33310:311::-;;33477:18;33469:6;33466:30;33463:2;;;33499:18;;:::i;:::-;33463:2;33549:4;33541:6;33537:17;33529:25;;33609:4;33603;33599:15;33591:23;;33392:229;;;:::o;33627:331::-;;33778:18;33770:6;33767:30;33764:2;;;33800:18;;:::i;:::-;33764:2;33885:4;33881:9;33874:4;33866:6;33862:17;33858:33;33850:41;;33946:4;33940;33936:15;33928:23;;33693:265;;;:::o;33964:332::-;;34116:18;34108:6;34105:30;34102:2;;;34138:18;;:::i;:::-;34102:2;34223:4;34219:9;34212:4;34204:6;34200:17;34196:33;34188:41;;34284:4;34278;34274:15;34266:23;;34031:265;;;:::o;34302:141::-;;34374:3;34366:11;;34397:3;34394:1;34387:14;34431:4;34428:1;34418:18;34410:26;;34356:87;;;:::o;34449:98::-;;34534:5;34528:12;34518:22;;34507:40;;;:::o;34553:99::-;;34639:5;34633:12;34623:22;;34612:40;;;:::o;34658:168::-;;34775:6;34770:3;34763:19;34815:4;34810:3;34806:14;34791:29;;34753:73;;;;:::o;34832:169::-;;34950:6;34945:3;34938:19;34990:4;34985:3;34981:14;34966:29;;34928:73;;;;:::o;35007:148::-;;35146:3;35131:18;;35121:34;;;;:::o;35161:305::-;;35220:20;35238:1;35220:20;:::i;:::-;35215:25;;35254:20;35272:1;35254:20;:::i;:::-;35249:25;;35408:1;35340:66;35336:74;35333:1;35330:81;35327:2;;;35414:18;;:::i;:::-;35327:2;35458:1;35455;35451:9;35444:16;;35205:261;;;;:::o;35472:185::-;;35529:20;35547:1;35529:20;:::i;:::-;35524:25;;35563:20;35581:1;35563:20;:::i;:::-;35558:25;;35602:1;35592:2;;35607:18;;:::i;:::-;35592:2;35649:1;35646;35642:9;35637:14;;35514:143;;;;:::o;35663:348::-;;35726:20;35744:1;35726:20;:::i;:::-;35721:25;;35760:20;35778:1;35760:20;:::i;:::-;35755:25;;35948:1;35880:66;35876:74;35873:1;35870:81;35865:1;35858:9;35851:17;35847:105;35844:2;;;35955:18;;:::i;:::-;35844:2;36003:1;36000;35996:9;35985:20;;35711:300;;;;:::o;36017:191::-;;36077:20;36095:1;36077:20;:::i;:::-;36072:25;;36111:20;36129:1;36111:20;:::i;:::-;36106:25;;36150:1;36147;36144:8;36141:2;;;36155:18;;:::i;:::-;36141:2;36200:1;36197;36193:9;36185:17;;36062:146;;;;:::o;36214:96::-;;36280:24;36298:5;36280:24;:::i;:::-;36269:35;;36259:51;;;:::o;36316:90::-;;36393:5;36386:13;36379:21;36368:32;;36358:48;;;:::o;36412:149::-;;36488:66;36481:5;36477:78;36466:89;;36456:105;;;:::o;36567:126::-;;36644:42;36637:5;36633:54;36622:65;;36612:81;;;:::o;36699:77::-;;36765:5;36754:16;;36744:32;;;:::o;36782:154::-;36866:6;36861:3;36856;36843:30;36928:1;36919:6;36914:3;36910:16;36903:27;36833:103;;;:::o;36942:307::-;37010:1;37020:113;37034:6;37031:1;37028:13;37020:113;;;37119:1;37114:3;37110:11;37104:18;37100:1;37095:3;37091:11;37084:39;37056:2;37053:1;37049:10;37044:15;;37020:113;;;37151:6;37148:1;37145:13;37142:2;;;37231:1;37222:6;37217:3;37213:16;37206:27;37142:2;36991:258;;;;:::o;37255:320::-;;37336:1;37330:4;37326:12;37316:22;;37383:1;37377:4;37373:12;37404:18;37394:2;;37460:4;37452:6;37448:17;37438:27;;37394:2;37522;37514:6;37511:14;37491:18;37488:38;37485:2;;;37541:18;;:::i;:::-;37485:2;37306:269;;;;:::o;37581:233::-;;37643:24;37661:5;37643:24;:::i;:::-;37634:33;;37689:66;37682:5;37679:77;37676:2;;;37759:18;;:::i;:::-;37676:2;37806:1;37799:5;37795:13;37788:20;;37624:190;;;:::o;37820:176::-;;37869:20;37887:1;37869:20;:::i;:::-;37864:25;;37903:20;37921:1;37903:20;:::i;:::-;37898:25;;37942:1;37932:2;;37947:18;;:::i;:::-;37932:2;37988:1;37985;37981:9;37976:14;;37854:142;;;;:::o;38002:180::-;38050:77;38047:1;38040:88;38147:4;38144:1;38137:15;38171:4;38168:1;38161:15;38188:180;38236:77;38233:1;38226:88;38333:4;38330:1;38323:15;38357:4;38354:1;38347:15;38374:180;38422:77;38419:1;38412:88;38519:4;38516:1;38509:15;38543:4;38540:1;38533:15;38560:180;38608:77;38605:1;38598:88;38705:4;38702:1;38695:15;38729:4;38726:1;38719:15;38746:102;;38838:2;38834:7;38829:2;38822:5;38818:14;38814:28;38804:38;;38794:54;;;:::o;38854:122::-;38927:24;38945:5;38927:24;:::i;:::-;38920:5;38917:35;38907:2;;38966:1;38963;38956:12;38907:2;38897:79;:::o;38982:116::-;39052:21;39067:5;39052:21;:::i;:::-;39045:5;39042:32;39032:2;;39088:1;39085;39078:12;39032:2;39022:76;:::o;39104:120::-;39176:23;39193:5;39176:23;:::i;:::-;39169:5;39166:34;39156:2;;39214:1;39211;39204:12;39156:2;39146:78;:::o;39230:122::-;39303:24;39321:5;39303:24;:::i;:::-;39296:5;39293:35;39283:2;;39342:1;39339;39332:12;39283:2;39273:79;:::o
Swarm Source
ipfs://a3a42ad588611d8369908b1a8ece4776cc5d7dbf4533d995ef8e3df6620d2961
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.