More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 2,124 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Safe Transfer Fr... | 19004654 | 6 days ago | IN | 0 CRO | 0.41677913 | ||||
Safe Transfer Fr... | 19004648 | 6 days ago | IN | 0 CRO | 0.46033466 | ||||
Safe Transfer Fr... | 19004642 | 6 days ago | IN | 0 CRO | 0.38904607 | ||||
Safe Transfer Fr... | 19004635 | 6 days ago | IN | 0 CRO | 0.46033466 | ||||
Set Approval For... | 18475396 | 41 days ago | IN | 0 CRO | 0.18588311 | ||||
Set Approval For... | 18462668 | 41 days ago | IN | 0 CRO | 0.10158465 | ||||
Set Approval For... | 18462653 | 41 days ago | IN | 0 CRO | 0.17693351 | ||||
Safe Transfer Fr... | 18461973 | 41 days ago | IN | 0 CRO | 0.15067544 | ||||
Set Approval For... | 18243275 | 56 days ago | IN | 0 CRO | 0.17697895 | ||||
Set Approval For... | 17955732 | 75 days ago | IN | 0 CRO | 0.1540708 | ||||
Set Approval For... | 17955206 | 75 days ago | IN | 0 CRO | 0.1570337 | ||||
Set Approval For... | 17722652 | 90 days ago | IN | 0 CRO | 0.23597193 | ||||
Safe Transfer Fr... | 17433310 | 109 days ago | IN | 0 CRO | 0.4908707 | ||||
Safe Transfer Fr... | 17234537 | 122 days ago | IN | 0 CRO | 0.50956015 | ||||
Safe Transfer Fr... | 17234533 | 122 days ago | IN | 0 CRO | 0.50956015 | ||||
Safe Transfer Fr... | 17234413 | 122 days ago | IN | 0 CRO | 0.50962075 | ||||
Safe Transfer Fr... | 17226795 | 122 days ago | IN | 0 CRO | 0.5482785 | ||||
Safe Transfer Fr... | 17219146 | 123 days ago | IN | 0 CRO | 0.50962075 | ||||
Safe Transfer Fr... | 17152546 | 127 days ago | IN | 0 CRO | 0.50962075 | ||||
Safe Transfer Fr... | 17148991 | 127 days ago | IN | 0 CRO | 0.50962075 | ||||
Safe Transfer Fr... | 17148103 | 127 days ago | IN | 0 CRO | 0.5482785 | ||||
Safe Transfer Fr... | 17098379 | 131 days ago | IN | 0 CRO | 0.5623579 | ||||
Safe Transfer Fr... | 17098338 | 131 days ago | IN | 0 CRO | 0.5624185 | ||||
Safe Transfer Fr... | 17083485 | 132 days ago | IN | 0 CRO | 0.5482785 | ||||
Set Approval For... | 17068584 | 133 days ago | IN | 0 CRO | 0.23597193 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
14289190 | 315 days ago | 2,110.8 CRO | ||||
14289190 | 315 days ago | 1,583.1 CRO | ||||
14289190 | 315 days ago | 791.55 CRO | ||||
14289190 | 315 days ago | 527.7 CRO | ||||
14289190 | 315 days ago | 263.85 CRO | ||||
13352873 | 377 days ago | 1,671.6 CRO | ||||
13352873 | 377 days ago | 1,253.7 CRO | ||||
13352873 | 377 days ago | 626.85 CRO | ||||
13352873 | 377 days ago | 417.9 CRO | ||||
13352873 | 377 days ago | 208.95 CRO | ||||
12460624 | 435 days ago | 5,382 CRO | ||||
12460624 | 435 days ago | 4,036.5 CRO | ||||
12460624 | 435 days ago | 2,018.25 CRO | ||||
12460624 | 435 days ago | 1,345.5 CRO | ||||
12460624 | 435 days ago | 672.75 CRO | ||||
11773769 | 480 days ago | 11,043.2 CRO | ||||
11773769 | 480 days ago | 8,282.4 CRO | ||||
11773769 | 480 days ago | 4,141.2 CRO | ||||
11773769 | 480 days ago | 2,760.8 CRO | ||||
11773769 | 480 days ago | 1,380.4 CRO | ||||
11676114 | 486 days ago | 7,056.4 CRO | ||||
11676114 | 486 days ago | 5,292.3 CRO | ||||
11676114 | 486 days ago | 2,646.15 CRO | ||||
11676114 | 486 days ago | 1,764.1 CRO | ||||
11676114 | 486 days ago | 882.05 CRO |
Loading...
Loading
Contract Name:
NoBuGen3D
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2022-08-21 */ // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @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); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.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 Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.7.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: address zero is not a valid owner"); 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: invalid token ID"); 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) { _requireMinted(tokenId); 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 overridden 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 token owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { _requireMinted(tokenId); 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: caller is not token 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: caller is not token 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) { address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == 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); _afterTokenTransfer(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); _afterTokenTransfer(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 from incorrect owner"); 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); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits an {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 an {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 Reverts if the `tokenId` has not been minted yet. */ function _requireMinted(uint256 tokenId) internal view virtual { require(_exists(tokenId), "ERC721: invalid token ID"); } /** * @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 { /// @solidity memory-safe-assembly 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 {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @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` cannot be the zero address. * - `to` cannot be the zero address. * * 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 override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: contracts/3_Ballot.sol pragma solidity 0.8.9; contract NoBuGen3D is ERC721Enumerable, Ownable { using Strings for uint256; string baseURI; string public baseExtension = ".json"; uint256 public cost = 499 ether; uint256 public wlCost = 449 ether; uint256 public memberCost = 399 ether; uint256 constant public maxSupply = 3333; bool public paused = false; uint256[maxSupply] internal availableIds; mapping(address => bool) public whitelisted; address public marketingWallet = 0xa2Be3029E6168540FC48017F43ec6691faa30E2f; uint256 public marketingFee = 50; address public artistWallet = 0x40A2D2CFd09A6A743a26B808dCbAc8E0a3C183ac; uint256 public artistFee = 100; address public teamWallet = 0x2713Ebec92C27E52d953b5d5911364b0815dbe05; uint256 public teamFee = 150; address public creatorWallet = 0x89C3e96498efBf91633Eb2E4D36002f61eD805B8; uint256 public creatorFee = 300; address public projectWallet = 0x2B48Ff95E577b4dDdd0bFe9473C945D574e4e4E7; uint256 public projectFee = 400; uint256 constant SCALE = 1000; IERC721 public INoBu; constructor(string memory _initBaseURI, address _nobu) ERC721("NoBuddies Gen3D", "NB3D") { setBaseURI(_initBaseURI); INoBu = IERC721(_nobu); _mintForTeam(); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function _getNewId(uint256 _totalMinted) internal returns(uint256 value) { uint256 remaining = maxSupply - _totalMinted; uint256 rand = uint256(keccak256(abi.encodePacked(msg.sender, block.difficulty, block.timestamp, remaining))) % remaining; value = 0; // if array value exists, use, otherwise, use generated random value if (availableIds[rand] != 0) value = availableIds[rand]; else value = rand; // store remaining - 1 in used ID to create mapping if (availableIds[remaining - 1] == 0) availableIds[rand] = remaining - 1; else availableIds[rand] = availableIds[remaining - 1]; value += 1; } // public function mint(uint256 amount) public payable { require(!paused, "paused"); require(amount > 0, "amount shouldn't be zero"); uint256 supply = totalSupply(); require(supply + amount <= maxSupply, "Max supply exceeded"); uint256 price = cost; if ( whitelisted[msg.sender] ) price = wlCost; if (isMember(msg.sender)) price = memberCost; require(msg.value >= price * amount, "insufficient funds"); for (uint256 i = 0; i < amount; i++) { _safeMint(msg.sender, _getNewId(supply+i)); } } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string( abi.encodePacked( currentBaseURI, tokenId.toString(), baseExtension ) ) : ""; } function isMember(address _address) public view returns (bool) { return INoBu.balanceOf(_address) > 0; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setWlCost(uint256 _newCost) public onlyOwner { wlCost = _newCost; } function setMemberCost(uint256 _newMemberCost) public onlyOwner { memberCost = _newMemberCost; } function setWhitelisted(address _address, bool _whitelisted) public onlyOwner { whitelisted[_address] = _whitelisted; } function setWhitelistAddresses(address[] memory addresses) public onlyOwner { for (uint i = 0; i < addresses.length; i++) { whitelisted[addresses[i]] = true; } } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function pause(bool _state) public onlyOwner { paused = _state; } function airdropNFTs( address[] memory _holders, uint256[] memory _counts ) external onlyOwner { require(_holders.length == _counts.length, "Input Data error"); uint256 supply = totalSupply(); for (uint256 i = 0; i < _holders.length; i++) { for (uint256 j = 0; j < _counts[i]; j++) { _safeMint(_holders[i], _getNewId(supply+j)); } supply += _counts[i]; } } function mintCost(address _minter) external view returns (uint256) { if (isMember(_minter) == true) return memberCost; if (whitelisted[_minter]) return wlCost; return cost; } function withdraw() external { uint256 balance = address(this).balance; uint256 marketing = balance * marketingFee / SCALE; uint256 artist = balance * artistFee / SCALE; uint256 team = balance * teamFee / SCALE; uint256 creator = balance * creatorFee / SCALE; (bool sent,) = payable(marketingWallet).call{value: marketing}(""); require(sent, "Sending eth failed"); (sent, ) = payable(artistWallet).call{value: artist}(""); require(sent, "Sending eth failed"); (sent, ) = payable(teamWallet).call{value: team}(""); require(sent, "Sending eth failed"); (sent, ) = payable(creatorWallet).call{value: creator}(""); require(sent, "Sending eth failed"); (sent, ) = payable(projectWallet).call{value: address(this).balance}(""); require(sent, "Sending eth failed"); } function _mintForTeam() internal { for (uint i = 3321; i <= 3333; i++) { _safeMint(teamWallet, i); } } function setTeamWallet(address _account) external onlyOwner { teamWallet = _account; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"address","name":"_nobu","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"INoBu","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_holders","type":"address[]"},{"internalType":"uint256[]","name":"_counts","type":"uint256[]"}],"name":"airdropNFTs","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":[],"name":"artistFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"artistWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"creatorFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"creatorWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isMember","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"memberCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"mintCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"projectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"projectWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMemberCost","type":"uint256"}],"name":"setMemberCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"setTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"setWhitelistAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_whitelisted","type":"bool"}],"name":"setWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setWlCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wlCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c90805190602001906200005192919062000fe6565b50681b0d04202f47ec0000600d5568185720711896640000600e556815a13cc201e4dc0000600f556000601060006101000a81548160ff02191690831515021790555073a2be3029e6168540fc48017f43ec6691faa30e2f610d1760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506032610d18557340a2d2cfd09a6a743a26b808dcbac8e0a3c183ac610d1960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506064610d1a55732713ebec92c27e52d953b5d5911364b0815dbe05610d1b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506096610d1c557389c3e96498efbf91633eb2e4d36002f61ed805b8610d1d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061012c610d1e55732b48ff95e577b4dddd0bfe9473c945d574e4e4e7610d1f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610190610d20553480156200026f57600080fd5b5060405162006b5138038062006b51833981810160405281019062000295919062001298565b6040518060400160405280600f81526020017f4e6f427564646965732047656e334400000000000000000000000000000000008152506040518060400160405280600481526020017f4e4233440000000000000000000000000000000000000000000000000000000081525081600090805190602001906200031992919062000fe6565b5080600190805190602001906200033292919062000fe6565b5050506200035562000349620003c060201b60201c565b620003c860201b60201c565b62000366826200048e60201b60201c565b80610d2160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003b8620004ba60201b60201c565b5050620018d9565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200049e6200051a60201b60201c565b80600b9080519060200190620004b692919062000fe6565b5050565b6000610cf990505b610d058111620005175762000501610d1b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682620005ab60201b60201c565b80806200050e9062001337565b915050620004c2565b50565b6200052a620003c060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000550620005d160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620005a9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005a090620013e6565b60405180910390fd5b565b620005cd828260405180602001604052806000815250620005fb60201b60201c565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200060d83836200066960201b60201c565b6200062260008484846200086360201b60201c565b62000664576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200065b906200147e565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620006dc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006d390620014f0565b60405180910390fd5b620006ed8162000a1d60201b60201c565b1562000730576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007279062001562565b60405180910390fd5b620007446000838362000a8960201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000796919062001584565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46200085f6000838362000bd060201b60201c565b5050565b6000620008918473ffffffffffffffffffffffffffffffffffffffff1662000bd560201b620022241760201c565b1562000a10578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620008c3620003c060201b60201c565b8786866040518563ffffffff1660e01b8152600401620008e7949392919062001660565b602060405180830381600087803b1580156200090257600080fd5b505af19250505080156200093657506040513d601f19601f8201168201806040525081019062000933919062001711565b60015b620009bf573d806000811462000969576040519150601f19603f3d011682016040523d82523d6000602084013e6200096e565b606091505b50600081511415620009b7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009ae906200147e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062000a15565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b62000aa183838362000bf860201b620022471760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000aee5762000ae88162000bfd60201b60201c565b62000b36565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000b355762000b34838262000c4660201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000b835762000b7d8162000dc360201b60201c565b62000bcb565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000bca5762000bc9828262000e9f60201b60201c565b5b5b505050565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600162000c608462000f2b60201b620017bc1760201c565b62000c6c919062001743565b905060006007600084815260200190815260200160002054905081811462000d52576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000dd9919062001743565b905060006009600084815260200190815260200160002054905060006008838154811062000e0c5762000e0b6200177e565b5b90600052602060002001549050806008838154811062000e315762000e306200177e565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000e835762000e82620017ad565b5b6001900381819060005260206000200160009055905550505050565b600062000eb78362000f2b60201b620017bc1760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000f9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000f969062001852565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000ff490620018a3565b90600052602060002090601f01602090048101928262001018576000855562001064565b82601f106200103357805160ff191683800117855562001064565b8280016001018555821562001064579182015b828111156200106357825182559160200191906001019062001046565b5b50905062001073919062001077565b5090565b5b808211156200109257600081600090555060010162001078565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620010ff82620010b4565b810181811067ffffffffffffffff82111715620011215762001120620010c5565b5b80604052505050565b60006200113662001096565b9050620011448282620010f4565b919050565b600067ffffffffffffffff821115620011675762001166620010c5565b5b6200117282620010b4565b9050602081019050919050565b60005b838110156200119f57808201518184015260208101905062001182565b83811115620011af576000848401525b50505050565b6000620011cc620011c68462001149565b6200112a565b905082815260208101848484011115620011eb57620011ea620010af565b5b620011f88482856200117f565b509392505050565b600082601f830112620012185762001217620010aa565b5b81516200122a848260208601620011b5565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620012608262001233565b9050919050565b620012728162001253565b81146200127e57600080fd5b50565b600081519050620012928162001267565b92915050565b60008060408385031215620012b257620012b1620010a0565b5b600083015167ffffffffffffffff811115620012d357620012d2620010a5565b5b620012e18582860162001200565b9250506020620012f48582860162001281565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000819050919050565b600062001344826200132d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156200137a5762001379620012fe565b5b600182019050919050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620013ce60208362001385565b9150620013db8262001396565b602082019050919050565b600060208201905081810360008301526200140181620013bf565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006200146660328362001385565b9150620014738262001408565b604082019050919050565b60006020820190508181036000830152620014998162001457565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000620014d860208362001385565b9150620014e582620014a0565b602082019050919050565b600060208201905081810360008301526200150b81620014c9565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006200154a601c8362001385565b9150620015578262001512565b602082019050919050565b600060208201905081810360008301526200157d816200153b565b9050919050565b600062001591826200132d565b91506200159e836200132d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620015d657620015d5620012fe565b5b828201905092915050565b620015ec8162001253565b82525050565b620015fd816200132d565b82525050565b600081519050919050565b600082825260208201905092915050565b60006200162c8262001603565b6200163881856200160e565b93506200164a8185602086016200117f565b6200165581620010b4565b840191505092915050565b6000608082019050620016776000830187620015e1565b620016866020830186620015e1565b620016956040830185620015f2565b8181036060830152620016a981846200161f565b905095945050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b620016eb81620016b4565b8114620016f757600080fd5b50565b6000815190506200170b81620016e0565b92915050565b6000602082840312156200172a5762001729620010a0565b5b60006200173a84828501620016fa565b91505092915050565b600062001750826200132d565b91506200175d836200132d565b925082821015620017735762001772620012fe565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006200183a60298362001385565b91506200184782620017dc565b604082019050919050565b600060208201905081810360008301526200186d816200182b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620018bc57607f821691505b60208210811415620018d357620018d262001874565b5b50919050565b61526880620018e96000396000f3fe6080604052600436106102ff5760003560e01c80639281aa0b11610190578063d5abeb01116100dc578063e213b5f611610095578063f12f6d5d1161006f578063f12f6d5d14610b9b578063f2fde38b14610bc4578063f52ccc2d14610bed578063fd63c35914610c16576102ff565b8063e213b5f614610b0a578063e88958dc14610b33578063e985e9c514610b5e576102ff565b8063d5abeb01146109fa578063d70a28d114610a25578063d7c94efd14610a50578063d936547e14610a7b578063da3ef23f14610ab8578063dc09e92314610ae1576102ff565b8063b25332ae11610149578063beb08ab911610123578063beb08ab91461093c578063c668286214610967578063c87b56dd14610992578063d58f2f27146109cf576102ff565b8063b25332ae146108bd578063b42fa83d146108e8578063b88d4fde14610913576102ff565b80639281aa0b146107bc57806395d89b41146107e5578063a0712d6814610810578063a22cb4651461082c578063a230c52414610855578063a3342fba14610892576102ff565b8063438b63001161024f5780636352211e11610208578063715018a6116101e2578063715018a61461072457806375f0a8741461073b5780637cdc65f2146107665780638da5cb5b14610791576102ff565b80636352211e1461067f5780636b67c4df146106bc57806370a08231146106e7576102ff565b8063438b63001461055d57806344a0d68a1461059a5780634f6ccce7146105c357806355f804b31461060057806359927044146106295780635c975abb14610654576102ff565b80631525ff7d116102bc5780632acc659e116102965780632acc659e146104a35780632f745c59146104e05780633ccfd60b1461051d57806342842e0e14610534576102ff565b80631525ff7d1461042657806318160ddd1461044f57806323b872dd1461047a576102ff565b806301ffc9a71461030457806302329a291461034157806306fdde031461036a578063081812fc14610395578063095ea7b3146103d257806313faede6146103fb575b600080fd5b34801561031057600080fd5b5061032b60048036038101906103269190613765565b610c41565b60405161033891906137ad565b60405180910390f35b34801561034d57600080fd5b50610368600480360381019061036391906137f4565b610cbb565b005b34801561037657600080fd5b5061037f610ce0565b60405161038c91906138ba565b60405180910390f35b3480156103a157600080fd5b506103bc60048036038101906103b79190613912565b610d72565b6040516103c99190613980565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f491906139c7565b610db8565b005b34801561040757600080fd5b50610410610ed0565b60405161041d9190613a16565b60405180910390f35b34801561043257600080fd5b5061044d60048036038101906104489190613a31565b610ed6565b005b34801561045b57600080fd5b50610464610f23565b6040516104719190613a16565b60405180910390f35b34801561048657600080fd5b506104a1600480360381019061049c9190613a5e565b610f30565b005b3480156104af57600080fd5b506104ca60048036038101906104c59190613a31565b610f90565b6040516104d79190613a16565b60405180910390f35b3480156104ec57600080fd5b50610507600480360381019061050291906139c7565b611019565b6040516105149190613a16565b60405180910390f35b34801561052957600080fd5b506105326110be565b005b34801561054057600080fd5b5061055b60048036038101906105569190613a5e565b611556565b005b34801561056957600080fd5b50610584600480360381019061057f9190613a31565b611576565b6040516105919190613b6f565b60405180910390f35b3480156105a657600080fd5b506105c160048036038101906105bc9190613912565b611624565b005b3480156105cf57600080fd5b506105ea60048036038101906105e59190613912565b611636565b6040516105f79190613a16565b60405180910390f35b34801561060c57600080fd5b5061062760048036038101906106229190613cc6565b6116a7565b005b34801561063557600080fd5b5061063e6116c9565b60405161064b9190613980565b60405180910390f35b34801561066057600080fd5b506106696116f0565b60405161067691906137ad565b60405180910390f35b34801561068b57600080fd5b506106a660048036038101906106a19190613912565b611703565b6040516106b39190613980565b60405180910390f35b3480156106c857600080fd5b506106d16117b5565b6040516106de9190613a16565b60405180910390f35b3480156106f357600080fd5b5061070e60048036038101906107099190613a31565b6117bc565b60405161071b9190613a16565b60405180910390f35b34801561073057600080fd5b50610739611874565b005b34801561074757600080fd5b50610750611888565b60405161075d9190613980565b60405180910390f35b34801561077257600080fd5b5061077b6118af565b6040516107889190613980565b60405180910390f35b34801561079d57600080fd5b506107a66118d6565b6040516107b39190613980565b60405180910390f35b3480156107c857600080fd5b506107e360048036038101906107de9190613d0f565b611900565b005b3480156107f157600080fd5b506107fa611964565b60405161080791906138ba565b60405180910390f35b61082a60048036038101906108259190613912565b6119f6565b005b34801561083857600080fd5b50610853600480360381019061084e9190613d0f565b611be8565b005b34801561086157600080fd5b5061087c60048036038101906108779190613a31565b611bfe565b60405161088991906137ad565b60405180910390f35b34801561089e57600080fd5b506108a7611cb5565b6040516108b49190613980565b60405180910390f35b3480156108c957600080fd5b506108d2611cdc565b6040516108df9190613a16565b60405180910390f35b3480156108f457600080fd5b506108fd611ce3565b60405161090a9190613a16565b60405180910390f35b34801561091f57600080fd5b5061093a60048036038101906109359190613df0565b611ce9565b005b34801561094857600080fd5b50610951611d4b565b60405161095e9190613980565b60405180910390f35b34801561097357600080fd5b5061097c611d72565b60405161098991906138ba565b60405180910390f35b34801561099e57600080fd5b506109b960048036038101906109b49190613912565b611e00565b6040516109c691906138ba565b60405180910390f35b3480156109db57600080fd5b506109e4611eaa565b6040516109f19190613a16565b60405180910390f35b348015610a0657600080fd5b50610a0f611eb1565b604051610a1c9190613a16565b60405180910390f35b348015610a3157600080fd5b50610a3a611eb7565b604051610a479190613a16565b60405180910390f35b348015610a5c57600080fd5b50610a65611ebd565b604051610a729190613a16565b60405180910390f35b348015610a8757600080fd5b50610aa26004803603810190610a9d9190613a31565b611ec4565b604051610aaf91906137ad565b60405180910390f35b348015610ac457600080fd5b50610adf6004803603810190610ada9190613cc6565b611ee5565b005b348015610aed57600080fd5b50610b086004803603810190610b039190613912565b611f07565b005b348015610b1657600080fd5b50610b316004803603810190610b2c9190613ffe565b611f19565b005b348015610b3f57600080fd5b50610b4861202e565b604051610b559190613a16565b60405180910390f35b348015610b6a57600080fd5b50610b856004803603810190610b809190614076565b612035565b604051610b9291906137ad565b60405180910390f35b348015610ba757600080fd5b50610bc26004803603810190610bbd9190613912565b6120c9565b005b348015610bd057600080fd5b50610beb6004803603810190610be69190613a31565b6120db565b005b348015610bf957600080fd5b50610c146004803603810190610c0f91906140b6565b61215f565b005b348015610c2257600080fd5b50610c2b6121fd565b604051610c38919061415e565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610cb45750610cb38261224c565b5b9050919050565b610cc361232e565b80601060006101000a81548160ff02191690831515021790555050565b606060008054610cef906141a8565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1b906141a8565b8015610d685780601f10610d3d57610100808354040283529160200191610d68565b820191906000526020600020905b815481529060010190602001808311610d4b57829003601f168201915b5050505050905090565b6000610d7d826123ac565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610dc382611703565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2b9061424c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e536123f7565b73ffffffffffffffffffffffffffffffffffffffff161480610e825750610e8181610e7c6123f7565b612035565b5b610ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb8906142de565b60405180910390fd5b610ecb83836123ff565b505050565b600d5481565b610ede61232e565b80610d1b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600880549050905090565b610f41610f3b6123f7565b826124b8565b610f80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7790614370565b60405180910390fd5b610f8b83838361254d565b505050565b600060011515610f9f83611bfe565b15151415610fb157600f549050611014565b610d1660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561100e57600e549050611014565b600d5490505b919050565b6000611024836117bc565b8210611065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105c90614402565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600047905060006103e8610d1854836110d79190614451565b6110e191906144da565b905060006103e8610d1a54846110f79190614451565b61110191906144da565b905060006103e8610d1c54856111179190614451565b61112191906144da565b905060006103e8610d1e54866111379190614451565b61114191906144da565b90506000610d1760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168560405161118c9061453c565b60006040518083038185875af1925050503d80600081146111c9576040519150601f19603f3d011682016040523d82523d6000602084013e6111ce565b606091505b5050905080611212576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112099061459d565b60405180910390fd5b610d1960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16846040516112599061453c565b60006040518083038185875af1925050503d8060008114611296576040519150601f19603f3d011682016040523d82523d6000602084013e61129b565b606091505b505080915050806112e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d89061459d565b60405180910390fd5b610d1b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16836040516113289061453c565b60006040518083038185875af1925050503d8060008114611365576040519150601f19603f3d011682016040523d82523d6000602084013e61136a565b606091505b505080915050806113b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a79061459d565b60405180910390fd5b610d1d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516113f79061453c565b60006040518083038185875af1925050503d8060008114611434576040519150601f19603f3d011682016040523d82523d6000602084013e611439565b606091505b5050809150508061147f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114769061459d565b60405180910390fd5b610d1f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516114c69061453c565b60006040518083038185875af1925050503d8060008114611503576040519150601f19603f3d011682016040523d82523d6000602084013e611508565b606091505b5050809150508061154e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115459061459d565b60405180910390fd5b505050505050565b61157183838360405180602001604052806000815250611ce9565b505050565b60606000611583836117bc565b905060008167ffffffffffffffff8111156115a1576115a0613b9b565b5b6040519080825280602002602001820160405280156115cf5781602001602082028036833780820191505090505b50905060005b82811015611619576115e78582611019565b8282815181106115fa576115f96145bd565b5b6020026020010181815250508080611611906145ec565b9150506115d5565b508092505050919050565b61162c61232e565b80600d8190555050565b6000611640610f23565b8210611681576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611678906146a7565b60405180910390fd5b60088281548110611695576116946145bd565b5b90600052602060002001549050919050565b6116af61232e565b80600b90805190602001906116c5929190613656565b5050565b610d1b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a390614713565b60405180910390fd5b80915050919050565b610d185481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561182d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611824906147a5565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61187c61232e565b61188660006127b4565b565b610d1760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610d1d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61190861232e565b80610d1660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b606060018054611973906141a8565b80601f016020809104026020016040519081016040528092919081815260200182805461199f906141a8565b80156119ec5780601f106119c1576101008083540402835291602001916119ec565b820191906000526020600020905b8154815290600101906020018083116119cf57829003601f168201915b5050505050905090565b601060009054906101000a900460ff1615611a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3d90614811565b60405180910390fd5b60008111611a89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a809061487d565b60405180910390fd5b6000611a93610f23565b9050610d058282611aa4919061489d565b1115611ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adc9061493f565b60405180910390fd5b6000600d549050610d1660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611b4557600e5490505b611b4e33611bfe565b15611b5957600f5490505b8281611b659190614451565b341015611ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9e906149ab565b60405180910390fd5b60005b83811015611be257611bcf33611bca8386611bc5919061489d565b61287a565b6129bb565b8080611bda906145ec565b915050611baa565b50505050565b611bfa611bf36123f7565b83836129d9565b5050565b600080610d2160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401611c5d9190613980565b60206040518083038186803b158015611c7557600080fd5b505afa158015611c89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cad91906149e0565b119050919050565b610d1960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610d1a5481565b600f5481565b611cfa611cf46123f7565b836124b8565b611d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3090614370565b60405180910390fd5b611d4584848484612b46565b50505050565b610d1f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c8054611d7f906141a8565b80601f0160208091040260200160405190810160405280929190818152602001828054611dab906141a8565b8015611df85780601f10611dcd57610100808354040283529160200191611df8565b820191906000526020600020905b815481529060010190602001808311611ddb57829003601f168201915b505050505081565b6060611e0b82612ba2565b611e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4190614a7f565b60405180910390fd5b6000611e54612c0e565b90506000815111611e745760405180602001604052806000815250611ea2565b80611e7e84612ca0565b600c604051602001611e9293929190614b6f565b6040516020818303038152906040525b915050919050565b610d205481565b610d0581565b600e5481565b610d1c5481565b610d166020528060005260406000206000915054906101000a900460ff1681565b611eed61232e565b80600c9080519060200190611f03929190613656565b5050565b611f0f61232e565b80600f8190555050565b611f2161232e565b8051825114611f65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5c90614bec565b60405180910390fd5b6000611f6f610f23565b905060005b83518110156120285760005b838281518110611f9357611f926145bd565b5b6020026020010151811015611fec57611fd9858381518110611fb857611fb76145bd565b5b6020026020010151611fd48386611fcf919061489d565b61287a565b6129bb565b8080611fe4906145ec565b915050611f80565b5082818151811061200057611fff6145bd565b5b602002602001015182612013919061489d565b91508080612020906145ec565b915050611f74565b50505050565b610d1e5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120d161232e565b80600e8190555050565b6120e361232e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214a90614c7e565b60405180910390fd5b61215c816127b4565b50565b61216761232e565b60005b81518110156121f9576001610d16600084848151811061218d5761218c6145bd565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806121f1906145ec565b91505061216a565b5050565b610d2160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061231757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612327575061232682612e01565b5b9050919050565b6123366123f7565b73ffffffffffffffffffffffffffffffffffffffff166123546118d6565b73ffffffffffffffffffffffffffffffffffffffff16146123aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a190614cea565b60405180910390fd5b565b6123b581612ba2565b6123f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123eb90614713565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661247283611703565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806124c483611703565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061250657506125058185612035565b5b8061254457508373ffffffffffffffffffffffffffffffffffffffff1661252c84610d72565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661256d82611703565b73ffffffffffffffffffffffffffffffffffffffff16146125c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ba90614d7c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262a90614e0e565b60405180910390fd5b61263e838383612e6b565b6126496000826123ff565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126999190614e2e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126f0919061489d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46127af838383612f7f565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008082610d0561288b9190614e2e565b9050600081334442856040516020016128a79493929190614ecb565b6040516020818303038152906040528051906020012060001c6128ca9190614f19565b9050600092506000601182610d0581106128e7576128e66145bd565b5b01541461290c57601181610d058110612903576129026145bd565b5b01549250612910565b8092505b600060116001846129219190614e2e565b610d058110612933576129326145bd565b5b01541415612967576001826129489190614e2e565b601182610d05811061295d5761295c6145bd565b5b01819055506129a5565b60116001836129769190614e2e565b610d058110612988576129876145bd565b5b0154601182610d05811061299f5761299e6145bd565b5b01819055505b6001836129b2919061489d565b92505050919050565b6129d5828260405180602001604052806000815250612f84565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3f90614f96565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612b3991906137ad565b60405180910390a3505050565b612b5184848461254d565b612b5d84848484612fdf565b612b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9390615028565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6060600b8054612c1d906141a8565b80601f0160208091040260200160405190810160405280929190818152602001828054612c49906141a8565b8015612c965780601f10612c6b57610100808354040283529160200191612c96565b820191906000526020600020905b815481529060010190602001808311612c7957829003601f168201915b5050505050905090565b60606000821415612ce8576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612dfc565b600082905060005b60008214612d1a578080612d03906145ec565b915050600a82612d1391906144da565b9150612cf0565b60008167ffffffffffffffff811115612d3657612d35613b9b565b5b6040519080825280601f01601f191660200182016040528015612d685781602001600182028036833780820191505090505b5090505b60008514612df557600182612d819190614e2e565b9150600a85612d909190614f19565b6030612d9c919061489d565b60f81b818381518110612db257612db16145bd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612dee91906144da565b9450612d6c565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612e76838383612247565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612eb957612eb481613176565b612ef8565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612ef757612ef683826131bf565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f3b57612f368161332c565b612f7a565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612f7957612f7882826133fd565b5b5b505050565b505050565b612f8e838361347c565b612f9b6000848484612fdf565b612fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd190615028565b60405180910390fd5b505050565b60006130008473ffffffffffffffffffffffffffffffffffffffff16612224565b15613169578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026130296123f7565b8786866040518563ffffffff1660e01b815260040161304b949392919061509d565b602060405180830381600087803b15801561306557600080fd5b505af192505050801561309657506040513d601f19601f8201168201806040525081019061309391906150fe565b60015b613119573d80600081146130c6576040519150601f19603f3d011682016040523d82523d6000602084013e6130cb565b606091505b50600081511415613111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310890615028565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061316e565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016131cc846117bc565b6131d69190614e2e565b90506000600760008481526020019081526020016000205490508181146132bb576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506133409190614e2e565b90506000600960008481526020019081526020016000205490506000600883815481106133705761336f6145bd565b5b906000526020600020015490508060088381548110613392576133916145bd565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806133e1576133e061512b565b5b6001900381819060005260206000200160009055905550505050565b6000613408836117bc565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134e3906151a6565b60405180910390fd5b6134f581612ba2565b15613535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352c90615212565b60405180910390fd5b61354160008383612e6b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613591919061489d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461365260008383612f7f565b5050565b828054613662906141a8565b90600052602060002090601f01602090048101928261368457600085556136cb565b82601f1061369d57805160ff19168380011785556136cb565b828001600101855582156136cb579182015b828111156136ca5782518255916020019190600101906136af565b5b5090506136d891906136dc565b5090565b5b808211156136f55760008160009055506001016136dd565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6137428161370d565b811461374d57600080fd5b50565b60008135905061375f81613739565b92915050565b60006020828403121561377b5761377a613703565b5b600061378984828501613750565b91505092915050565b60008115159050919050565b6137a781613792565b82525050565b60006020820190506137c2600083018461379e565b92915050565b6137d181613792565b81146137dc57600080fd5b50565b6000813590506137ee816137c8565b92915050565b60006020828403121561380a57613809613703565b5b6000613818848285016137df565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561385b578082015181840152602081019050613840565b8381111561386a576000848401525b50505050565b6000601f19601f8301169050919050565b600061388c82613821565b613896818561382c565b93506138a681856020860161383d565b6138af81613870565b840191505092915050565b600060208201905081810360008301526138d48184613881565b905092915050565b6000819050919050565b6138ef816138dc565b81146138fa57600080fd5b50565b60008135905061390c816138e6565b92915050565b60006020828403121561392857613927613703565b5b6000613936848285016138fd565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061396a8261393f565b9050919050565b61397a8161395f565b82525050565b60006020820190506139956000830184613971565b92915050565b6139a48161395f565b81146139af57600080fd5b50565b6000813590506139c18161399b565b92915050565b600080604083850312156139de576139dd613703565b5b60006139ec858286016139b2565b92505060206139fd858286016138fd565b9150509250929050565b613a10816138dc565b82525050565b6000602082019050613a2b6000830184613a07565b92915050565b600060208284031215613a4757613a46613703565b5b6000613a55848285016139b2565b91505092915050565b600080600060608486031215613a7757613a76613703565b5b6000613a85868287016139b2565b9350506020613a96868287016139b2565b9250506040613aa7868287016138fd565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613ae6816138dc565b82525050565b6000613af88383613add565b60208301905092915050565b6000602082019050919050565b6000613b1c82613ab1565b613b268185613abc565b9350613b3183613acd565b8060005b83811015613b62578151613b498882613aec565b9750613b5483613b04565b925050600181019050613b35565b5085935050505092915050565b60006020820190508181036000830152613b898184613b11565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613bd382613870565b810181811067ffffffffffffffff82111715613bf257613bf1613b9b565b5b80604052505050565b6000613c056136f9565b9050613c118282613bca565b919050565b600067ffffffffffffffff821115613c3157613c30613b9b565b5b613c3a82613870565b9050602081019050919050565b82818337600083830152505050565b6000613c69613c6484613c16565b613bfb565b905082815260208101848484011115613c8557613c84613b96565b5b613c90848285613c47565b509392505050565b600082601f830112613cad57613cac613b91565b5b8135613cbd848260208601613c56565b91505092915050565b600060208284031215613cdc57613cdb613703565b5b600082013567ffffffffffffffff811115613cfa57613cf9613708565b5b613d0684828501613c98565b91505092915050565b60008060408385031215613d2657613d25613703565b5b6000613d34858286016139b2565b9250506020613d45858286016137df565b9150509250929050565b600067ffffffffffffffff821115613d6a57613d69613b9b565b5b613d7382613870565b9050602081019050919050565b6000613d93613d8e84613d4f565b613bfb565b905082815260208101848484011115613daf57613dae613b96565b5b613dba848285613c47565b509392505050565b600082601f830112613dd757613dd6613b91565b5b8135613de7848260208601613d80565b91505092915050565b60008060008060808587031215613e0a57613e09613703565b5b6000613e18878288016139b2565b9450506020613e29878288016139b2565b9350506040613e3a878288016138fd565b925050606085013567ffffffffffffffff811115613e5b57613e5a613708565b5b613e6787828801613dc2565b91505092959194509250565b600067ffffffffffffffff821115613e8e57613e8d613b9b565b5b602082029050602081019050919050565b600080fd5b6000613eb7613eb284613e73565b613bfb565b90508083825260208201905060208402830185811115613eda57613ed9613e9f565b5b835b81811015613f035780613eef88826139b2565b845260208401935050602081019050613edc565b5050509392505050565b600082601f830112613f2257613f21613b91565b5b8135613f32848260208601613ea4565b91505092915050565b600067ffffffffffffffff821115613f5657613f55613b9b565b5b602082029050602081019050919050565b6000613f7a613f7584613f3b565b613bfb565b90508083825260208201905060208402830185811115613f9d57613f9c613e9f565b5b835b81811015613fc65780613fb288826138fd565b845260208401935050602081019050613f9f565b5050509392505050565b600082601f830112613fe557613fe4613b91565b5b8135613ff5848260208601613f67565b91505092915050565b6000806040838503121561401557614014613703565b5b600083013567ffffffffffffffff81111561403357614032613708565b5b61403f85828601613f0d565b925050602083013567ffffffffffffffff8111156140605761405f613708565b5b61406c85828601613fd0565b9150509250929050565b6000806040838503121561408d5761408c613703565b5b600061409b858286016139b2565b92505060206140ac858286016139b2565b9150509250929050565b6000602082840312156140cc576140cb613703565b5b600082013567ffffffffffffffff8111156140ea576140e9613708565b5b6140f684828501613f0d565b91505092915050565b6000819050919050565b600061412461411f61411a8461393f565b6140ff565b61393f565b9050919050565b600061413682614109565b9050919050565b60006141488261412b565b9050919050565b6141588161413d565b82525050565b6000602082019050614173600083018461414f565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806141c057607f821691505b602082108114156141d4576141d3614179565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061423660218361382c565b9150614241826141da565b604082019050919050565b6000602082019050818103600083015261426581614229565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b60006142c8603e8361382c565b91506142d38261426c565b604082019050919050565b600060208201905081810360008301526142f7816142bb565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b600061435a602e8361382c565b9150614365826142fe565b604082019050919050565b600060208201905081810360008301526143898161434d565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b60006143ec602b8361382c565b91506143f782614390565b604082019050919050565b6000602082019050818103600083015261441b816143df565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061445c826138dc565b9150614467836138dc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144a05761449f614422565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006144e5826138dc565b91506144f0836138dc565b925082614500576144ff6144ab565b5b828204905092915050565b600081905092915050565b50565b600061452660008361450b565b915061453182614516565b600082019050919050565b600061454782614519565b9150819050919050565b7f53656e64696e6720657468206661696c65640000000000000000000000000000600082015250565b600061458760128361382c565b915061459282614551565b602082019050919050565b600060208201905081810360008301526145b68161457a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006145f7826138dc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561462a57614629614422565b5b600182019050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000614691602c8361382c565b915061469c82614635565b604082019050919050565b600060208201905081810360008301526146c081614684565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b60006146fd60188361382c565b9150614708826146c7565b602082019050919050565b6000602082019050818103600083015261472c816146f0565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b600061478f60298361382c565b915061479a82614733565b604082019050919050565b600060208201905081810360008301526147be81614782565b9050919050565b7f7061757365640000000000000000000000000000000000000000000000000000600082015250565b60006147fb60068361382c565b9150614806826147c5565b602082019050919050565b6000602082019050818103600083015261482a816147ee565b9050919050565b7f616d6f756e742073686f756c646e2774206265207a65726f0000000000000000600082015250565b600061486760188361382c565b915061487282614831565b602082019050919050565b600060208201905081810360008301526148968161485a565b9050919050565b60006148a8826138dc565b91506148b3836138dc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148e8576148e7614422565b5b828201905092915050565b7f4d617820737570706c7920657863656564656400000000000000000000000000600082015250565b600061492960138361382c565b9150614934826148f3565b602082019050919050565b600060208201905081810360008301526149588161491c565b9050919050565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b600061499560128361382c565b91506149a08261495f565b602082019050919050565b600060208201905081810360008301526149c481614988565b9050919050565b6000815190506149da816138e6565b92915050565b6000602082840312156149f6576149f5613703565b5b6000614a04848285016149cb565b91505092915050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614a69602f8361382c565b9150614a7482614a0d565b604082019050919050565b60006020820190508181036000830152614a9881614a5c565b9050919050565b600081905092915050565b6000614ab582613821565b614abf8185614a9f565b9350614acf81856020860161383d565b80840191505092915050565b60008190508160005260206000209050919050565b60008154614afd816141a8565b614b078186614a9f565b94506001821660008114614b225760018114614b3357614b66565b60ff19831686528186019350614b66565b614b3c85614adb565b60005b83811015614b5e57815481890152600182019150602081019050614b3f565b838801955050505b50505092915050565b6000614b7b8286614aaa565b9150614b878285614aaa565b9150614b938284614af0565b9150819050949350505050565b7f496e7075742044617461206572726f7200000000000000000000000000000000600082015250565b6000614bd660108361382c565b9150614be182614ba0565b602082019050919050565b60006020820190508181036000830152614c0581614bc9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614c6860268361382c565b9150614c7382614c0c565b604082019050919050565b60006020820190508181036000830152614c9781614c5b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614cd460208361382c565b9150614cdf82614c9e565b602082019050919050565b60006020820190508181036000830152614d0381614cc7565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000614d6660258361382c565b9150614d7182614d0a565b604082019050919050565b60006020820190508181036000830152614d9581614d59565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614df860248361382c565b9150614e0382614d9c565b604082019050919050565b60006020820190508181036000830152614e2781614deb565b9050919050565b6000614e39826138dc565b9150614e44836138dc565b925082821015614e5757614e56614422565b5b828203905092915050565b60008160601b9050919050565b6000614e7a82614e62565b9050919050565b6000614e8c82614e6f565b9050919050565b614ea4614e9f8261395f565b614e81565b82525050565b6000819050919050565b614ec5614ec0826138dc565b614eaa565b82525050565b6000614ed78287614e93565b601482019150614ee78286614eb4565b602082019150614ef78285614eb4565b602082019150614f078284614eb4565b60208201915081905095945050505050565b6000614f24826138dc565b9150614f2f836138dc565b925082614f3f57614f3e6144ab565b5b828206905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614f8060198361382c565b9150614f8b82614f4a565b602082019050919050565b60006020820190508181036000830152614faf81614f73565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061501260328361382c565b915061501d82614fb6565b604082019050919050565b6000602082019050818103600083015261504181615005565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061506f82615048565b6150798185615053565b935061508981856020860161383d565b61509281613870565b840191505092915050565b60006080820190506150b26000830187613971565b6150bf6020830186613971565b6150cc6040830185613a07565b81810360608301526150de8184615064565b905095945050505050565b6000815190506150f881613739565b92915050565b60006020828403121561511457615113613703565b5b6000615122848285016150e9565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061519060208361382c565b915061519b8261515a565b602082019050919050565b600060208201905081810360008301526151bf81615183565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006151fc601c8361382c565b9150615207826151c6565b602082019050919050565b6000602082019050818103600083015261522b816151ef565b905091905056fea264697066735822122031032e433890b4dd090451c440941d34741522ad46d9e7c3be83bb0e0412b22c64736f6c634300080900330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000f39363abc3434c600e731068fb8d25d4d8b2b668000000000000000000000000000000000000000000000000000000000000002e516d6653736b625236616342767952594a71386535794c52515061705a72394344626e39714a586d535444394c76000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102ff5760003560e01c80639281aa0b11610190578063d5abeb01116100dc578063e213b5f611610095578063f12f6d5d1161006f578063f12f6d5d14610b9b578063f2fde38b14610bc4578063f52ccc2d14610bed578063fd63c35914610c16576102ff565b8063e213b5f614610b0a578063e88958dc14610b33578063e985e9c514610b5e576102ff565b8063d5abeb01146109fa578063d70a28d114610a25578063d7c94efd14610a50578063d936547e14610a7b578063da3ef23f14610ab8578063dc09e92314610ae1576102ff565b8063b25332ae11610149578063beb08ab911610123578063beb08ab91461093c578063c668286214610967578063c87b56dd14610992578063d58f2f27146109cf576102ff565b8063b25332ae146108bd578063b42fa83d146108e8578063b88d4fde14610913576102ff565b80639281aa0b146107bc57806395d89b41146107e5578063a0712d6814610810578063a22cb4651461082c578063a230c52414610855578063a3342fba14610892576102ff565b8063438b63001161024f5780636352211e11610208578063715018a6116101e2578063715018a61461072457806375f0a8741461073b5780637cdc65f2146107665780638da5cb5b14610791576102ff565b80636352211e1461067f5780636b67c4df146106bc57806370a08231146106e7576102ff565b8063438b63001461055d57806344a0d68a1461059a5780634f6ccce7146105c357806355f804b31461060057806359927044146106295780635c975abb14610654576102ff565b80631525ff7d116102bc5780632acc659e116102965780632acc659e146104a35780632f745c59146104e05780633ccfd60b1461051d57806342842e0e14610534576102ff565b80631525ff7d1461042657806318160ddd1461044f57806323b872dd1461047a576102ff565b806301ffc9a71461030457806302329a291461034157806306fdde031461036a578063081812fc14610395578063095ea7b3146103d257806313faede6146103fb575b600080fd5b34801561031057600080fd5b5061032b60048036038101906103269190613765565b610c41565b60405161033891906137ad565b60405180910390f35b34801561034d57600080fd5b50610368600480360381019061036391906137f4565b610cbb565b005b34801561037657600080fd5b5061037f610ce0565b60405161038c91906138ba565b60405180910390f35b3480156103a157600080fd5b506103bc60048036038101906103b79190613912565b610d72565b6040516103c99190613980565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f491906139c7565b610db8565b005b34801561040757600080fd5b50610410610ed0565b60405161041d9190613a16565b60405180910390f35b34801561043257600080fd5b5061044d60048036038101906104489190613a31565b610ed6565b005b34801561045b57600080fd5b50610464610f23565b6040516104719190613a16565b60405180910390f35b34801561048657600080fd5b506104a1600480360381019061049c9190613a5e565b610f30565b005b3480156104af57600080fd5b506104ca60048036038101906104c59190613a31565b610f90565b6040516104d79190613a16565b60405180910390f35b3480156104ec57600080fd5b50610507600480360381019061050291906139c7565b611019565b6040516105149190613a16565b60405180910390f35b34801561052957600080fd5b506105326110be565b005b34801561054057600080fd5b5061055b60048036038101906105569190613a5e565b611556565b005b34801561056957600080fd5b50610584600480360381019061057f9190613a31565b611576565b6040516105919190613b6f565b60405180910390f35b3480156105a657600080fd5b506105c160048036038101906105bc9190613912565b611624565b005b3480156105cf57600080fd5b506105ea60048036038101906105e59190613912565b611636565b6040516105f79190613a16565b60405180910390f35b34801561060c57600080fd5b5061062760048036038101906106229190613cc6565b6116a7565b005b34801561063557600080fd5b5061063e6116c9565b60405161064b9190613980565b60405180910390f35b34801561066057600080fd5b506106696116f0565b60405161067691906137ad565b60405180910390f35b34801561068b57600080fd5b506106a660048036038101906106a19190613912565b611703565b6040516106b39190613980565b60405180910390f35b3480156106c857600080fd5b506106d16117b5565b6040516106de9190613a16565b60405180910390f35b3480156106f357600080fd5b5061070e60048036038101906107099190613a31565b6117bc565b60405161071b9190613a16565b60405180910390f35b34801561073057600080fd5b50610739611874565b005b34801561074757600080fd5b50610750611888565b60405161075d9190613980565b60405180910390f35b34801561077257600080fd5b5061077b6118af565b6040516107889190613980565b60405180910390f35b34801561079d57600080fd5b506107a66118d6565b6040516107b39190613980565b60405180910390f35b3480156107c857600080fd5b506107e360048036038101906107de9190613d0f565b611900565b005b3480156107f157600080fd5b506107fa611964565b60405161080791906138ba565b60405180910390f35b61082a60048036038101906108259190613912565b6119f6565b005b34801561083857600080fd5b50610853600480360381019061084e9190613d0f565b611be8565b005b34801561086157600080fd5b5061087c60048036038101906108779190613a31565b611bfe565b60405161088991906137ad565b60405180910390f35b34801561089e57600080fd5b506108a7611cb5565b6040516108b49190613980565b60405180910390f35b3480156108c957600080fd5b506108d2611cdc565b6040516108df9190613a16565b60405180910390f35b3480156108f457600080fd5b506108fd611ce3565b60405161090a9190613a16565b60405180910390f35b34801561091f57600080fd5b5061093a60048036038101906109359190613df0565b611ce9565b005b34801561094857600080fd5b50610951611d4b565b60405161095e9190613980565b60405180910390f35b34801561097357600080fd5b5061097c611d72565b60405161098991906138ba565b60405180910390f35b34801561099e57600080fd5b506109b960048036038101906109b49190613912565b611e00565b6040516109c691906138ba565b60405180910390f35b3480156109db57600080fd5b506109e4611eaa565b6040516109f19190613a16565b60405180910390f35b348015610a0657600080fd5b50610a0f611eb1565b604051610a1c9190613a16565b60405180910390f35b348015610a3157600080fd5b50610a3a611eb7565b604051610a479190613a16565b60405180910390f35b348015610a5c57600080fd5b50610a65611ebd565b604051610a729190613a16565b60405180910390f35b348015610a8757600080fd5b50610aa26004803603810190610a9d9190613a31565b611ec4565b604051610aaf91906137ad565b60405180910390f35b348015610ac457600080fd5b50610adf6004803603810190610ada9190613cc6565b611ee5565b005b348015610aed57600080fd5b50610b086004803603810190610b039190613912565b611f07565b005b348015610b1657600080fd5b50610b316004803603810190610b2c9190613ffe565b611f19565b005b348015610b3f57600080fd5b50610b4861202e565b604051610b559190613a16565b60405180910390f35b348015610b6a57600080fd5b50610b856004803603810190610b809190614076565b612035565b604051610b9291906137ad565b60405180910390f35b348015610ba757600080fd5b50610bc26004803603810190610bbd9190613912565b6120c9565b005b348015610bd057600080fd5b50610beb6004803603810190610be69190613a31565b6120db565b005b348015610bf957600080fd5b50610c146004803603810190610c0f91906140b6565b61215f565b005b348015610c2257600080fd5b50610c2b6121fd565b604051610c38919061415e565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610cb45750610cb38261224c565b5b9050919050565b610cc361232e565b80601060006101000a81548160ff02191690831515021790555050565b606060008054610cef906141a8565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1b906141a8565b8015610d685780601f10610d3d57610100808354040283529160200191610d68565b820191906000526020600020905b815481529060010190602001808311610d4b57829003601f168201915b5050505050905090565b6000610d7d826123ac565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610dc382611703565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2b9061424c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e536123f7565b73ffffffffffffffffffffffffffffffffffffffff161480610e825750610e8181610e7c6123f7565b612035565b5b610ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb8906142de565b60405180910390fd5b610ecb83836123ff565b505050565b600d5481565b610ede61232e565b80610d1b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600880549050905090565b610f41610f3b6123f7565b826124b8565b610f80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7790614370565b60405180910390fd5b610f8b83838361254d565b505050565b600060011515610f9f83611bfe565b15151415610fb157600f549050611014565b610d1660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561100e57600e549050611014565b600d5490505b919050565b6000611024836117bc565b8210611065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105c90614402565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600047905060006103e8610d1854836110d79190614451565b6110e191906144da565b905060006103e8610d1a54846110f79190614451565b61110191906144da565b905060006103e8610d1c54856111179190614451565b61112191906144da565b905060006103e8610d1e54866111379190614451565b61114191906144da565b90506000610d1760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168560405161118c9061453c565b60006040518083038185875af1925050503d80600081146111c9576040519150601f19603f3d011682016040523d82523d6000602084013e6111ce565b606091505b5050905080611212576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112099061459d565b60405180910390fd5b610d1960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16846040516112599061453c565b60006040518083038185875af1925050503d8060008114611296576040519150601f19603f3d011682016040523d82523d6000602084013e61129b565b606091505b505080915050806112e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d89061459d565b60405180910390fd5b610d1b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16836040516113289061453c565b60006040518083038185875af1925050503d8060008114611365576040519150601f19603f3d011682016040523d82523d6000602084013e61136a565b606091505b505080915050806113b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a79061459d565b60405180910390fd5b610d1d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516113f79061453c565b60006040518083038185875af1925050503d8060008114611434576040519150601f19603f3d011682016040523d82523d6000602084013e611439565b606091505b5050809150508061147f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114769061459d565b60405180910390fd5b610d1f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516114c69061453c565b60006040518083038185875af1925050503d8060008114611503576040519150601f19603f3d011682016040523d82523d6000602084013e611508565b606091505b5050809150508061154e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115459061459d565b60405180910390fd5b505050505050565b61157183838360405180602001604052806000815250611ce9565b505050565b60606000611583836117bc565b905060008167ffffffffffffffff8111156115a1576115a0613b9b565b5b6040519080825280602002602001820160405280156115cf5781602001602082028036833780820191505090505b50905060005b82811015611619576115e78582611019565b8282815181106115fa576115f96145bd565b5b6020026020010181815250508080611611906145ec565b9150506115d5565b508092505050919050565b61162c61232e565b80600d8190555050565b6000611640610f23565b8210611681576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611678906146a7565b60405180910390fd5b60088281548110611695576116946145bd565b5b90600052602060002001549050919050565b6116af61232e565b80600b90805190602001906116c5929190613656565b5050565b610d1b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a390614713565b60405180910390fd5b80915050919050565b610d185481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561182d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611824906147a5565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61187c61232e565b61188660006127b4565b565b610d1760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610d1d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61190861232e565b80610d1660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b606060018054611973906141a8565b80601f016020809104026020016040519081016040528092919081815260200182805461199f906141a8565b80156119ec5780601f106119c1576101008083540402835291602001916119ec565b820191906000526020600020905b8154815290600101906020018083116119cf57829003601f168201915b5050505050905090565b601060009054906101000a900460ff1615611a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3d90614811565b60405180910390fd5b60008111611a89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a809061487d565b60405180910390fd5b6000611a93610f23565b9050610d058282611aa4919061489d565b1115611ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adc9061493f565b60405180910390fd5b6000600d549050610d1660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611b4557600e5490505b611b4e33611bfe565b15611b5957600f5490505b8281611b659190614451565b341015611ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9e906149ab565b60405180910390fd5b60005b83811015611be257611bcf33611bca8386611bc5919061489d565b61287a565b6129bb565b8080611bda906145ec565b915050611baa565b50505050565b611bfa611bf36123f7565b83836129d9565b5050565b600080610d2160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401611c5d9190613980565b60206040518083038186803b158015611c7557600080fd5b505afa158015611c89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cad91906149e0565b119050919050565b610d1960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610d1a5481565b600f5481565b611cfa611cf46123f7565b836124b8565b611d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3090614370565b60405180910390fd5b611d4584848484612b46565b50505050565b610d1f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c8054611d7f906141a8565b80601f0160208091040260200160405190810160405280929190818152602001828054611dab906141a8565b8015611df85780601f10611dcd57610100808354040283529160200191611df8565b820191906000526020600020905b815481529060010190602001808311611ddb57829003601f168201915b505050505081565b6060611e0b82612ba2565b611e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4190614a7f565b60405180910390fd5b6000611e54612c0e565b90506000815111611e745760405180602001604052806000815250611ea2565b80611e7e84612ca0565b600c604051602001611e9293929190614b6f565b6040516020818303038152906040525b915050919050565b610d205481565b610d0581565b600e5481565b610d1c5481565b610d166020528060005260406000206000915054906101000a900460ff1681565b611eed61232e565b80600c9080519060200190611f03929190613656565b5050565b611f0f61232e565b80600f8190555050565b611f2161232e565b8051825114611f65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5c90614bec565b60405180910390fd5b6000611f6f610f23565b905060005b83518110156120285760005b838281518110611f9357611f926145bd565b5b6020026020010151811015611fec57611fd9858381518110611fb857611fb76145bd565b5b6020026020010151611fd48386611fcf919061489d565b61287a565b6129bb565b8080611fe4906145ec565b915050611f80565b5082818151811061200057611fff6145bd565b5b602002602001015182612013919061489d565b91508080612020906145ec565b915050611f74565b50505050565b610d1e5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120d161232e565b80600e8190555050565b6120e361232e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214a90614c7e565b60405180910390fd5b61215c816127b4565b50565b61216761232e565b60005b81518110156121f9576001610d16600084848151811061218d5761218c6145bd565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806121f1906145ec565b91505061216a565b5050565b610d2160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061231757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612327575061232682612e01565b5b9050919050565b6123366123f7565b73ffffffffffffffffffffffffffffffffffffffff166123546118d6565b73ffffffffffffffffffffffffffffffffffffffff16146123aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a190614cea565b60405180910390fd5b565b6123b581612ba2565b6123f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123eb90614713565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661247283611703565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806124c483611703565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061250657506125058185612035565b5b8061254457508373ffffffffffffffffffffffffffffffffffffffff1661252c84610d72565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661256d82611703565b73ffffffffffffffffffffffffffffffffffffffff16146125c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ba90614d7c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262a90614e0e565b60405180910390fd5b61263e838383612e6b565b6126496000826123ff565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126999190614e2e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126f0919061489d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46127af838383612f7f565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008082610d0561288b9190614e2e565b9050600081334442856040516020016128a79493929190614ecb565b6040516020818303038152906040528051906020012060001c6128ca9190614f19565b9050600092506000601182610d0581106128e7576128e66145bd565b5b01541461290c57601181610d058110612903576129026145bd565b5b01549250612910565b8092505b600060116001846129219190614e2e565b610d058110612933576129326145bd565b5b01541415612967576001826129489190614e2e565b601182610d05811061295d5761295c6145bd565b5b01819055506129a5565b60116001836129769190614e2e565b610d058110612988576129876145bd565b5b0154601182610d05811061299f5761299e6145bd565b5b01819055505b6001836129b2919061489d565b92505050919050565b6129d5828260405180602001604052806000815250612f84565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3f90614f96565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612b3991906137ad565b60405180910390a3505050565b612b5184848461254d565b612b5d84848484612fdf565b612b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9390615028565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6060600b8054612c1d906141a8565b80601f0160208091040260200160405190810160405280929190818152602001828054612c49906141a8565b8015612c965780601f10612c6b57610100808354040283529160200191612c96565b820191906000526020600020905b815481529060010190602001808311612c7957829003601f168201915b5050505050905090565b60606000821415612ce8576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612dfc565b600082905060005b60008214612d1a578080612d03906145ec565b915050600a82612d1391906144da565b9150612cf0565b60008167ffffffffffffffff811115612d3657612d35613b9b565b5b6040519080825280601f01601f191660200182016040528015612d685781602001600182028036833780820191505090505b5090505b60008514612df557600182612d819190614e2e565b9150600a85612d909190614f19565b6030612d9c919061489d565b60f81b818381518110612db257612db16145bd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612dee91906144da565b9450612d6c565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612e76838383612247565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612eb957612eb481613176565b612ef8565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612ef757612ef683826131bf565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f3b57612f368161332c565b612f7a565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612f7957612f7882826133fd565b5b5b505050565b505050565b612f8e838361347c565b612f9b6000848484612fdf565b612fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd190615028565b60405180910390fd5b505050565b60006130008473ffffffffffffffffffffffffffffffffffffffff16612224565b15613169578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026130296123f7565b8786866040518563ffffffff1660e01b815260040161304b949392919061509d565b602060405180830381600087803b15801561306557600080fd5b505af192505050801561309657506040513d601f19601f8201168201806040525081019061309391906150fe565b60015b613119573d80600081146130c6576040519150601f19603f3d011682016040523d82523d6000602084013e6130cb565b606091505b50600081511415613111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310890615028565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061316e565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016131cc846117bc565b6131d69190614e2e565b90506000600760008481526020019081526020016000205490508181146132bb576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506133409190614e2e565b90506000600960008481526020019081526020016000205490506000600883815481106133705761336f6145bd565b5b906000526020600020015490508060088381548110613392576133916145bd565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806133e1576133e061512b565b5b6001900381819060005260206000200160009055905550505050565b6000613408836117bc565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134e3906151a6565b60405180910390fd5b6134f581612ba2565b15613535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352c90615212565b60405180910390fd5b61354160008383612e6b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613591919061489d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461365260008383612f7f565b5050565b828054613662906141a8565b90600052602060002090601f01602090048101928261368457600085556136cb565b82601f1061369d57805160ff19168380011785556136cb565b828001600101855582156136cb579182015b828111156136ca5782518255916020019190600101906136af565b5b5090506136d891906136dc565b5090565b5b808211156136f55760008160009055506001016136dd565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6137428161370d565b811461374d57600080fd5b50565b60008135905061375f81613739565b92915050565b60006020828403121561377b5761377a613703565b5b600061378984828501613750565b91505092915050565b60008115159050919050565b6137a781613792565b82525050565b60006020820190506137c2600083018461379e565b92915050565b6137d181613792565b81146137dc57600080fd5b50565b6000813590506137ee816137c8565b92915050565b60006020828403121561380a57613809613703565b5b6000613818848285016137df565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561385b578082015181840152602081019050613840565b8381111561386a576000848401525b50505050565b6000601f19601f8301169050919050565b600061388c82613821565b613896818561382c565b93506138a681856020860161383d565b6138af81613870565b840191505092915050565b600060208201905081810360008301526138d48184613881565b905092915050565b6000819050919050565b6138ef816138dc565b81146138fa57600080fd5b50565b60008135905061390c816138e6565b92915050565b60006020828403121561392857613927613703565b5b6000613936848285016138fd565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061396a8261393f565b9050919050565b61397a8161395f565b82525050565b60006020820190506139956000830184613971565b92915050565b6139a48161395f565b81146139af57600080fd5b50565b6000813590506139c18161399b565b92915050565b600080604083850312156139de576139dd613703565b5b60006139ec858286016139b2565b92505060206139fd858286016138fd565b9150509250929050565b613a10816138dc565b82525050565b6000602082019050613a2b6000830184613a07565b92915050565b600060208284031215613a4757613a46613703565b5b6000613a55848285016139b2565b91505092915050565b600080600060608486031215613a7757613a76613703565b5b6000613a85868287016139b2565b9350506020613a96868287016139b2565b9250506040613aa7868287016138fd565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613ae6816138dc565b82525050565b6000613af88383613add565b60208301905092915050565b6000602082019050919050565b6000613b1c82613ab1565b613b268185613abc565b9350613b3183613acd565b8060005b83811015613b62578151613b498882613aec565b9750613b5483613b04565b925050600181019050613b35565b5085935050505092915050565b60006020820190508181036000830152613b898184613b11565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613bd382613870565b810181811067ffffffffffffffff82111715613bf257613bf1613b9b565b5b80604052505050565b6000613c056136f9565b9050613c118282613bca565b919050565b600067ffffffffffffffff821115613c3157613c30613b9b565b5b613c3a82613870565b9050602081019050919050565b82818337600083830152505050565b6000613c69613c6484613c16565b613bfb565b905082815260208101848484011115613c8557613c84613b96565b5b613c90848285613c47565b509392505050565b600082601f830112613cad57613cac613b91565b5b8135613cbd848260208601613c56565b91505092915050565b600060208284031215613cdc57613cdb613703565b5b600082013567ffffffffffffffff811115613cfa57613cf9613708565b5b613d0684828501613c98565b91505092915050565b60008060408385031215613d2657613d25613703565b5b6000613d34858286016139b2565b9250506020613d45858286016137df565b9150509250929050565b600067ffffffffffffffff821115613d6a57613d69613b9b565b5b613d7382613870565b9050602081019050919050565b6000613d93613d8e84613d4f565b613bfb565b905082815260208101848484011115613daf57613dae613b96565b5b613dba848285613c47565b509392505050565b600082601f830112613dd757613dd6613b91565b5b8135613de7848260208601613d80565b91505092915050565b60008060008060808587031215613e0a57613e09613703565b5b6000613e18878288016139b2565b9450506020613e29878288016139b2565b9350506040613e3a878288016138fd565b925050606085013567ffffffffffffffff811115613e5b57613e5a613708565b5b613e6787828801613dc2565b91505092959194509250565b600067ffffffffffffffff821115613e8e57613e8d613b9b565b5b602082029050602081019050919050565b600080fd5b6000613eb7613eb284613e73565b613bfb565b90508083825260208201905060208402830185811115613eda57613ed9613e9f565b5b835b81811015613f035780613eef88826139b2565b845260208401935050602081019050613edc565b5050509392505050565b600082601f830112613f2257613f21613b91565b5b8135613f32848260208601613ea4565b91505092915050565b600067ffffffffffffffff821115613f5657613f55613b9b565b5b602082029050602081019050919050565b6000613f7a613f7584613f3b565b613bfb565b90508083825260208201905060208402830185811115613f9d57613f9c613e9f565b5b835b81811015613fc65780613fb288826138fd565b845260208401935050602081019050613f9f565b5050509392505050565b600082601f830112613fe557613fe4613b91565b5b8135613ff5848260208601613f67565b91505092915050565b6000806040838503121561401557614014613703565b5b600083013567ffffffffffffffff81111561403357614032613708565b5b61403f85828601613f0d565b925050602083013567ffffffffffffffff8111156140605761405f613708565b5b61406c85828601613fd0565b9150509250929050565b6000806040838503121561408d5761408c613703565b5b600061409b858286016139b2565b92505060206140ac858286016139b2565b9150509250929050565b6000602082840312156140cc576140cb613703565b5b600082013567ffffffffffffffff8111156140ea576140e9613708565b5b6140f684828501613f0d565b91505092915050565b6000819050919050565b600061412461411f61411a8461393f565b6140ff565b61393f565b9050919050565b600061413682614109565b9050919050565b60006141488261412b565b9050919050565b6141588161413d565b82525050565b6000602082019050614173600083018461414f565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806141c057607f821691505b602082108114156141d4576141d3614179565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061423660218361382c565b9150614241826141da565b604082019050919050565b6000602082019050818103600083015261426581614229565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b60006142c8603e8361382c565b91506142d38261426c565b604082019050919050565b600060208201905081810360008301526142f7816142bb565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b600061435a602e8361382c565b9150614365826142fe565b604082019050919050565b600060208201905081810360008301526143898161434d565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b60006143ec602b8361382c565b91506143f782614390565b604082019050919050565b6000602082019050818103600083015261441b816143df565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061445c826138dc565b9150614467836138dc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144a05761449f614422565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006144e5826138dc565b91506144f0836138dc565b925082614500576144ff6144ab565b5b828204905092915050565b600081905092915050565b50565b600061452660008361450b565b915061453182614516565b600082019050919050565b600061454782614519565b9150819050919050565b7f53656e64696e6720657468206661696c65640000000000000000000000000000600082015250565b600061458760128361382c565b915061459282614551565b602082019050919050565b600060208201905081810360008301526145b68161457a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006145f7826138dc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561462a57614629614422565b5b600182019050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000614691602c8361382c565b915061469c82614635565b604082019050919050565b600060208201905081810360008301526146c081614684565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b60006146fd60188361382c565b9150614708826146c7565b602082019050919050565b6000602082019050818103600083015261472c816146f0565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b600061478f60298361382c565b915061479a82614733565b604082019050919050565b600060208201905081810360008301526147be81614782565b9050919050565b7f7061757365640000000000000000000000000000000000000000000000000000600082015250565b60006147fb60068361382c565b9150614806826147c5565b602082019050919050565b6000602082019050818103600083015261482a816147ee565b9050919050565b7f616d6f756e742073686f756c646e2774206265207a65726f0000000000000000600082015250565b600061486760188361382c565b915061487282614831565b602082019050919050565b600060208201905081810360008301526148968161485a565b9050919050565b60006148a8826138dc565b91506148b3836138dc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148e8576148e7614422565b5b828201905092915050565b7f4d617820737570706c7920657863656564656400000000000000000000000000600082015250565b600061492960138361382c565b9150614934826148f3565b602082019050919050565b600060208201905081810360008301526149588161491c565b9050919050565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b600061499560128361382c565b91506149a08261495f565b602082019050919050565b600060208201905081810360008301526149c481614988565b9050919050565b6000815190506149da816138e6565b92915050565b6000602082840312156149f6576149f5613703565b5b6000614a04848285016149cb565b91505092915050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614a69602f8361382c565b9150614a7482614a0d565b604082019050919050565b60006020820190508181036000830152614a9881614a5c565b9050919050565b600081905092915050565b6000614ab582613821565b614abf8185614a9f565b9350614acf81856020860161383d565b80840191505092915050565b60008190508160005260206000209050919050565b60008154614afd816141a8565b614b078186614a9f565b94506001821660008114614b225760018114614b3357614b66565b60ff19831686528186019350614b66565b614b3c85614adb565b60005b83811015614b5e57815481890152600182019150602081019050614b3f565b838801955050505b50505092915050565b6000614b7b8286614aaa565b9150614b878285614aaa565b9150614b938284614af0565b9150819050949350505050565b7f496e7075742044617461206572726f7200000000000000000000000000000000600082015250565b6000614bd660108361382c565b9150614be182614ba0565b602082019050919050565b60006020820190508181036000830152614c0581614bc9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614c6860268361382c565b9150614c7382614c0c565b604082019050919050565b60006020820190508181036000830152614c9781614c5b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614cd460208361382c565b9150614cdf82614c9e565b602082019050919050565b60006020820190508181036000830152614d0381614cc7565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000614d6660258361382c565b9150614d7182614d0a565b604082019050919050565b60006020820190508181036000830152614d9581614d59565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614df860248361382c565b9150614e0382614d9c565b604082019050919050565b60006020820190508181036000830152614e2781614deb565b9050919050565b6000614e39826138dc565b9150614e44836138dc565b925082821015614e5757614e56614422565b5b828203905092915050565b60008160601b9050919050565b6000614e7a82614e62565b9050919050565b6000614e8c82614e6f565b9050919050565b614ea4614e9f8261395f565b614e81565b82525050565b6000819050919050565b614ec5614ec0826138dc565b614eaa565b82525050565b6000614ed78287614e93565b601482019150614ee78286614eb4565b602082019150614ef78285614eb4565b602082019150614f078284614eb4565b60208201915081905095945050505050565b6000614f24826138dc565b9150614f2f836138dc565b925082614f3f57614f3e6144ab565b5b828206905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614f8060198361382c565b9150614f8b82614f4a565b602082019050919050565b60006020820190508181036000830152614faf81614f73565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061501260328361382c565b915061501d82614fb6565b604082019050919050565b6000602082019050818103600083015261504181615005565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061506f82615048565b6150798185615053565b935061508981856020860161383d565b61509281613870565b840191505092915050565b60006080820190506150b26000830187613971565b6150bf6020830186613971565b6150cc6040830185613a07565b81810360608301526150de8184615064565b905095945050505050565b6000815190506150f881613739565b92915050565b60006020828403121561511457615113613703565b5b6000615122848285016150e9565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061519060208361382c565b915061519b8261515a565b602082019050919050565b600060208201905081810360008301526151bf81615183565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006151fc601c8361382c565b9150615207826151c6565b602082019050919050565b6000602082019050818103600083015261522b816151ef565b905091905056fea264697066735822122031032e433890b4dd090451c440941d34741522ad46d9e7c3be83bb0e0412b22c64736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000f39363abc3434c600e731068fb8d25d4d8b2b668000000000000000000000000000000000000000000000000000000000000002e516d6653736b625236616342767952594a71386535794c52515061705a72394344626e39714a586d535444394c76000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _initBaseURI (string): QmfSskbR6acBvyRYJq8e5yLRQPapZr9CDbn9qJXmSTD9Lv
Arg [1] : _nobu (address): 0xf39363ABC3434C600e731068Fb8D25d4D8b2B668
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 000000000000000000000000f39363abc3434c600e731068fb8d25d4d8b2b668
Arg [2] : 000000000000000000000000000000000000000000000000000000000000002e
Arg [3] : 516d6653736b625236616342767952594a71386535794c52515061705a723943
Arg [4] : 44626e39714a586d535444394c76000000000000000000000000000000000000
Deployed Bytecode Sourcemap
46227:6951:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40010:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51194:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26744:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28257:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27774:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46381:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53075:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40650:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28957:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51765:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40318:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52011:910;;;;;;;;;;;;;:::i;:::-;;29364:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49070:390;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50244:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40840:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50923:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46927:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46550:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26455:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46772:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26186:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5273:103;;;;;;;;;;;;;:::i;:::-;;46690:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47039:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4625:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50554:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26913:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48440:622;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28500:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50118:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46811:72;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46890:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46459:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29620:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47157:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46337:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49468:642;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47237:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46503:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46419:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47004:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46634:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51035:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50436:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51281:476;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47119:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28726:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50338:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5531:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50718:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47315:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40010:224;40112:4;40151:35;40136:50;;;:11;:50;;;;:90;;;;40190:36;40214:11;40190:23;:36::i;:::-;40136:90;40129:97;;40010:224;;;:::o;51194:79::-;4511:13;:11;:13::i;:::-;51259:6:::1;51250;;:15;;;;;;;;;;;;;;;;;;51194:79:::0;:::o;26744:100::-;26798:13;26831:5;26824:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26744:100;:::o;28257:171::-;28333:7;28353:23;28368:7;28353:14;:23::i;:::-;28396:15;:24;28412:7;28396:24;;;;;;;;;;;;;;;;;;;;;28389:31;;28257:171;;;:::o;27774:417::-;27855:13;27871:23;27886:7;27871:14;:23::i;:::-;27855:39;;27919:5;27913:11;;:2;:11;;;;27905:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28013:5;27997:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28022:37;28039:5;28046:12;:10;:12::i;:::-;28022:16;:37::i;:::-;27997:62;27975:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;28162:21;28171:2;28175:7;28162:8;:21::i;:::-;27844:347;27774:417;;:::o;46381:31::-;;;;:::o;53075:100::-;4511:13;:11;:13::i;:::-;53159:8:::1;53146:10;;:21;;;;;;;;;;;;;;;;;;53075:100:::0;:::o;40650:113::-;40711:7;40738:10;:17;;;;40731:24;;40650:113;:::o;28957:336::-;29152:41;29171:12;:10;:12::i;:::-;29185:7;29152:18;:41::i;:::-;29144:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;29257:28;29267:4;29273:2;29277:7;29257:9;:28::i;:::-;28957:336;;;:::o;51765:238::-;51850:7;51900:4;51879:25;;:17;51888:7;51879:8;:17::i;:::-;:25;;;51875:48;;;51913:10;;51906:17;;;;51875:48;51938:11;:20;51950:7;51938:20;;;;;;;;;;;;;;;;;;;;;;;;;51934:39;;;51967:6;;51960:13;;;;51934:39;51991:4;;51984:11;;51765:238;;;;:::o;40318:256::-;40415:7;40451:23;40468:5;40451:16;:23::i;:::-;40443:5;:31;40435:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;40540:12;:19;40553:5;40540:19;;;;;;;;;;;;;;;:26;40560:5;40540:26;;;;;;;;;;;;40533:33;;40318:256;;;;:::o;52011:910::-;52051:15;52069:21;52051:39;;52101:17;47302:4;52131:12;;52121:7;:22;;;;:::i;:::-;:30;;;;:::i;:::-;52101:50;;52162:14;47302:4;52189:9;;52179:7;:19;;;;:::i;:::-;:27;;;;:::i;:::-;52162:44;;52217:12;47302:4;52242:7;;52232;:17;;;;:::i;:::-;:25;;;;:::i;:::-;52217:40;;52268:15;47302:4;52296:10;;52286:7;:20;;;;:::i;:::-;:28;;;;:::i;:::-;52268:46;;52336:9;52358:15;;;;;;;;;;;52350:29;;52387:9;52350:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52335:66;;;52420:4;52412:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;52477:12;;;;;;;;;;;52469:26;;52503:6;52469:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52458:56;;;;;52533:4;52525:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;52590:10;;;;;;;;;;;52582:24;;52614:4;52582:41;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52571:52;;;;;52642:4;52634:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;52699:13;;;;;;;;;;;52691:27;;52726:7;52691:47;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52680:58;;;;;52757:4;52749:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;52814:13;;;;;;;;;;;52806:27;;52841:21;52806:61;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52795:72;;;;;52886:4;52878:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;52040:881;;;;;;52011:910::o;29364:185::-;29502:39;29519:4;29525:2;29529:7;29502:39;;;;;;;;;;;;:16;:39::i;:::-;29364:185;;;:::o;49070:390::-;49157:16;49191:23;49217:17;49227:6;49217:9;:17::i;:::-;49191:43;;49245:25;49287:15;49273:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49245:58;;49319:9;49314:113;49334:15;49330:1;:19;49314:113;;;49385:30;49405:6;49413:1;49385:19;:30::i;:::-;49371:8;49380:1;49371:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;49351:3;;;;;:::i;:::-;;;;49314:113;;;;49444:8;49437:15;;;;49070:390;;;:::o;50244:86::-;4511:13;:11;:13::i;:::-;50314:8:::1;50307:4;:15;;;;50244:86:::0;:::o;40840:233::-;40915:7;40951:30;:28;:30::i;:::-;40943:5;:38;40935:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;41048:10;41059:5;41048:17;;;;;;;;:::i;:::-;;;;;;;;;;41041:24;;40840:233;;;:::o;50923:104::-;4511:13;:11;:13::i;:::-;51008:11:::1;50998:7;:21;;;;;;;;;;;;:::i;:::-;;50923:104:::0;:::o;46927:70::-;;;;;;;;;;;;;:::o;46550:26::-;;;;;;;;;;;;;:::o;26455:222::-;26527:7;26547:13;26563:7;:16;26571:7;26563:16;;;;;;;;;;;;;;;;;;;;;26547:32;;26615:1;26598:19;;:5;:19;;;;26590:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;26664:5;26657:12;;;26455:222;;;:::o;46772:32::-;;;;:::o;26186:207::-;26258:7;26303:1;26286:19;;:5;:19;;;;26278:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26369:9;:16;26379:5;26369:16;;;;;;;;;;;;;;;;26362:23;;26186:207;;;:::o;5273:103::-;4511:13;:11;:13::i;:::-;5338:30:::1;5365:1;5338:18;:30::i;:::-;5273:103::o:0;46690:75::-;;;;;;;;;;;;;:::o;47039:73::-;;;;;;;;;;;;;:::o;4625:87::-;4671:7;4698:6;;;;;;;;;;;4691:13;;4625:87;:::o;50554:156::-;4511:13;:11;:13::i;:::-;50690:12:::1;50666:11;:21;50678:8;50666:21;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;50554:156:::0;;:::o;26913:104::-;26969:13;27002:7;26995:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26913:104;:::o;48440:622::-;48505:6;;;;;;;;;;;48504:7;48496:26;;;;;;;;;;;;:::i;:::-;;;;;;;;;48550:1;48541:6;:10;48533:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;48599:14;48616:13;:11;:13::i;:::-;48599:30;;46539:4;48657:6;48648;:15;;;;:::i;:::-;:28;;48640:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;48711:13;48727:4;;48711:20;;48747:11;:23;48759:10;48747:23;;;;;;;;;;;;;;;;;;;;;;;;;48742:58;;;48794:6;;48786:14;;48742:58;48815:20;48824:10;48815:8;:20::i;:::-;48811:58;;;48859:10;;48851:18;;48811:58;48909:6;48901:5;:14;;;;:::i;:::-;48888:9;:27;;48880:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;48954:9;48949:106;48973:6;48969:1;:10;48949:106;;;49001:42;49011:10;49023:19;49040:1;49033:6;:8;;;;:::i;:::-;49023:9;:19::i;:::-;49001:9;:42::i;:::-;48981:3;;;;;:::i;:::-;;;;48949:106;;;;48485:577;;48440:622;:::o;28500:155::-;28595:52;28614:12;:10;:12::i;:::-;28628:8;28638;28595:18;:52::i;:::-;28500:155;;:::o;50118:118::-;50175:4;50227:1;50199:5;;;;;;;;;;;:15;;;50215:8;50199:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:29;50192:36;;50118:118;;;:::o;46811:72::-;;;;;;;;;;;;;:::o;46890:30::-;;;;:::o;46459:37::-;;;;:::o;29620:323::-;29794:41;29813:12;:10;:12::i;:::-;29827:7;29794:18;:41::i;:::-;29786:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;29897:38;29911:4;29917:2;29921:7;29930:4;29897:13;:38::i;:::-;29620:323;;;;:::o;47157:73::-;;;;;;;;;;;;;:::o;46337:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49468:642::-;49586:13;49639:16;49647:7;49639;:16::i;:::-;49617:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;49743:28;49774:10;:8;:10::i;:::-;49743:41;;49846:1;49821:14;49815:28;:32;:287;;;;;;;;;;;;;;;;;49939:14;49980:18;:7;:16;:18::i;:::-;50025:13;49896:165;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49815:287;49795:307;;;49468:642;;;:::o;47237:31::-;;;;:::o;46503:40::-;46539:4;46503:40;:::o;46419:33::-;;;;:::o;47004:28::-;;;;:::o;46634:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;51035:151::-;4511:13;:11;:13::i;:::-;51161:17:::1;51145:13;:33;;;;;;;;;;;;:::i;:::-;;51035:151:::0;:::o;50436:110::-;4511:13;:11;:13::i;:::-;50524:14:::1;50511:10;:27;;;;50436:110:::0;:::o;51281:476::-;4511:13;:11;:13::i;:::-;51437:7:::1;:14;51418:8;:15;:33;51410:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;51483:14;51500:13;:11;:13::i;:::-;51483:30;;51529:9;51524:226;51548:8;:15;51544:1;:19;51524:226;;;51590:9;51585:119;51609:7;51617:1;51609:10;;;;;;;;:::i;:::-;;;;;;;;51605:1;:14;51585:119;;;51645:43;51655:8;51664:1;51655:11;;;;;;;;:::i;:::-;;;;;;;;51668:19;51685:1;51678:6;:8;;;;:::i;:::-;51668:9;:19::i;:::-;51645:9;:43::i;:::-;51621:3;;;;;:::i;:::-;;;;51585:119;;;;51728:7;51736:1;51728:10;;;;;;;;:::i;:::-;;;;;;;;51718:20;;;;;:::i;:::-;;;51565:3;;;;;:::i;:::-;;;;51524:226;;;;51399:358;51281:476:::0;;:::o;47119:31::-;;;;:::o;28726:164::-;28823:4;28847:18;:25;28866:5;28847:25;;;;;;;;;;;;;;;:35;28873:8;28847:35;;;;;;;;;;;;;;;;;;;;;;;;;28840:42;;28726:164;;;;:::o;50338:90::-;4511:13;:11;:13::i;:::-;50412:8:::1;50403:6;:17;;;;50338:90:::0;:::o;5531:201::-;4511:13;:11;:13::i;:::-;5640:1:::1;5620:22;;:8;:22;;;;5612:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5696:28;5715:8;5696:18;:28::i;:::-;5531:201:::0;:::o;50718:197::-;4511:13;:11;:13::i;:::-;50810:6:::1;50805:103;50826:9;:16;50822:1;:20;50805:103;;;50892:4;50864:11;:25;50876:9;50886:1;50876:12;;;;;;;;:::i;:::-;;;;;;;;50864:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;50844:3;;;;;:::i;:::-;;;;50805:103;;;;50718:197:::0;:::o;47315:20::-;;;;;;;;;;;;;:::o;7323:326::-;7383:4;7640:1;7618:7;:19;;;:23;7611:30;;7323:326;;;:::o;38356:126::-;;;;:::o;25817:305::-;25919:4;25971:25;25956:40;;;:11;:40;;;;:105;;;;26028:33;26013:48;;;:11;:48;;;;25956:105;:158;;;;26078:36;26102:11;26078:23;:36::i;:::-;25956:158;25936:178;;25817:305;;;:::o;4790:132::-;4865:12;:10;:12::i;:::-;4854:23;;:7;:5;:7::i;:::-;:23;;;4846:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4790:132::o;36232:135::-;36314:16;36322:7;36314;:16::i;:::-;36306:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;36232:135;:::o;3176:98::-;3229:7;3256:10;3249:17;;3176:98;:::o;35511:174::-;35613:2;35586:15;:24;35602:7;35586:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35669:7;35665:2;35631:46;;35640:23;35655:7;35640:14;:23::i;:::-;35631:46;;;;;;;;;;;;35511:174;;:::o;31744:264::-;31837:4;31854:13;31870:23;31885:7;31870:14;:23::i;:::-;31854:39;;31923:5;31912:16;;:7;:16;;;:52;;;;31932:32;31949:5;31956:7;31932:16;:32::i;:::-;31912:52;:87;;;;31992:7;31968:31;;:20;31980:7;31968:11;:20::i;:::-;:31;;;31912:87;31904:96;;;31744:264;;;;:::o;34767:625::-;34926:4;34899:31;;:23;34914:7;34899:14;:23::i;:::-;:31;;;34891:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;35005:1;34991:16;;:2;:16;;;;34983:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35061:39;35082:4;35088:2;35092:7;35061:20;:39::i;:::-;35165:29;35182:1;35186:7;35165:8;:29::i;:::-;35226:1;35207:9;:15;35217:4;35207:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35255:1;35238:9;:13;35248:2;35238:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35286:2;35267:7;:16;35275:7;35267:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35325:7;35321:2;35306:27;;35315:4;35306:27;;;;;;;;;;;;35346:38;35366:4;35372:2;35376:7;35346:19;:38::i;:::-;34767:625;;;:::o;5892:191::-;5966:16;5985:6;;;;;;;;;;;5966:25;;6011:8;6002:6;;:17;;;;;;;;;;;;;;;;;;6066:8;6035:40;;6056:8;6035:40;;;;;;;;;;;;5955:128;5892:191;:::o;47675:741::-;47733:13;47759:17;47791:12;46539:4;47779:24;;;;:::i;:::-;47759:44;;47814:12;47926:9;47864:10;47876:16;47894:15;47911:9;47847:74;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47837:85;;;;;;47829:94;;:106;;;;:::i;:::-;47814:121;;47954:1;47946:9;;48070:1;48048:12;48061:4;48048:18;;;;;;;:::i;:::-;;;;:23;48044:109;;48094:12;48107:4;48094:18;;;;;;;:::i;:::-;;;;48086:26;;48044:109;;;48149:4;48141:12;;48044:109;48260:1;48229:12;48254:1;48242:9;:13;;;;:::i;:::-;48229:27;;;;;;;:::i;:::-;;;;:32;48225:162;;;48309:1;48297:9;:13;;;;:::i;:::-;48276:12;48289:4;48276:18;;;;;;;:::i;:::-;;;:34;;;;48225:162;;;48360:12;48385:1;48373:9;:13;;;;:::i;:::-;48360:27;;;;;;;:::i;:::-;;;;48339:12;48352:4;48339:18;;;;;;;:::i;:::-;;;:48;;;;48225:162;48407:1;48398:10;;;;;:::i;:::-;;;47748:668;;47675:741;;;:::o;32350:110::-;32426:26;32436:2;32440:7;32426:26;;;;;;;;;;;;:9;:26::i;:::-;32350:110;;:::o;35828:315::-;35983:8;35974:17;;:5;:17;;;;35966:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36070:8;36032:18;:25;36051:5;36032:25;;;;;;;;;;;;;;;:35;36058:8;36032:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36116:8;36094:41;;36109:5;36094:41;;;36126:8;36094:41;;;;;;:::i;:::-;;;;;;;;35828:315;;;:::o;30824:313::-;30980:28;30990:4;30996:2;31000:7;30980:9;:28::i;:::-;31027:47;31050:4;31056:2;31060:7;31069:4;31027:22;:47::i;:::-;31019:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;30824:313;;;;:::o;31450:127::-;31515:4;31567:1;31539:30;;:7;:16;31547:7;31539:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31532:37;;31450:127;;;:::o;47559:108::-;47619:13;47652:7;47645:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47559:108;:::o;430:723::-;486:13;716:1;707:5;:10;703:53;;;734:10;;;;;;;;;;;;;;;;;;;;;703:53;766:12;781:5;766:20;;797:14;822:78;837:1;829:4;:9;822:78;;855:8;;;;;:::i;:::-;;;;886:2;878:10;;;;;:::i;:::-;;;822:78;;;910:19;942:6;932:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;910:39;;960:154;976:1;967:5;:10;960:154;;1004:1;994:11;;;;;:::i;:::-;;;1071:2;1063:5;:10;;;;:::i;:::-;1050:2;:24;;;;:::i;:::-;1037:39;;1020:6;1027;1020:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1100:2;1091:11;;;;;:::i;:::-;;;960:154;;;1138:6;1124:21;;;;;430:723;;;;:::o;17479:157::-;17564:4;17603:25;17588:40;;;:11;:40;;;;17581:47;;17479:157;;;:::o;41686:589::-;41830:45;41857:4;41863:2;41867:7;41830:26;:45::i;:::-;41908:1;41892:18;;:4;:18;;;41888:187;;;41927:40;41959:7;41927:31;:40::i;:::-;41888:187;;;41997:2;41989:10;;:4;:10;;;41985:90;;42016:47;42049:4;42055:7;42016:32;:47::i;:::-;41985:90;41888:187;42103:1;42089:16;;:2;:16;;;42085:183;;;42122:45;42159:7;42122:36;:45::i;:::-;42085:183;;;42195:4;42189:10;;:2;:10;;;42185:83;;42216:40;42244:2;42248:7;42216:27;:40::i;:::-;42185:83;42085:183;41686:589;;;:::o;38867:125::-;;;;:::o;32687:319::-;32816:18;32822:2;32826:7;32816:5;:18::i;:::-;32867:53;32898:1;32902:2;32906:7;32915:4;32867:22;:53::i;:::-;32845:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;32687:319;;;:::o;36931:853::-;37085:4;37106:15;:2;:13;;;:15::i;:::-;37102:675;;;37158:2;37142:36;;;37179:12;:10;:12::i;:::-;37193:4;37199:7;37208:4;37142:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37138:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37400:1;37383:6;:13;:18;37379:328;;;37426:60;;;;;;;;;;:::i;:::-;;;;;;;;37379:328;37657:6;37651:13;37642:6;37638:2;37634:15;37627:38;37138:584;37274:41;;;37264:51;;;:6;:51;;;;37257:58;;;;;37102:675;37761:4;37754:11;;36931:853;;;;;;;:::o;42998:164::-;43102:10;:17;;;;43075:15;:24;43091:7;43075:24;;;;;;;;;;;:44;;;;43130:10;43146:7;43130:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42998:164;:::o;43789:988::-;44055:22;44105:1;44080:22;44097:4;44080:16;:22::i;:::-;:26;;;;:::i;:::-;44055:51;;44117:18;44138:17;:26;44156:7;44138:26;;;;;;;;;;;;44117:47;;44285:14;44271:10;:28;44267:328;;44316:19;44338:12;:18;44351:4;44338:18;;;;;;;;;;;;;;;:34;44357:14;44338:34;;;;;;;;;;;;44316:56;;44422:11;44389:12;:18;44402:4;44389:18;;;;;;;;;;;;;;;:30;44408:10;44389:30;;;;;;;;;;;:44;;;;44539:10;44506:17;:30;44524:11;44506:30;;;;;;;;;;;:43;;;;44301:294;44267:328;44691:17;:26;44709:7;44691:26;;;;;;;;;;;44684:33;;;44735:12;:18;44748:4;44735:18;;;;;;;;;;;;;;;:34;44754:14;44735:34;;;;;;;;;;;44728:41;;;43870:907;;43789:988;;:::o;45072:1079::-;45325:22;45370:1;45350:10;:17;;;;:21;;;;:::i;:::-;45325:46;;45382:18;45403:15;:24;45419:7;45403:24;;;;;;;;;;;;45382:45;;45754:19;45776:10;45787:14;45776:26;;;;;;;;:::i;:::-;;;;;;;;;;45754:48;;45840:11;45815:10;45826;45815:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;45951:10;45920:15;:28;45936:11;45920:28;;;;;;;;;;;:41;;;;46092:15;:24;46108:7;46092:24;;;;;;;;;;;46085:31;;;46127:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45143:1008;;;45072:1079;:::o;42576:221::-;42661:14;42678:20;42695:2;42678:16;:20::i;:::-;42661:37;;42736:7;42709:12;:16;42722:2;42709:16;;;;;;;;;;;;;;;:24;42726:6;42709:24;;;;;;;;;;;:34;;;;42783:6;42754:17;:26;42772:7;42754:26;;;;;;;;;;;:35;;;;42650:147;42576:221;;:::o;33342:439::-;33436:1;33422:16;;:2;:16;;;;33414:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33495:16;33503:7;33495;:16::i;:::-;33494:17;33486:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33557:45;33586:1;33590:2;33594:7;33557:20;:45::i;:::-;33632:1;33615:9;:13;33625:2;33615:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33663:2;33644:7;:16;33652:7;33644:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33708:7;33704:2;33683:33;;33700:1;33683:33;;;;;;;;;;;;33729:44;33757:1;33761:2;33765:7;33729:19;:44::i;:::-;33342:439;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:116::-;1588:21;1603:5;1588:21;:::i;:::-;1581:5;1578:32;1568:60;;1624:1;1621;1614:12;1568:60;1518:116;:::o;1640:133::-;1683:5;1721:6;1708:20;1699:29;;1737:30;1761:5;1737:30;:::i;:::-;1640:133;;;;:::o;1779:323::-;1835:6;1884:2;1872:9;1863:7;1859:23;1855:32;1852:119;;;1890:79;;:::i;:::-;1852:119;2010:1;2035:50;2077:7;2068:6;2057:9;2053:22;2035:50;:::i;:::-;2025:60;;1981:114;1779:323;;;;:::o;2108:99::-;2160:6;2194:5;2188:12;2178:22;;2108:99;;;:::o;2213:169::-;2297:11;2331:6;2326:3;2319:19;2371:4;2366:3;2362:14;2347:29;;2213:169;;;;:::o;2388:307::-;2456:1;2466:113;2480:6;2477:1;2474:13;2466:113;;;2565:1;2560:3;2556:11;2550:18;2546:1;2541:3;2537:11;2530:39;2502:2;2499:1;2495:10;2490:15;;2466:113;;;2597:6;2594:1;2591:13;2588:101;;;2677:1;2668:6;2663:3;2659:16;2652:27;2588:101;2437:258;2388:307;;;:::o;2701:102::-;2742:6;2793:2;2789:7;2784:2;2777:5;2773:14;2769:28;2759:38;;2701:102;;;:::o;2809:364::-;2897:3;2925:39;2958:5;2925:39;:::i;:::-;2980:71;3044:6;3039:3;2980:71;:::i;:::-;2973:78;;3060:52;3105:6;3100:3;3093:4;3086:5;3082:16;3060:52;:::i;:::-;3137:29;3159:6;3137:29;:::i;:::-;3132:3;3128:39;3121:46;;2901:272;2809:364;;;;:::o;3179:313::-;3292:4;3330:2;3319:9;3315:18;3307:26;;3379:9;3373:4;3369:20;3365:1;3354:9;3350:17;3343:47;3407:78;3480:4;3471:6;3407:78;:::i;:::-;3399:86;;3179:313;;;;:::o;3498:77::-;3535:7;3564:5;3553:16;;3498:77;;;:::o;3581:122::-;3654:24;3672:5;3654:24;:::i;:::-;3647:5;3644:35;3634:63;;3693:1;3690;3683:12;3634:63;3581:122;:::o;3709:139::-;3755:5;3793:6;3780:20;3771:29;;3809:33;3836:5;3809:33;:::i;:::-;3709:139;;;;:::o;3854:329::-;3913:6;3962:2;3950:9;3941:7;3937:23;3933:32;3930:119;;;3968:79;;:::i;:::-;3930:119;4088:1;4113:53;4158:7;4149:6;4138:9;4134:22;4113:53;:::i;:::-;4103:63;;4059:117;3854:329;;;;:::o;4189:126::-;4226:7;4266:42;4259:5;4255:54;4244:65;;4189:126;;;:::o;4321:96::-;4358:7;4387:24;4405:5;4387:24;:::i;:::-;4376:35;;4321:96;;;:::o;4423:118::-;4510:24;4528:5;4510:24;:::i;:::-;4505:3;4498:37;4423:118;;:::o;4547:222::-;4640:4;4678:2;4667:9;4663:18;4655:26;;4691:71;4759:1;4748:9;4744:17;4735:6;4691:71;:::i;:::-;4547:222;;;;:::o;4775:122::-;4848:24;4866:5;4848:24;:::i;:::-;4841:5;4838:35;4828:63;;4887:1;4884;4877:12;4828:63;4775:122;:::o;4903:139::-;4949:5;4987:6;4974:20;4965:29;;5003:33;5030:5;5003:33;:::i;:::-;4903:139;;;;:::o;5048:474::-;5116:6;5124;5173:2;5161:9;5152:7;5148:23;5144:32;5141:119;;;5179:79;;:::i;:::-;5141:119;5299:1;5324:53;5369:7;5360:6;5349:9;5345:22;5324:53;:::i;:::-;5314:63;;5270:117;5426:2;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5397:118;5048:474;;;;;:::o;5528:118::-;5615:24;5633:5;5615:24;:::i;:::-;5610:3;5603:37;5528:118;;:::o;5652:222::-;5745:4;5783:2;5772:9;5768:18;5760:26;;5796:71;5864:1;5853:9;5849:17;5840:6;5796:71;:::i;:::-;5652:222;;;;:::o;5880:329::-;5939:6;5988:2;5976:9;5967:7;5963:23;5959:32;5956:119;;;5994:79;;:::i;:::-;5956:119;6114:1;6139:53;6184:7;6175:6;6164:9;6160:22;6139:53;:::i;:::-;6129:63;;6085:117;5880:329;;;;:::o;6215:619::-;6292:6;6300;6308;6357:2;6345:9;6336:7;6332:23;6328:32;6325:119;;;6363:79;;:::i;:::-;6325:119;6483:1;6508:53;6553:7;6544:6;6533:9;6529:22;6508:53;:::i;:::-;6498:63;;6454:117;6610:2;6636:53;6681:7;6672:6;6661:9;6657:22;6636:53;:::i;:::-;6626:63;;6581:118;6738:2;6764:53;6809:7;6800:6;6789:9;6785:22;6764:53;:::i;:::-;6754:63;;6709:118;6215:619;;;;;:::o;6840:114::-;6907:6;6941:5;6935:12;6925:22;;6840:114;;;:::o;6960:184::-;7059:11;7093:6;7088:3;7081:19;7133:4;7128:3;7124:14;7109:29;;6960:184;;;;:::o;7150:132::-;7217:4;7240:3;7232:11;;7270:4;7265:3;7261:14;7253:22;;7150:132;;;:::o;7288:108::-;7365:24;7383:5;7365:24;:::i;:::-;7360:3;7353:37;7288:108;;:::o;7402:179::-;7471:10;7492:46;7534:3;7526:6;7492:46;:::i;:::-;7570:4;7565:3;7561:14;7547:28;;7402:179;;;;:::o;7587:113::-;7657:4;7689;7684:3;7680:14;7672:22;;7587:113;;;:::o;7736:732::-;7855:3;7884:54;7932:5;7884:54;:::i;:::-;7954:86;8033:6;8028:3;7954:86;:::i;:::-;7947:93;;8064:56;8114:5;8064:56;:::i;:::-;8143:7;8174:1;8159:284;8184:6;8181:1;8178:13;8159:284;;;8260:6;8254:13;8287:63;8346:3;8331:13;8287:63;:::i;:::-;8280:70;;8373:60;8426:6;8373:60;:::i;:::-;8363:70;;8219:224;8206:1;8203;8199:9;8194:14;;8159:284;;;8163:14;8459:3;8452:10;;7860:608;;;7736:732;;;;:::o;8474:373::-;8617:4;8655:2;8644:9;8640:18;8632:26;;8704:9;8698:4;8694:20;8690:1;8679:9;8675:17;8668:47;8732:108;8835:4;8826:6;8732:108;:::i;:::-;8724:116;;8474:373;;;;:::o;8853:117::-;8962:1;8959;8952:12;8976:117;9085:1;9082;9075:12;9099:180;9147:77;9144:1;9137:88;9244:4;9241:1;9234:15;9268:4;9265:1;9258:15;9285:281;9368:27;9390:4;9368:27;:::i;:::-;9360:6;9356:40;9498:6;9486:10;9483:22;9462:18;9450:10;9447:34;9444:62;9441:88;;;9509:18;;:::i;:::-;9441:88;9549:10;9545:2;9538:22;9328:238;9285:281;;:::o;9572:129::-;9606:6;9633:20;;:::i;:::-;9623:30;;9662:33;9690:4;9682:6;9662:33;:::i;:::-;9572:129;;;:::o;9707:308::-;9769:4;9859:18;9851:6;9848:30;9845:56;;;9881:18;;:::i;:::-;9845:56;9919:29;9941:6;9919:29;:::i;:::-;9911:37;;10003:4;9997;9993:15;9985:23;;9707:308;;;:::o;10021:154::-;10105:6;10100:3;10095;10082:30;10167:1;10158:6;10153:3;10149:16;10142:27;10021:154;;;:::o;10181:412::-;10259:5;10284:66;10300:49;10342:6;10300:49;:::i;:::-;10284:66;:::i;:::-;10275:75;;10373:6;10366:5;10359:21;10411:4;10404:5;10400:16;10449:3;10440:6;10435:3;10431:16;10428:25;10425:112;;;10456:79;;:::i;:::-;10425:112;10546:41;10580:6;10575:3;10570;10546:41;:::i;:::-;10265:328;10181:412;;;;;:::o;10613:340::-;10669:5;10718:3;10711:4;10703:6;10699:17;10695:27;10685:122;;10726:79;;:::i;:::-;10685:122;10843:6;10830:20;10868:79;10943:3;10935:6;10928:4;10920:6;10916:17;10868:79;:::i;:::-;10859:88;;10675:278;10613:340;;;;:::o;10959:509::-;11028:6;11077:2;11065:9;11056:7;11052:23;11048:32;11045:119;;;11083:79;;:::i;:::-;11045:119;11231:1;11220:9;11216:17;11203:31;11261:18;11253:6;11250:30;11247:117;;;11283:79;;:::i;:::-;11247:117;11388:63;11443:7;11434:6;11423:9;11419:22;11388:63;:::i;:::-;11378:73;;11174:287;10959:509;;;;:::o;11474:468::-;11539:6;11547;11596:2;11584:9;11575:7;11571:23;11567:32;11564:119;;;11602:79;;:::i;:::-;11564:119;11722:1;11747:53;11792:7;11783:6;11772:9;11768:22;11747:53;:::i;:::-;11737:63;;11693:117;11849:2;11875:50;11917:7;11908:6;11897:9;11893:22;11875:50;:::i;:::-;11865:60;;11820:115;11474:468;;;;;:::o;11948:307::-;12009:4;12099:18;12091:6;12088:30;12085:56;;;12121:18;;:::i;:::-;12085:56;12159:29;12181:6;12159:29;:::i;:::-;12151:37;;12243:4;12237;12233:15;12225:23;;11948:307;;;:::o;12261:410::-;12338:5;12363:65;12379:48;12420:6;12379:48;:::i;:::-;12363:65;:::i;:::-;12354:74;;12451:6;12444:5;12437:21;12489:4;12482:5;12478:16;12527:3;12518:6;12513:3;12509:16;12506:25;12503:112;;;12534:79;;:::i;:::-;12503:112;12624:41;12658:6;12653:3;12648;12624:41;:::i;:::-;12344:327;12261:410;;;;;:::o;12690:338::-;12745:5;12794:3;12787:4;12779:6;12775:17;12771:27;12761:122;;12802:79;;:::i;:::-;12761:122;12919:6;12906:20;12944:78;13018:3;13010:6;13003:4;12995:6;12991:17;12944:78;:::i;:::-;12935:87;;12751:277;12690:338;;;;:::o;13034:943::-;13129:6;13137;13145;13153;13202:3;13190:9;13181:7;13177:23;13173:33;13170:120;;;13209:79;;:::i;:::-;13170:120;13329:1;13354:53;13399:7;13390:6;13379:9;13375:22;13354:53;:::i;:::-;13344:63;;13300:117;13456:2;13482:53;13527:7;13518:6;13507:9;13503:22;13482:53;:::i;:::-;13472:63;;13427:118;13584:2;13610:53;13655:7;13646:6;13635:9;13631:22;13610:53;:::i;:::-;13600:63;;13555:118;13740:2;13729:9;13725:18;13712:32;13771:18;13763:6;13760:30;13757:117;;;13793:79;;:::i;:::-;13757:117;13898:62;13952:7;13943:6;13932:9;13928:22;13898:62;:::i;:::-;13888:72;;13683:287;13034:943;;;;;;;:::o;13983:311::-;14060:4;14150:18;14142:6;14139:30;14136:56;;;14172:18;;:::i;:::-;14136:56;14222:4;14214:6;14210:17;14202:25;;14282:4;14276;14272:15;14264:23;;13983:311;;;:::o;14300:117::-;14409:1;14406;14399:12;14440:710;14536:5;14561:81;14577:64;14634:6;14577:64;:::i;:::-;14561:81;:::i;:::-;14552:90;;14662:5;14691:6;14684:5;14677:21;14725:4;14718:5;14714:16;14707:23;;14778:4;14770:6;14766:17;14758:6;14754:30;14807:3;14799:6;14796:15;14793:122;;;14826:79;;:::i;:::-;14793:122;14941:6;14924:220;14958:6;14953:3;14950:15;14924:220;;;15033:3;15062:37;15095:3;15083:10;15062:37;:::i;:::-;15057:3;15050:50;15129:4;15124:3;15120:14;15113:21;;15000:144;14984:4;14979:3;14975:14;14968:21;;14924:220;;;14928:21;14542:608;;14440:710;;;;;:::o;15173:370::-;15244:5;15293:3;15286:4;15278:6;15274:17;15270:27;15260:122;;15301:79;;:::i;:::-;15260:122;15418:6;15405:20;15443:94;15533:3;15525:6;15518:4;15510:6;15506:17;15443:94;:::i;:::-;15434:103;;15250:293;15173:370;;;;:::o;15549:311::-;15626:4;15716:18;15708:6;15705:30;15702:56;;;15738:18;;:::i;:::-;15702:56;15788:4;15780:6;15776:17;15768:25;;15848:4;15842;15838:15;15830:23;;15549:311;;;:::o;15883:710::-;15979:5;16004:81;16020:64;16077:6;16020:64;:::i;:::-;16004:81;:::i;:::-;15995:90;;16105:5;16134:6;16127:5;16120:21;16168:4;16161:5;16157:16;16150:23;;16221:4;16213:6;16209:17;16201:6;16197:30;16250:3;16242:6;16239:15;16236:122;;;16269:79;;:::i;:::-;16236:122;16384:6;16367:220;16401:6;16396:3;16393:15;16367:220;;;16476:3;16505:37;16538:3;16526:10;16505:37;:::i;:::-;16500:3;16493:50;16572:4;16567:3;16563:14;16556:21;;16443:144;16427:4;16422:3;16418:14;16411:21;;16367:220;;;16371:21;15985:608;;15883:710;;;;;:::o;16616:370::-;16687:5;16736:3;16729:4;16721:6;16717:17;16713:27;16703:122;;16744:79;;:::i;:::-;16703:122;16861:6;16848:20;16886:94;16976:3;16968:6;16961:4;16953:6;16949:17;16886:94;:::i;:::-;16877:103;;16693:293;16616:370;;;;:::o;16992:894::-;17110:6;17118;17167:2;17155:9;17146:7;17142:23;17138:32;17135:119;;;17173:79;;:::i;:::-;17135:119;17321:1;17310:9;17306:17;17293:31;17351:18;17343:6;17340:30;17337:117;;;17373:79;;:::i;:::-;17337:117;17478:78;17548:7;17539:6;17528:9;17524:22;17478:78;:::i;:::-;17468:88;;17264:302;17633:2;17622:9;17618:18;17605:32;17664:18;17656:6;17653:30;17650:117;;;17686:79;;:::i;:::-;17650:117;17791:78;17861:7;17852:6;17841:9;17837:22;17791:78;:::i;:::-;17781:88;;17576:303;16992:894;;;;;:::o;17892:474::-;17960:6;17968;18017:2;18005:9;17996:7;17992:23;17988:32;17985:119;;;18023:79;;:::i;:::-;17985:119;18143:1;18168:53;18213:7;18204:6;18193:9;18189:22;18168:53;:::i;:::-;18158:63;;18114:117;18270:2;18296:53;18341:7;18332:6;18321:9;18317:22;18296:53;:::i;:::-;18286:63;;18241:118;17892:474;;;;;:::o;18372:539::-;18456:6;18505:2;18493:9;18484:7;18480:23;18476:32;18473:119;;;18511:79;;:::i;:::-;18473:119;18659:1;18648:9;18644:17;18631:31;18689:18;18681:6;18678:30;18675:117;;;18711:79;;:::i;:::-;18675:117;18816:78;18886:7;18877:6;18866:9;18862:22;18816:78;:::i;:::-;18806:88;;18602:302;18372:539;;;;:::o;18917:60::-;18945:3;18966:5;18959:12;;18917:60;;;:::o;18983:142::-;19033:9;19066:53;19084:34;19093:24;19111:5;19093:24;:::i;:::-;19084:34;:::i;:::-;19066:53;:::i;:::-;19053:66;;18983:142;;;:::o;19131:126::-;19181:9;19214:37;19245:5;19214:37;:::i;:::-;19201:50;;19131:126;;;:::o;19263:141::-;19328:9;19361:37;19392:5;19361:37;:::i;:::-;19348:50;;19263:141;;;:::o;19410:161::-;19512:52;19558:5;19512:52;:::i;:::-;19507:3;19500:65;19410:161;;:::o;19577:252::-;19685:4;19723:2;19712:9;19708:18;19700:26;;19736:86;19819:1;19808:9;19804:17;19795:6;19736:86;:::i;:::-;19577:252;;;;:::o;19835:180::-;19883:77;19880:1;19873:88;19980:4;19977:1;19970:15;20004:4;20001:1;19994:15;20021:320;20065:6;20102:1;20096:4;20092:12;20082:22;;20149:1;20143:4;20139:12;20170:18;20160:81;;20226:4;20218:6;20214:17;20204:27;;20160:81;20288:2;20280:6;20277:14;20257:18;20254:38;20251:84;;;20307:18;;:::i;:::-;20251:84;20072:269;20021:320;;;:::o;20347:220::-;20487:34;20483:1;20475:6;20471:14;20464:58;20556:3;20551:2;20543:6;20539:15;20532:28;20347:220;:::o;20573:366::-;20715:3;20736:67;20800:2;20795:3;20736:67;:::i;:::-;20729:74;;20812:93;20901:3;20812:93;:::i;:::-;20930:2;20925:3;20921:12;20914:19;;20573:366;;;:::o;20945:419::-;21111:4;21149:2;21138:9;21134:18;21126:26;;21198:9;21192:4;21188:20;21184:1;21173:9;21169:17;21162:47;21226:131;21352:4;21226:131;:::i;:::-;21218:139;;20945:419;;;:::o;21370:249::-;21510:34;21506:1;21498:6;21494:14;21487:58;21579:32;21574:2;21566:6;21562:15;21555:57;21370:249;:::o;21625:366::-;21767:3;21788:67;21852:2;21847:3;21788:67;:::i;:::-;21781:74;;21864:93;21953:3;21864:93;:::i;:::-;21982:2;21977:3;21973:12;21966:19;;21625:366;;;:::o;21997:419::-;22163:4;22201:2;22190:9;22186:18;22178:26;;22250:9;22244:4;22240:20;22236:1;22225:9;22221:17;22214:47;22278:131;22404:4;22278:131;:::i;:::-;22270:139;;21997:419;;;:::o;22422:233::-;22562:34;22558:1;22550:6;22546:14;22539:58;22631:16;22626:2;22618:6;22614:15;22607:41;22422:233;:::o;22661:366::-;22803:3;22824:67;22888:2;22883:3;22824:67;:::i;:::-;22817:74;;22900:93;22989:3;22900:93;:::i;:::-;23018:2;23013:3;23009:12;23002:19;;22661:366;;;:::o;23033:419::-;23199:4;23237:2;23226:9;23222:18;23214:26;;23286:9;23280:4;23276:20;23272:1;23261:9;23257:17;23250:47;23314:131;23440:4;23314:131;:::i;:::-;23306:139;;23033:419;;;:::o;23458:230::-;23598:34;23594:1;23586:6;23582:14;23575:58;23667:13;23662:2;23654:6;23650:15;23643:38;23458:230;:::o;23694:366::-;23836:3;23857:67;23921:2;23916:3;23857:67;:::i;:::-;23850:74;;23933:93;24022:3;23933:93;:::i;:::-;24051:2;24046:3;24042:12;24035:19;;23694:366;;;:::o;24066:419::-;24232:4;24270:2;24259:9;24255:18;24247:26;;24319:9;24313:4;24309:20;24305:1;24294:9;24290:17;24283:47;24347:131;24473:4;24347:131;:::i;:::-;24339:139;;24066:419;;;:::o;24491:180::-;24539:77;24536:1;24529:88;24636:4;24633:1;24626:15;24660:4;24657:1;24650:15;24677:348;24717:7;24740:20;24758:1;24740:20;:::i;:::-;24735:25;;24774:20;24792:1;24774:20;:::i;:::-;24769:25;;24962:1;24894:66;24890:74;24887:1;24884:81;24879:1;24872:9;24865:17;24861:105;24858:131;;;24969:18;;:::i;:::-;24858:131;25017:1;25014;25010:9;24999:20;;24677:348;;;;:::o;25031:180::-;25079:77;25076:1;25069:88;25176:4;25173:1;25166:15;25200:4;25197:1;25190:15;25217:185;25257:1;25274:20;25292:1;25274:20;:::i;:::-;25269:25;;25308:20;25326:1;25308:20;:::i;:::-;25303:25;;25347:1;25337:35;;25352:18;;:::i;:::-;25337:35;25394:1;25391;25387:9;25382:14;;25217:185;;;;:::o;25408:147::-;25509:11;25546:3;25531:18;;25408:147;;;;:::o;25561:114::-;;:::o;25681:398::-;25840:3;25861:83;25942:1;25937:3;25861:83;:::i;:::-;25854:90;;25953:93;26042:3;25953:93;:::i;:::-;26071:1;26066:3;26062:11;26055:18;;25681:398;;;:::o;26085:379::-;26269:3;26291:147;26434:3;26291:147;:::i;:::-;26284:154;;26455:3;26448:10;;26085:379;;;:::o;26470:168::-;26610:20;26606:1;26598:6;26594:14;26587:44;26470:168;:::o;26644:366::-;26786:3;26807:67;26871:2;26866:3;26807:67;:::i;:::-;26800:74;;26883:93;26972:3;26883:93;:::i;:::-;27001:2;26996:3;26992:12;26985:19;;26644:366;;;:::o;27016:419::-;27182:4;27220:2;27209:9;27205:18;27197:26;;27269:9;27263:4;27259:20;27255:1;27244:9;27240:17;27233:47;27297:131;27423:4;27297:131;:::i;:::-;27289:139;;27016:419;;;:::o;27441:180::-;27489:77;27486:1;27479:88;27586:4;27583:1;27576:15;27610:4;27607:1;27600:15;27627:233;27666:3;27689:24;27707:5;27689:24;:::i;:::-;27680:33;;27735:66;27728:5;27725:77;27722:103;;;27805:18;;:::i;:::-;27722:103;27852:1;27845:5;27841:13;27834:20;;27627:233;;;:::o;27866:231::-;28006:34;28002:1;27994:6;27990:14;27983:58;28075:14;28070:2;28062:6;28058:15;28051:39;27866:231;:::o;28103:366::-;28245:3;28266:67;28330:2;28325:3;28266:67;:::i;:::-;28259:74;;28342:93;28431:3;28342:93;:::i;:::-;28460:2;28455:3;28451:12;28444:19;;28103:366;;;:::o;28475:419::-;28641:4;28679:2;28668:9;28664:18;28656:26;;28728:9;28722:4;28718:20;28714:1;28703:9;28699:17;28692:47;28756:131;28882:4;28756:131;:::i;:::-;28748:139;;28475:419;;;:::o;28900:174::-;29040:26;29036:1;29028:6;29024:14;29017:50;28900:174;:::o;29080:366::-;29222:3;29243:67;29307:2;29302:3;29243:67;:::i;:::-;29236:74;;29319:93;29408:3;29319:93;:::i;:::-;29437:2;29432:3;29428:12;29421:19;;29080:366;;;:::o;29452:419::-;29618:4;29656:2;29645:9;29641:18;29633:26;;29705:9;29699:4;29695:20;29691:1;29680:9;29676:17;29669:47;29733:131;29859:4;29733:131;:::i;:::-;29725:139;;29452:419;;;:::o;29877:228::-;30017:34;30013:1;30005:6;30001:14;29994:58;30086:11;30081:2;30073:6;30069:15;30062:36;29877:228;:::o;30111:366::-;30253:3;30274:67;30338:2;30333:3;30274:67;:::i;:::-;30267:74;;30350:93;30439:3;30350:93;:::i;:::-;30468:2;30463:3;30459:12;30452:19;;30111:366;;;:::o;30483:419::-;30649:4;30687:2;30676:9;30672:18;30664:26;;30736:9;30730:4;30726:20;30722:1;30711:9;30707:17;30700:47;30764:131;30890:4;30764:131;:::i;:::-;30756:139;;30483:419;;;:::o;30908:156::-;31048:8;31044:1;31036:6;31032:14;31025:32;30908:156;:::o;31070:365::-;31212:3;31233:66;31297:1;31292:3;31233:66;:::i;:::-;31226:73;;31308:93;31397:3;31308:93;:::i;:::-;31426:2;31421:3;31417:12;31410:19;;31070:365;;;:::o;31441:419::-;31607:4;31645:2;31634:9;31630:18;31622:26;;31694:9;31688:4;31684:20;31680:1;31669:9;31665:17;31658:47;31722:131;31848:4;31722:131;:::i;:::-;31714:139;;31441:419;;;:::o;31866:174::-;32006:26;32002:1;31994:6;31990:14;31983:50;31866:174;:::o;32046:366::-;32188:3;32209:67;32273:2;32268:3;32209:67;:::i;:::-;32202:74;;32285:93;32374:3;32285:93;:::i;:::-;32403:2;32398:3;32394:12;32387:19;;32046:366;;;:::o;32418:419::-;32584:4;32622:2;32611:9;32607:18;32599:26;;32671:9;32665:4;32661:20;32657:1;32646:9;32642:17;32635:47;32699:131;32825:4;32699:131;:::i;:::-;32691:139;;32418:419;;;:::o;32843:305::-;32883:3;32902:20;32920:1;32902:20;:::i;:::-;32897:25;;32936:20;32954:1;32936:20;:::i;:::-;32931:25;;33090:1;33022:66;33018:74;33015:1;33012:81;33009:107;;;33096:18;;:::i;:::-;33009:107;33140:1;33137;33133:9;33126:16;;32843:305;;;;:::o;33154:169::-;33294:21;33290:1;33282:6;33278:14;33271:45;33154:169;:::o;33329:366::-;33471:3;33492:67;33556:2;33551:3;33492:67;:::i;:::-;33485:74;;33568:93;33657:3;33568:93;:::i;:::-;33686:2;33681:3;33677:12;33670:19;;33329:366;;;:::o;33701:419::-;33867:4;33905:2;33894:9;33890:18;33882:26;;33954:9;33948:4;33944:20;33940:1;33929:9;33925:17;33918:47;33982:131;34108:4;33982:131;:::i;:::-;33974:139;;33701:419;;;:::o;34126:168::-;34266:20;34262:1;34254:6;34250:14;34243:44;34126:168;:::o;34300:366::-;34442:3;34463:67;34527:2;34522:3;34463:67;:::i;:::-;34456:74;;34539:93;34628:3;34539:93;:::i;:::-;34657:2;34652:3;34648:12;34641:19;;34300:366;;;:::o;34672:419::-;34838:4;34876:2;34865:9;34861:18;34853:26;;34925:9;34919:4;34915:20;34911:1;34900:9;34896:17;34889:47;34953:131;35079:4;34953:131;:::i;:::-;34945:139;;34672:419;;;:::o;35097:143::-;35154:5;35185:6;35179:13;35170:22;;35201:33;35228:5;35201:33;:::i;:::-;35097:143;;;;:::o;35246:351::-;35316:6;35365:2;35353:9;35344:7;35340:23;35336:32;35333:119;;;35371:79;;:::i;:::-;35333:119;35491:1;35516:64;35572:7;35563:6;35552:9;35548:22;35516:64;:::i;:::-;35506:74;;35462:128;35246:351;;;;:::o;35603:234::-;35743:34;35739:1;35731:6;35727:14;35720:58;35812:17;35807:2;35799:6;35795:15;35788:42;35603:234;:::o;35843:366::-;35985:3;36006:67;36070:2;36065:3;36006:67;:::i;:::-;35999:74;;36082:93;36171:3;36082:93;:::i;:::-;36200:2;36195:3;36191:12;36184:19;;35843:366;;;:::o;36215:419::-;36381:4;36419:2;36408:9;36404:18;36396:26;;36468:9;36462:4;36458:20;36454:1;36443:9;36439:17;36432:47;36496:131;36622:4;36496:131;:::i;:::-;36488:139;;36215:419;;;:::o;36640:148::-;36742:11;36779:3;36764:18;;36640:148;;;;:::o;36794:377::-;36900:3;36928:39;36961:5;36928:39;:::i;:::-;36983:89;37065:6;37060:3;36983:89;:::i;:::-;36976:96;;37081:52;37126:6;37121:3;37114:4;37107:5;37103:16;37081:52;:::i;:::-;37158:6;37153:3;37149:16;37142:23;;36904:267;36794:377;;;;:::o;37177:141::-;37226:4;37249:3;37241:11;;37272:3;37269:1;37262:14;37306:4;37303:1;37293:18;37285:26;;37177:141;;;:::o;37348:845::-;37451:3;37488:5;37482:12;37517:36;37543:9;37517:36;:::i;:::-;37569:89;37651:6;37646:3;37569:89;:::i;:::-;37562:96;;37689:1;37678:9;37674:17;37705:1;37700:137;;;;37851:1;37846:341;;;;37667:520;;37700:137;37784:4;37780:9;37769;37765:25;37760:3;37753:38;37820:6;37815:3;37811:16;37804:23;;37700:137;;37846:341;37913:38;37945:5;37913:38;:::i;:::-;37973:1;37987:154;38001:6;37998:1;37995:13;37987:154;;;38075:7;38069:14;38065:1;38060:3;38056:11;38049:35;38125:1;38116:7;38112:15;38101:26;;38023:4;38020:1;38016:12;38011:17;;37987:154;;;38170:6;38165:3;38161:16;38154:23;;37853:334;;37667:520;;37455:738;;37348:845;;;;:::o;38199:589::-;38424:3;38446:95;38537:3;38528:6;38446:95;:::i;:::-;38439:102;;38558:95;38649:3;38640:6;38558:95;:::i;:::-;38551:102;;38670:92;38758:3;38749:6;38670:92;:::i;:::-;38663:99;;38779:3;38772:10;;38199:589;;;;;;:::o;38794:166::-;38934:18;38930:1;38922:6;38918:14;38911:42;38794:166;:::o;38966:366::-;39108:3;39129:67;39193:2;39188:3;39129:67;:::i;:::-;39122:74;;39205:93;39294:3;39205:93;:::i;:::-;39323:2;39318:3;39314:12;39307:19;;38966:366;;;:::o;39338:419::-;39504:4;39542:2;39531:9;39527:18;39519:26;;39591:9;39585:4;39581:20;39577:1;39566:9;39562:17;39555:47;39619:131;39745:4;39619:131;:::i;:::-;39611:139;;39338:419;;;:::o;39763:225::-;39903:34;39899:1;39891:6;39887:14;39880:58;39972:8;39967:2;39959:6;39955:15;39948:33;39763:225;:::o;39994:366::-;40136:3;40157:67;40221:2;40216:3;40157:67;:::i;:::-;40150:74;;40233:93;40322:3;40233:93;:::i;:::-;40351:2;40346:3;40342:12;40335:19;;39994:366;;;:::o;40366:419::-;40532:4;40570:2;40559:9;40555:18;40547:26;;40619:9;40613:4;40609:20;40605:1;40594:9;40590:17;40583:47;40647:131;40773:4;40647:131;:::i;:::-;40639:139;;40366:419;;;:::o;40791:182::-;40931:34;40927:1;40919:6;40915:14;40908:58;40791:182;:::o;40979:366::-;41121:3;41142:67;41206:2;41201:3;41142:67;:::i;:::-;41135:74;;41218:93;41307:3;41218:93;:::i;:::-;41336:2;41331:3;41327:12;41320:19;;40979:366;;;:::o;41351:419::-;41517:4;41555:2;41544:9;41540:18;41532:26;;41604:9;41598:4;41594:20;41590:1;41579:9;41575:17;41568:47;41632:131;41758:4;41632:131;:::i;:::-;41624:139;;41351:419;;;:::o;41776:224::-;41916:34;41912:1;41904:6;41900:14;41893:58;41985:7;41980:2;41972:6;41968:15;41961:32;41776:224;:::o;42006:366::-;42148:3;42169:67;42233:2;42228:3;42169:67;:::i;:::-;42162:74;;42245:93;42334:3;42245:93;:::i;:::-;42363:2;42358:3;42354:12;42347:19;;42006:366;;;:::o;42378:419::-;42544:4;42582:2;42571:9;42567:18;42559:26;;42631:9;42625:4;42621:20;42617:1;42606:9;42602:17;42595:47;42659:131;42785:4;42659:131;:::i;:::-;42651:139;;42378:419;;;:::o;42803:223::-;42943:34;42939:1;42931:6;42927:14;42920:58;43012:6;43007:2;42999:6;42995:15;42988:31;42803:223;:::o;43032:366::-;43174:3;43195:67;43259:2;43254:3;43195:67;:::i;:::-;43188:74;;43271:93;43360:3;43271:93;:::i;:::-;43389:2;43384:3;43380:12;43373:19;;43032:366;;;:::o;43404:419::-;43570:4;43608:2;43597:9;43593:18;43585:26;;43657:9;43651:4;43647:20;43643:1;43632:9;43628:17;43621:47;43685:131;43811:4;43685:131;:::i;:::-;43677:139;;43404:419;;;:::o;43829:191::-;43869:4;43889:20;43907:1;43889:20;:::i;:::-;43884:25;;43923:20;43941:1;43923:20;:::i;:::-;43918:25;;43962:1;43959;43956:8;43953:34;;;43967:18;;:::i;:::-;43953:34;44012:1;44009;44005:9;43997:17;;43829:191;;;;:::o;44026:94::-;44059:8;44107:5;44103:2;44099:14;44078:35;;44026:94;;;:::o;44126:::-;44165:7;44194:20;44208:5;44194:20;:::i;:::-;44183:31;;44126:94;;;:::o;44226:100::-;44265:7;44294:26;44314:5;44294:26;:::i;:::-;44283:37;;44226:100;;;:::o;44332:157::-;44437:45;44457:24;44475:5;44457:24;:::i;:::-;44437:45;:::i;:::-;44432:3;44425:58;44332:157;;:::o;44495:79::-;44534:7;44563:5;44552:16;;44495:79;;;:::o;44580:157::-;44685:45;44705:24;44723:5;44705:24;:::i;:::-;44685:45;:::i;:::-;44680:3;44673:58;44580:157;;:::o;44743:679::-;44939:3;44954:75;45025:3;45016:6;44954:75;:::i;:::-;45054:2;45049:3;45045:12;45038:19;;45067:75;45138:3;45129:6;45067:75;:::i;:::-;45167:2;45162:3;45158:12;45151:19;;45180:75;45251:3;45242:6;45180:75;:::i;:::-;45280:2;45275:3;45271:12;45264:19;;45293:75;45364:3;45355:6;45293:75;:::i;:::-;45393:2;45388:3;45384:12;45377:19;;45413:3;45406:10;;44743:679;;;;;;;:::o;45428:176::-;45460:1;45477:20;45495:1;45477:20;:::i;:::-;45472:25;;45511:20;45529:1;45511:20;:::i;:::-;45506:25;;45550:1;45540:35;;45555:18;;:::i;:::-;45540:35;45596:1;45593;45589:9;45584:14;;45428:176;;;;:::o;45610:175::-;45750:27;45746:1;45738:6;45734:14;45727:51;45610:175;:::o;45791:366::-;45933:3;45954:67;46018:2;46013:3;45954:67;:::i;:::-;45947:74;;46030:93;46119:3;46030:93;:::i;:::-;46148:2;46143:3;46139:12;46132:19;;45791:366;;;:::o;46163:419::-;46329:4;46367:2;46356:9;46352:18;46344:26;;46416:9;46410:4;46406:20;46402:1;46391:9;46387:17;46380:47;46444:131;46570:4;46444:131;:::i;:::-;46436:139;;46163:419;;;:::o;46588:237::-;46728:34;46724:1;46716:6;46712:14;46705:58;46797:20;46792:2;46784:6;46780:15;46773:45;46588:237;:::o;46831:366::-;46973:3;46994:67;47058:2;47053:3;46994:67;:::i;:::-;46987:74;;47070:93;47159:3;47070:93;:::i;:::-;47188:2;47183:3;47179:12;47172:19;;46831:366;;;:::o;47203:419::-;47369:4;47407:2;47396:9;47392:18;47384:26;;47456:9;47450:4;47446:20;47442:1;47431:9;47427:17;47420:47;47484:131;47610:4;47484:131;:::i;:::-;47476:139;;47203:419;;;:::o;47628:98::-;47679:6;47713:5;47707:12;47697:22;;47628:98;;;:::o;47732:168::-;47815:11;47849:6;47844:3;47837:19;47889:4;47884:3;47880:14;47865:29;;47732:168;;;;:::o;47906:360::-;47992:3;48020:38;48052:5;48020:38;:::i;:::-;48074:70;48137:6;48132:3;48074:70;:::i;:::-;48067:77;;48153:52;48198:6;48193:3;48186:4;48179:5;48175:16;48153:52;:::i;:::-;48230:29;48252:6;48230:29;:::i;:::-;48225:3;48221:39;48214:46;;47996:270;47906:360;;;;:::o;48272:640::-;48467:4;48505:3;48494:9;48490:19;48482:27;;48519:71;48587:1;48576:9;48572:17;48563:6;48519:71;:::i;:::-;48600:72;48668:2;48657:9;48653:18;48644:6;48600:72;:::i;:::-;48682;48750:2;48739:9;48735:18;48726:6;48682:72;:::i;:::-;48801:9;48795:4;48791:20;48786:2;48775:9;48771:18;48764:48;48829:76;48900:4;48891:6;48829:76;:::i;:::-;48821:84;;48272:640;;;;;;;:::o;48918:141::-;48974:5;49005:6;48999:13;48990:22;;49021:32;49047:5;49021:32;:::i;:::-;48918:141;;;;:::o;49065:349::-;49134:6;49183:2;49171:9;49162:7;49158:23;49154:32;49151:119;;;49189:79;;:::i;:::-;49151:119;49309:1;49334:63;49389:7;49380:6;49369:9;49365:22;49334:63;:::i;:::-;49324:73;;49280:127;49065:349;;;;:::o;49420:180::-;49468:77;49465:1;49458:88;49565:4;49562:1;49555:15;49589:4;49586:1;49579:15;49606:182;49746:34;49742:1;49734:6;49730:14;49723:58;49606:182;:::o;49794:366::-;49936:3;49957:67;50021:2;50016:3;49957:67;:::i;:::-;49950:74;;50033:93;50122:3;50033:93;:::i;:::-;50151:2;50146:3;50142:12;50135:19;;49794:366;;;:::o;50166:419::-;50332:4;50370:2;50359:9;50355:18;50347:26;;50419:9;50413:4;50409:20;50405:1;50394:9;50390:17;50383:47;50447:131;50573:4;50447:131;:::i;:::-;50439:139;;50166:419;;;:::o;50591:178::-;50731:30;50727:1;50719:6;50715:14;50708:54;50591:178;:::o;50775:366::-;50917:3;50938:67;51002:2;50997:3;50938:67;:::i;:::-;50931:74;;51014:93;51103:3;51014:93;:::i;:::-;51132:2;51127:3;51123:12;51116:19;;50775:366;;;:::o;51147:419::-;51313:4;51351:2;51340:9;51336:18;51328:26;;51400:9;51394:4;51390:20;51386:1;51375:9;51371:17;51364:47;51428:131;51554:4;51428:131;:::i;:::-;51420:139;;51147:419;;;:::o
Swarm Source
ipfs://31032e433890b4dd090451c440941d34741522ad46d9e7c3be83bb0e0412b22c
Loading...
Loading
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
CRONOS | 100.00% | $0.084174 | 199 | $16.75 |
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.