Source Code
Overview
ETH Balance
0 ETH
ETH Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 9,005 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Set Approval For... | 28130005 | 63 days ago | IN | 0 ETH | 0.00000474 | ||||
| Set Approval For... | 24820335 | 83 days ago | IN | 0 ETH | 0.00000664 | ||||
| Set Approval For... | 20048782 | 129 days ago | IN | 0 ETH | 0.00000494 | ||||
| Set Approval For... | 19723719 | 134 days ago | IN | 0 ETH | 0.00000606 | ||||
| Set Approval For... | 19665832 | 135 days ago | IN | 0 ETH | 0.00000425 | ||||
| Set Approval For... | 19665821 | 135 days ago | IN | 0 ETH | 0.00000492 | ||||
| Set Approval For... | 19608744 | 136 days ago | IN | 0 ETH | 0.00000607 | ||||
| Set Approval For... | 19476928 | 138 days ago | IN | 0 ETH | 0.00000486 | ||||
| Safe Transfer Fr... | 19048866 | 145 days ago | IN | 0 ETH | 0.00000467 | ||||
| Safe Transfer Fr... | 19048854 | 145 days ago | IN | 0 ETH | 0.00000467 | ||||
| Safe Transfer Fr... | 19048837 | 145 days ago | IN | 0 ETH | 0.00000467 | ||||
| Safe Transfer Fr... | 19048824 | 145 days ago | IN | 0 ETH | 0.00000467 | ||||
| Safe Transfer Fr... | 19048808 | 145 days ago | IN | 0 ETH | 0.00000467 | ||||
| Safe Transfer Fr... | 19048783 | 145 days ago | IN | 0 ETH | 0.00000656 | ||||
| Safe Transfer Fr... | 19048776 | 145 days ago | IN | 0 ETH | 0.00000467 | ||||
| Safe Transfer Fr... | 19048763 | 145 days ago | IN | 0 ETH | 0.00000467 | ||||
| Safe Transfer Fr... | 19048737 | 145 days ago | IN | 0 ETH | 0.00000467 | ||||
| Safe Transfer Fr... | 19048720 | 145 days ago | IN | 0 ETH | 0.00000467 | ||||
| Safe Transfer Fr... | 19048697 | 145 days ago | IN | 0 ETH | 0.00000656 | ||||
| Set Approval For... | 18427798 | 153 days ago | IN | 0 ETH | 0.00000486 | ||||
| Set Approval For... | 16115817 | 181 days ago | IN | 0 ETH | 0.00000486 | ||||
| Set Approval For... | 15963103 | 183 days ago | IN | 0 ETH | 0.00000607 | ||||
| Set Approval For... | 15722429 | 186 days ago | IN | 0 ETH | 0.00000502 | ||||
| Set Approval For... | 15157031 | 193 days ago | IN | 0 ETH | 0.0000061 | ||||
| Set Approval For... | 14724851 | 198 days ago | IN | 0 ETH | 0.00000613 |
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 10295847 | 251 days ago | Contract Creation | 0 ETH |
Cross-Chain Transactions
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
QuestNFT
Compiler Version
v0.8.20-1.0.2
ZkSolc Version
v1.4.0
Contract Source Code (Solidity)
/** *Submitted for verification at abscan.org on 2025-05-27 */ // SPDX-License-Identifier: MIT // File @openzeppelin/contracts/utils/[email protected] // Original license: SPDX_License_Identifier: MIT // 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/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.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. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling 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/introspection/[email protected] // Original license: SPDX_License_Identifier: MIT // 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/interfaces/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts v4.4.1 (interfaces/IERC165.sol) pragma solidity ^0.8.0; // File @openzeppelin/contracts/token/ERC721/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.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: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * 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/interfaces/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts v4.4.1 (interfaces/IERC721.sol) pragma solidity ^0.8.0; // File @openzeppelin/contracts/interfaces/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC4906.sol) pragma solidity ^0.8.0; /// @title EIP-721 Metadata Update Extension interface IERC4906 is IERC165, IERC721 { /// @dev This event emits when the metadata of a token is changed. /// So that the third-party platforms such as NFT market could /// timely update the images and related attributes of the NFT. event MetadataUpdate(uint256 _tokenId); /// @dev This event emits when the metadata of a range of tokens is changed. /// So that the third-party platforms such as NFT market could /// timely update the images and related attributes of the NFTs. event BatchMetadataUpdate(uint256 _fromTokenId, uint256 _toTokenId); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] // Original license: SPDX_License_Identifier: MIT // 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/[email protected] // Original license: SPDX_License_Identifier: MIT // 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/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.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 * * Furthermore, `isContract` will also return true if the target contract within * the same transaction is already scheduled for destruction by `SELFDESTRUCT`, * which only has an effect at the end of a transaction. * ==== * * [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://consensys.net/diligence/blog/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.8.0/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 functionCallWithValue(target, data, 0, "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"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, 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) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, 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) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or 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 { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // 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/utils/introspection/[email protected] // Original license: SPDX_License_Identifier: MIT // 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/utils/math/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol) pragma solidity ^0.8.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { enum Rounding { Down, // Toward negative infinity Up, // Toward infinity Zero // Toward zero } /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a > b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds up instead * of rounding down. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a == 0 ? 0 : (a - 1) / b + 1; } /** * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0 * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) * with further edits by Uniswap Labs also under MIT license. */ function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) { unchecked { // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256 // variables such that product = prod1 * 2^256 + prod0. uint256 prod0; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) prod0 := mul(x, y) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } // Handle non-overflow cases, 256 by 256 division. if (prod1 == 0) { // Solidity will revert if denominator == 0, unlike the div opcode on its own. // The surrounding unchecked block does not change this fact. // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic. return prod0 / denominator; } // Make sure the result is less than 2^256. Also prevents denominator == 0. require(denominator > prod1, "Math: mulDiv overflow"); /////////////////////////////////////////////// // 512 by 256 division. /////////////////////////////////////////////// // Make division exact by subtracting the remainder from [prod1 prod0]. uint256 remainder; assembly { // Compute remainder using mulmod. remainder := mulmod(x, y, denominator) // Subtract 256 bit number from 512 bit number. prod1 := sub(prod1, gt(remainder, prod0)) prod0 := sub(prod0, remainder) } // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1. // See https://cs.stackexchange.com/q/138556/92363. // Does not overflow because the denominator cannot be zero at this stage in the function. uint256 twos = denominator & (~denominator + 1); assembly { // Divide denominator by twos. denominator := div(denominator, twos) // Divide [prod1 prod0] by twos. prod0 := div(prod0, twos) // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one. twos := add(div(sub(0, twos), twos), 1) } // Shift in bits from prod1 into prod0. prod0 |= prod1 * twos; // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for // four bits. That is, denominator * inv = 1 mod 2^4. uint256 inverse = (3 * denominator) ^ 2; // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works // in modular arithmetic, doubling the correct bits in each step. inverse *= 2 - denominator * inverse; // inverse mod 2^8 inverse *= 2 - denominator * inverse; // inverse mod 2^16 inverse *= 2 - denominator * inverse; // inverse mod 2^32 inverse *= 2 - denominator * inverse; // inverse mod 2^64 inverse *= 2 - denominator * inverse; // inverse mod 2^128 inverse *= 2 - denominator * inverse; // inverse mod 2^256 // Because the division is now exact we can divide by multiplying with the modular inverse of denominator. // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1 // is no longer required. result = prod0 * inverse; return result; } } /** * @notice Calculates x * y / denominator with full precision, following the selected rounding direction. */ function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) { uint256 result = mulDiv(x, y, denominator); if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) { result += 1; } return result; } /** * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down. * * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11). */ function sqrt(uint256 a) internal pure returns (uint256) { if (a == 0) { return 0; } // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target. // // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`. // // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)` // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))` // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)` // // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit. uint256 result = 1 << (log2(a) >> 1); // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128, // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision // into the expected uint128 result. unchecked { result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; return min(result, a / result); } } /** * @notice Calculates sqrt(a), following the selected rounding direction. */ function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = sqrt(a); return result + (rounding == Rounding.Up && result * result < a ? 1 : 0); } } /** * @dev Return the log in base 2, rounded down, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 128; } if (value >> 64 > 0) { value >>= 64; result += 64; } if (value >> 32 > 0) { value >>= 32; result += 32; } if (value >> 16 > 0) { value >>= 16; result += 16; } if (value >> 8 > 0) { value >>= 8; result += 8; } if (value >> 4 > 0) { value >>= 4; result += 4; } if (value >> 2 > 0) { value >>= 2; result += 2; } if (value >> 1 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 2, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log2(value); return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0); } } /** * @dev Return the log in base 10, rounded down, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10 ** 64) { value /= 10 ** 64; result += 64; } if (value >= 10 ** 32) { value /= 10 ** 32; result += 32; } if (value >= 10 ** 16) { value /= 10 ** 16; result += 16; } if (value >= 10 ** 8) { value /= 10 ** 8; result += 8; } if (value >= 10 ** 4) { value /= 10 ** 4; result += 4; } if (value >= 10 ** 2) { value /= 10 ** 2; result += 2; } if (value >= 10 ** 1) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log10(value); return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0); } } /** * @dev Return the log in base 256, rounded down, of a positive value. * Returns 0 if given 0. * * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string. */ function log256(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 16; } if (value >> 64 > 0) { value >>= 64; result += 8; } if (value >> 32 > 0) { value >>= 32; result += 4; } if (value >> 16 > 0) { value >>= 16; result += 2; } if (value >> 8 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 256, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log256(value); return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0); } } } // File @openzeppelin/contracts/utils/math/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol) pragma solidity ^0.8.0; /** * @dev Standard signed math utilities missing in the Solidity language. */ library SignedMath { /** * @dev Returns the largest of two signed numbers. */ function max(int256 a, int256 b) internal pure returns (int256) { return a > b ? a : b; } /** * @dev Returns the smallest of two signed numbers. */ function min(int256 a, int256 b) internal pure returns (int256) { return a < b ? a : b; } /** * @dev Returns the average of two signed numbers without overflow. * The result is rounded towards zero. */ function average(int256 a, int256 b) internal pure returns (int256) { // Formula from the book "Hacker's Delight" int256 x = (a & b) + ((a ^ b) >> 1); return x + (int256(uint256(x) >> 255) & (a ^ b)); } /** * @dev Returns the absolute unsigned value of a signed value. */ function abs(int256 n) internal pure returns (uint256) { unchecked { // must be unchecked in order to support `n = type(int256).min` return uint256(n >= 0 ? n : -n); } } } // File @openzeppelin/contracts/utils/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _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) { unchecked { uint256 length = Math.log10(value) + 1; string memory buffer = new string(length); uint256 ptr; /// @solidity memory-safe-assembly assembly { ptr := add(buffer, add(32, length)) } while (true) { ptr--; /// @solidity memory-safe-assembly assembly { mstore8(ptr, byte(mod(value, 10), _SYMBOLS)) } value /= 10; if (value == 0) break; } return buffer; } } /** * @dev Converts a `int256` to its ASCII `string` decimal representation. */ function toString(int256 value) internal pure returns (string memory) { return string(abi.encodePacked(value < 0 ? "-" : "", toString(SignedMath.abs(value)))); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { unchecked { return toHexString(value, Math.log256(value) + 1); } } /** * @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] = _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); } /** * @dev Returns true if the two strings are equal. */ function equal(string memory a, string memory b) internal pure returns (bool) { return keccak256(bytes(a)) == keccak256(bytes(b)); } } // File @openzeppelin/contracts/token/ERC721/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.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 = _ownerOf(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 or 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 or 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 or 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 the owner of the `tokenId`. Does NOT revert if token doesn't exist */ function _ownerOf(uint256 tokenId) internal view virtual returns (address) { return _owners[tokenId]; } /** * @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 _ownerOf(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, 1); // Check that tokenId was not minted by `_beforeTokenTransfer` hook require(!_exists(tokenId), "ERC721: token already minted"); unchecked { // Will not overflow unless all 2**256 token ids are minted to the same owner. // Given that tokens are minted one by one, it is impossible in practice that // this ever happens. Might change if we allow batch minting. // The ERC fails to describe this case. _balances[to] += 1; } _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId, 1); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * This is an internal function that does not check if the sender is authorized to operate on the token. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId, 1); // Update ownership in case tokenId was transferred by `_beforeTokenTransfer` hook owner = ERC721.ownerOf(tokenId); // Clear approvals delete _tokenApprovals[tokenId]; unchecked { // Cannot overflow, as that would require more tokens to be burned/transferred // out than the owner initially received through minting and transferring in. _balances[owner] -= 1; } delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId, 1); } /** * @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, 1); // Check that tokenId was not transferred by `_beforeTokenTransfer` hook require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); // Clear approvals from the previous owner delete _tokenApprovals[tokenId]; unchecked { // `_balances[from]` cannot overflow for the same reason as described in `_burn`: // `from`'s balance is the number of token held, which is at least one before the current // transfer. // `_balances[to]` could overflow in the conditions described in `_mint`. That would require // all 2**256 token ids to be minted, which in practice is impossible. _balances[from] -= 1; _balances[to] += 1; } _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId, 1); } /** * @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. If {ERC721Consecutive} is * used, the hook may be called as part of a consecutive (batch) mint, as indicated by `batchSize` greater than 1. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s tokens will be transferred to `to`. * - When `from` is zero, the tokens will be minted for `to`. * - When `to` is zero, ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * - `batchSize` is non-zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 firstTokenId, uint256 batchSize) internal virtual {} /** * @dev Hook that is called after any token transfer. This includes minting and burning. If {ERC721Consecutive} is * used, the hook may be called as part of a consecutive (batch) mint, as indicated by `batchSize` greater than 1. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s tokens were transferred to `to`. * - When `from` is zero, the tokens were minted for `to`. * - When `to` is zero, ``from``'s tokens were burned. * - `from` and `to` are never both zero. * - `batchSize` is non-zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer(address from, address to, uint256 firstTokenId, uint256 batchSize) internal virtual {} /** * @dev Unsafe write access to the balances, used by extensions that "mint" tokens using an {ownerOf} override. * * WARNING: Anyone calling this MUST ensure that the balances remain consistent with the ownership. The invariant * being that for any address `a` the value returned by `balanceOf(a)` must be equal to the number of tokens such * that `ownerOf(tokenId)` is `a`. */ // solhint-disable-next-line func-name-mixedcase function __unsafe_increaseBalance(address account, uint256 amount) internal { _balances[account] += amount; } } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC721/extensions/ERC721URIStorage.sol) pragma solidity ^0.8.0; /** * @dev ERC721 token with storage based token URI management. */ abstract contract ERC721URIStorage is IERC4906, ERC721 { using Strings for uint256; // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; /** * @dev See {IERC165-supportsInterface} */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721, IERC165) returns (bool) { return interfaceId == bytes4(0x49064906) || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { _requireMinted(tokenId); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } return super.tokenURI(tokenId); } /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * * Emits {MetadataUpdate}. * * Requirements: * * - `tokenId` must exist. */ function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; emit MetadataUpdate(tokenId); } /** * @dev See {ERC721-_burn}. This override additionally checks to see if a * token-specific URI was set for the token, and if so, it deletes the token URI from * the storage mapping. */ function _burn(uint256 tokenId) internal virtual override { super._burn(tokenId); if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } } // File @openzeppelin/contracts/security/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == _ENTERED; } } // File @openzeppelin/contracts/token/ERC20/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 amount) external returns (bool); } // File contracts/Wizard.sol // Original license: SPDX_License_Identifier: MIT pragma solidity ^0.8.20; contract QuestNFT is ERC721, ERC721URIStorage, Ownable, ReentrancyGuard { IERC20 public wizardToken; uint256 public nextTokenId = 0; uint256 public rewardPoolTreasury; uint256 public COOLDOWN_PERIOD = 1 hours; uint256 public MAX_SUCCESS_RATE = 80; string[] public classNames = [ "None", "Necromancer", "Paladin", "Arcanist", "Pyromancer", "Frost Mage", "Chronomancer", "Druid", "Ghost", "Spellblade", "Fae Summoner", "Wizard" ]; string[] public NFTRewardPool; uint256 public constant MAX_REWARD_POOL_SIZE = 50; enum RewardType { Token, NFT, Both } struct NFTTraits { uint256 level; uint256 xp; uint256 power; uint256 health; uint256 luck; uint8 class; uint256 questEndTime; } struct NFTInfo { uint256 tokenId; string tokenURI; address owner; NFTTraits traits; } struct Quest { uint256 questId; string name; uint256 followerRequirement; uint256 fee; uint256 reward; uint256 duration; bool active; uint8 requiredClass; uint256 enemyPower; uint256 enemyHealth; RewardType rewardType; } struct UserQuest { uint256 questId; uint256 nftId; address owner; uint256 startTime; uint256 endTime; uint256 upgradesApplied; bool completed; uint256 currentHealth; uint256 enemyCurrentHealth; uint256 successRate; } struct QuestCompletionDetails { bool won; uint256 successRate; RewardType rewardType; uint256 newNFTId; string newNFTURI; } struct CompletedQuestDetails { Quest quest; uint256 nftId; address owner; uint256 startTime; uint256 endTime; uint256 upgradesApplied; bool completed; NFTTraits nftTraits; bool won; uint256 successRate; RewardType rewardType; uint256 newNFTId; string newNFTURI; uint256 currentHealth; uint256 enemyCurrentHealth; } mapping(uint256 => NFTTraits) public nftTraits; Quest[] public quests; mapping(address => UserQuest[]) public userQuests; mapping(address => mapping(uint256 => QuestCompletionDetails)) public questCompletionDetails; mapping(uint256 => uint256) public cooldowns; event QuestCreated( uint256 indexed questId, string name, uint256 followerRequirement, uint256 fee, uint256 reward, uint256 duration, uint8 requiredClass, uint256 enemyPower, uint256 enemyHealth, RewardType rewardType ); event QuestStarted(address indexed user, uint256 indexed nftId, uint256 indexed questId, uint256 endTime); event QuestProgressUpdated( address indexed user, uint256 indexed nftId, uint256 indexed questId, uint256 currentHealth, uint256 successRate ); event NFTUpgraded( address indexed user, uint256 indexed nftId, uint256 questIndex, uint256 level, uint256 xp, uint256 power, uint256 health, uint256 luck ); event QuestCompleted( address indexed user, uint256 indexed nftId, uint256 indexed questId, bool won, RewardType rewardType, uint256 newNFTId, string newNFTURI, uint256 successRate ); event TraitsUpdated( uint256 indexed nftId, uint256 level, uint256 xp, uint256 power, uint256 health, uint256 luck, uint8 class, uint256 questEndTime ); event FundsWithdrawn(address indexed admin, uint256 amount); event FundsDeposited(address indexed admin, uint256 amount); event QuestListUpdated(uint256 indexed questId, bool active); event WizardTokenUpdated(address indexed newWizardToken); event CooldownPeriodUpdated(uint256 newCooldownPeriod); event MaxSuccessRateUpdated(uint256 newMaxSuccessRate); event QuestDebug( address indexed user, uint256 indexed questIndex, uint256 blockTimestamp, uint256 endTime, uint256 currentHealth, uint256 successRate ); event RewardFailed(address indexed user, uint256 indexed questIndex, uint256 rewardAmount, uint256 treasuryBalance); event QuestTimerUpdated(address indexed user, uint256 indexed questIndex, uint256 indexed nftId, uint256 newEndTime); event NFTRewardPoolUpdated(uint256 tokenURICount); constructor(address _wizardToken) ERC721("PenguinWizardNFT", "PWNFT") Ownable() ReentrancyGuard() { require(_wizardToken != address(0), "Invalid wizard token address"); wizardToken = IERC20(_wizardToken); emit WizardTokenUpdated(_wizardToken); } function initializeQuests() external onlyOwner { require(quests.length == 0, "Quests already initialized"); quests.push( Quest({ questId: 0, name: "Bug Bounty Blitz", followerRequirement: 0, fee: 20000 ether, reward: 46000 ether, duration: 7200, active: true, requiredClass: 9, enemyPower: 100, enemyHealth: 100, rewardType: RewardType.Token }) ); emit QuestCreated(0, "Bug Bounty Blitz", 0, 20000 ether, 46000 ether, 7200, 9, 100, 100, RewardType.Token); emit QuestListUpdated(0, true); quests.push( Quest({ questId: 1, name: "Liquidity Labyrinth", followerRequirement: 0, fee: 50000 ether, reward: 115000 ether, duration: 21600, active: true, requiredClass: 3, enemyPower: 50, enemyHealth: 50, rewardType: RewardType.NFT }) ); emit QuestCreated(1, "Liquidity Labyrinth", 0, 50000 ether, 115000 ether, 21600, 3, 50, 50, RewardType.NFT); emit QuestListUpdated(1, true); quests.push( Quest({ questId: 2, name: "Shadow Slay", followerRequirement: 0, fee: 50000 ether, reward: 115000 ether, duration: 28800, active: true, requiredClass: 1, enemyPower: 150, enemyHealth: 150, rewardType: RewardType.Both }) ); emit QuestCreated(2, "Shadow Slay", 0, 50000 ether, 115000 ether, 28800, 1, 150, 150, RewardType.Both); emit QuestListUpdated(2, true); quests.push( Quest({ questId: 3, name: "Oracle Trail", followerRequirement: 0, fee: 100000 ether, reward: 230000 ether, duration: 14400, active: true, requiredClass: 7, enemyPower: 100, enemyHealth: 100, rewardType: RewardType.Token }) ); emit QuestCreated(3, "Oracle Trail", 0, 100000 ether, 230000 ether, 14400, 7, 100, 100, RewardType.Token); emit QuestListUpdated(3, true); } function updateNFTRewardPool(string[] memory tokenURIs) external onlyOwner { require(tokenURIs.length > 0, "Token URI array cannot be empty"); require(tokenURIs.length <= MAX_REWARD_POOL_SIZE, "Cannot exceed maximum reward pool size of 50"); delete NFTRewardPool; for (uint256 i = 0; i < tokenURIs.length; i++) { NFTRewardPool.push(tokenURIs[i]); } emit NFTRewardPoolUpdated(tokenURIs.length); } function stringToClass(string memory className) internal view returns (uint8) { for (uint8 i = 0; i < classNames.length; i++) { if (keccak256(abi.encodePacked(classNames[i])) == keccak256(abi.encodePacked(className))) { return i; } } revert("Invalid class name"); } function mintNFT(address to, string memory uri) external onlyOwner { require(to != address(0), "Invalid recipient address"); require(bytes(uri).length > 0, "URI cannot be empty"); uint256 tokenId = nextTokenId++; _mint(to, tokenId); _setTokenURI(tokenId, uri); nftTraits[tokenId] = NFTTraits(1, 0, 10, 100, 10, 0, 0); emit TraitsUpdated(tokenId, 1, 0, 10, 100, 10, 0, 0); } function batchMint(address[] memory to, string[] memory tokenURIs) external onlyOwner { require(to.length == tokenURIs.length, "Arrays must have equal length"); require(to.length > 0, "At least one NFT must be minted"); for (uint256 i = 0; i < to.length; i++) { require(to[i] != address(0), "Invalid recipient address"); require(bytes(tokenURIs[i]).length > 0, "URI cannot be empty"); uint256 tokenId = nextTokenId++; _mint(to[i], tokenId); _setTokenURI(tokenId, tokenURIs[i]); nftTraits[tokenId] = NFTTraits(1, 0, 10, 100, 10, 0, 0); emit TraitsUpdated(tokenId, 1, 0, 10, 100, 10, 0, 0); } } function updateTraits( uint256 tokenId, uint256 level, uint256 xp, uint256 power, uint256 health, uint256 luck, uint8 class ) external onlyOwner { require(_exists(tokenId), "NFT does not exist"); require(level <= 100 && power <= 100 && health <= 100 && luck <= 100, "Traits cannot exceed 100"); require(class < classNames.length, "Invalid class index"); NFTTraits storage traits = nftTraits[tokenId]; traits.level = level; traits.xp = xp; traits.power = power; traits.health = health; traits.luck = luck; traits.class = class; emit TraitsUpdated(tokenId, level, xp, power, health, luck, class, traits.questEndTime); } function updateNFTTraits( uint256 tokenId, uint256 level, uint256 xp, uint256 power, uint256 health, uint256 luck, uint8 class, uint256 questEndTime ) external onlyOwner { require(_exists(tokenId), "NFT does not exist"); require(level <= 100 && power <= 100 && health <= 100 && luck <= 100, "Traits cannot exceed 100"); require(class < classNames.length, "Invalid class index"); nftTraits[tokenId] = NFTTraits(level, xp, power, health, luck, class, questEndTime); emit TraitsUpdated(tokenId, level, xp, power, health, luck, class, questEndTime); } function setCooldownPeriod(uint256 _cooldownPeriod) external onlyOwner { require(_cooldownPeriod > 0, "Cooldown period must be greater than 0"); COOLDOWN_PERIOD = _cooldownPeriod; emit CooldownPeriodUpdated(_cooldownPeriod); } function setMaxSuccessRate(uint256 _maxSuccessRate) external onlyOwner { require(_maxSuccessRate > 0 && _maxSuccessRate <= 100, "Max success rate must be between 1 and 100"); MAX_SUCCESS_RATE = _maxSuccessRate; emit MaxSuccessRateUpdated(_maxSuccessRate); } function getAllNFTs() external view returns (NFTInfo[] memory) { uint256 total = nextTokenId; uint256 count = 0; for (uint256 i = 0; i < total; i++) { if (_exists(i)) { count++; } } NFTInfo[] memory nfts = new NFTInfo[](count); uint256 index = 0; for (uint256 i = 0; i < total; i++) { if (_exists(i)) { nfts[index] = NFTInfo({ tokenId: i, tokenURI: tokenURI(i), owner: ownerOf(i), traits: nftTraits[i] }); index++; } } return nfts; } function getOwnedNFTs(address owner) external view returns (NFTInfo[] memory) { uint256 balance = balanceOf(owner); NFTInfo[] memory nfts = new NFTInfo[](balance); uint256 index = 0; for (uint256 i = 0; i < nextTokenId; i++) { if (_exists(i) && ownerOf(i) == owner) { nfts[index] = NFTInfo({ tokenId: i, tokenURI: tokenURI(i), owner: owner, traits: nftTraits[i] }); index++; } } return nfts; } function getAllActiveStartedQuests() external view returns (UserQuest[] memory) { uint256 totalCount = 0; for (uint256 i = 0; i < nextTokenId; i++) { if (_exists(i)) { address owner = ownerOf(i); UserQuest[] memory userQuestList = userQuests[owner]; for (uint256 j = 0; j < userQuestList.length; j++) { if (!userQuestList[j].completed && userQuestList[j].endTime > block.timestamp) { totalCount++; } } } } UserQuest[] memory activeQuests = new UserQuest[](totalCount); uint256 index = 0; for (uint256 i = 0; i < nextTokenId; i++) { if (_exists(i)) { address owner = ownerOf(i); UserQuest[] memory userQuestList = userQuests[owner]; for (uint256 j = 0; j < userQuestList.length; j++) { if (!userQuestList[j].completed && userQuestList[j].endTime > block.timestamp) { activeQuests[index] = userQuestList[j]; index++; } } } } return activeQuests; } function getUserQuests(address user) external view returns (CompletedQuestDetails[] memory) { UserQuest[] memory userQuestList = userQuests[user]; CompletedQuestDetails[] memory allQuests = new CompletedQuestDetails[](userQuestList.length); for (uint256 i = 0; i < userQuestList.length; i++) { UserQuest memory userQuest = userQuestList[i]; QuestCompletionDetails memory completion = questCompletionDetails[user][i]; allQuests[i] = CompletedQuestDetails({ quest: quests[userQuest.questId], nftId: userQuest.nftId, owner: userQuest.owner, startTime: userQuest.startTime, endTime: userQuest.endTime, upgradesApplied: userQuest.upgradesApplied, completed: userQuest.completed, nftTraits: nftTraits[userQuest.nftId], won: completion.won, successRate: userQuest.successRate, rewardType: completion.rewardType, newNFTId: completion.newNFTId, newNFTURI: completion.newNFTURI, currentHealth: userQuest.currentHealth, enemyCurrentHealth: userQuest.enemyCurrentHealth }); } return allQuests; } function getAllQuests() external view returns (Quest[] memory) { return quests; } function updateQuest( uint256 questId, string memory name, uint256 followerRequirement, uint256 fee, uint256 reward, uint256 duration, bool active, uint8 requiredClass, uint256 enemyPower, uint256 enemyHealth, RewardType rewardType ) external onlyOwner { require(requiredClass < classNames.length, "Invalid class index"); if (questId >= quests.length) { quests.push( Quest({ questId: questId, name: name, followerRequirement: followerRequirement, fee: fee, reward: reward, duration: duration, active: active, requiredClass: requiredClass, enemyPower: enemyPower, enemyHealth: enemyHealth, rewardType: rewardType }) ); } else { quests[questId] = Quest({ questId: questId, name: name, followerRequirement: followerRequirement, fee: fee, reward: reward, duration: duration, active: active, requiredClass: requiredClass, enemyPower: enemyPower, enemyHealth: enemyHealth, rewardType: rewardType }); } emit QuestCreated(questId, name, followerRequirement, fee, reward, duration, requiredClass, enemyPower, enemyHealth, rewardType); emit QuestListUpdated(questId, active); } function updateQuestTimer(uint256 nftId) external onlyOwner { require(_exists(nftId), "NFT does not exist"); address nftOwner = ownerOf(nftId); UserQuest[] storage userQuestList = userQuests[nftOwner]; bool updated = false; for (uint256 i = 0; i < userQuestList.length; i++) { UserQuest storage userQuest = userQuestList[i]; if ( userQuest.nftId == nftId && !userQuest.completed && userQuest.endTime > block.timestamp ) { uint256 originalDuration = userQuest.endTime - userQuest.startTime; uint256 newDuration = originalDuration / 2; uint256 newEndTime = userQuest.startTime + newDuration; userQuest.endTime = newEndTime; cooldowns[nftId] = newEndTime + COOLDOWN_PERIOD; emit QuestTimerUpdated(nftOwner, i, nftId, newEndTime); updated = true; } } require(updated, "No active quests found for this NFT"); } function calculateSuccessRate( uint256 nftId, uint256 questId, uint256 currentHealth, uint256 enemyCurrentHealth ) internal view returns (uint256) { Quest memory quest = quests[questId]; NFTTraits memory traits = nftTraits[nftId]; uint256 nftPower = currentHealth == 0 ? traits.power : (traits.power * currentHealth) / traits.health; uint256 nftHealth = currentHealth == 0 ? traits.health : currentHealth; uint256 enemyHealth = enemyCurrentHealth == 0 ? quest.enemyHealth : enemyCurrentHealth; uint256 powerRatio = (nftPower * 100) / (quest.enemyPower + 1); uint256 healthRatio = (nftHealth * 100) / (enemyHealth + 1); uint256 luckFactor = traits.luck; uint256 riskFactor; if (quest.enemyPower <= 50) { riskFactor = 100; } else if (quest.enemyPower <= 100) { riskFactor = 85; } else { riskFactor = 70; } uint256 classBonus = (traits.class == quest.requiredClass && traits.class != 0) ? 15 : 0; uint256 classPenalty = isOppositeClass(traits.class, quest.requiredClass) ? 10 : 0; uint256 successRate = ((35 * powerRatio) + (35 * healthRatio) + (30 * luckFactor) + classBonus * 100 - classPenalty * 100) / 100; successRate = (successRate * riskFactor) / 100; if (successRate > MAX_SUCCESS_RATE) { successRate = MAX_SUCCESS_RATE; } if (successRate < 10) { successRate = 10; } return successRate; } function getInitialSuccessRate(uint256 nftId, uint256 questId) external view returns (uint256) { require(_exists(nftId), "NFT does not exist"); require(questId < quests.length, "Invalid quest ID"); return calculateSuccessRate(nftId, questId, 0, 0); } function startQuest( uint256 nftId, uint256 questId, uint256 followers, uint256 level, uint256 xp, uint256 power, uint256 health, uint256 luck, string memory className ) external nonReentrant { require(_exists(nftId), "NFT does not exist"); require(ownerOf(nftId) == msg.sender, "Not NFT owner"); require(questId < quests.length && quests[questId].active, "Quest not available"); require(cooldowns[nftId] <= block.timestamp, "NFT on cooldown"); require(followers >= quests[questId].followerRequirement, "Insufficient followers"); require(level > 0, "Level must be greater than 0"); require(power > 0, "Power must be greater than 0"); require(health > 0, "Health must be greater than 0"); require(luck > 0, "Luck must be greater than 0"); uint8 class = stringToClass(className); Quest memory quest = quests[questId]; require(wizardToken.transferFrom(msg.sender, address(this), quest.fee), "WIZARD token transfer failed"); rewardPoolTreasury += quest.fee; uint256 endTime = block.timestamp + quest.duration; nftTraits[nftId] = NFTTraits({ level: level, xp: xp, power: power, health: health, luck: luck, class: class, questEndTime: endTime }); uint256 initialSuccessRate = calculateSuccessRate(nftId, questId, health, quest.enemyHealth); userQuests[msg.sender].push( UserQuest({ questId: questId, nftId: nftId, owner: msg.sender, startTime: block.timestamp, endTime: endTime, upgradesApplied: 0, completed: false, currentHealth: health, enemyCurrentHealth: quest.enemyHealth, successRate: initialSuccessRate }) ); cooldowns[nftId] = endTime + COOLDOWN_PERIOD; emit QuestStarted(msg.sender, nftId, questId, endTime); emit TraitsUpdated(nftId, level, xp, power, health, luck, class, endTime); emit QuestProgressUpdated(msg.sender, nftId, questId, health, initialSuccessRate); } function updateQuestProgress(uint256 questId, uint256 nftId) public { require(_exists(nftId), "NFT does not exist"); require(questId < quests.length, "Invalid quest ID"); address nftOwner = ownerOf(nftId); UserQuest[] storage userQuestList = userQuests[nftOwner]; uint256 questIndex = type(uint256).max; for (uint256 i = 0; i < userQuestList.length; i++) { if ( userQuestList[i].questId == questId && userQuestList[i].nftId == nftId && !userQuestList[i].completed && block.timestamp <= userQuestList[i].endTime ) { questIndex = i; break; } } require(questIndex != type(uint256).max, "Active quest not found or expired"); UserQuest storage userQuest = userQuestList[questIndex]; Quest memory quest = quests[userQuest.questId]; NFTTraits memory traits = nftTraits[nftId]; uint256 elapsed = block.timestamp - userQuest.startTime; uint256 quarterDuration = quest.duration / 4; if (elapsed < quarterDuration) { return; } uint256 quartersPassed = elapsed / quarterDuration; uint256 nftDamage = (traits.power * quartersPassed) / 4; uint256 enemyDamage = (quest.enemyPower * quartersPassed) / 4; if (userQuest.enemyCurrentHealth > nftDamage) { userQuest.enemyCurrentHealth -= nftDamage; } else { userQuest.enemyCurrentHealth = 0; } if (userQuest.currentHealth > enemyDamage) { userQuest.currentHealth -= enemyDamage; } else { userQuest.currentHealth = 0; } userQuest.successRate = calculateSuccessRate(nftId, questId, userQuest.currentHealth, userQuest.enemyCurrentHealth); if (userQuest.currentHealth < traits.health) { nftTraits[nftId].health = userQuest.currentHealth; } emit QuestProgressUpdated(nftOwner, nftId, questId, userQuest.currentHealth, userQuest.successRate); } function upgradeNFT( address user, uint256 questIndex, uint256 nftId, uint256 level, uint256 xp, uint256 power, uint256 health, uint256 luck, uint256 upgradePoints ) external onlyOwner nonReentrant { require(user != address(0), "Invalid user address"); require(userQuests[user].length > questIndex, "Invalid quest index"); UserQuest storage userQuest = userQuests[user][questIndex]; require(userQuest.nftId == nftId, "NFT ID does not match quest"); require(_exists(nftId), "NFT does not exist"); require(level <= 100 && power <= 100 && health <= 100 && luck <= 100, "Traits cannot exceed 100"); require(upgradePoints > 0, "Upgrade points must be greater than 0"); NFTTraits storage traits = nftTraits[nftId]; require(traits.class < classNames.length, "Invalid class index"); traits.level = level; traits.xp = xp; traits.power = power; traits.health = health; traits.luck = luck; userQuest.upgradesApplied += upgradePoints; if (health > userQuest.currentHealth) { userQuest.currentHealth = health; } userQuest.successRate = calculateSuccessRate(nftId, userQuest.questId, userQuest.currentHealth, userQuest.enemyCurrentHealth); emit NFTUpgraded(user, nftId, questIndex, level, xp, power, health, luck); emit TraitsUpdated(nftId, level, xp, power, health, luck, traits.class, traits.questEndTime); } function completeQuest(uint256 questId, uint256 nftId) public returns (uint256 newNFTId, string memory newNFTURI) { require(_exists(nftId), "NFT does not exist"); require(questId < quests.length, "Invalid quest ID"); address nftOwner = ownerOf(nftId); UserQuest[] storage userQuestList = userQuests[nftOwner]; uint256 questIndex = type(uint256).max; for (uint256 i = 0; i < userQuestList.length; i++) { if ( userQuestList[i].questId == questId && userQuestList[i].nftId == nftId && !userQuestList[i].completed && block.timestamp >= userQuestList[i].endTime ) { questIndex = i; break; } } require(questIndex != type(uint256).max, "Active quest not found or not ready"); UserQuest storage userQuest = userQuestList[questIndex]; require(!userQuest.completed, "Quest already completed"); userQuest.completed = true; Quest memory quest = quests[userQuest.questId]; NFTTraits storage traits = nftTraits[nftId]; if (userQuest.currentHealth == traits.health && userQuest.enemyCurrentHealth == quest.enemyHealth) { uint256 nftDamage = traits.power; uint256 enemyDamage = quest.enemyPower; if (userQuest.enemyCurrentHealth > nftDamage) { userQuest.enemyCurrentHealth -= nftDamage; } else { userQuest.enemyCurrentHealth = 0; } if (userQuest.currentHealth > enemyDamage) { userQuest.currentHealth -= enemyDamage; } else { userQuest.currentHealth = 0; } if (userQuest.currentHealth < traits.health) { traits.health = userQuest.currentHealth; } } userQuest.successRate = calculateSuccessRate(nftId, questId, userQuest.currentHealth, userQuest.enemyCurrentHealth); emit QuestDebug(nftOwner, questIndex, block.timestamp, userQuest.endTime, userQuest.currentHealth, userQuest.successRate); bool won = userQuest.successRate >= 70 ? userQuest.currentHealth > 0 : ( userQuest.currentHealth > 0 && userQuest.enemyCurrentHealth == 0 && ((block.timestamp + uint256(uint160(nftOwner)) + nftId) % 100) < userQuest.successRate ); uint256 newNFTIdLocal = 0; string memory newNFTURILocal = ""; if (won) { if (quest.rewardType == RewardType.Token || quest.rewardType == RewardType.Both) { uint256 totalReward = quest.reward; if (rewardPoolTreasury >= totalReward && wizardToken.balanceOf(address(this)) >= totalReward) { require(wizardToken.transfer(nftOwner, totalReward), "WIZARD token transfer failed"); rewardPoolTreasury -= totalReward; } else { emit RewardFailed(nftOwner, questIndex, totalReward, rewardPoolTreasury); } } if (quest.rewardType == RewardType.NFT || quest.rewardType == RewardType.Both) { require(NFTRewardPool.length > 0, "NFT reward pool is empty"); uint256 randomIndex = (block.timestamp + uint256(uint160(nftOwner))) % NFTRewardPool.length; newNFTURILocal = NFTRewardPool[randomIndex]; newNFTIdLocal = nextTokenId++; _mint(nftOwner, newNFTIdLocal); _setTokenURI(newNFTIdLocal, newNFTURILocal); nftTraits[newNFTIdLocal] = NFTTraits(1, 0, 10, 100, 10, 0, 0); emit TraitsUpdated(newNFTIdLocal, 1, 0, 10, 100, 10, 0, 0); } } else { cooldowns[nftId] = block.timestamp + COOLDOWN_PERIOD; } questCompletionDetails[nftOwner][questIndex] = QuestCompletionDetails({ won: won, successRate: userQuest.successRate, rewardType: quest.rewardType, newNFTId: newNFTIdLocal, newNFTURI: newNFTURILocal }); traits.xp += 100; if (traits.xp >= traits.level * 1000) { traits.level += 1; traits.power += 10; traits.health += 10; } traits.questEndTime = 0; emit QuestCompleted( nftOwner, nftId, questId, won, quest.rewardType, newNFTIdLocal, newNFTURILocal, userQuest.successRate ); emit TraitsUpdated( nftId, traits.level, traits.xp, traits.power, traits.health, traits.luck, traits.class, 0 ); return (newNFTIdLocal, newNFTURILocal); } function depositFunds(uint256 amount) external onlyOwner nonReentrant { require(amount > 0, "Amount must be greater than 0"); require(wizardToken.transferFrom(msg.sender, address(this), amount), "WIZARD token transfer failed"); rewardPoolTreasury += amount; emit FundsDeposited(msg.sender, amount); } function withdrawFunds(uint256 amount) external onlyOwner nonReentrant { require(rewardPoolTreasury >= amount, "Insufficient treasury balance"); require(wizardToken.transfer(owner(), amount), "WIZARD token transfer failed"); rewardPoolTreasury -= amount; emit FundsWithdrawn(owner(), amount); } function setApprovalForAll(address operator, bool approved) public override(ERC721, IERC721) { super.setApprovalForAll(operator, approved); } function safeTransferFrom(address from, address to, uint256 tokenId) public override(ERC721, IERC721) { super.safeTransferFrom(from, to, tokenId); } function isOppositeClass(uint8 nftClass, uint8 requiredClass) internal pure returns (bool) { if (nftClass == 0 || requiredClass == 0) { return false; } return (nftClass == 1 && requiredClass == 2) || (nftClass == 2 && requiredClass == 1) || (nftClass == 11 && requiredClass == 4) || (nftClass == 4 && requiredClass == 11); } function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) { ERC721URIStorage._burn(tokenId); } function tokenURI(uint256 tokenId) public view override(ERC721, ERC721URIStorage) returns (string memory) { return super.tokenURI(tokenId); } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721URIStorage) returns (bool) { return super.supportsInterface(interfaceId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_wizardToken","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":false,"internalType":"uint256","name":"_fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_toTokenId","type":"uint256"}],"name":"BatchMetadataUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newCooldownPeriod","type":"uint256"}],"name":"CooldownPeriodUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"admin","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FundsDeposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"admin","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FundsWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMaxSuccessRate","type":"uint256"}],"name":"MaxSuccessRateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"MetadataUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenURICount","type":"uint256"}],"name":"NFTRewardPoolUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"nftId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"questIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"level","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"xp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"power","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"health","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"luck","type":"uint256"}],"name":"NFTUpgraded","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":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"nftId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"questId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"won","type":"bool"},{"indexed":false,"internalType":"enum QuestNFT.RewardType","name":"rewardType","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"newNFTId","type":"uint256"},{"indexed":false,"internalType":"string","name":"newNFTURI","type":"string"},{"indexed":false,"internalType":"uint256","name":"successRate","type":"uint256"}],"name":"QuestCompleted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"questId","type":"uint256"},{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"uint256","name":"followerRequirement","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"requiredClass","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"enemyPower","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"enemyHealth","type":"uint256"},{"indexed":false,"internalType":"enum QuestNFT.RewardType","name":"rewardType","type":"uint8"}],"name":"QuestCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"questIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"blockTimestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"currentHealth","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"successRate","type":"uint256"}],"name":"QuestDebug","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"questId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"active","type":"bool"}],"name":"QuestListUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"nftId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"questId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"currentHealth","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"successRate","type":"uint256"}],"name":"QuestProgressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"nftId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"questId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"QuestStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"questIndex","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"nftId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newEndTime","type":"uint256"}],"name":"QuestTimerUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"questIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"treasuryBalance","type":"uint256"}],"name":"RewardFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nftId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"level","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"xp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"power","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"health","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"luck","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"class","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"questEndTime","type":"uint256"}],"name":"TraitsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWizardToken","type":"address"}],"name":"WizardTokenUpdated","type":"event"},{"inputs":[],"name":"COOLDOWN_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_REWARD_POOL_SIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUCCESS_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"NFTRewardPool","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"to","type":"address[]"},{"internalType":"string[]","name":"tokenURIs","type":"string[]"}],"name":"batchMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"classNames","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"questId","type":"uint256"},{"internalType":"uint256","name":"nftId","type":"uint256"}],"name":"completeQuest","outputs":[{"internalType":"uint256","name":"newNFTId","type":"uint256"},{"internalType":"string","name":"newNFTURI","type":"string"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"cooldowns","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"depositFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllActiveStartedQuests","outputs":[{"components":[{"internalType":"uint256","name":"questId","type":"uint256"},{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"upgradesApplied","type":"uint256"},{"internalType":"bool","name":"completed","type":"bool"},{"internalType":"uint256","name":"currentHealth","type":"uint256"},{"internalType":"uint256","name":"enemyCurrentHealth","type":"uint256"},{"internalType":"uint256","name":"successRate","type":"uint256"}],"internalType":"struct QuestNFT.UserQuest[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllNFTs","outputs":[{"components":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"tokenURI","type":"string"},{"internalType":"address","name":"owner","type":"address"},{"components":[{"internalType":"uint256","name":"level","type":"uint256"},{"internalType":"uint256","name":"xp","type":"uint256"},{"internalType":"uint256","name":"power","type":"uint256"},{"internalType":"uint256","name":"health","type":"uint256"},{"internalType":"uint256","name":"luck","type":"uint256"},{"internalType":"uint8","name":"class","type":"uint8"},{"internalType":"uint256","name":"questEndTime","type":"uint256"}],"internalType":"struct QuestNFT.NFTTraits","name":"traits","type":"tuple"}],"internalType":"struct QuestNFT.NFTInfo[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllQuests","outputs":[{"components":[{"internalType":"uint256","name":"questId","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"followerRequirement","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"bool","name":"active","type":"bool"},{"internalType":"uint8","name":"requiredClass","type":"uint8"},{"internalType":"uint256","name":"enemyPower","type":"uint256"},{"internalType":"uint256","name":"enemyHealth","type":"uint256"},{"internalType":"enum QuestNFT.RewardType","name":"rewardType","type":"uint8"}],"internalType":"struct QuestNFT.Quest[]","name":"","type":"tuple[]"}],"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":"uint256","name":"nftId","type":"uint256"},{"internalType":"uint256","name":"questId","type":"uint256"}],"name":"getInitialSuccessRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"getOwnedNFTs","outputs":[{"components":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"tokenURI","type":"string"},{"internalType":"address","name":"owner","type":"address"},{"components":[{"internalType":"uint256","name":"level","type":"uint256"},{"internalType":"uint256","name":"xp","type":"uint256"},{"internalType":"uint256","name":"power","type":"uint256"},{"internalType":"uint256","name":"health","type":"uint256"},{"internalType":"uint256","name":"luck","type":"uint256"},{"internalType":"uint8","name":"class","type":"uint8"},{"internalType":"uint256","name":"questEndTime","type":"uint256"}],"internalType":"struct QuestNFT.NFTTraits","name":"traits","type":"tuple"}],"internalType":"struct QuestNFT.NFTInfo[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserQuests","outputs":[{"components":[{"components":[{"internalType":"uint256","name":"questId","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"followerRequirement","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"bool","name":"active","type":"bool"},{"internalType":"uint8","name":"requiredClass","type":"uint8"},{"internalType":"uint256","name":"enemyPower","type":"uint256"},{"internalType":"uint256","name":"enemyHealth","type":"uint256"},{"internalType":"enum QuestNFT.RewardType","name":"rewardType","type":"uint8"}],"internalType":"struct QuestNFT.Quest","name":"quest","type":"tuple"},{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"upgradesApplied","type":"uint256"},{"internalType":"bool","name":"completed","type":"bool"},{"components":[{"internalType":"uint256","name":"level","type":"uint256"},{"internalType":"uint256","name":"xp","type":"uint256"},{"internalType":"uint256","name":"power","type":"uint256"},{"internalType":"uint256","name":"health","type":"uint256"},{"internalType":"uint256","name":"luck","type":"uint256"},{"internalType":"uint8","name":"class","type":"uint8"},{"internalType":"uint256","name":"questEndTime","type":"uint256"}],"internalType":"struct QuestNFT.NFTTraits","name":"nftTraits","type":"tuple"},{"internalType":"bool","name":"won","type":"bool"},{"internalType":"uint256","name":"successRate","type":"uint256"},{"internalType":"enum QuestNFT.RewardType","name":"rewardType","type":"uint8"},{"internalType":"uint256","name":"newNFTId","type":"uint256"},{"internalType":"string","name":"newNFTURI","type":"string"},{"internalType":"uint256","name":"currentHealth","type":"uint256"},{"internalType":"uint256","name":"enemyCurrentHealth","type":"uint256"}],"internalType":"struct QuestNFT.CompletedQuestDetails[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initializeQuests","outputs":[],"stateMutability":"nonpayable","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":"to","type":"address"},{"internalType":"string","name":"uri","type":"string"}],"name":"mintNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nftTraits","outputs":[{"internalType":"uint256","name":"level","type":"uint256"},{"internalType":"uint256","name":"xp","type":"uint256"},{"internalType":"uint256","name":"power","type":"uint256"},{"internalType":"uint256","name":"health","type":"uint256"},{"internalType":"uint256","name":"luck","type":"uint256"},{"internalType":"uint8","name":"class","type":"uint8"},{"internalType":"uint256","name":"questEndTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"questCompletionDetails","outputs":[{"internalType":"bool","name":"won","type":"bool"},{"internalType":"uint256","name":"successRate","type":"uint256"},{"internalType":"enum QuestNFT.RewardType","name":"rewardType","type":"uint8"},{"internalType":"uint256","name":"newNFTId","type":"uint256"},{"internalType":"string","name":"newNFTURI","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"quests","outputs":[{"internalType":"uint256","name":"questId","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"followerRequirement","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"bool","name":"active","type":"bool"},{"internalType":"uint8","name":"requiredClass","type":"uint8"},{"internalType":"uint256","name":"enemyPower","type":"uint256"},{"internalType":"uint256","name":"enemyHealth","type":"uint256"},{"internalType":"enum QuestNFT.RewardType","name":"rewardType","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardPoolTreasury","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":"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":"uint256","name":"_cooldownPeriod","type":"uint256"}],"name":"setCooldownPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSuccessRate","type":"uint256"}],"name":"setMaxSuccessRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"uint256","name":"questId","type":"uint256"},{"internalType":"uint256","name":"followers","type":"uint256"},{"internalType":"uint256","name":"level","type":"uint256"},{"internalType":"uint256","name":"xp","type":"uint256"},{"internalType":"uint256","name":"power","type":"uint256"},{"internalType":"uint256","name":"health","type":"uint256"},{"internalType":"uint256","name":"luck","type":"uint256"},{"internalType":"string","name":"className","type":"string"}],"name":"startQuest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"string[]","name":"tokenURIs","type":"string[]"}],"name":"updateNFTRewardPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"level","type":"uint256"},{"internalType":"uint256","name":"xp","type":"uint256"},{"internalType":"uint256","name":"power","type":"uint256"},{"internalType":"uint256","name":"health","type":"uint256"},{"internalType":"uint256","name":"luck","type":"uint256"},{"internalType":"uint8","name":"class","type":"uint8"},{"internalType":"uint256","name":"questEndTime","type":"uint256"}],"name":"updateNFTTraits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"questId","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"followerRequirement","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"bool","name":"active","type":"bool"},{"internalType":"uint8","name":"requiredClass","type":"uint8"},{"internalType":"uint256","name":"enemyPower","type":"uint256"},{"internalType":"uint256","name":"enemyHealth","type":"uint256"},{"internalType":"enum QuestNFT.RewardType","name":"rewardType","type":"uint8"}],"name":"updateQuest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"questId","type":"uint256"},{"internalType":"uint256","name":"nftId","type":"uint256"}],"name":"updateQuestProgress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"}],"name":"updateQuestTimer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"level","type":"uint256"},{"internalType":"uint256","name":"xp","type":"uint256"},{"internalType":"uint256","name":"power","type":"uint256"},{"internalType":"uint256","name":"health","type":"uint256"},{"internalType":"uint256","name":"luck","type":"uint256"},{"internalType":"uint8","name":"class","type":"uint8"}],"name":"updateTraits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"questIndex","type":"uint256"},{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"uint256","name":"level","type":"uint256"},{"internalType":"uint256","name":"xp","type":"uint256"},{"internalType":"uint256","name":"power","type":"uint256"},{"internalType":"uint256","name":"health","type":"uint256"},{"internalType":"uint256","name":"luck","type":"uint256"},{"internalType":"uint256","name":"upgradePoints","type":"uint256"}],"name":"upgradeNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userQuests","outputs":[{"internalType":"uint256","name":"questId","type":"uint256"},{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"upgradesApplied","type":"uint256"},{"internalType":"bool","name":"completed","type":"bool"},{"internalType":"uint256","name":"currentHealth","type":"uint256"},{"internalType":"uint256","name":"enemyCurrentHealth","type":"uint256"},{"internalType":"uint256","name":"successRate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wizardToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"}]Contract Creation Code
9c4d535b000000000000000000000000000000000000000000000000000000000000000001000e0d9bf5dffa7ea2e466b1f8f8d91d5488351df3b579fb11faa60c700ee8000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000200000000000000000000000004286f6a2f9f05f5f89ee19f879f1ad03dde903e0
Deployed Bytecode
0x00020000000000020026000000000002000000000401034f00010000000403550000000001040019000000600110027000000d0d0310019700000001012001900000074d0000c13d0000008005000039000000400050043f000000040130008c000028fd0000413d000000000104043b000000e00110027000000d2c0210009c000000ec0000c13d0000000001000416000000000101004b000028fd0000c13d000000040130008a000000200110008c000028fd0000413d0000000401400370000000000301043b0000000701000039000000000101041a00000d11011001970000000002000411000000000121004b00000d6f0000c13d001b00000003001d00000000003004350000000201000039001c00000001001d000000200010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000000101041a00000d110110019800000cf60000613d0000001b0100002900000000001004350000001c01000029000000200010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000000101041a00000d11011001980000100c0000613d001300000001001d00000000001004350000001201000039000000200010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b001a00000001001d000000000101041a000000000101004b000000d70000613d001400010000003d001980100000003d0015800b0000003d001c00000000001d0000001a02000029000000630000013d0000001c03000029001c00010030003d0000001a02000029000000000102041a0000001c0110006b000000d40000813d0000000000200435000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d16011001c70000001902000029342f342a0000040f0000000102200190000028fd0000613d0000001c020000290000000a322000c9000000000101043b00000000032100190000000101300039000000000101041a0000001b0110006c0000005d0000c13d0000000601300039000000000101041a000000ff011001900000005d0000c13d001800000003001d0000000401300039001600000001001d000000000101041a001700000001001d00000d84010000410000000000100439000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d85011001c70000001502000029342f342a0000040f0000000102200190000027700000613d000000000101043b000000170110006b00000018020000290000005d0000a13d0000001604000029000000000104041a0000000302200039000000000202041a000000000321004b0000195a0000413d000000000121004900000001011002700000000002210019000000000112004b0000000001000019000000010100403900000001011001900000195a0000c13d000000000024041b0000000c01000039000000000101041a0000000003210019000000000113004b0000000001000019000000010100403900000001011001900000195a0000c13d001700000003001d001800000002001d0000001b0100002900000000001004350000001401000039000000200010043f000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b0000001702000029000000000021041b000000400100043d00000018020000290000000000210435000000000200041400000d0d0320009c00000d0d04000041000000000204801900000d0d0310009c00000000010480190000004001100210000000c002200210000000000112019f00000d16011001c70000800d02000039000000040300003900000dd50400004100000013050000290000001c060000290000001b07000029342f34250000040f0000000101200190000028fd0000613d0000001c02000029001c00010020003d0000001a01000029000000000101041a0000001c0110006b001400000000001d0000005b0000413d000011180000013d00000014010000290000000101100190000011180000613d000000400100043d000000640210003900000dd6030000410000000000320435000000440210003900000dd703000041000000000032043500000024021000390000002303000039000000000032043500000d2a02000041000000000021043500000004021000390000002003000039000000000032043500000d0d0200004100000d0d0310009c0000000001028019000000400110021000000d7c011001c70000343100010430001600000005001d001c00000004035300000d2d0210009c000001090000213d00000d4f0210009c000001680000a13d00000d500210009c0000018c0000a13d00000d510210009c000003090000a13d00000d520210009c000007230000213d00000d550210009c000007f00000613d00000d560110009c0000001c0200035f000028fd0000c13d0000000001000416000000000101004b000028fd0000c13d000000040130008a000000200110008c000028fd0000413d0000000401200370000000000101043b00000d110210009c000028fd0000213d342f2a640000040f000009f90000013d00000d2e0210009c0000017d0000a13d00000d2f0210009c0000023d0000a13d00000d300210009c000003810000a13d00000d310210009c0000072c0000213d00000d340210009c000007f50000613d00000d350110009c0000001c0700035f000028fd0000c13d0000000001000416000000000101004b000028fd0000c13d000000040130008a000001200110008c000028fd0000413d0000010401700370000000000201043b00000d150120009c000028fd0000213d000000230120003900000d7f04000041000000000531004b0000000005000019000000000504801900000d7f01100197000000000601004b000000000400801900000d7f0110009c000000000405c019000000000104004b000028fd0000c13d0000000404200039000000000147034f000000000101043b00000d150510009c000011330000213d000000bf05100039001a0020000000920000001a0550017f00000d800650004100000d810660009c000011330000413d0000002402200039000000400050043f000000800010043f0000000002210019000000000232004b0000001c0300035f000028fd0000213d0000002002400039000000000223034f0000001f0310018f00000005041002720000014c0000613d00000000050000190000000506500210000000000762034f000000000707043b000000a00660003900000000007604350000000105500039000000000645004b000001440000413d000000000503004b0000015b0000613d0000000504400210000000000242034f0000000303300210000000a004400039000000000504043300000000053501cf000000000535022f000000000202043b0000010003300089000000000232022f00000000023201cf000000000252019f0000000000240435000000a00110003900000000000104350000000801000039000000000201041a000000020220008c000014470000c13d000000400100043d000000440210003900000d9703000041000000000032043500000024021000390000001f03000039000010120000013d00000d610210009c0000028f0000213d00000d690210009c000003a90000213d00000d6d0210009c000008500000613d00000d6e0210009c000008640000613d00000d6f0110009c0000001c0200035f000028fd0000c13d0000000001000416000000000101004b000028fd0000c13d000000040130008a000000200110008c000028fd0000413d0000000401200370000000000101043b342f2ab30000040f000009f80000013d00000d400210009c000002af0000213d00000d480210009c0000046b0000213d00000d4c0210009c000008850000613d00000d4d0210009c000008940000613d00000d4e0110009c000028fd0000c13d0000000001000416000000000101004b000028fd0000c13d0000000b01000039000009ec0000013d00000d5a0210009c000004760000213d00000d5e0210009c000008a40000613d00000d5f0210009c000009160000613d00000d600110009c0000001c0700035f000028fd0000c13d0000000001000416000000000101004b000028fd0000c13d000000040130008a000001600110008c000028fd0000413d0000000401700370000000000101043b001b00000001001d0000002401700370000000000201043b00000d150120009c000028fd0000213d000000230120003900000d7f04000041000000000531004b0000000005000019000000000504801900000d7f01100197000000000601004b000000000400801900000d7f0110009c000000000405c019000000000104004b000028fd0000c13d0000000404200039000000000147034f000000000101043b00000d150510009c000011330000213d000000bf05100039001a0020000000920000001a0550017f00000d800650004100000d810660009c000011330000413d0000002402200039000000400050043f000000800010043f0000000002210019000000000232004b0000001c0300035f000028fd0000213d0000002002400039000000000223034f0000001f0310018f0000000504100272000001ce0000613d00000000050000190000000506500210000000000762034f000000000707043b000000a00660003900000000007604350000000105500039000000000645004b000001c60000413d000000000503004b000001dd0000613d0000000504400210000000000242034f0000000303300210000000a004400039000000000504043300000000053501cf000000000535022f000000000202043b0000010003300089000000000232022f00000000023201cf000000000252019f0000000000240435000000a00110003900000000000104350000001c0300035f000000a401300370000000000101043b001700000001001d0000008401300370000000000101043b001800000001001d0000006401300370000000000101043b001900000001001d0000004401300370000000000101043b001600000001001d000000c401300370000000000201043b000000000102004b0000000001000019000000010100c039001500000002001d000000000112004b000028fd0000c13d000000e401300370000000000101043b000000ff0210008c000028fd0000213d0000012402300370000000000202043b001300000002001d0000010402300370000000000202043b001400000002001d0000014402300370000000000202043b001c00000002001d000000020220008c000028fd0000213d0000000702000039000000000202041a00000d11022001970000000003000411000000000232004b000015380000c13d001200ff001001930000000e01000039000000000101041a000000120110006b000021570000813d000000400300043d0000001101000039000000000201041a0000001b0220006b00001b4e0000813d00000dc10230009c000011330000213d0000016002300039000000400020043f00000140023000390000001c040000290000000000420435000001200230003900000013040000290000000000420435000001000230003900000014040000290000000000420435000000e00230003900000012040000290000000000420435000000c00230003900000015040000290000000000420435000000a002300039000000170400002900000000004204350000008002300039000000180400002900000000004204350000006002300039000000190400002900000000004204350000004002300039000000160400002900000000004204350000002002300039000000800400003900000000004204350000001b02000029000000000023043500000000001004350000000a212000c900000d88011000410000000002000019342f2ebf0000040f00001b740000013d00000d390210009c0000063a0000213d00000d3d0210009c000009290000613d00000d3e0210009c0000098a0000613d00000d3f0110009c000028fd0000c13d0000000001000416000000000101004b000028fd0000c13d001b00800000003d0000000a01000039000000000101041a001a00000001001d000000000101004b001c00000000001d00000d780000c13d0000001c0100002900000005011002100000003f021000390014002000000092000000140320017f0000001b02300029000000000332004b0000000003000019000000010300403900000d150420009c000011330000213d0000000103300190000011330000c13d000000400020043f0000001b020000290000001c030000290000000002320436001300000002001d000000000203004b000002880000613d00000060020000390000000003000019000000400400043d00000da40540009c000011330000213d0000008005400039000000400050043f00000020054000390000000000250435000000400540003900000000000504350000000000040435000000400500043d00000d8a0650009c000011330000213d000000e006500039000000400060043f000000c0065000390000000000060435000000a00650003900000000000604350000008006500039000000000006043500000060065000390000000000060435000000400650003900000000000604350000002006500039000000000006043500000000000504350000006006400039000000000056043500000020033000390000001b053000290000000000450435000000000413004b000002650000413d0000001a0100006b0000117a0000c13d000000400100043d001c00000001001d0000001b02000029342f29120000040f000009990000013d00000d620210009c000006c90000213d00000d660210009c0000099b0000613d00000d670210009c000009a00000613d00000d680110009c0000001c0200035f000028fd0000c13d0000000001000416000000000101004b000028fd0000c13d000000040130008a000000200110008c000028fd0000413d0000000401200370000000000101043b001700000001001d00000d110110009c000028fd0000213d000000170100006b00000e590000c13d00000d2a01000041000000800010043f0000002001000039000000840010043f0000002901000039000000a40010043f00000de301000041000000c40010043f00000de40100004100000b5d0000013d00000d410210009c000006f00000213d00000d450210009c000009c40000613d00000d460210009c000009dd0000613d00000d470110009c0000001c0400035f000028fd0000c13d0000000001000416000000000101004b000028fd0000c13d000000040130008a000000400110008c000028fd0000413d0000000401400370000000000101043b00000d110210009c000028fd0000213d0000002402400370000000000202043b001c00000002001d00000000001004350000001201000039000000200010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000000201041a0000001c0220006b000028fd0000813d0000001c02000029342f2a470000040f0000000602100039000000000202041a0000000203100039000000000303041a0000000904100039000000000404041a0000000805100039000000000505041a0000000706100039000000000606041a0000000507100039000000000707041a0000000408100039000000000808041a0000000309100039000000000909041a000000000a01041a0000000101100039000000000101041a000000400b00043d000000200cb0003900000000001c04350000006001b0003900000000009104350000008001b000390000000000810435000000a001b000390000000000710435000000e001b0003900000000006104350000010001b0003900000000005104350000012001b00039000000000041043500000d11013001970000004003b000390000000000130435000000ff012001900000000001000019000000010100c039000000c002b0003900000000001204350000000000ab043500000d0d0100004100000d0d02b0009c000000000b0180190000004001b0021000000da8011001c7000034300001042e00000d570210009c000009ee0000613d00000d580210009c00000a010000613d00000d590110009c0000001c0700035f000028fd0000c13d0000000001000416000000000101004b000028fd0000c13d000000040130008a000000400110008c000028fd0000413d0000000401700370000000000101043b00000d150210009c000028fd0000213d000000230210003900000d7f04000041000000000532004b0000000005000019000000000504801900000d7f02200197000000000602004b000000000400801900000d7f0220009c000000000405c019000000000204004b000028fd0000c13d0000000402100039000000000227034f000000000402043b00000d150240009c000011330000213d0000000502400210000000bf05200039001b0020000000920000001b0550017f00000d800650004100000d810660009c000011330000413d000000400050043f000000800040043f00000024011000390000000002210019000000000532004b0000001c0700035f000028fd0000213d000000000404004b000003440000613d000000a004000039000000000517034f000000000505043b00000d110650009c000028fd0000213d00000000045404360000002001100039000000000521004b0000033c0000413d0000002401700370000000000201043b00000d150120009c000028fd0000213d000000230120003900000d7f04000041000000000531004b0000000005000019000000000504801900000d7f01100197000000000601004b000000000400801900000d7f0110009c000000000405c019000000000104004b000028fd0000c13d0000000401200039000000000417034f000000000504043b00000d150450009c000011330000213d00000005045002100000003f064000390000001b0660017f000000400700043d0000000006670019001300000007001d000000000776004b0000000007000019000000010700403900000d150860009c000011330000213d0000000107700190000011330000c13d000000400060043f00000013060000290000000006560436000c00000006001d00000024022000390000000004240019000000000634004b000028fd0000213d000000000505004b00001c920000c13d0000000701000039000000000101041a00000d11011001970000000002000411000000000121004b000015380000c13d00000013010000290000000002010433000000800100043d000000000221004b00001eed0000c13d000000000201004b00001ef40000c13d000000400100043d000000440210003900000db603000041000001640000013d00000d360210009c00000a1e0000613d00000d370210009c00000a440000613d00000d380110009c0000001c0400035f000028fd0000c13d0000000001000416000000000101004b000028fd0000c13d000000040130008a000000400110008c000028fd0000413d0000000401400370000000000101043b00000d110210009c000028fd0000213d0000002402400370000000000202043b001c00000002001d00000d110220009c000028fd0000213d00000000001004350000000501000039000000200010043f0000004002000039001b00000002001d0000000001000019342f340f0000040f0000001c020000290000000000200435000000200010043f00000000010000190000001b02000029342f340f0000040f000000000101041a000000ff011001900000000001000019000000010100c03900000d350000013d00000d6a0210009c00000ac00000613d00000d6b0210009c00000aed0000613d00000d6c0110009c0000001c0200035f000028fd0000c13d0000000001000416000000000101004b000028fd0000c13d000000040130008a000001000110008c000028fd0000413d000000a401200370000000000101043b001700000001001d0000008401200370000000000101043b001800000001001d0000006401200370000000000101043b001900000001001d0000004401200370000000000101043b001500000001001d0000002401200370000000000101043b001a00000001001d0000000401200370000000000101043b001b00000001001d000000c401200370000000000101043b001600000001001d000000ff0110008c000028fd0000213d000000e401200370000000000101043b001c00000001001d0000000701000039000000000101041a00000d11011001970000000002000411000000000121004b00000d6f0000c13d0000001b0100002900000000001004350000000201000039000000200010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000000101041a00000d110110019800000cf60000613d0000001a01000029000000640110008c000014370000213d0000001901000029000000640110008c000014370000213d0000001801000029000000640110008c000014370000213d0000001701000029000000650110008c000014370000813d0000000e01000039000000000101041a000000160110006b000021570000813d000000400100043d001400000001001d00000d8a0110009c000011330000213d0000001403000029000000e001300039000000400010043f000000c0023000390000001c01000029001300000002001d0000000000120435000000a0023000390000001601000029001200000002001d000000000012043500000080023000390000001701000029001100000002001d000000000012043500000060023000390000001801000029001000000002001d000000000012043500000040023000390000001901000029000f00000002001d00000000001204350000001a0100002900000000021304360000001501000029000e00000002001d00000000001204350000001b0100002900000000001004350000001001000039000000200010043f00000d0d03000041000000000100041400000d0d0210009c0000000001038019000000c00110021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d00000014020000290000000002020433000000000101043b000000000021041b0000000e0200002900000000020204330000000103100039000000000023041b0000000f0200002900000000020204330000000203100039000000000023041b000000100200002900000000020204330000000303100039000000000023041b000000110200002900000000020204330000000403100039000000000023041b0000000502100039000001000300008a000000000402041a000000000334016f00000012040000290000000004040433000000ff0440018f000000000343019f000000000032041b000000060110003900000013020000290000000002020433000000000021041b000000400100043d000000c0021000390000001c030000290000000000320435000000a002100039000000160300002900000000003204350000008002100039000000170300002900000000003204350000006002100039000000180300002900000000003204350000004002100039000000190300002900000000003204350000002002100039000000150300002900000000003204350000001a020000290000000000210435000000000200041400000d0d0320009c00000d0d04000041000000000204801900000d0d0310009c00000000010480190000004001100210000000c002200210000000000112019f00000d78011001c70000800d02000039000000020300003900000d79040000410000001b0500002900000fc80000013d00000d490210009c00000b3e0000613d00000d4a0210009c00000b430000613d00000d4b0110009c000028fd0000c13d0000000001000416000000000101004b000028fd0000c13d000000070100003900000d330000013d00000d5b0210009c00000b600000613d00000d5c0210009c00000c060000613d00000d5d0110009c000028fd0000c13d0000000001000416000000000101004b000028fd0000c13d0000000701000039001c00000001001d000000000101041a00000d11011001970000000002000411000000000121004b00000d6f0000c13d0000001101000039000000000101041a000000000101004b00000f830000c13d000000800000043f0000022001000039000000400010043f0000001001000039001a00000001001d000001e00010043f00000dbb01000041000002000010043f000001e001000039000000a00010043f000000c00000043f00000dbc01000041000000e00010043f00000dbd01000041000001000010043f00001c2001000039001900000001001d000001200010043f0000000101000039001700000001001d000001400010043f0000000901000039001800000001001d000001600010043f0000006401000039001b00000001001d000001800010043f000001a00010043f000001c00000043f0000008001000039342f2f7e0000040f000000400100043d000001400210003900000dbb03000041000000000032043500000120021000390000001a030000290000000000320435000000e0021000390000001b030000290000000000320435000000c0021000390000000000320435000000a00210003900000018030000290000000000320435000000800210003900000019030000290000000000320435000000600210003900000dbd030000410000000000320435000000400210003900000dbc0300004100000000003204350000012002000039001a00000002001d000000000221043600000100031000390000000000030435000000000002043500000d0d04000041000000000200041400000d0d0320009c000000000204801900000d0d0310009c00000000010480190000004001100210000000c002200210000000000112019f00000dbe011001c70000800d02000039000000020300003900000dbf040000410000000005000019342f34250000040f0000000101200190000028fd0000613d000000400100043d00000017020000290000000000210435000000000200041400000d0d0320009c00000d0d04000041000000000204801900000d0d0310009c00000000010480190000004001100210000000c002200210000000000112019f00000d16011001c70000800d02000039000000020300003900000dc0040000410000000005000019342f34250000040f0000000101200190000028fd0000613d000000400100043d00000dc10210009c000011330000213d0000016002100039000000400020043f00000017020000290000000002210436000000400300043d00000d120430009c000011330000213d0000004004300039000000400040043f000000200430003900000dc20500004100000000005404350000001304000039001800000004001d0000000000430435000000000032043500000140021000390000001703000029000000000032043500000120021000390000003204000039001600000004001d000000000042043500000100021000390000000000420435000000e0021000390000000304000039001900000004001d0000000000420435000000c0021000390000000000320435000000a0021000390000546003000039001500000003001d0000000000320435000000800210003900000dc3030000410000000000320435000000600210003900000dc403000041000000000032043500000040021000390000000000020435342f2f7e0000040f000000400100043d000001400210003900000dc2030000410000000000320435000001200210003900000018030000290000000000320435000000e00210003900000016030000290000000000320435000000c0021000390000000000320435000000a00210003900000019030000290000000000320435000000800210003900000015030000290000000000320435000000600210003900000dc3030000410000000000320435000000400210003900000dc40300004100000000003204350000001a020000290000000002210436000001000310003900000017050000290000000000530435000000000002043500000d0d04000041000000000200041400000d0d0320009c000000000204801900000d0d0310009c00000000010480190000004001100210000000c002200210000000000112019f00000dbe011001c70000800d02000039000000020300003900000dbf04000041342f34250000040f0000000101200190000028fd0000613d000000400100043d00000017050000290000000000510435000000000200041400000d0d0320009c00000d0d04000041000000000204801900000d0d0310009c00000000010480190000004001100210000000c002200210000000000112019f00000d16011001c70000800d020000390000000203000039001800000003001d00000dc004000041342f34250000040f0000000101200190000028fd0000613d000000400100043d00000dc10210009c000011330000213d0000016002100039000000400020043f00000018020000290000000002210436000000400300043d00000d120430009c000011330000213d0000004004300039000000400040043f000000200430003900000dc50500004100000000005404350000000b04000039001600000004001d0000000000430435000000000032043500000140021000390000001803000029000000000032043500000120021000390000009603000039001500000003001d000000000032043500000100021000390000000000320435000000e00210003900000017030000290000000000320435000000c0021000390000000000320435000000a0021000390000708003000039001400000003001d0000000000320435000000800210003900000dc3030000410000000000320435000000600210003900000dc403000041000000000032043500000040021000390000000000020435342f2f7e0000040f000000400100043d000001400210003900000dc5030000410000000000320435000001200210003900000016030000290000000000320435000000e00210003900000015030000290000000000320435000000c0021000390000000000320435000000a00210003900000017030000290000000000320435000000800210003900000014030000290000000000320435000000600210003900000dc3030000410000000000320435000000400210003900000dc40300004100000000003204350000001a020000290000000002210436000001000410003900000018030000290000000000340435000000000002043500000d0d05000041000000000200041400000d0d0420009c000000000205801900000d0d0410009c00000000010580190000004001100210000000c002200210000000000112019f00000dbe011001c70000800d02000039000000000503001900000dbf04000041342f34250000040f0000000101200190000028fd0000613d000000400100043d00000017020000290000000000210435000000000200041400000d0d0320009c00000d0d04000041000000000204801900000d0d0310009c00000000010480190000004001100210000000c002200210000000000112019f00000d16011001c70000800d02000039000000020300003900000dc0040000410000000005030019342f34250000040f0000000101200190000028fd0000613d000000400100043d00000dc10210009c000011330000213d0000016002100039000000400020043f00000019020000290000000002210436000000400300043d00000d120430009c000011330000213d0000004004300039000000400040043f000000200430003900000dc60500004100000000005404350000000c04000039001900000004001d0000000000430435000000c00410003900000017050000290000000000540435000000000032043500000120021000390000001b03000029000000000032043500000100021000390000000000320435000000e0021000390000001c030000290000000000320435000000a0021000390000384003000039001800000003001d0000000000320435000000800210003900000dc7030000410000000000320435000000600210003900000dc80300004100000000003204350000014002100039000000000002043500000040021000390000000000020435342f2f7e0000040f000000400100043d000001400210003900000dc6030000410000000000320435000001200210003900000019030000290000000000320435000000e0021000390000001b030000290000000000320435000000c0021000390000000000320435000000a0021000390000001c030000290000000000320435000000800210003900000018030000290000000000320435000000600210003900000dc7030000410000000000320435000000400210003900000dc80300004100000000003204350000001a02000029000000000221043600000100031000390000000000030435000000000002043500000d0d04000041000000000200041400000d0d0320009c000000000204801900000d0d0310009c00000000010480190000004001100210000000c002200210000000000112019f00000dbe011001c70000800d020000390000000203000039000000030500003900000dbf04000041342f34250000040f0000000101200190000028fd0000613d000000400100043d00000017020000290000000000210435000000000200041400000d0d0320009c00000d0d04000041000000000204801900000d0d0310009c00000000010480190000004001100210000000c002200210000000000112019f00000d16011001c70000800d020000390000000203000039000000030500003900000dc00400004100000fc80000013d00000d3a0210009c00000c360000613d00000d3b0210009c00000c580000613d00000d3c0110009c0000001c0200035f000028fd0000c13d0000000001000416000000000101004b000028fd0000c13d000000040130008a000000e00110008c000028fd0000413d000000a401200370000000000101043b001700000001001d0000008401200370000000000101043b001800000001001d0000006401200370000000000101043b001900000001001d0000004401200370000000000101043b001600000001001d0000002401200370000000000101043b001a00000001001d0000000401200370000000000101043b001b00000001001d000000c401200370000000000101043b001c00000001001d000000ff0110008c000028fd0000213d0000000701000039000000000101041a00000d11011001970000000002000411000000000121004b00000d6f0000c13d0000001b0100002900000000001004350000000201000039000000200010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000000101041a00000d110110019800000cf60000613d0000001a01000029000000640110008c000014370000213d0000001901000029000000640110008c000014370000213d0000001801000029000000640110008c000014370000213d0000001701000029000000640110008c000014370000213d0000000e01000039000000000101041a0000001c0110006b000021570000813d0000001b0100002900000000001004350000001001000039000000200010043f00000d0d03000041000000000100041400000d0d0210009c0000000001038019000000c00110021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b0000001a09000029000000000091041b00000001021000390000001605000029000000000052041b00000002021000390000001906000029000000000062041b00000003021000390000001807000029000000000072041b00000004021000390000001708000029000000000082041b0000000502100039000001000300008a000000000402041a000000000334016f0000001c04000029000000000343019f000000000032041b0000000601100039000000000101041a000000400200043d000000c0032000390000000000130435000000a0012000390000000000410435000000800120003900000000008104350000006001200039000000000071043500000040012000390000000000610435000000200120003900000000005104350000000000920435000000000100041400000d0d0310009c00000d0d04000041000000000104801900000d0d0320009c00000000020480190000004002200210000000c001100210000000000121019f00000d78011001c70000800d02000039000000020300003900000d79040000410000001b05000029000011150000013d00000d630210009c00000cd70000613d00000d640210009c00000cfd0000613d00000d650110009c0000001c0200035f000028fd0000c13d0000000001000416000000000101004b000028fd0000c13d000000040130008a000000200110008c000028fd0000413d0000000401200370000000000101043b001c00000001001d0000000701000039000000000101041a00000d11011001970000000002000411001b00000002001d000000000121004b00000d6f0000c13d0000000801000039000000000201041a000000020220008c00000d670000613d0000000202000039000000000021041b0000001c0100006b0000102b0000c13d00000d2a01000041000000800010043f0000002001000039000000840010043f0000001d01000039000000a40010043f00000dd40100004100000d750000013d00000d420210009c00000d0f0000613d00000d430210009c00000d2f0000613d00000d440110009c0000001c0700035f000028fd0000c13d0000000001000416000000000101004b000028fd0000c13d000000040130008a000000800110008c000028fd0000413d0000000401700370000000000101043b001b00000001001d00000d110110009c000028fd0000213d0000002401700370000000000101043b001a00000001001d00000d110110009c000028fd0000213d0000006401700370000000000101043b00000d150210009c000028fd0000213d000000230210003900000d7f04000041000000000532004b0000000005000019000000000504801900000d7f02200197000000000602004b000000000400801900000d7f0220009c000000000405c019000000000204004b000028fd0000c13d0000000402100039000000000227034f000000000202043b0000002401100039342f299b0000040f00000044020000390000000102200367000000000302043b00000000040100190000001b010000290000001a02000029000009260000013d00000d530210009c00000d380000613d00000d540110009c000028fd0000c13d0000000001000416000000000101004b000028fd0000c13d0000000a01000039000009ec0000013d00000d320210009c00000d4e0000613d00000d330110009c0000001c0200035f000028fd0000c13d0000000001000416000000000101004b000028fd0000c13d000000040130008a000000200110008c000028fd0000413d0000000401200370000000000601043b00000d110160009c000028fd0000213d0000000701000039000000000201041a00000d11032001970000000005000411000000000353004b00000d6f0000c13d000000000306004b000010400000c13d00000d2a01000041000000800010043f0000002001000039000000840010043f0000002601000039000000a40010043f00000d7001000041000000c40010043f00000d710100004100000b5d0000013d0000000001000416000000000101004b000028fd0000c13d000000000704034f00000d0e0130004100000d0f0110009c000011330000a13d0000009f0130003900000d1001100197000000400010043f0000001f0130018f0000000502300272000000000807034f000007640000613d00000000040000190000000505400210000000000658034f000000000606043b000000800550003900000000006504350000000104400039000000000524004b0000075c0000413d000000000401004b000007730000613d0000000502200210000000000427034f00000003011002100000008002200039000000000502043300000000051501cf000000000515022f000000000404043b0000010001100089000000000414022f00000000011401cf000000000151019f0000000000120435000000200130008c000028fd0000413d000000800100043d001b0d110010019b00000d110110009c000028fd0000213d000000400100043d001a00000001001d00000d120110009c000011330000213d0000001a020000290000004001200039000000400010043f0000001001000039000000000212043600000d1301000041001900000002001d0000000000120435000000400100043d001c00000001001d00000d120110009c000011330000213d0000001c020000290000004001200039000000400010043f0000000501000039001600000001001d000000000212043600000d1401000041001700000002001d00000000001204350000001a010000290000000001010433001800000001001d00000d150110009c000011330000213d000000000100041a000000010210019000000001011002700000007f0310018f000000000301c019001500000003001d0000001f0130008c00000000010000190000000101002039000000010110018f000000000112004b00000c540000c13d0000001501000029000000200110008c000007c20000413d000000000000043500000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d16011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d00000018030000290000001f023000390000000502200270000000200330008c0000000002004019000000000301043b00000015010000290000001f01100039000000050110027000000000011300190000000002230019000000000312004b000007c20000813d000000000002041b0000000102200039000000000312004b000007be0000413d00000018010000290000001f0110008c000018440000a13d000000000000043500000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d16011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000200200008a00000018032001800000002002000039000000000101043b0000001a06000029000007e00000613d0000002002000039000000000400001900000000056200190000000005050433000000000051041b000000200220003900000001011000390000002004400039000000000534004b000007d80000413d000000180330006c000007ec0000813d00000018030000290000000303300210000000f80330018f000000010400008a000000000334022f000000000343013f0000001a022000290000000002020433000000000232016f000000000021041b0000001801000029000000010110021000000001011001bf000018510000013d0000000001000416000000000101004b000028fd0000c13d0000000c01000039000009ec0000013d0000000001000416000000000101004b0000001c0800035f000028fd0000c13d000000040130008a000000400110008c000028fd0000413d0000000401800370000000000101043b00000d110210009c000028fd0000213d0000002402800370000000000402043b00000d150240009c000028fd0000213d000000230240003900000d7f05000041000000000632004b0000000006000019000000000605801900000d7f02200197000000000702004b000000000500801900000d7f0220009c000000000506c019000000000205004b000028fd0000c13d0000000405400039000000000258034f000000000202043b00000d150620009c000011330000213d000000bf06200039000000200700008a000000000676016f00000d800760004100000d810770009c000011330000413d0000002404400039000000400060043f000000800020043f0000000004420019000000000334004b0000001c0400035f000028fd0000213d0000002003500039000000000334034f0000001f0420018f0000000505200272000008300000613d00000000060000190000000507600210000000000873034f000000000808043b000000a00770003900000000008704350000000106600039000000000756004b000008280000413d000000000604004b0000083f0000613d0000000505500210000000000353034f0000000304400210000000a005500039000000000605043300000000064601cf000000000646022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000363019f0000000000350435000000a00220003900000000000204350000000702000039000000000202041a00000d11022001970000000003000411000000000232004b000015380000c13d000000000201004b000015d60000c13d000000400100043d000000440210003900000db503000041000000000032043500000024021000390000001903000039000010120000013d0000000001000416000000000101004b0000001c0200035f000028fd0000c13d000000040130008a000000200110008c000028fd0000413d0000000401200370000000000201043b00000df501200197000000000112004b000028fd0000c13d000000010100003900000df60320009c00000f8b0000213d00000df90320009c00000d350000613d00000dfa0220009c00000d350000613d00000f8f0000013d0000000001000416000000000101004b000028fd0000c13d000000000200041a000000010320019000000001042002700000007f0140018f000000000104c0190000001f0410008c00000000040000190000000104002039000000000442013f000000010440019000000c540000c13d000000800010043f000000000303004b00000f910000613d000000a0020000390000000000000435000000000301004b00000fa70000613d00000df40200004100000000040000190000000003040019000000000402041a000000a005300039000000000045043500000001022000390000002004300039000000000514004b0000087b0000413d000000c00230003900000fa70000013d0000000001000416000000000101004b0000001c0200035f000028fd0000c13d000000040130008a000000200110008c000028fd0000413d0000000401200370000000000101043b0000000e02000039000000000202041a000000000221004b000028fd0000813d342f29e40000040f000008a20000013d0000000001000416000000000101004b0000001c0200035f000028fd0000c13d000000040130008a000000200110008c000028fd0000413d0000000401200370000000000101043b0000000f02000039000000000202041a000000000221004b000028fd0000813d342f29d60000040f342f29f20000040f000009940000013d0000000001000416000000000101004b000028fd0000c13d0000001101000039000000000201041a001600000002001d00000d150220009c000011330000213d00000016020000290000000502200210000000bf02200039001a0020000000920000001a0220017f000000000e02001900000d150220009c000011330000213d0000004000e0043f0000001602000029000000800020043f0000000000100435000000000102004b0000104d0000c13d000000200100003900000000021e0436000000800100043d00000000001204350000004002e0003900000005031002100000000003230019000000000401004b0000090e0000613d000000a004000039000001600500003900000000060000190000000007e30049000000400770008a0000000002720436000000004904043400000000870904340000000007730436000000000a0804330000000000570435000001600830003900000000070a043300000000007804350000018008300039000000000b07004b000008dc0000613d000000000b000019000000000c8b0019000000200bb00039000000000dab0019000000000d0d04330000000000dc0435000000000c7b004b000008d50000413d000000000a87001900000000000a0435000000400a900039000000000a0a0433000000400b3000390000000000ab0435000000600a900039000000000a0a0433000000600b3000390000000000ab0435000000800a900039000000000a0a0433000000800b3000390000000000ab0435000000a00a900039000000000a0a0433000000a00b3000390000000000ab0435000000c00a900039000000000a0a0433000000000a0a004b000000000a000019000000010a00c039000000c00b3000390000000000ab0435000000e00a900039000000000a0a0433000000ff0aa0018f000000e00b3000390000000000ab0435000001000a900039000000000a0a0433000001000b3000390000000000ab0435000001200a300039000001200b900039000000000b0b04330000000000ba043500000140099000390000000009090433000000020a90008c000011760000213d000001400330003900000000009304350000001f037000390000001a0330017f00000000038300190000000106600039000000000716004b000008c60000413d0000000001e3004900000d0d0200004100000d0d0310009c000000000102801900000d0d03e0009c000000000e0280190000004002e0021000000fb90000013d0000000001000416000000000101004b000028fd0000c13d0000000001030019342f29630000040f001c00000001001d001b00000002001d001a00000003001d000000400100043d001900000001001d342f297d0000040f000000190400002900000000000404350000001c010000290000001b020000290000001a03000029342f2b040000040f0000000001000019000034300001042e0000000001000416000000000101004b0000001c0200035f000028fd0000c13d000000040130008a000000400110008c000028fd0000413d0000000401200370000000000101043b00000d110210009c000028fd0000213d00000000001004350000001301000039000000200010043f00000d0d03000041000000000100041400000d0d0210009c0000000001038019000000c00110021000000d73011001c70000801002000039342f342a0000040f0000001c0300035f0000000102200190000028fd0000613d000000000101043b0000002402300370000000000202043b0000000000200435000000200010043f000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000401043b0000000401400039000000000201041a000000010320019000000001052002700000007f0650018f000000000605c019001c00000006001d0000001f0560008c00000000050000190000000105002039000000000552013f000000010550019000000c540000c13d000000400600043d0000000305400039000000000505041a001600000005001d0000000105400039000000000505041a001900000005001d000000000504041a001800000005001d0000000204400039000000000404041a001700000004001d001b00000006001d0000001c040000290000000004460436001a00000004001d000000000303004b000014890000613d000000000010043500000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d16011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d0000001c05000029000000000205004b00000000020000190000001a06000029000014900000613d000000000101043b00000000020000190000000003260019000000000401041a000000000043043500000001011000390000002002200039000000000352004b000009820000413d000014900000013d0000000001000416000000000101004b0000001c0200035f000028fd0000c13d000000040130008a000000200110008c000028fd0000413d0000000401200370000000000101043b342f33880000040f0000002002000039000000400300043d001c00000003001d0000000002230436342f28ff0000040f0000001c0400002900000fb20000013d0000000001000416000000000101004b000028fd0000c13d0000000d01000039000009ec0000013d0000000001000416000000000101004b0000001c0200035f000028fd0000c13d000000040130008a000000200110008c000028fd0000413d0000000401200370000000000101043b001c00000001001d0000000701000039001b00000001001d000000000101041a00000d11021001970000000001000411000000000212004b00000d6f0000c13d0000000802000039000000000302041a000000020330008c00000d670000613d0000000203000039000000000032041b0000000b02000039001a00000002001d000000000202041a0000001c0220006c000010d20000813d00000d2a01000041000000800010043f0000002001000039000000840010043f0000001d01000039000000a40010043f00000de70100004100000d750000013d0000000001000416000000000101004b000028fd0000c13d0000000103000039000000000203041a000000010420019000000001052002700000007f0150018f000000000105c0190000001f0510008c00000000050000190000000105002039000000000552013f000000010550019000000c540000c13d000000800010043f000000000404004b00000f980000c13d000001000300008a000000000232016f000000a00020043f000000000101004b000000c002000039000000a00200603900000fa70000013d0000000001000416000000000101004b0000001c0200035f000028fd0000c13d000000040130008a000000200110008c000028fd0000413d0000000401200370000000000101043b00000000001004350000001401000039000000200010043f00000040020000390000000001000019342f340f0000040f000000000101041a00000d350000013d0000000001000416000000000101004b0000001c0200035f000028fd0000c13d000000040130008a000000200110008c000028fd0000413d0000000401200370000000000101043b342f2a8d0000040f00000d1101100197000000400200043d000000000012043500000d0d0100004100000d0d0320009c0000000002018019000000400120021000000d9b011001c7000034300001042e0000000001000416000000000101004b0000001c0200035f000028fd0000c13d000000040130008a000000200110008c000028fd0000413d0000000401200370000000000101043b0000000702000039000000000202041a00000d11022001970000000003000411000000000232004b00000d6f0000c13d000000650210008a000000650300008a000000000232004b00000fbc0000213d00000d2a01000041000000800010043f0000002001000039000000840010043f0000002a01000039000000a40010043f00000db801000041000000c40010043f00000db90100004100000b5d0000013d0000000001000416000000000101004b0000001c0200035f000028fd0000c13d000000040130008a000000200110008c000028fd0000413d0000000401200370000000000101043b00000000001004350000001001000039000000200010043f00000040020000390000000001000019342f340f0000040f0000000602100039000000000202041a0000000503100039000000000303041a0000000404100039000000000404041a0000000305100039000000000505041a0000000206100039000000000606041a0000000107100039000000000707041a000000000101041a000000800010043f000000a00070043f000000c00060043f000000e00050043f000001000040043f000000ff0130018f000001200010043f000001400020043f00000d9c01000041000034300001042e0000000001000416000000000101004b0000001c0200035f000028fd0000c13d000000040130008a000000400110008c000028fd0000413d0000002401200370000000000101043b001b00000001001d0000000401200370000000000101043b001c00000001001d00000000001004350000000201000039000000200010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000000101041a00000d110110019800000cf60000613d002600110000003d0000001101000039000000000201041a0000001b0220006b0000101e0000813d00000000001004350000001b010000290000000a211000c900000d8801100041342f317e0000040f0000001c0200002900000000002004350000001002000039000000200020043f001c00000001001d00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000400400043d00000d8a0240009c000011330000213d000000000601043b000000e001400039000000400010043f000000000106041a00000000011404360000000102600039000000000202041a00000000002104350000000201600039000000000501041a000000400140003900000000005104350000000301600039000000000301041a000000600140003900000000003104350000000401600039000000000101041a000000800240003900000000001204350000000501600039000000000101041a000000ff0710018f000000a0014000390000000000710435000000c0044000390000000606600039000000000606041a000000000064043500000064465000c90000001c0400002900000120044000390000000004040433002500640000003d000000000705004b00000aa50000613d00000000755600d9000000640550008c0000195a0000c13d0000001c0500002900000100055000390000000005050433000000010700008a000000000875004b0000195a0000613d000000010850003900240000808600e100000064863000c9000000000803004b00000ab30000613d00000000833600d9000000640330008c0000195a0000c13d000000000374004b0000195a0000613d000000010340003900230000403600e10000000002020433002200000002001d002100000000001d000000320250008c000018b30000a13d000000650250008c002100550000403d002100460000803d000018b40000013d0000000001000416000000000101004b0000001c0200035f000028fd0000c13d000000040130008a000000400110008c000028fd0000413d0000000401200370000000000101043b001b00000001001d00000d110110009c000028fd0000213d0000002401200370000000000101043b001c00000001001d00000000001004350000000201000039001a00000001001d000000200010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000000101041a00000d11011001980000100c0000613d0000001b0210006b0000131d0000c13d000000400100043d000000640210003900000df1030000410000000000320435000000440210003900000df203000041000000000032043500000024021000390000002103000039000000e00000013d0000000001000416000000000101004b0000001c0200035f000028fd0000c13d000000040130008a000000400110008c000028fd0000413d0000000401200370000000000101043b001800000001001d0000002401200370000000000101043b001600000001001d00000000001004350000000201000039001c00000001001d000000200010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000000101041a00000d110110019800000cf60000613d0000001101000039001400000001001d000000000101041a000000180110006c0000101e0000a13d000000160100002900000000001004350000001c01000029000000200010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000000101041a00130d110010019c0000100c0000613d000000130100002900000000001004350000001201000039001200000001001d000000200010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000201043b000000000102041a001700000001001d000000000101004b000015dd0000c13d000000400100043d000000640210003900000deb030000410000000000320435000000440210003900000dec0300004100000ae90000013d0000000001000416000000000101004b000028fd0000c13d000000320100003900000d350000013d0000000001000416000000000101004b0000001c0200035f000028fd0000c13d000000040130008a000000200110008c000028fd0000413d0000000401200370000000000101043b0000000702000039000000000202041a00000d11022001970000000003000411000000000232004b00000d6f0000c13d000000000201004b00000fc90000c13d00000d2a01000041000000800010043f0000002001000039000000840010043f0000002601000039000000a40010043f00000dac01000041000000c40010043f00000dad01000041000000e40010043f00000d720100004100003431000104300000000001000416000000000101004b0000001c0200035f000028fd0000c13d000000040130008a000000200110008c000028fd0000413d0000000401200370000000000101043b000200000001001d00000d110110009c000028fd0000213d000000020100002900000000001004350000001201000039000000200010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000000201041a001c00000002001d00000d150220009c000011330000213d0000001c0200002900000005022002100000003f02200039001b0020000000920000001b0220017f000000400300043d0000000002230019001400000003001d000000000332004b0000000003000019000000010300403900000d150420009c000011330000213d0000000103300190000011330000c13d000000400020043f00000014020000290000001c030000290000000000320435000000000010043500000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d16011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d0000001c0200006b00000bd60000613d000000000101043b00000000020000190000001403000029000000400400043d00000d8b0540009c000011330000213d0000014005400039000000400050043f000000000501041a00000000055404360000000106100039000000000606041a00000000006504350000000205100039000000000505041a00000d1105500197000000400640003900000000005604350000000305100039000000000505041a000000600640003900000000005604350000000405100039000000000505041a000000800640003900000000005604350000000505100039000000000505041a000000a00640003900000000005604350000000605100039000000000505041a000000ff055001900000000005000019000000010500c039000000c00640003900000000005604350000000705100039000000000505041a000000e00640003900000000005604350000000805100039000000000505041a000001000640003900000000005604350000000905100039000000000505041a00000120064000390000000000560435000000200330003900000000004304350000000a0110003900000001022000390000001c0420006c00000ba20000413d0000001401000029000000000201043300000d150120009c000011330000213d00000005012002100000003f031000390000001b0330017f000000400400043d0000000003340019001c00000004001d000000000443004b0000000004000019000000010400403900000d150530009c000011330000213d0000000104400190000011330000c13d000000400030043f0000001c030000290000000000230435000000000202004b000018f20000c13d00000014010000290000000001010433000000000101004b0000199d0000c13d000000400400043d000000200200003900000000032404360000001c0100002900000000010104330000000000130435001a00000004001d000000400340003900000005041002100000000004340019001900000001001d000000000501004b00001bd40000c13d0000001a05000029000000000154004900000d0d0200004100000d0d0310009c000000000102801900000d0d0350009c0000000005028019000000400250021000000fb90000013d0000000001000416000000000101004b0000001c0400035f000028fd0000c13d000000040130008a000000200110008c000028fd0000413d0000000401400370000000000201043b00000d150120009c000028fd0000213d0000002301200039000000000131004b000028fd0000813d0000000401200039000000000414034f000000000504043b00000d150450009c000011330000213d0000000504500210000000bf06400039001b0020000000920000001b0660017f00000d800760004100000d810770009c000011330000413d000000400060043f000000800050043f00000024022000390000000004240019000000000634004b0000001c0f00035f000028fd0000213d000000000505004b000015490000c13d0000000701000039000000000101041a00000d11011001970000000002000411000000000121004b000015380000c13d000000800100043d000000000201004b000017bd0000c13d000000400100043d000000440210003900000dce03000041000001640000013d0000000001000416000000000101004b0000001c0200035f000028fd0000c13d000000040130008a000000200110008c000028fd0000413d0000000401200370000000000101043b0000001102000039000000000302041a000000000331004b000028fd0000813d00000000002004350000000a161000c900000d9d01600041000000000201041a000000010320019000000001042002700000007f0540018f000000000504c019001c00000005001d0000001f0450008c00000000040000190000000104002039000000000542013f001b00000006001d00000d8804600041000000010550019000000fd60000613d00000d9901000041000000000010043500000022010000390000195d0000013d0000000001000416000000000101004b000028fd0000c13d0000000a01000039000000000101041a001400000001001d000000000101004b001800000000001d00000d990000c13d000000180100002900000005011002100000003f021000390010002000000092000000100320017f00000016050000290000000002530019000000000332004b0000000003000019000000010300403900000d150420009c000011330000213d0000000103300190000011330000c13d000000400020043f00000018030000290000000002350436001300000002001d000000000203004b00000c930000613d0000000002000019000000400300043d00000d8b0430009c000011330000213d0000014004300039000000400040043f0000012004300039000000000004043500000100043000390000000000040435000000e0043000390000000000040435000000c0043000390000000000040435000000a0043000390000000000040435000000800430003900000000000404350000006004300039000000000004043500000040043000390000000000040435000000200430003900000000000404350000000000030435000000200220003900000000045200190000000000340435000000000312004b00000c760000413d000000140100006b0000124f0000c13d000000400100043d000000200200003900000000022104360000001608000029000000000308043300000000003204350000004002100039000000000403004b00000ccd0000613d00000000040000190000002008800039000000000508043300000000760504340000000006620436000000000707043300000000007604350000004006500039000000000606043300000d11066001970000004007200039000000000067043500000060065000390000000006060433000000600720003900000000006704350000008006500039000000000606043300000080072000390000000000670435000000a0065000390000000006060433000000a0072000390000000000670435000000c0065000390000000006060433000000000606004b0000000006000019000000010600c039000000c0072000390000000000670435000000e0065000390000000006060433000000e00720003900000000006704350000010006500039000000000606043300000100072000390000000000670435000001200550003900000000050504330000012006200039000000000056043500000140022000390000000104400039000000000534004b00000c9f0000413d000000000212004900000d0d0300004100000d0d0420009c000000000203801900000d0d0410009c000000000103801900000040011002100000006002200210000000000112019f000034300001042e0000000001000416000000000101004b0000001c0200035f000028fd0000c13d000000040130008a000000400110008c000028fd0000413d0000000401200370000000000101043b001800000001001d0000002401200370000000000101043b001600000001001d00000000001004350000000201000039001c00000001001d000000200010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000000101041a00000d110110019800000ff50000c13d000000400100043d000000440210003900000ded03000041000000000032043500000024021000390000001203000039000010120000013d0000000001000416000000000101004b000028fd0000c13d0000000001030019342f29630000040f001c00000001001d001b00000002001d0000000002030019001a00000002001d0000000001000411342f2d160000040f342f2aec0000040f0000001c010000290000001b020000290000001a03000029342f2d890000040f0000000001000019000034300001042e0000000001000416000000000101004b0000001c0200035f000028fd0000c13d000000040130008a000000400110008c000028fd0000413d0000000401200370000000000101043b001b00000001001d00000d110110009c000028fd0000213d0000002401200370000000000201043b000000000102004b0000000001000019000000010100c039001c00000002001d000000000112004b000028fd0000c13d0000000002000411001a00000002001d0000001b0120006c000010e20000c13d00000d2a01000041000000800010043f0000002001000039000000840010043f0000001901000039000000a40010043f00000da70100004100000d750000013d0000000001000416000000000101004b000028fd0000c13d0000000901000039000000000101041a00000d1101100197000000800010043f00000d9801000041000034300001042e0000000001000416000000000101004b000028fd0000c13d0000000701000039000000000201041a00000d11032001970000000005000411000000000353004b00000d6f0000c13d00000d1702200197000000000021041b00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d18011001c70000800d02000039000000030300003900000d19040000410000000006000019000011150000013d0000000001000416000000000101004b0000001c0200035f000028fd0000c13d000000040130008a000001200110008c000028fd0000413d0000000401200370000000000101043b001b00000001001d00000d110110009c000028fd0000213d0000010401200370000000000101043b001a00000001001d0000000701000039000000000101041a00000d11011001970000000002000411000000000121004b00000d6f0000c13d0000000801000039000000000201041a000000020220008c0000111a0000c13d00000d2a01000041000000800010043f0000002001000039000000840010043f0000001f01000039000000a40010043f00000d970100004100000d750000013d00000d2a01000041000000800010043f0000002001000039000000840010043f000000a40010043f00000dd201000041000000c40010043f00000d7e010000410000343100010430001900020000003d001880100000003d00170001000000920000000002000019001c00000000001d00000d830000013d001c00000002001d0000001b0200002900000001022000390000001a0120006c000010250000813d001b00000002001d00000000002004350000001901000029000000200010043f000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d73011001c70000001802000029342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000000101041a00000d11011001980000001c0200002900000d7e0000613d000000170120006c0000195a0000613d000000010220003900000d7e0000013d001600020000003d001580100000003d0000000002000019001800000000001d00000da20000013d00000017020000290000000102200039000000140120006c000015430000813d001700000002001d00000000002004350000001601000029000000200010043f000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d73011001c70000001502000029342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000000101041a00000d110110019800000d9e0000613d000000170100002900000000001004350000001601000029000000200010043f000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d73011001c70000001502000029342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000000101041a00000d11011001980000100c0000613d00000000001004350000001201000039000000200010043f000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000000501041a00000d150250009c000011330000213d00000005025002100000003f02200039000000200300008a000000000232016f000000400300043d0000000002230019001a00000003001d000000000332004b0000000003000019000000010300403900000d150420009c000011330000213d0000000103300190000011330000c13d000000400020043f0000001a02000029001c00000005001d0000000002520436001900000002001d0000000000100435000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d16011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d0000001c08000029000000000208004b000000190700002900000e2b0000613d000000000101043b00000000020000190000000003070019000000400400043d00000d8b0540009c000011330000213d0000014005400039000000400050043f000000000501041a00000000055404360000000106100039000000000606041a00000000006504350000000205100039000000000505041a00000d1105500197000000400640003900000000005604350000000305100039000000000505041a000000600640003900000000005604350000000405100039000000000505041a000000800640003900000000005604350000000505100039000000000505041a000000a00640003900000000005604350000000605100039000000000505041a000000ff055001900000000005000019000000010500c039000000c00640003900000000005604350000000705100039000000000505041a000000e00640003900000000005604350000000805100039000000000505041a000001000640003900000000005604350000000905100039000000000505041a0000012006400039000000000056043500000000034304360000000a011000390000000102200039000000000482004b00000df80000413d0000001a040000290000000001040433000000000201004b00000d9e0000613d000000000500001900000e350000013d00000000010404330000000105500039000000000215004b00000d9e0000813d000000050250021000000000022700190000000002020433000000c0032000390000000003030433000000000303004b00000e310000c13d001c00000005001d000000000151004b000027710000a13d00000080012000390000000001010433001b00000001001d00000d84010000410000000000100439000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d85011001c70000800b02000039342f342a0000040f0000000102200190000027700000613d000000000101043b0000001b0110006b0000001a0400002900000019070000290000001c0500002900000e310000a13d000000010100008a0000001802000029000000000112004b0000195a0000613d001800010020003d00000e310000013d000000170100002900000000001004350000000301000039000000200010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000000201041a00000d150120009c000011330000213d00000005012002100000003f031000390014002000000092000000140330017f000000400400043d0000000003340019001b00000004001d000000000443004b0000000004000019000000010400403900000d150530009c000011330000213d0000000104400190000011330000c13d000000400030043f0000001b030000290000000003230436001300000003001d000000000202004b00000ea40000613d00000060020000390000000003000019000000400400043d00000da40540009c000011330000213d0000008005400039000000400050043f00000020054000390000000000250435000000400540003900000000000504350000000000040435000000400500043d00000d8a0650009c000011330000213d000000e006500039000000400060043f000000c0065000390000000000060435000000a00650003900000000000604350000008006500039000000000006043500000060065000390000000000060435000000400650003900000000000604350000002006500039000000000006043500000000000504350000006006400039000000000056043500000020033000390000001b053000290000000000450435000000000413004b00000e810000413d0000000a01000039000000000101041a001900000001001d000000000101004b0000028a0000613d000000170100002900120d110010019b001a00020000003d001880100000003d0000000002000019001500000000001d00000eb50000013d001500010050003d0000001c020000290000000102200039000000190120006c0000028a0000813d001c00000002001d00000000002004350000001a01000029000000200010043f000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d73011001c70000001802000029342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000000101041a00000d110110019800000eb10000613d0000001c0100002900000000001004350000001a01000029000000200010043f000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000000101041a00000d11021001980000100c0000613d000000170110014f00000d110110019800000eb10000c13d0000001c0100002900000000001004350000001a01000029000000200010043f000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000000101041a00000d11011001980000100c0000613d0000001c0100002900000000001004350000000601000039000000200010043f000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000000201041a000000010320019000000001042002700000007f0640018f000000000604c0190000001f0460008c00000000040000190000000104002039000000000442013f000000010440019000000c540000c13d000000400500043d0000000004650436000000000303004b001600000005001d00000f250000613d001000000004001d001100000006001d0000000000100435000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d16011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d0000001106000029000000000206004b00000000020000190000001605000029000000100700002900000f2b0000613d000000000101043b00000000020000190000000003270019000000000401041a000000000043043500000001011000390000002002200039000000000362004b00000f1d0000413d00000f2b0000013d000001000100008a000000000112016f0000000000140435000000000106004b000000200200003900000000020060190000003f01200039000000140210017f0000000001520019000000000221004b0000000002000019000000010200403900000d150310009c000011330000213d0000000102200190000011330000c13d000000400010043f00000da50210009c000011330000213d0000002002100039000000400020043f00000000000104350000001c0100002900000000001004350000001001000039000000200010043f000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000201043b000000400100043d00000da40310009c000011330000213d0000008003100039000000400030043f0000004003100039000000120400002900000000004304350000002003100039000000160400002900000000004304350000001c030000290000000000310435000000400300043d00000d8a0430009c000011330000213d000000e004300039000000400040043f000000000402041a00000000044304360000000105200039000000000505041a00000000005404350000000204200039000000000404041a000000400530003900000000004504350000000304200039000000000404041a000000600530003900000000004504350000000404200039000000000404041a000000800530003900000000004504350000000504200039000000000404041a000000ff0440018f000000a00530003900000000004504350000000602200039000000000202041a000000c0043000390000000000240435000000600210003900000000003204350000001b0300002900000000020304330000001505000029000000000252004b000027710000a13d0000000502500210000000130220002900000000001204350000000001030433000000000151004b00000eb00000213d000027710000013d00000d2a01000041000000800010043f0000002001000039000000840010043f0000001a01000039000000a40010043f00000dba0100004100000d750000013d00000df70320009c00000d350000613d00000df80220009c00000d350000613d000000000100001900000d350000013d000001000300008a000000000232016f000000a00020043f000000000101004b000000c002000039000000a00200603900000fa70000013d0000000000300435000000a002000039000000000301004b00000fa70000613d00000da90200004100000000040000190000000003040019000000000402041a000000a005300039000000000045043500000001022000390000002004300039000000000514004b00000f9e0000413d000000c002300039000000800220008a0000008001000039001c00000001001d342f29880000040f0000002001000039000000400200043d001b00000002001d00000000021204360000001c01000029342f28ff0000040f0000001b04000029000000000141004900000d0d0200004100000d0d0310009c000000000102801900000d0d0340009c000000000402801900000040024002100000006001100210000000000121019f000034300001042e0000000d02000039000000000012041b000000800010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000daa011001c70000800d02000039000000010300003900000db704000041000011150000013d0000000c02000039000000000012041b000000800010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000daa011001c70000800d02000039000000010300003900000dab04000041000011150000013d000000000404041a001a00000004001d0000001c04000029000000800040043f000000000303004b000011270000613d000000000010043500000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d16011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000a0020000390000001c0300006b000011370000613d000000000201043b00000000010000190000001c05000029000000000302041a000000a004100039000000000034043500000001022000390000002001100039000000000351004b00000fed0000413d0000112d0000013d0000001101000039001400000001001d000000000101041a000000180110006b0000101e0000813d000000160100002900000000001004350000001c01000029000000200010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000000101041a00130d110010019c000014b60000c13d000000400100043d000000440210003900000df303000041000000000032043500000024021000390000001803000039000000000032043500000d2a02000041000000000021043500000004021000390000002003000039000000000032043500000d0d0200004100000d0d0310009c0000000001028019000000400110021000000d2b011001c70000343100010430000000400100043d000000440210003900000dea03000041000000000032043500000024021000390000001003000039000010120000013d0000001c0100002900000d150110009c000011330000213d000000400100043d001b00000001001d0000024f0000013d0000000901000039000000000201041a00000d8901000041000000800010043f0000001b0100002900000d1101100197000000840010043f000000000100041000000d1101100197000000a40010043f0000001c01000029000000c40010043f000000000100041400000d1102200197000000040320008c000013540000c13d0000000003000031000000200130008c000000000403001900000020040080390000137e0000013d00000d1702200197000000000262019f000000000021041b00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d18011001c70000800d02000039000000030300003900000d1904000041000011150000013d001900a00000003d001c0d8800000045001800000000001d001b0000000e001d00000dc101e0009c000011330000213d0000001b020000290000016001200039000000400010043f0000001c03000029000000000103041a000000000512043600000001013001bf000000000201041a000000010320019000000001042002700000007f0640018f000000000604c0190000001f0460008c00000000040000190000000104002039000000000442013f000000010440019000000c540000c13d001700000005001d000000400500043d0000000004650436000000000303004b000010870000613d001300000004001d001400000006001d001500000005001d0000000000100435000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d16011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d0000001406000029000000000206004b0000000002000019000000150500002900000013070000290000108d0000613d000000000101043b00000000020000190000000003270019000000000401041a000000000043043500000001011000390000002002200039000000000362004b0000107f0000413d0000108d0000013d000001000100008a000000000112016f0000000000140435000000000106004b000000200200003900000000020060190000003f012000390000001a0210017f00000000040500190000000001520019000000000221004b0000000002000019000000010200403900000d150310009c000011330000213d0000000102200190000011330000c13d000000400010043f000000170100002900000000004104350000001c050000290000000201500039000000000101041a0000001b04000029000000400240003900000000001204350000000301500039000000000101041a000000600240003900000000001204350000000401500039000000000101041a000000800240003900000000001204350000000501500039000000000101041a000000a00240003900000000001204350000000601500039000000000101041a0000000802100270000000ff0220018f000000e0034000390000000000230435000000ff011001900000000001000019000000010100c039000000c00240003900000000001204350000000701500039000000000101041a0000010002400039000000000012043500000120014000390000000802500039000000000202041a00000000002104350000000901500039000000000101041a000000ff0110018f000000020210008c000011760000213d0000014002400039000000000012043500000019010000290000000001410436001900000001001d001c000a0050003d000000400e00043d00000018020000290000000102200039001800000002001d000000160120006c000010500000413d000008ba0000013d0000000902000039000000000202041a00000ddc03000041000000800030043f000000840010043f0000001c01000029000000a40010043f000000000100041400000d1102200197000000040320008c0000138d0000c13d0000000003000031000000200130008c00000000040300190000002004008039000013b70000013d0000001a0100002900000000001004350000000501000039000000200010043f00000d0d03000041000000000100041400000d0d0210009c0000000001038019000000c00110021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b0000001b020000290000000000200435000000200010043f000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000000201041a000001000300008a000000000232016f0000001c03000029000000000232019f000000000021041b000000400100043d000000000031043500000d0d02000041000000000300041400000d0d0430009c000000000302801900000d0d0410009c00000000010280190000004001100210000000c002300210000000000112019f00000d16011001c70000800d02000039000000030300003900000da6040000410000001a050000290000001b06000029342f34250000040f0000000101200190000028fd0000613d0000000001000019000034300001042e0000000202000039001900000002001d000000000021041b0000001b0100006b000013d10000c13d00000d2a01000041000000800010043f0000002001000039000000840010043f0000001401000039000000a40010043f00000d7d0100004100000d750000013d000001000100008a000000000112016f000000a00010043f0000001c0100006b00000020010000390000000001006019000000bf01100039000000200200008a000000000221016f00000d800120004100000d810110009c000011370000813d00000d9901000041000000000010043500000041010000390000195d0000013d000000400020043f0000001b0600002900000d9e01600041000000000a01041a00000d9f01600041000000000901041a00000d8301600041000000000701041a00000da001600041000000000501041a00000da101600041000000000401041a00000da201600041000000000301041a00000d8601600041000000000101041a00000da306600041000000000806041a0000002006200039000001600b0000390000000000b604350000001a060000290000000000620435000001600b200039000000800600043d00000000006b0435000001800b200039000000ff0880018f000000000c06004b0000115d0000613d000000000c000019000000000dbc0019000000a00ec00039000000000e0e04330000000000ed0435000000200cc00039000000000d6c004b000011560000413d000000000bb6001900000000000b0435000001200b2000390000000000ab0435000001000a20003900000000009a04350000000809700270000000ff0990018f000000e00a20003900000000009a0435000000ff077001900000000007000019000000010700c039000000c0092000390000000000790435000000a0072000390000000000570435000000800520003900000000004504350000006004200039000000000034043500000040032000390000000000130435000000020180008c0000143b0000a13d00000d9901000041000000000010043500000021010000390000195d0000013d001900020000003d001880100000003d0000000002000019001600000000001d000011830000013d0000001c0200002900000001022000390000001a0120006c0000028a0000813d001c00000002001d00000000002004350000001901000029000000200010043f000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d73011001c70000001802000029342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000000101041a00000d11011001980000117f0000613d0000001c0100002900000000001004350000001901000029000000200010043f000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d73011001c70000001802000029342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000000101041a00000d11011001980000100c0000613d0000001c0100002900000000001004350000000601000039000000200010043f000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000000201041a000000010320019000000001042002700000007f0640018f000000000604c0190000001f0460008c00000000040000190000000104002039000000000442013f000000010440019000000c540000c13d000000400500043d0000000004650436000000000303004b001700000005001d000011df0000613d001200000004001d001500000006001d0000000000100435000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d16011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d0000001506000029000000000206004b000000000200001900000017050000290000001207000029000011e50000613d000000000101043b00000000020000190000000003270019000000000401041a000000000043043500000001011000390000002002200039000000000362004b000011d70000413d000011e50000013d000001000100008a000000000112016f0000000000140435000000000106004b000000200200003900000000020060190000003f01200039000000140210017f0000000001520019000000000221004b0000000002000019000000010200403900000d150310009c000011330000213d0000000102200190000011330000c13d000000400010043f00000da50210009c000011330000213d0000002002100039000000400020043f00000000000104350000001c0100002900000000001004350000001901000029000000200010043f000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000000101041a00150d110010019c0000100c0000613d0000001c0100002900000000001004350000001001000039000000200010043f000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000201043b000000400100043d00000da40310009c000011330000213d0000008003100039000000400030043f0000004003100039000000150400002900000000004304350000002003100039000000170400002900000000004304350000001c030000290000000000310435000000400300043d00000d8a0430009c000011330000213d000000e004300039000000400040043f000000000402041a00000000044304360000000105200039000000000505041a00000000005404350000000204200039000000000404041a000000400530003900000000004504350000000304200039000000000404041a000000600530003900000000004504350000000404200039000000000404041a000000800530003900000000004504350000000504200039000000000404041a000000ff0440018f000000a00530003900000000004504350000000602200039000000000202041a000000c0043000390000000000240435000000600210003900000000003204350000001b0300002900000000020304330000001605000029000000000252004b000027710000a13d0000000502500210000000130220002900000000001204350000000001030433000000000151004b000027710000a13d001600010050003d0000117f0000013d001200020000003d001180100000003d0000000002000019001b00000000001d000012580000013d00000015020000290000000102200039000000140120006c00000c950000813d001500000002001d00000000002004350000001201000029000000200010043f000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d73011001c70000001102000029342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000000101041a00000d1101100198000012540000613d000000150100002900000000001004350000001201000029000000200010043f000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d73011001c70000001102000029342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000000101041a00000d11011001980000100c0000613d00000000001004350000001201000039000000200010043f000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000000201041a001c00000002001d00000d150220009c000011330000213d0000001c0200002900000005022002100000003f02200039000000100220017f000000400300043d0000000002230019001800000003001d000000000332004b0000000003000019000000010300403900000d150420009c000011330000213d0000000103300190000011330000c13d000000400020043f00000018020000290000001c030000290000000002320436001700000002001d0000000000100435000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d16011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d0000001c0200006b000012e00000613d000000000101043b00000000020000190000001703000029000000400400043d00000d8b0540009c000011330000213d0000014005400039000000400050043f000000000501041a00000000055404360000000106100039000000000606041a00000000006504350000000205100039000000000505041a00000d1105500197000000400640003900000000005604350000000305100039000000000505041a000000600640003900000000005604350000000405100039000000000505041a000000800640003900000000005604350000000505100039000000000505041a000000a00640003900000000005604350000000605100039000000000505041a000000ff055001900000000005000019000000010500c039000000c00640003900000000005604350000000705100039000000000505041a000000e00640003900000000005604350000000805100039000000000505041a000001000640003900000000005604350000000905100039000000000505041a0000012006400039000000000056043500000000034304360000000a0110003900000001022000390000001c0420006c000012ad0000413d00000018050000290000000001050433000000000201004b0000001706000029000012540000613d0000000007000019000012eb0000013d00000000010504330000000107700039000000000217004b000012540000813d000000050270021000000000042600190000000002040433000000c0032000390000000003030433000000000303004b000012e70000c13d000000000171004b000027710000a13d001a00000004001d001c00000007001d00000080012000390000000001010433001900000001001d00000d84010000410000000000100439000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d85011001c70000800b02000039342f342a0000040f0000000102200190000027700000613d000000000101043b000000190110006b0000001603000029000000180500002900000017060000290000001c070000290000001a08000029000012e70000a13d0000000001050433000000000171004b000027710000a13d00000000010304330000001b0110006c000027710000a13d0000001b0400002900000005014002100000001301100029000000000208043300000000002104350000000001030433000000000141004b000027710000a13d0000001b01000029001b00010010003d000012e70000013d0000000002000411001900000002001d000000000212004b000014d00000c13d0000001c0100002900000000001004350000000401000039000000200010043f00000d0d03000041000000000100041400000d0d0210009c0000000001038019000000c00110021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000000201041a00000d17022001970000001b022001af000000000021041b0000001c0100002900000000001004350000001a01000029000000200010043f000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000000101041a00000d11051001980000100c0000613d00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d18011001c70000800d02000039000000040300003900000df0040000410000001b060000290000001c07000029342f34250000040f0000000101200190000028fd0000613d000011180000013d00000d0d0300004100000d0d0410009c0000000001038019000000c00110021000000d7e011001c7342f34250000040f0000000003010019000000600330027000000d0d03300197000000200430008c000000000403001900000020040080390000001f0540018f00000005064002720000136c0000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b000013640000413d000000000705004b0000137b0000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000000000003001f0000000102200190000014f80000613d0000001f01400039000000600210018f00000080012001bf000000400010043f000000200330008c000028fd0000413d000000800300043d000000000403004b0000000004000019000000010400c039000000000443004b000028fd0000c13d000000000303004b0000159c0000c13d000013c50000013d00000d0d0300004100000d0d0410009c0000000001038019000000c00110021000000de5011001c7342f34250000040f0000000003010019000000600330027000000d0d03300197000000200430008c000000000403001900000020040080390000001f0540018f0000000506400272000013a50000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b0000139d0000413d000000000705004b000013b40000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000000000003001f0000000102200190000015150000613d0000001f01400039000000600210018f00000080012001bf000000400010043f000000200330008c000028fd0000413d000000800300043d000000000403004b0000000004000019000000010400c039000000000443004b000028fd0000c13d000000000303004b000015b70000c13d00000d2a03000041000000000031043500000084032001bf00000020040000390000000000430435000000c40320003900000d8e040000410000000000430435000000a4022000390000001c0300003900000000003204350000101b0000013d0000001b0100002900000000001004350000001201000039001800000001001d000000200010043f0000001c0100035f0000002401100370000000000101043b001c00000001001d00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000000101041a0000001c0110006c000015980000a13d0000001b0100002900000000001004350000001801000029000000200010043f00000024010000390000000101100367000000000101043b001c00000001001d00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000000201041a0000001c0220006c000027710000a13d000000000010043500000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d16011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d0000001c020000290000000a322000c9000000000101043b0000000001210019001c00000001001d0000000101100039000000000201041a00000044010000390000000101100367000000000101043b000000000212004b00001bc60000c13d00000000001004350000001901000029000000200010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000000101041a00000d110110019800000cf60000613d00000001010003670000006402100370000000000202043b000000640220008c000014370000213d000000a402100370000000000202043b000000640220008c000014370000213d000000c402100370000000000202043b000000640220008c000014370000213d000000e402100370000000000202043b000000640220008c0000209c0000a13d000000400100043d000000440210003900000de9030000410000100f0000013d000001400120003900000000008104350000019f01600039000000200300008a000000000131016f00000d0d0300004100000d0d0410009c000000000103801900000d0d0420009c0000000002038019000000400220021000000fb90000013d0000000202000039000000000021041b0000001c0100035f0000000401100370000000000101043b0000000000100435001c00000002001d000000200020043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000000101041a00000d110110019800000cf60000613d0000000401000039001400000001001d0000000101100367000000000101043b00000000001004350000001c01000029000000200010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000000101041a00000d11011001980000100c0000613d0000000002000411001300000002001d000000000121004b00001bcd0000c13d00000001010003670000002402100370000000000202043b0000001103000039001200000003001d000000000303041a000000000332004b000014850000813d000000120300002900000000003004350000000a322000c900000d8302200041000000000202041a000000ff0220019000001ec40000c13d000000400100043d000000440210003900000d96030000410000215a0000013d000001000100008a000000000112016f0000001a0200002900000000001204350000001c0100006b000000200200003900000000020060190000003f01200039000000200200008a000000000121016f0000001b02100029000000000112004b00000000010000190000000101004039000000000402001900000d150220009c000011330000213d0000000101100190000011330000c13d0000001801000029000000ff011001900000001701000029000000ff0110018f0000000005040019000000400050043f0000002002500039000000190300002900000000003204350000000002000019000000010200c0390000000000250435000000020210008c000011760000213d001c00000004001d0000008002400039000000a003000039000000000032043500000060024000390000001603000029000000000032043500000040024000390000000000120435000000a0024000390000001b01000029000009980000013d000000130100002900000000001004350000001201000039000000200010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000201043b000000000102041a001700000001001d000000000101004b000016970000c13d000000400100043d000000640210003900000de1030000410000000000320435000000440210003900000de203000041000000dd0000013d00000000001004350000000501000039000000200010043f00000d0d03000041000000000100041400000d0d0210009c0000000001038019000000c00110021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b00000019020000290000000000200435000000200010043f000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000000101041a000000ff01100190000013210000c13d000000400100043d000000640210003900000dee030000410000000000320435000000440210003900000def03000041000000000032043500000024021000390000003d03000039000000e00000013d000000400200043d0000001f0430018f0000000505300272000015050000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000014fd0000413d000000000604004b000015140000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f0000000000150435000015310000013d000000400200043d0000001f0430018f0000000505300272000015220000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b0000151a0000413d000000000604004b000015310000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000d0d0100004100000d0d0420009c000000000201801900000040012002100000006002300210000000000121019f0000343100010430000000400100043d000000440210003900000dd203000041000000000032043500000d2a0200004100000000002104350000002402100039000000200300003900000000003204350000000402100039000010170000013d000000180100002900000d150110009c000011330000213d000000400100043d001600000001001d00000c610000013d000000800500003900000d7f06000041000015530000013d00000020055000390000000007790019000000000007043500000000008504350000002002200039000000000742004b00000c290000813d00000000072f034f000000000707043b00000d150870009c000028fd0000213d00000000091700190000003f07900039000000000837004b0000000008000019000000000806801900000d7f07700197000000000a07004b000000000a000019000000000a06401900000d7f0770009c000000000a08c01900000000070a004b000028fd0000c13d000000200a9000390000000007af034f000000000707043b00000d150870009c000011330000213d0000003f087000390000001b0b80017f000000400800043d000000000bb80019000000000c8b004b000000000c000019000000010c00403900000d150db0009c000011330000213d000000010cc00190000011330000c13d000000400c9000390000004000b0043f0000000009780436000000000bc70019000000000b3b004b0000001c0f00035f000028fd0000213d000000200aa00039000000000aaf034f000000050b700272000015880000613d000000000c000019000000050dc00210000000000ed90019000000000dda034f000000000d0d043b0000000000de0435000000010cc00039000000000dbc004b000015800000413d0000001f0c7001900000154c0000613d000000050bb00210000000000aba034f000000000bb90019000000030cc00210000000000d0b0433000000000dcd01cf000000000dcd022f000000000a0a043b000001000cc00089000000000aca022f000000000aca01cf000000000ada019f0000000000ab04350000154c0000013d000000400100043d000000440210003900000d74030000410000215a0000013d0000000b02000039000000000402041a0000001c03400029000000000443004b0000000004000019000000010400403900000001044001900000195a0000c13d000000000032041b0000001c02000029000000000021043500000d0d02000041000000000300041400000d0d0430009c0000000003028019000000c0023002100000004001100210000000000112019f00000d16011001c70000800d02000039000000020300003900000dd3040000410000001b05000029342f34250000040f0000000101200190000028fd0000613d000015d10000013d0000001a02000029000000000202041a0000001c0320006c0000195a0000413d0000001c0300002900000000023200490000001a04000029000000000024041b0000001b02000029000000000202041a000000000031043500000d0d03000041000000000400041400000d0d0540009c0000000004038019000000c0034002100000004001100210000000000113019f00000d16011001c700000d11052001970000800d02000039000000020300003900000de604000041342f34250000040f0000000101200190000028fd0000613d00000001010000390000000802000039000000000012041b0000000001000019000034300001042e000000800200043d000000000202004b000017c90000c13d000000400100043d000000440210003900000db4030000410000215a0000013d001980100000003d0000000003000019001b00000002001d000015e50000013d0000000103300039000000170130006c0000001b0200002900000b370000813d000000000102041a001c00000003001d000000000131004b000027710000a13d0000000000200435000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d16011001c70000001902000029342f342a0000040f0000000102200190000028fd0000613d0000001c03000029001a000a203000cd000000000101043b0000001a01100029000000000101041a000000180110006c000015e10000c13d0000001b02000029000000000102041a000000000131004b000027710000a13d0000000000200435000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d16011001c70000001902000029342f342a0000040f0000000102200190000028fd0000613d000000000101043b0000001a0200002900000001022001bf0000000001120019000000000101041a000000160110006c0000001c03000029000015e10000c13d0000001b02000029000000000102041a000000000131004b000027710000a13d0000000000200435000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d16011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b0000001a011000290000000601100039000000000101041a000000ff011001900000001c03000029000015e10000c13d0000001b02000029000000000102041a000000000131004b000027710000a13d0000000000200435000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d16011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b0000001a011000290000000401100039000000000101041a001500000001001d00000d84010000410000000000100439000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d85011001c70000800b02000039342f342a0000040f0000000102200190000027700000613d000000000101043b000000150110006c0000001c03000029000015e10000213d0000001b02000029000000000102041a000000000131004b000027710000a13d000000000020043500000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d16011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b0000001a01100029001a00000001001d000000000101041a0000001402000029000000000202041a000000000212004b000027710000a13d000000400200043d001900000002001d00000dc10220009c000011330000213d0000000a131000c900000019020000290000016001200039000000400010043f00000d8801300041000000000101041a0000000001120436001500000001001d001700000003001d00000d9d01300041000000000201041a000000010320019000000001042002700000007f0540018f000000000504c019001c00000005001d0000001f0450008c00000000040000190000000104002039000000000442013f000000010440019000000c540000c13d000000400400043d001400000004001d0000001c050000290000000004540436001b00000004001d000000000303004b000021730000613d000000000010043500000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d16011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d0000001c0200006b00000000020000190000217a0000613d000000000101043b00000000020000190000001b03200029000000000401041a0000000000430435000000010110003900000020022000390000001c0320006c0000168f0000413d0000217a0000013d001980100000003d0000000003000019001b00000002001d0000169f0000013d0000000103300039000000170130006c0000001b02000029000014c90000813d000000000102041a001c00000003001d000000000131004b000027710000a13d0000000000200435000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d16011001c70000001902000029342f342a0000040f0000000102200190000028fd0000613d0000001c03000029001a000a203000cd000000000101043b0000001a01100029000000000101041a000000180110006c0000169b0000c13d0000001b02000029000000000102041a000000000131004b000027710000a13d0000000000200435000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d16011001c70000001902000029342f342a0000040f0000000102200190000028fd0000613d000000000101043b0000001a0200002900000001022001bf0000000001120019000000000101041a000000160110006c0000001c030000290000169b0000c13d0000001b02000029000000000102041a000000000131004b000027710000a13d0000000000200435000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d16011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b0000001a011000290000000601100039000000000101041a000000ff011001900000001c030000290000169b0000c13d0000001b02000029000000000102041a000000000131004b000027710000a13d0000000000200435000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d16011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b0000001a011000290000000401100039000000000101041a001500000001001d00000d84010000410000000000100439000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d85011001c70000800b02000039342f342a0000040f0000000102200190000027700000613d000000000101043b000000150110006c0000001c030000290000169b0000413d0000001b02000029000000000102041a000000000131004b000027710000a13d000000000020043500000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d16011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b0000001a01100029001b00000001001d0000000601100039000000000201041a000000ff03200190000020950000c13d0017010000000092000000170220017f00000001022001bf000000000021041b0000001b01000029000000000101041a0000001402000029000000000202041a000000000212004b000027710000a13d000000140200002900000000002004350000000a211000c900000d8801100041342f317e0000040f000000160200002900000000002004350000001002000039001400000002001d000000200020043f001500000001001d00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d0000001b0300002900000008023000390000000703300039000000000403041a000000000101043b000f00000001001d0000000301100039001000000001001d000000000101041a001a00000004001d000000000114004b000017680000c13d000000000402041a000000150100002900000120011000390000000001010433001900000004001d000000000114004b0000176a0000c13d0000000f010000290000000201100039000000000101041a0000001901100069000000190410006c00000000040000190000000104002039000000000404004b000000000100c019000000150400002900000100044000390000000004040433000000000012041b000000000103041a0000000004410049000000000114004b00000000010000190000000101002039000000000101004b000000000400c019000000000043041b0000001001000029000000000101041a001a00000004001d000000000114004b000017680000813d00000010010000290000001a04000029000000000041041b000000000103041a001a00000001001d000000000102041a001900000001001d000000160100002900000018020000290000001a030000290000001904000029342f320a0000040f0000001b020000290000000903200039000e00000003001d001200000001001d000000000013041b0000000401200039000000000101041a001100000001001d000000400100043d001b00000001001d00000d8401000041000000000010043900000d0d03000041000000000100041400000d0d0210009c0000000001038019000000c00110021000000d85011001c70000800b02000039342f342a0000040f0000000102200190000027700000613d000000000301043b0000001b0400002900000060014000390000001202000029000000000021043500000040014000390000001a020000290000000000210435000000200140003900000011020000290000000000210435001100000003001d0000000000340435000000000100041400000d0d0210009c00000d0d03000041000000000103801900000d0d0240009c00000000040380190000004002400210000000c001100210000000000121019f00000dd9011001c70000800d02000039000000030300003900000dda0400004100000013050000290000001c06000029342f34250000040f0000000101200190000028fd0000613d0000001201000029000000460110008c000022180000813d0000001a0100006b000022eb0000613d000000190100006b000022eb0000c13d00000011020000290000001301200029000000000221004b0000000002000019000000010200403900000001022001900000195a0000c13d0000001602100029000000000112004b0000000001000019000000010100403900000001011001900000195a0000c13d000000642120011a000000120120006c000000000100001900000001010040390000221b0000013d000000330110008c000019600000413d000000400100043d000000640210003900000dcc030000410000000000320435000000440210003900000dcd03000041000000000032043500000024021000390000002c03000039000000e00000013d0000000a02000039001b00000002001d000000000302041a000000010200008a001c00000003001d000000000223004b0000195a0000613d0000001c0200002900000001042000390000001b03000029000000000043041b342f303f0000040f00000080020000390000001c01000029342f30ba0000040f000000400100043d001a00000001001d00000d8a0110009c000011330000213d0000001a03000029000000e001300039000000400010043f00000060023000390000006401000039001900000001001d001600000002001d000000000012043500000080023000390000001b01000029001500000002001d00000000001204350000004002300039001300000002001d00000000001204350000000101000039001800000001001d0000000002130436000000c001300039001700000001001d0000000000010435000000a001300039001400000001001d0000000000010435001200000002001d00000000000204350000001c0100002900000000001004350000001001000039000000200010043f00000d0d03000041000000000100041400000d0d0210009c0000000001038019000000c00110021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d0000001a020000290000000002020433000000000101043b000000000021041b000000120200002900000000020204330000000103100039000000000023041b000000130200002900000000020204330000000203100039000000000023041b000000160200002900000000020204330000000303100039000000000023041b000000150200002900000000020204330000000403100039000000000023041b0000000502100039000001000300008a000000000402041a000000000334016f00000014040000290000000004040433000000ff0440018f000000000343019f000000000032041b000000060110003900000017020000290000000002020433000000000021041b000000400100043d00000060021000390000001903000029000000000032043500000080021000390000001b0300002900000000003204350000004002100039000000000032043500000018020000290000000002210436000000c0031000390000000000030435000000a00310003900000000000304350000000000020435000000000200041400000d0d0320009c00000d0d04000041000000000204801900000d0d0310009c00000000010480190000004001100210000000c002200210000000000112019f00000d78011001c70000800d02000039000000020300003900000d79040000410000001c05000029000011150000013d000000180100006b0000000001000019000018490000613d0000001901000029000000000101043300000018040000290000000302400210000000010300008a000000000223022f000000000232013f000000000121016f0000000102400210000000000121019f000000000010041b0000001c010000290000000001010433001a00000001001d00000d150110009c000011330000213d0000000101000039001900000001001d000000000101041a000000010210019000000001021002700000007f0320018f000000000302c019001800000003001d0000001f0230008c00000000020000190000000102002039000000000121013f000000010110019000000c540000c13d0000001801000029000000200110008c000018850000413d0000001901000029000000000010043500000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d16011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d0000001a030000290000001f023000390000000502200270000000200330008c0000000002004019000000000301043b00000018010000290000001f01100039000000050110027000000000011300190000000002230019000000000312004b000018850000813d000000000002041b0000000102200039000000000312004b000018810000413d0000001a010000290000001f0110008c00001d1a0000a13d0000001901000029000000000010043500000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d16011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000200200008a0000001a032001800000002002000039000000000101043b000018a30000613d000000200200003900000000040000190000001c052000290000000005050433000000000051041b000000200220003900000001011000390000002004400039000000000534004b0000189b0000413d0000001a0330006c000018af0000813d0000001a030000290000000303300210000000f80330018f000000010400008a000000000334022f000000000343013f0000001c022000290000000002020433000000000232016f000000000021041b0000001a01000029000000010110021000000001011001bf00001d270000013d002100640000003d0000000001010433000000ff0410018f0000001c01000029000000e0011000390000000001010433000000ff0510018f000000000154004b00000000010000190000000101006039000000000204004b0000000002000019000000010200c039000000000112017000000000010000190000000f0100c039002000000001001d00000000030004150000001f0330008a0000000503300210000000000104004b000019460000613d000000000105004b000019460000613d0000000a0100003900000000030004150000001e0330008a0000000503300210000000010240008c000018d40000c13d000000020250008c0000000002000019000019480000613d00000000030004150000001e0330008a0000000503300210000000020240008c000018dc0000c13d000000010250008c0000000002000019000019480000613d00000000030004150000001e0330008a00000005033002100000000b0240008c000018e40000c13d000000040250008c0000000002000019000019480000613d0000000b0250015f000000040340015f000000000223019f00000000030004150000001d0330008a0000000503300210000000000202004b0000000002000019000000010200c03900000001022001900000000002000019000000010200c039000000000100c019000019480000013d00000060020000390000000003000019000000400400043d00000dcf0540009c000011330000213d000001e005400039000000400050043f00000dd00640009c000011330000213d0000034006400039000000400060043f00000000000504350000020006400039000000000026043500000000055404360000032006400039000000000006043500000300064000390000000000060435000002e0064000390000000000060435000002c0064000390000000000060435000002a006400039000000000006043500000280064000390000000000060435000002600640003900000000000604350000024006400039000000000006043500000220064000390000000000060435000000c0064000390000000000060435000000a00640003900000000000604350000008006400039000000000006043500000060064000390000000000060435000000400640003900000000000604350000000000050435000000400500043d00000d8a0650009c000011330000213d000000e006500039000000400060043f000000c0065000390000000000060435000000a006500039000000000006043500000080065000390000000000060435000000600650003900000000000604350000004006500039000000000006043500000020065000390000000000060435000000000005043500000180064000390000000000260435000000e0064000390000000000560435000001c0054000390000000000050435000001a00540003900000000000504350000016005400039000000000005043500000140054000390000000000050435000001200540003900000000000504350000010005400039000000000005043500000020033000390000001c053000290000000000450435000000000413004b000018f40000413d00000bec0000013d000000010200003900000000010000190000000503300270000000000301001f000000240400002900000023534000c9000000236530011a000000000454004b00001d160000c13d000000230500002900000023645000c9000000237640011a000000000565004b00001d160000c13d0000000003340019000000000443004b00000000040000190000000104004039000000010440019000001ce20000613d00000d990100004100000000001004350000001101000039000000040010043f00000d9a0100004100003431000104300000000f02000039000000000102041a001800000002001d000000000002041b000000000201004b00001e430000613d0000001802000029000000000020043500000dc901100041001c00000001001d00000dca0110009c00001e430000413d00000dc903000041000019740000013d0000001903000029000000000003041b000000000001041b00000001033000390000001c0130006c00001e2f0000813d000000000103041a000000010210019000000001021002700000007f0420018f000000000402c0190000001f0240008c00000000020000190000000102002039000000000121013f000000010110019000000c540000c13d000000000104004b000019710000613d001a00000004001d0000001f0140008c0000000001030019000019700000a13d001900000003001d0000000000300435000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d16011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b0000001a020000290000001f02200039000000050220027000000000022100190000000103100039000000000423004b0000196e0000813d000000000003041b0000000103300039000000000423004b000019980000413d0000196e0000013d000100130000003d001380100000003d001900000000001d000000190100002900000005011002100000002002100039000f00000002001d00000014012000290000000001010433001800000001001d000000020100002900000000001004350000000101000029000000200010043f000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d73011001c70000001302000029342f342a0000040f0000000102200190000028fd0000613d000000000101043b00000019020000290000000000200435000000200010043f000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d73011001c70000001302000029342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000400200043d001a00000002001d00000dd10220009c000011330000213d0000001a03000029000000a002300039000000400020043f000000000201041a000000ff022001900000000002000019000000010200c03900000000022304360000000103100039000000000303041a00000000003204350000000202100039000000000202041a000000ff0220018f000000020320008c000011760000213d0000001a030000290000004004300039001200000004001d000000000024043500000060033000390000000302100039000000000202041a001100000003001d00000000002304350000000401100039000000000201041a000000010320019000000001042002700000007f0540018f000000000504c019001700000005001d0000001f0450008c00000000040000190000000104002039000000000442013f000000010440019000000c540000c13d000000400400043d001600000004001d00000017050000290000000004540436001500000004001d000000000303004b00001a0c0000613d0000000000100435000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d16011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d0000001705000029000000000205004b0000000002000019000000150600002900001a130000613d000000000101043b00000000020000190000000003260019000000000401041a000000000043043500000001011000390000002002200039000000000352004b00001a040000413d00001a130000013d000001000100008a000000000112016f00000015020000290000000000120435000000170100006b000000200200003900000000020060190000003f012000390000001b0210017f0000001601200029000000000221004b0000000002000019000000010200403900000d150310009c000011330000213d0000000102200190000011330000c13d000000400010043f0000001a0100002900000080021000390000001601000029001000000002001d0000000000120435000000180100002900000000140104340000001102000039000000000302041a001700000004001d000000000343004b000027710000a13d00000000002004350000001803000029000000a0023000390000000002020433000c00000002001d00000080023000390000000002020433000d00000002001d00000060023000390000000002020433000e00000002001d00000040023000390000000002020433001600000002001d000000c0023000390000000002020433001500000002001d0000000001010433000b00000001001d00000000001004350000001001000039000000200010043f000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d73011001c70000801002000039342f342a0000040f00000017030000290000000a343000c9001700000004001d00000d8803400041000000150400006b0000000004000019000000010400c039000900000004001d0000001604000029000a0d110040019b0000000102200190000028fd0000613d000000000101043b000700000001001d0000001a010000290000000001010433000000000101004b0000000001000019000000010100c039000800000001001d00000012010000290000000001010433001200000001001d000000020110008c000011760000213d000000180200002900000120012000390000000001010433000600000001001d00000010010000290000000001010433001000000001001d00000011010000290000000001010433001100000001001d00000100012000390000000001010433000400000001001d000000e0012000390000000001010433000500000001001d000000400100043d001a00000001001d00000dcf0110009c000011330000213d0000001a01000029000001e002100039001800000002001d000000400020043f00000dd00110009c000011330000213d0000001a010000290000034001100039000000400010043f000000000103041a00000018020000290000000000120435000000170100002900000d9d01100041000000000201041a000000010320019000000001042002700000007f0540018f000000000504c019001600000005001d0000001f0450008c00000000040000190000000104002039000000000442013f000000010440019000000c540000c13d000000400400043d001500000004001d00000016050000290000000004540436000300000004001d000000000303004b00001aae0000613d0000000000100435000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d16011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d0000001605000029000000000205004b0000000002000019000000030600002900001ab50000613d000000000101043b00000000020000190000000003260019000000000401041a000000000043043500000001011000390000002002200039000000000352004b00001aa60000413d00001ab50000013d000001000100008a000000000112016f00000003020000290000000000120435000000160100006b000000200200003900000000020060190000003f012000390000001b0210017f0000001501200029000000000221004b0000000002000019000000010200403900000d150310009c000011330000213d0000000102200190000011330000c13d000000400010043f0000001a04000029000002000140003900000015020000290000000000210435000000170500002900000d8601500041000000000101041a0000022002400039000000000012043500000da201500041000000000101041a0000024002400039000000000012043500000da101500041000000000101041a0000026002400039000000000012043500000da001500041000000000101041a0000028002400039000000000012043500000d8301500041000000000101041a0000000802100270000000ff0220018f000002c0034000390000000000230435000000ff011001900000000001000019000000010100c039000002a002400039000000000012043500000d9f01500041000000000101041a000002e0024000390000000000120435000003000140003900000d9e02500041000000000202041a000000000021043500000da301500041000000000101041a000000ff0110018f000000020210008c000011760000213d0000001a03000029000000c00230003900000009040000290000000000420435000000a0023000390000000c04000029000000000042043500000080023000390000000d04000029000000000042043500000060023000390000000e04000029000000000042043500000040023000390000000a04000029000000000042043500000020023000390000000b0400002900000000004204350000001802000029000000000023043500000320023000390000000000120435000000400100043d00000d8a0210009c000011330000213d000000e002100039000000400020043f0000000704000029000000000204041a00000000022104360000000103400039000000000303041a00000000003204350000000202400039000000000202041a000000400310003900000000002304350000000302400039000000000202041a000000600310003900000000002304350000000402400039000000000202041a000000800310003900000000002304350000000502400039000000000202041a000000ff0220018f000000a00310003900000000002304350000000602400039000000000202041a000000c00310003900000000002304350000001a04000029000001c00240003900000004030000290000000000320435000001a00240003900000005030000290000000000320435000001800240003900000010030000290000000000320435000001600240003900000011030000290000000000320435000001400240003900000012030000290000000000320435000001200240003900000006030000290000000000320435000001000240003900000008030000290000000000320435000000e00240003900000000001204350000001c010000290000000001010433000000190110006c000027710000a13d0000001c020000290000000f012000290000001a0300002900000000003104350000000001020433000000190110006c000027710000a13d0000001902000029001900010020003d00000014010000290000000001010433000000190110006b000019a00000413d00000bf00000013d00000dc10130009c000011330000213d0000016001300039000000400010043f00000140013000390000001c020000290000000000210435000001200130003900000013020000290000000000210435000001000130003900000014020000290000000000210435000000e00130003900000012020000290000000000210435000000c00130003900000015020000290000000000210435000000a001300039000000170200002900000000002104350000008001300039000000180200002900000000002104350000006001300039000000190200002900000000002104350000004001300039000000160200002900000000002104350000002001300039000000800200003900000000002104350000001b0100002900000000001304350000000001030019342f2f7e0000040f000000400100043d000001200200003900000000022104360000012004100039000000800300043d00000000003404350000014004100039000000000503004b00001b850000613d00000000050000190000000006450019000000a007500039000000000707043300000000007604350000002005500039000000000635004b00001b7e0000413d0000000004430019000000000004043500000100041000390000001c050000290000000000540435000000e00410003900000013050000290000000000540435000000c00410003900000014050000290000000000540435000000a00410003900000012050000290000000000540435000000800410003900000017050000290000000000540435000000600410003900000018050000290000000000540435000000400410003900000019050000290000000000540435000000160400002900000000004204350000015f023000390000001a0220017f00000d0d0400004100000d0d0310009c0000000001048019000000400110021000000d0d0320009c00000000020480190000006002200210000000000112019f000000000200041400000d0d0320009c0000000002048019000000c002200210000000000112019f00000d18011001c70000800d02000039000000020300003900000dbf040000410000001b05000029342f34250000040f0000000101200190000028fd0000613d000000400100043d00000015020000290000000000210435000000000200041400000d0d0320009c00000d0d04000041000000000204801900000d0d0310009c00000000010480190000004001100210000000c002200210000000000112019f00000d16011001c70000800d02000039000000020300003900000dc004000041000004690000013d000000400100043d000000440210003900000d7503000041000000000032043500000024021000390000001b03000039000010120000013d000000400100043d000000440210003900000d8203000041000000000032043500000024021000390000000d03000039000010120000013d000002a0050000390000016006000039000000000700001900001be80000013d00000000019a00190000000000010435000001a0018000390000000001010433000002600240003900000000001204350000028001400039000001c002800039000000000202043300000000002104350000001f01a000390000001b0110017f00000000049100190000000107700039000000190170006c00000bfd0000813d0000001a0840006a000000400880008a00000000038304360000001c010000290000002001100039001c00000001001d000000000801043300000000bd080434000000000c540436000002a00940003900000000ea0d04340000000000a90435000000000e0e0433000002c0094000390000000000690435000004000a40003900000000090e043300000000009a0435000004200a400039000000000f09004b00001c050000613d000000000f0000190000000001af0019000000200ff000390000000002ef00190000000002020433000000000021043500000000019f004b00001bfe0000413d0000000001a9001900000000000104350000004001d000390000000001010433000002e00240003900000000001204350000006001d000390000000001010433000003000240003900000000001204350000008001d00039000000000101043300000320024000390000000000120435000000a001d00039000000000101043300000340024000390000000000120435000000c001d000390000000001010433000000000101004b0000000001000019000000010100c03900000360024000390000000000120435000000e001d000390000000001010433000000ff0110018f000003800240003900000000001204350000010001d000390000000001010433000003a0024000390000000000120435000003c0014000390000012002d00039000000000202043300000000002104350000014001d00039000000000d0104330000000201d0008c000011760000213d000003e0014000390000000000d1043500000000010b043300000000001c04350000004001800039000000000101043300000d11011001970000004002400039000000000012043500000060018000390000000001010433000000600240003900000000001204350000008001800039000000000101043300000080024000390000000000120435000000a0018000390000000001010433000000a0024000390000000000120435000000c0018000390000000001010433000000000101004b0000000001000019000000010100c039000000c0024000390000000000120435000000e0018000390000000001010433000000e00240003900000000cb0104340000000000b2043500000000020c0433000001000b40003900000000002b043500000040021000390000000002020433000001200b40003900000000002b043500000060021000390000000002020433000001400b40003900000000002b043500000080021000390000000002020433000001600b40003900000000002b0435000000a0021000390000000002020433000000ff0220018f000001800b40003900000000002b0435000000c0011000390000000001010433000001a002400039000000000012043500000100018000390000000001010433000000000101004b0000000001000019000000010100c039000001c0024000390000000000120435000001e0014000390000012002800039000000000202043300000000002104350000014001800039000000000b0104330000000201b0008c000011760000213d00000200014000390000000000b1043500000160018000390000000001010433000002200240003900000000001204350000001f019000390000001b0110017f0000000001a100190000018002800039000000000b020433000000000241004900000240094000390000000000290435000000000a0b04330000000009a1043600000000010a004b00001bd80000613d000000000c00001900000000019c0019000000200cc000390000000002bc0019000000000202043300000000002104350000000001ac004b00001c8a0000413d00001bd80000013d00000d7f05000041000000130600002900001c9c0000013d00000020066000390000000007790019000000000007043500000000008604350000002002200039000000000742004b000003700000813d0000001c0b00035f00000000072b034f000000000707043b00000d150870009c000028fd0000213d00000000091700190000003f07900039000000000837004b0000000008000019000000000805801900000d7f07700197000000000a07004b000000000a000019000000000a05401900000d7f0770009c000000000a08c01900000000070a004b000028fd0000c13d000000200a9000390000000007ab034f000000000707043b00000d150870009c000011330000213d0000003f087000390000001b0b80017f000000400800043d000000000bb80019000000000c8b004b000000000c000019000000010c00403900000d150db0009c000011330000213d000000010cc00190000011330000c13d000000400c9000390000004000b0043f0000000009780436000000000bc70019000000000b3b004b0000001c0b00035f000028fd0000213d000000200aa00039000000000aab034f000000050b70027200001cd20000613d000000000c000019000000050dc00210000000000ed90019000000000dda034f000000000d0d043b0000000000de0435000000010cc00039000000000dbc004b00001cca0000413d0000001f0c70019000001c950000613d000000050bb00210000000000aba034f000000000bb90019000000030cc00210000000000d0b0433000000000dcd01cf000000000dcd022f000000000a0a043b000001000cc00089000000000aca022f000000000aca01cf000000000ada019f0000000000ab043500001c950000013d00000022040000290000001e654000c90000001e7650011a000000000464004b00001d160000c13d0000000004350019000000000354004b0000000003000019000000010300403900000001033001900000195a0000c13d0000002503000029000000200600002a00000000753600a900001cf40000613d00000000766500d9000000000663004b00001d160000c13d0000000004450019000000000554004b0000000005000019000000010500403900000001055001900000195a0000c13d00000000651300a9000000000202004b00001d000000c13d00000000211500d9000000000113004b00001d160000c13d000000000154004b0000195a0000413d000000000103004b000000000100001900001d0f0000613d0000000005540049000000210200002900000000143500d900000000614200a9000000000553004b00001d0e0000213d00000000544100d9000000000224004b0000195a0000c13d00000000213100d90000000d02000039000000000202041a000000000321004b00000000010280190000000a0210008c0000000a0100a039000009f90000013d00000d9901000041000000000010043500000026010000290000195d0000013d0000001a0100006b000000000100001900001d1f0000613d000000170100002900000000010104330000001a040000290000000302400210000000010300008a000000000223022f000000000232013f000000000121016f0000000102400210000000000121019f0000001902000029000000000012041b0000000703000039000000000203041a00000d17012001970000000006000411000000000116019f001c00000003001d000000000013041b00000d0d01000041000000000300041400000d0d0430009c0000000003018019000000c00130021000000d18011001c700000d11052001970000800d02000039000000030300003900000d1904000041342f34250000040f0000000101200190000028fd0000613d00000008030000390000001901000029000000000013041b0000000a02000039000000000002041b00000e10040000390000000c01000039000000000041041b00000050040000390000000d05000039000000000045041b000000400400043d001700000004001d00000d1a0440009c000011330000213d00000017040000290000018004400039000000400040043f00000d120540009c000011330000213d0000001706000029000001c005600039000000400050043f000000040500003900000000005404350000000004460436000001a00560003900000d1b060000410000000000650435000000400500043d00000d120650009c000011330000213d0000004006500039000000400060043f000000200650003900000d1c0700004100000000007604350000000b0600003900000000006504350000000000540435000000400400043d00000d120540009c000011330000213d0000004005400039000000400050043f000000200540003900000d1d0600004100000000006504350000001c050000290000000000540435000000170500002900000040055000390000000000450435000000400400043d00000d120540009c000011330000213d0000004005400039000000400050043f000000200540003900000d1e0600004100000000006504350000000000340435000000170300002900000060033000390000000000430435000000400300043d00000d120430009c000011330000213d0000004004300039000000400040043f000000200430003900000d1f0500004100000000005404350000000000230435000000170400002900000080044000390000000000340435000000400300043d00000d120430009c000011330000213d0000004004300039000000400040043f000000200430003900000d2005000041000000000054043500000000002304350000001704000029000000a0044000390000000000340435000000400300043d00000d120430009c000011330000213d0000004004300039000000400040043f000000200430003900000d2105000041000000000054043500000000001304350000001704000029000000c0044000390000000000340435000000400300043d00000d120430009c000011330000213d0000004004300039000000400040043f000000200430003900000d22050000410000000000540435000000160400002900000000004304350000001704000029000000e0044000390000000000340435000000400300043d00000d120430009c000011330000213d0000004004300039000000400040043f000000200430003900000d2305000041000000000054043500000016040000290000000000430435000000170400002900000100044000390000000000340435000000400300043d00000d120430009c000011330000213d0000004004300039000000400040043f000000200430003900000d240500004100000000005404350000000000230435000000170200002900000120022000390000000000320435000000400200043d00000d120320009c000011330000213d0000004003200039000000400030043f000000200320003900000d250400004100000000004304350000000000120435000000170300002900000140033000390000000000230435000000400200043d00000d120320009c000011330000213d0000004003200039000000400030043f000000200320003900000d26040000410000000000430435000000060300003900000000003204350000001703000029000001600330003900000000002304350000000e02000039000000000302041a001800000002001d000000000012041b001c00000003001d0000000d0130008c000023110000413d0000001801000029000000000010043500000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d16011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b0000001c021000290000000c01100039001900000002001d001c00000001001d000000000121004b000023110000813d00001e040000013d0000001c02000029000000000002041b000000000001041b0000001c020000290000000102200039001c00000002001d000000190120006c000023110000813d0000001c01000029000000000101041a000000010210019000000001021002700000007f0320018f000000000302c019001a00000003001d0000001f0230008c00000000020000190000000102002039000000000121013f000000010110019000000c540000c13d0000001a0100006b00001dff0000613d0000001a010000290000001f0110008c0000001c0100002900001dfe0000a13d0000001c010000290000000000100435000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d16011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b0000001a020000290000001f02200039000000050220027000000000022100190000000103100039000000000423004b00001dfc0000813d000000000003041b0000000103300039000000000423004b00001e2a0000413d00001dfc0000013d000000800100043d000000000101004b000000000100001900001e430000c13d000000400200043d000000000012043500000d0d01000041000000000300041400000d0d0430009c000000000301801900000d0d0420009c00000000020180190000004001200210000000c002300210000000000112019f00000d16011001c70000800d02000039000000010300003900000dcb0400004100000fc80000013d000000000300001900001e4e0000013d000000010160021000000001011001bf00000017030000290000001c04000029000000000014041b0000000103300039000000800100043d000000000213004b00001e330000813d001700000003001d0000000501300210000000a0011000390000000001010433001900000001001d0000001801000029000000000101041a00000d150210009c000011330000213d00000001021000390000001803000029000000000023041b0000000000300435001c0dc90010004500000019010000290000000021010434001500000002001d001a00000001001d00000d150110009c000011330000213d0000001c04000029000000000104041a000000010210019000000001021002700000007f0320018f000000000302c0190000001f0230008c00000000020000190000000102002039000000000121013f000000010110019000000c540000c13d001600000003001d000000200130008c0000001a0500002900001e8e0000413d0000000000400435000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d16011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d0000001a050000290000001f025000390000000502200270000000200350008c0000000002004019000000000301043b00000016010000290000001f01100039000000050110027000000000011300190000000002230019000000000312004b0000001c0400002900001e8e0000813d000000000002041b0000000102200039000000000312004b00001e8a0000413d0000001f0150008c00001eb60000a13d0000000000400435000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d16011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d0000001a060000290000001b036001800000002002000039000000000101043b000000190700002900001eaa0000613d0000002002000039000000000400001900000000057200190000000005050433000000000051041b000000200220003900000001011000390000002004400039000000000534004b00001ea20000413d000000000363004b00001e450000813d0000000303600210000000f80330018f000000010400008a000000000334022f000000000343013f00000000027200190000000002020433000000000232016f000000000021041b00001e450000013d000000000105004b000000000100001900001ebb0000613d000000150100002900000000010104330000000302500210000000010300008a000000000223022f000000000232013f000000000121016f0000000102500210000000000121019f000000170300002900001e490000013d0000000401100370000000000101043b00000000001004350000001401000039001100000001001d000000200010043f00000d0d03000041000000000100041400000d0d0210009c0000000001038019000000c00110021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000000101041a001c00000001001d00000d84010000410000000000100439000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d85011001c70000800b02000039342f342a0000040f0000000102200190000027700000613d000000000101043b001000000001001d0000001c0110006b0000207e0000a13d000000400100043d000000440210003900000d9503000041000000000032043500000024021000390000000f03000039000010120000013d000000400100043d000000440210003900000dae03000041000000000032043500000024021000390000001d03000039000010120000013d0016000a0000003d000d000100000092001700020000003d001900000000001d000000190110006c000027710000a13d00000019010000290000000501100210000000a0021000390000000002020433001c0d110020019c000008490000613d00000013020000290000000002020433000000190220006c000027710000a13d0000000c01100029001800000001001d00000000010104330000000001010433000000000101004b000015d90000613d0000001601000029000000000201041a001a00000002001d0000000d0120006c0000195a0000613d0000001a0300002900000001013000390000001602000029000000000012041b00000000003004350000001701000029000000200010043f000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000000101041a00000d1101100198000020a80000c13d0000001a0100002900000000001004350000001701000029000000200010043f000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000000101041a00000d1101100198000020a80000c13d0000001c0100002900000000001004350000000301000039000000200010043f000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000000201041a0000000102200039000000000021041b0000001a0100002900000000001004350000001701000029000000200010043f000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000000201041a00000d17022001970000001c06000029000000000262019f000000000021041b000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d18011001c70000800d02000039000000040300003900000db00400004100000000050000190000001a07000029342f34250000040f0000000101200190000028fd0000613d00000013010000290000000001010433000000190110006c000027710000a13d00000018010000290000000001010433001c00000001001d0000001a0100002900000000001004350000001701000029000000200010043f000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000000101041a00000d11011001980000215e0000613d0000001a0100002900000000001004350000000601000039000000200010043f000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b001500000001001d0000001c010000290000000021010434001200000002001d001800000001001d00000d150110009c000011330000213d0000001501000029000000000101041a000000010210019000000001021002700000007f0320018f000000000302c019001400000003001d0000001f0230008c00000000020000190000000102002039000000000121013f000000010110019000000c540000c13d0000001401000029000000200110008c00001fbe0000413d00000015010000290000000000100435000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d16011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d00000018030000290000001f023000390000000502200270000000200330008c0000000002004019000000000301043b00000014010000290000001f01100039000000050110027000000000011300190000000002230019000000000312004b00001fbe0000813d000000000002041b0000000102200039000000000312004b00001fba0000413d00000018010000290000001f0110008c00001fea0000a13d00000015010000290000000000100435000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d16011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d00000018030000290000001b033001800000002002000039000000000101043b00001fdb0000613d000000200200003900000000040000190000001c052000290000000005050433000000000051041b000000200220003900000001011000390000002004400039000000000534004b00001fd30000413d000000180330006c00001fe60000813d00000018030000290000000303300210000000f80330018f0000000d0330024f0000000d0330014f0000001c022000290000000002020433000000000232016f000000000021041b0000001801000029000000010110021000000001011001bf00001ff60000013d000000180100006b000000000100001900001fef0000613d00000012010000290000000001010433000000180400002900000003024002100000000d0220024f0000000d0220014f000000000121016f0000000102400210000000000121019f0000001502000029000000000012041b000000400100043d0000001a020000290000000000210435000000000200041400000d0d0320009c00000d0d04000041000000000204801900000d0d0310009c00000000010480190000004001100210000000c002200210000000000112019f00000d16011001c70000800d020000390000000103000039001c00000003001d00000db104000041342f34250000040f0000000101200190000028fd0000613d000000400100043d001800000001001d00000d8a0110009c000011330000213d0000001803000029000000e001300039000000400010043f00000060023000390000006401000039001500000001001d001200000002001d000000000012043500000080023000390000001601000029001100000002001d00000000001204350000004002300039000f00000002001d00000000001204350000001c010000290000000002130436000000c001300039001400000001001d0000000000010435000000a001300039001000000001001d0000000000010435000e00000002001d00000000000204350000001a0100002900000000001004350000001001000039000000200010043f000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d00000018020000290000000002020433000000000101043b000000000021041b0000000e0200002900000000020204330000000103100039000000000023041b0000000f0200002900000000020204330000000203100039000000000023041b000000120200002900000000020204330000000303100039000000000023041b000000110200002900000000020204330000000403100039000000000023041b0000000502100039000001000300008a000000000402041a000000000334016f00000010040000290000000004040433000000ff0440018f000000000343019f000000000032041b000000060110003900000014020000290000000002020433000000000021041b000000400100043d000000600210003900000015030000290000000000320435000000800210003900000016030000290000000000320435000000400210003900000000003204350000001c020000290000000002210436000000c0031000390000000000030435000000a00310003900000000000304350000000000020435000000000200041400000d0d0320009c00000d0d04000041000000000204801900000d0d0310009c00000000010480190000004001100210000000c002200210000000000112019f00000d78011001c70000800d02000039000000020300003900000d79040000410000001a05000029342f34250000040f0000000101200190000028fd0000613d0000001902000029001900010020003d000000800100043d000000190210006b00001ef80000413d000011180000013d00000001010003670000002402100370000000000202043b0000001203000029000000000303041a000000000323004b000027710000a13d000000120300002900000000003004350000004403100370000000000303043b0000000a422000c900000d8602200041000000000202041a000000000223004b000020ac0000813d000000400100043d000000440210003900000d9403000041000000000032043500000024021000390000001603000039000010120000013d000000400100043d000000440210003900000dd803000041000000000032043500000024021000390000001703000039000010120000013d0000001a0200006b000020b40000c13d000000400100043d000000640210003900000d7a030000410000000000320435000000440210003900000d7b03000041000000000032043500000024021000390000002503000039000000e00000013d000000400100043d000000440210003900000daf030000410000216f0000013d0000006402100370000000000202043b000000000202004b000021680000c13d000000400100043d000000440210003900000d93030000410000216f0000013d0000004401100370000000000101043b00000000001004350000001001000039000000200010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d0000000e02000039000000000202041a000000000101043b001900000001001d0000000501100039001800000001001d000000000101041a000000ff0110018f000000000121004b000021570000813d00000001010003670000006402100370000000000202043b0000001904000029000000000024041b0000008402100370000000000202043b0000000103400039000000000023041b000000a402100370000000000202043b0000000203400039000000000023041b000000c402100370000000000202043b0000000303400039000000000023041b0000000403400039000000e404100370000000000404043b000000000043041b0000001c030000290000000503300039000000000503041a0000001a04500029000000000554004b0000000005000019000000010500403900000001055001900000195a0000c13d000000000043041b0000001c030000290000000704300039000000000304041a000000000532004b000020f30000a13d000000000024041b00000000030200190000004401100370000000000101043b0000001c050000290000000802500039000000000402041a000000000205041a342f320a0000040f0000001c020000290000000902200039000000000012041b00000001020003670000002401200370000000000301043b000000400100043d00000000033104360000006404200370000000000404043b00000000004304350000008403200370000000000303043b00000040041000390000000000340435000000a403200370000000000303043b00000060041000390000000000340435000000c403200370000000000303043b00000080041000390000000000340435000000e403200370000000000303043b000000a004100039000000000034043500000d0d0400004100000d0d0310009c00000000010480190000004402200370000000000602043b000000000200041400000d0d0320009c00000000020480190000004001100210000000c002200210000000000112019f00000d76011001c70000800d02000039000000030300003900000d77040000410000001b05000029342f34250000040f0000000101200190000028fd0000613d0000000101000367000000e402100370000000c403100370000000a404100370000000840610037000000064071003700000004401100370000000000501043b000000000107043b000000000606043b000000000404043b000000000303043b000000000202043b0000001807000029000000000707041a00000019080000290000000608800039000000000808041a000000400900043d000000c00a90003900000000008a0435000000ff0770018f000000a0089000390000000000780435000000800790003900000000002704350000006002900039000000000032043500000040029000390000000000420435000000200290003900000000006204350000000000190435000000000100041400000d0d0210009c00000d0d03000041000000000103801900000d0d0290009c00000000090380190000004002900210000000c001100210000000000121019f00000d78011001c70000800d02000039000000020300003900000d7904000041000015b30000013d000000400100043d000000440210003900000de803000041000000000032043500000024021000390000001303000039000010120000013d000000400100043d000000640210003900000db2030000410000000000320435000000440210003900000db303000041000000000032043500000024021000390000002e03000039000000e00000013d000000a402100370000000000202043b000000000202004b000022080000c13d000000400100043d000000440210003900000d9203000041000000000032043500000024021000390000001c03000039000010120000013d000001000100008a000000000112016f0000001b0200002900000000001204350000001c0100006b000000200200003900000000020060190000003f01200039000000200200008a000000000221016f0000001401200029000000000221004b0000000002000019000000010200403900000d150310009c000011330000213d0000000102200190000011330000c13d000000400010043f000000150100002900000014020000290000000000210435000000170500002900000d8601500041000000000101041a00000019040000290000004002400039000000000012043500000da201500041000000000101041a0000006002400039000000000012043500000da101500041000000000101041a0000008002400039000000000012043500000da001500041000000000101041a000000a002400039001b00000002001d000000000012043500000d8301500041000000000101041a0000000802100270000000ff0220018f000000e0034000390000000000230435000000ff011001900000000001000019000000010100c039000000c002400039000000000012043500000d9f01500041000000000101041a0000010002400039001c00000002001d0000000000120435000001200140003900000d9e02500041000000000202041a000000000021043500000da301500041000000000101041a000000ff0110018f000000030210008c000011760000813d000000190200002900000140022000390000000000120435000000160100002900000000001004350000001001000039001900000001001d000000200010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000400200043d00000d8a0320009c000011330000213d000000000101043b000000e003200039000000400030043f000000000301041a00000000033204360000000104100039000000000404041a00000000004304350000000203100039000000000303041a0000004004200039001400000004001d00000000003404350000000303100039000000000303041a0000006004200039001500000004001d00000000003404350000000403100039000000000303041a000000800420003900000000003404350000000503100039000000000303041a000000ff0330018f000000a0042000390000000000340435000000c0022000390000000601100039000000000101041a00000000001204350000001a010000290000000301100039000000000101041a001700000001001d00000d8401000041000000000010043900000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d85011001c70000800b02000039342f342a0000040f0000000102200190000027700000613d000000000101043b000000170210006c0000195a0000413d000000170110006a0000001b0200002900000000030204330000000202300270000000000421004b000011180000413d000000030330008c000023970000213d00000d9901000041000000000010043500000012010000290000195d0000013d000000c402100370000000000202043b000000000202004b000022100000c13d000000400100043d000000440210003900000d910300004100001ef00000013d000000e401100370000000000101043b000000000101004b0000224c0000c13d000000400100043d000000440210003900000d900300004100001bc90000013d0000001a0100006b0000000001000019000000010100c039000000400200043d001900000002001d00000da50220009c000011330000213d00000019030000290000002002300039000000400020043f00000000000304350000000101100190000022f30000613d00000015010000290000014001100039001200000001001d0000000001010433000000020210008c000011760000213d00000002021001bf000000020220008c000025870000c13d000000400100043d001b00000001001d0000000b01000039001100000001001d000000000201041a000000150100002900000080011000390000000001010433001500000001001d000d00000002001d000000000112004b000024380000413d0000000901000039000c00000001001d000000000201041a00000ddb010000410000001b030000290000000000130435000000040130003900000000030004100000000000310435000000000100041400000d1102200197000000040320008c000023f50000c13d0000000003000031000000200130008c00000000040300190000002004008039000024240000013d0000000e01000039001600000001001d000000000101041a001500000001001d000000000101004b000022e70000613d001700000000001d001900000000001d0000001601000029000000000101041a000000190110006c000027710000a13d00000016010000290000000000100435000000190100002900000d8701100041000000000201041a000000010320019000000001042002700000007f0540018f000000000504c019001c00000005001d0000001f0450008c00000000040000190000000104002039000000000442013f000000010440019000000c540000c13d000000400400043d001800000004001d001b00200040003d000000000303004b000022830000613d0000000000100435000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d16011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d0000001c0200006b000022870000613d000000000101043b00000000020000190000001b03200029000000000401041a0000000000430435000000010110003900000020022000390000001c0320006c0000227b0000413d000022870000013d000001000100008a000000000112016f0000001b02000029000000000012043500000018030000290000001c0100002900000000001304350000003f011000390000001a0210017f0000000001320019000000000221004b0000000002000019000000010200403900000d150310009c000011330000213d0000000102200190000011330000c13d000000400010043f0000001b0200002900000d0d0120009c00000d0d04000041000000000204801900000040012002100000001802000029000000000202043300000d0d0320009c00000000020480190000006002200210000000000112019f000000000200041400000d0d0320009c0000000002048019000000c002200210000000000112019f00000d18011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000400200043d0000002003200039000000000101043b001c00000001001d000000800100043d000000000401004b000022b90000613d00000000040000190000000005340019000000a006400039000000000606043300000000006504350000002004400039000000000514004b000022b20000413d0000000004310019000000000004043500000000001204350000003f011000390000001a0410017f0000000001240019000000000441004b0000000004000019000000010400403900000d150510009c000011330000213d0000000104400190000011330000c13d000000400010043f00000d0d0130009c00000d0d0400004100000000030480190000004001300210000000000202043300000d0d0320009c00000000020480190000006002200210000000000112019f000000000200041400000d0d0320009c0000000002048019000000c002200210000000000112019f00000d18011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b0000001c0110006b000024510000613d0000001701000029000000ff0110008c0000195a0000613d00000017010000290000000101100039001900000001001d000000ff0210018f001700000002001d000000150120006c000022540000413d000000400100043d000000440210003900000d8f0300004100000cf90000013d000000400100043d001900000001001d00000da50110009c000011330000213d00000019020000290000002001200039000000400010043f00000000000204350000000c01000039000000000101041a001b00110010002d0000001b0110006b0000000001000019000000010100403900000001011001900000195a0000c13d000000160100002900000000001004350000001401000039000000200010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b0000001b02000029000000000021041b0000001501000029001201400010003d001a00000000001d001b00000000001d000028060000013d0000001801000029000000000010043500000d0d03000041000000000100041400000d0d0210009c0000000001038019000000c00110021000000d16011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b001900000001001d001600000000001d0000232a0000013d000000180100002900000001011001bf0000001902000029000000000012041b00000016030000290000000b0130008c001600010030003d001900010020003d0000247a0000813d00000017010000290000000012010434001700000001001d001c00000002001d0000000021020434001500000002001d001a00000001001d00000d150110009c000011330000213d0000001901000029000000000101041a000000010210019000000001021002700000007f0320018f000000000302c019001800000003001d0000001f0230008c00000000020000190000000102002039000000000121013f000000010110019000000c540000c13d0000001801000029000000200110008c0000235f0000413d00000019010000290000000000100435000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d16011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d0000001a030000290000001f023000390000000502200270000000200330008c0000000002004019000000000301043b00000018010000290000001f01100039000000050110027000000000011300190000000002230019000000000312004b0000235f0000813d000000000002041b0000000102200039000000000312004b0000235b0000413d0000001a020000290000001f0120008c00180001002002180000238a0000a13d00000019010000290000000000100435000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d16011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000200200008a0000001a032001800000002002000039000000000101043b0000237d0000613d000000200200003900000000040000190000001c052000290000000005050433000000000051041b000000200220003900000001011000390000002004400039000000000534004b000023750000413d0000001a0330006c000023210000813d0000001a030000290000000303300210000000f80330018f000000010400008a000000000334022f000000000343013f0000001c022000290000000002020433000000000232016f000000000021041b000023210000013d0000001a0100006b00000000010000190000238f0000613d000000150100002900000000010104330000001a020000290000000302200210000000010300008a000000000223022f000000000232013f000000000121016f00000018011001af000023230000013d00000000132100d90000001401000029000000000201043300000000413200a9000000000402004b000023a00000613d00000000422100d9000000000232004b0000195a0000c13d0000001c02000029000000000402043300000000523400a9000000000504004b000023a80000613d00000000544200d9000000000334004b0000195a0000c13d00000002011002700000001a0400002900000008064000390000000003040019000000000406041a0000000001140049000000000441004b00000000040000190000000104002039000000000404004b000000000100c019000000000016041b00000002012002700000000702300039000000000402041a0000000003140049000000000143004b00000000010000190000000101002039000000000101004b000000000300c019001c00000003001d000000000032041b000000000406041a00000016010000290000001802000029342f320a0000040f0000001a020000290000000902200039001b00000002001d000000000012041b000000150200002900000000020204330000001c0220006b000023df0000813d000000160100002900000000001004350000001901000029000000200010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b00000003011000390000001c02000029000000000021041b0000001b01000029000000000101041a000000400200043d000000200320003900000000001304350000001c01000029000000000012043500000d0d01000041000000000300041400000d0d0430009c000000000301801900000d0d0420009c00000000020180190000004001200210000000c002300210000000000112019f00000d73011001c70000800d02000039000000040300003900000d8d04000041000000130500002900000016060000290000001807000029000011150000013d00000d0d0300004100000d0d0410009c00000000010380190000001b0500002900000d0d0450009c00000000030540190000004003300210000000c001100210000000000131019f00000d9a011001c7342f342a0000040f0000000003010019000000600330027000000d0d03300197000000200430008c000000000403001900000020040080390000001f0540018f0000000506400272000024120000613d000000000700001900000005087002100000001b09800029000000000881034f000000000808043b00000000008904350000000107700039000000000867004b0000240a0000413d000000000705004b000024210000613d0000000506600210000000000761034f0000001b066000290000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000000000003001f0000000102200190000024800000613d0000001f01400039000000600110018f0000001b04100029000000000214004b00000000020000190000000102004039001a00000004001d00000d150440009c000011330000213d0000000102200190000011330000c13d0000001a02000029000000400020043f000000200230008c000028fd0000413d0000001b020000290000000002020433000000150220006c001b001a0000002d0000249d0000813d0000001b0400002900000020014000390000000d0200002900000000002104350000001501000029000000000014043500000d0d01000041000000000200041400000d0d0320009c000000000201801900000d0d0340009c00000000040180190000004001400210000000c002200210000000000112019f00000d73011001c70000800d02000039000000030300003900000dde0400004100000013050000290000001c06000029342f34250000040f0000000101200190000025830000c13d000028fd0000013d00000024010000390000000101100367000000000101043b0000001202000029000000000202041a000000000212004b000027710000a13d000000120200002900000000002004350000000a211000c900000d8801100041342f317e0000040f0000000902000039000000000202041a000000000300041000000d1103300197001a00000001001d0000006001100039001800000001001d0000000001010433000000400500043d000000240450003900000000003404350000004403500039000000000013043500000d89010000410000000000150435000000130100002900000d1101100197001c00000005001d00000004035000390000000000130435000000000100041400000d1102200197000000040320008c000024ef0000c13d0000000003000031000000200130008c000000000403001900000020040080390000251e0000013d0000001b0100006b000025480000c13d000000400100043d000000440210003900000d29030000410000216f0000013d000000400200043d0000001f0430018f00000005053002720000248d0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000024850000413d000000000604004b0000249c0000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f0000000000150435000015310000013d0000000c02000029000000000202041a0000001a0600002900000024046000390000001505000029000000000054043500000ddc040000410000000000460435000000040460003900000013050000290000000000540435000000000400041400000d1102200197000000040520008c000024dd0000613d00000d0d0100004100000d0d0340009c00000000040180190000001a0500002900000d0d0350009c00000000010540190000004001100210000000c003400210000000000113019f00000ddd011001c7342f34250000040f0000000003010019000000600330027000000d0d03300197000000200430008c000000000403001900000020040080390000001f0540018f0000000506400272000024c90000613d000000000700001900000005087002100000001a09800029000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000024c10000413d000000000705004b000024d80000613d0000000506600210000000000761034f0000001a066000290000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000000000003001f00000001022001900000255f0000613d0000001f01400039000000600110018f0000001a0110002900000d150210009c000011330000213d000000400010043f000000200230008c000028fd0000413d0000001a020000290000000002020433000000000302004b0000000003000019000000010300c039000000000332004b000028fd0000c13d000000000202004b0000257c0000c13d000000440210003900000d8e030000410000216f0000013d00000d0d0300004100000d0d0410009c00000000010380190000001c0500002900000d0d0450009c00000000030540190000004003300210000000c001100210000000000131019f00000d2b011001c7342f34250000040f0000000003010019000000600330027000000d0d03300197000000200430008c000000000403001900000020040080390000001f0540018f00000005064002720000250c0000613d000000000700001900000005087002100000001c09800029000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000025040000413d000000000705004b0000251b0000613d0000000506600210000000000761034f0000001c066000290000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000000000003001f0000000102200190000025970000613d0000001f01400039000000600110018f0000001c02100029000000000112004b00000000010000190000000101004039001b00000002001d00000d150220009c000011330000213d0000000101100190000011330000c13d0000001b01000029000000400010043f000000200130008c000028fd0000413d0000001c010000290000000001010433000000000201004b0000000002000019000000010200c039000000000221004b000028fd0000c13d000000000101004b000025b40000c13d0000001b03000029000000440130003900000d8e02000041000000000021043500000024013000390000001c02000039000000000021043500000d2a01000041000000000013043500000004013000390000002002000039000000000021043500000d0d0100004100000d0d0230009c0000000003018019000000400130021000000d2b011001c700003431000104300000000901000039000000000201041a00000d17022001970000001b05000029000000000252019f000000000021041b00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d18011001c70000800d02000039000000020300003900000d2704000041342f34250000040f0000000101200190000028fd0000613d00000020010000390000010000100443000001200000044300000d2801000041000034300001042e000000400200043d0000001f0430018f00000005053002720000256c0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000025640000413d000000000604004b0000257b0000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f0000000000150435000015310000013d0000001101000029000000000101041a000000150210006c0000195a0000413d000000150110006a0000001102000029000000000012041b00000012010000290000000001010433000000020210008c000011760000213d001a00010000003d000000010110008a000000010110008c001b00000000001d00000000010000190000280a0000213d0000000f01000039001b00000001001d000000000101041a001a00000001001d000000000101004b0000272a0000c13d000000400100043d000000440210003900000ddf030000410000100f0000013d000000400200043d0000001f0430018f0000000505300272000025a40000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b0000259c0000413d000000000604004b000025b30000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f0000000000150435000015310000013d000000180100002900000000020104330000000b01000039000000000301041a0000000002230019000000000332004b0000000003000019000000010300403900000001033001900000195a0000c13d000000000021041b0000001a01000029000000a0011000390000000001010433001c00100010002d0000001c0110006b0000000001000019000000010100403900000001011001900000195a0000c13d0000001b0100002900000d8a0110009c000011330000213d0000001b04000029000000e001400039000000400010043f00000001010003670000006402100370000000000202043b00000000032404360000008402100370000000000202043b001700000003001d0000000000230435000000a402100370000000000202043b0000004003400039001500000003001d0000000000230435000000c402100370000000000202043b0000006003400039001200000003001d0000000000230435000000e402100370000000000202043b000000c0054000390000001c03000029001600000005001d00000000003504350000008003400039000f00000003001d000000000023043500000004011003700000001902000029000000ff0220018f000000a003400039001800000002001d001900000003001d0000000000230435000000000101043b00000000001004350000001001000039000000200010043f00000d0d03000041000000000100041400000d0d0210009c0000000001038019000000c00110021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d0000001b020000290000000002020433000000000101043b000000000021041b000000170200002900000000020204330000000103100039000000000023041b000000150200002900000000020204330000000203100039000000000023041b000000120200002900000000020204330000000303100039000000000023041b0000000f0200002900000000020204330000000403100039000000000023041b00000005021000390017010000000092000000000302041a000000170330017f00000019040000290000000004040433000000ff0440018f000000000343019f000000000032041b000000060110003900000016020000290000000002020433000000000021041b0000001a01000029000001200410003900000001030003670000000401300370000000000101043b0000002402300370000000000202043b000000c403300370000000000303043b001900000004001d0000000004040433342f320a0000040f000000130200002900000000002004350000001202000039000000200020043f001b00000001001d000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000400200043d001a00000002001d00000d8b0220009c000011330000213d000000190200002900000000020204330000001a060000290000014003600039000000400030043f00000001030003670000002404300370000000000404043b00000000084604360000000404300370000000000404043b00000080076000390000001c05000029000f00000007001d000000000057043500000060076000390000001005000029000e00000007001d000000000057043500000040076000390000001305000029000b00000007001d0000000000570435000c00000008001d0000000000480435000000c403300370000000c004600039001200000004001d0000000000040435000000a004600039000d00000004001d0000000000040435000000000303043b00000120056000390000001b04000029001600000005001d00000000004504350000010004600039001500000004001d0000000000240435000000e002600039001000000002001d0000000000320435000000000201041a001900000002001d00000d150220009c000011330000213d00000019020000290000000102200039000000000021041b000000000010043500000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d16011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d00000019020000290000000a322000c9000000000101043b00000000012100190000001a020000290000000002020433000000000021041b0000000c0200002900000000020204330000000103100039000000000023041b0000000202100039000000000302041a00000d17033001970000000b04000029000000000404043300000d1104400197000000000343019f000000000032041b0000000e0200002900000000020204330000000303100039000000000023041b0000000f0200002900000000020204330000000403100039000000000023041b0000000d0200002900000000020204330000000503100039000000000023041b0000000602100039000000000302041a000000170330017f00000012040000290000000004040433000000000404004b000000010330c1bf000000000032041b000000100200002900000000020204330000000703100039000000000023041b000000150200002900000000020204330000000803100039000000000023041b000000090110003900000016020000290000000002020433000000000021041b0000000c01000039000000000101041a001a001c0010002d0000001a0110006b0000000001000019000000010100403900000001011001900000195a0000c13d00000014010000290000000101100367000000000101043b00000000001004350000001101000029000000200010043f00000d0d03000041000000000100041400000d0d0210009c0000000001038019000000c00110021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b0000001a02000029000000000021041b000000400100043d0000001c02000029000000000021043500000001020003670000000403200370000000000603043b0000002402200370000000000702043b000000000200041400000d0d0320009c00000d0d04000041000000000204801900000d0d0310009c00000000010480190000004001100210000000c002200210000000000112019f00000d16011001c70000800d02000039000000040300003900000d8c040000410000001305000029342f34250000040f0000000101200190000028fd0000613d00000001010003670000000402100370000000000502043b0000006402100370000000000202043b0000008403100370000000000303043b000000a404100370000000000404043b000000c406100370000000000606043b000000e401100370000000000101043b000000400700043d000000c0087000390000001c090000290000000000980435000000a0087000390000001809000029000000000098043500000080087000390000000000180435000000600170003900000000006104350000004001700039000000000041043500000020017000390000000000310435000000000027043500000d0d03000041000000000100041400000d0d0210009c000000000103801900000d0d0270009c00000000070380190000004002700210000000c001100210000000000121019f00000d78011001c70000800d02000039000000020300003900000d7904000041342f34250000040f0000000101200190000028fd0000613d0000000101000367000000c402100370000000000202043b000000400300043d00000020043000390000001b05000029000000000054043500000000002304350000000402100370000000000602043b0000002401100370000000000701043b000000000100041400000d0d0210009c00000d0d04000041000000000104801900000d0d0230009c00000000030480190000004002300210000000c001100210000000000121019f00000d73011001c70000800d02000039000000040300003900000d8d040000410000001305000029000015b30000013d00000d8401000041000000000010043900000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d85011001c70000800b02000039342f342a0000040f0000000102200190000027700000613d000000000201043b0000001301200029000000000221004b0000000002000019000000010200403900000001022001900000195a0000c13d0000001a121000fa0000001b02000029000000000202041a000000000212004b000027710000a13d0000001b02000029000000000020043500000dc901100041000000000201041a000000010320019000000001042002700000007f0540018f000000000504c019001b00000005001d0000001f0450008c00000000040000190000000104002039000000000442013f000000010440019000000c540000c13d000000400400043d001900000004001d0000001b050000290000000004540436001a00000004001d000000000303004b000027750000613d000000000010043500000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d16011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d0000001b0200006b00000000020000190000277b0000613d000000000101043b00000000020000190000001a03200029000000000401041a0000000000430435000000010110003900000020022000390000001b0320006c000027680000413d0000277b0000013d000000000001042f00000d9901000041000000000010043500000032010000390000195d0000013d000000170120017f0000001a0200002900000000001204350000001b0100006b000000200200003900000000020060190000003f01200039000000200200008a000000000221016f0000001901200029000000000221004b0000000002000019000000010200403900000d150310009c000011330000213d0000000102200190000011330000c13d000000400010043f0000000a01000039001500000001001d000000000201041a000000010100008a001b00000002001d000000000112004b0000195a0000613d0000001b0300002900000001013000390000001502000029000000000012041b00000013010000290000000002030019342f303f0000040f0000001b010000290000001902000029342f30ba0000040f000000400100043d001100000001001d00000d8a0110009c000011330000213d0000001103000029000000e001300039000000400010043f00000060023000390000006401000039000d00000001001d000b00000002001d000000000012043500000080023000390000001501000029000a00000002001d00000000001204350000004002300039000800000002001d00000000001204350000000101000039001a00000001001d0000000002130436000000c001300039000c00000001001d0000000000010435000000a001300039000900000001001d0000000000010435000700000002001d00000000000204350000001b0100002900000000001004350000001401000029000000200010043f00000d0d03000041000000000100041400000d0d0210009c0000000001038019000000c00110021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d00000011020000290000000002020433000000000101043b000000000021041b000000070200002900000000020204330000000103100039000000000023041b000000080200002900000000020204330000000203100039000000000023041b0000000b0200002900000000020204330000000303100039000000000023041b0000000a0200002900000000020204330000000403100039000000000023041b0000000502100039000000000302041a000000170330017f00000009040000290000000004040433000000ff0440018f000000000343019f000000000032041b00000006011000390000000c020000290000000002020433000000000021041b000000400100043d00000060021000390000000d03000029000000000032043500000080021000390000001503000029000000000032043500000040021000390000000000320435000000c0021000390000000000020435000000a0021000390000000000020435000000200210003900000000000204350000001a020000290000000000210435000000000200041400000d0d0320009c00000d0d04000041000000000204801900000d0d0310009c00000000010480190000004001100210000000c002200210000000000112019f00000d78011001c70000800d02000039000000020300003900000d79040000410000001b05000029342f34250000040f0000000101200190000028fd0000613d00000012010000290000000001010433000000020210008c000011760000213d000000400200043d001500000002001d00000dd10220009c000011330000213d0000000e02000029000000000202041a0000001505000029000000a003500039000000400030043f00000080045000390000001903000029001400000004001d000000000034043500000060045000390000001b03000029001100000004001d00000000003404350000004003500039000d00000003001d00000000001304350000002001500039000c00000001001d00000000002104350000001a010000290000000000150435000000130100002900000000001004350000001301000039000000200010043f00000d0d03000041000000000100041400000d0d0210009c0000000001038019000000c00110021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b0000001c020000290000000000200435000000200010043f000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d73011001c70000801002000039342f342a0000040f0000000102200190000028fd0000613d000000000101043b000000000201041a000000170220017f00000015030000290000000003030433000000000303004b000000010220c1bf000000000021041b0000000c0200002900000000020204330000000103100039000000000023041b0000000d020000290000000002020433000000020320008c000011760000213d0000000203100039000000000403041a000000170440017f000000000224019f000000000023041b000000110200002900000000020204330000000303100039000000000023041b000000040110003900000014020000290000000002020433342f2e440000040f0000000f010000290000000101100039000000000201041a000000650300008a000000000332004b0000195a0000213d0000006402200039001c00000002001d000000000021041b0000000f04000029000000000104041a000003e8321000c9000000000301004b001700020040003d0000286d0000c13d0000001c0220006b000028870000413d000028750000013d00000000431200d9000003e80330008c0000195a0000c13d0000001c0220006b000028870000413d000000010200008a000000000221004b0000195a0000613d00000001011000390000000f02000029000000000012041b0000001701000029000000000201041a0000000b0100008a000000000312004b0000195a0000213d0000000a022000390000001703000029000000000023041b0000001002000029000000000202041a000000000112004b0000195a0000213d0000000a012000390000001002000029000000000012041b0000000f010000290000000601100039000000000001041b00000012010000290000000003010433000000020130008c000011760000213d0000000e01000029000000000201041a000000400100043d0000006004100039000000a005000039000000000054043500000040041000390000001b050000290000000000540435000000200410003900000000003404350000001a03000029000000000031043500000019030000290000000003030433000000a0041000390000000000340435000000c004100039000000000503004b000028aa0000613d000000000500001900000000064500190000002005500039000000190750002900000000070704330000000000760435000000000635004b000028a30000413d0000000004430019000000000004043500000080041000390000000000240435000000df02300039000000200300008a000000000232016f00000d0d0400004100000d0d0310009c0000000001048019000000400110021000000d0d0320009c00000000020480190000006002200210000000000112019f000000000200041400000d0d0320009c0000000002048019000000c002200210000000000112019f00000d18011001c70000800d02000039000000040300003900000de004000041000000130500002900000016060000290000001807000029342f34250000040f0000000101200190000028fd0000613d0000000f050000290000000501500039000000000101041a0000001702000029000000000202041a0000001003000029000000000303041a000000000405041a0000000405500039000000000505041a000000400600043d00000080076000390000000000570435000000600560003900000000003504350000004003600039000000000023043500000020026000390000001c030000290000000000320435000000ff0110018f000000a00260003900000000001204350000000000460435000000c0016000390000000000010435000000000100041400000d0d0210009c00000d0d03000041000000000103801900000d0d0260009c00000000060380190000004002600210000000c001100210000000000121019f00000d78011001c70000800d02000039000000020300003900000d79040000410000001605000029342f34250000040f0000000101200190000028fd0000613d000000400300043d001c00000003001d0000002001300039000000400200003900000000002104350000001b01000029000000000013043500000040023000390000001901000029000009980000013d0000000001000019000034310001043000000000030104330000000002320436000000000403004b0000290b0000613d000000000400001900000000052400190000002004400039000000000614001900000000060604330000000000650435000000000534004b000029040000413d000000000123001900000000000104350000001f01300039000000200300008a000000000131016f0000000001120019000000000001042d0000002003000039000000000331043600000000040204330000000000430435000000400510003900000005034002100000000003350019000000000604004b000029610000613d00000140060000390000000007000019000029490000013d000000000b89001900000000000b0435000000400ba00039000000000b0b043300000d110bb00197000000400c3000390000000000bc0435000000600aa00039000000000a0a043300000000cb0a0434000000600d3000390000000000bd0435000000000b0c0433000000800c3000390000000000bc0435000000400ba00039000000000b0b0433000000a00c3000390000000000bc0435000000600ba00039000000000b0b0433000000c00c3000390000000000bc0435000000800ba00039000000000b0b0433000000e00c3000390000000000bc0435000000a00ba00039000000000b0b0433000000ff0bb0018f000001000c3000390000000000bc04350000012003300039000000c00aa00039000000000a0a04330000000000a304350000001f03900039000000200900008a000000000393016f00000000038300190000000107700039000000000847004b000029610000813d0000000008130049000000400880008a00000000058504360000002002200039000000000a02043300000000980a04340000000008830436000000000b0904330000000000680435000001400830003900000000090b043300000000009804350000016008300039000000000c09004b0000291e0000613d000000000c000019000000000d8c0019000000200cc00039000000000ebc0019000000000e0e04330000000000ed0435000000000d9c004b000029590000413d0000291e0000013d0000000001030019000000000001042d000000040110008a00000d7f020000410000005f0310008c0000000003000019000000000302201900000d7f01100197000000000401004b000000000200801900000d7f0110009c000000000203c019000000000102004b0000297b0000613d00000001030003670000000401300370000000000101043b00000d110210009c0000297b0000213d0000002402300370000000000202043b00000d110420009c0000297b0000213d0000004403300370000000000303043b000000000001042d0000000001000019000034310001043000000dfb0210009c000029820000813d0000002001100039000000400010043f000000000001042d00000d990100004100000000001004350000004101000039000000040010043f00000d9a0100004100003431000104300000001f02200039000000200300008a000000000232016f0000000001120019000000000221004b0000000002000019000000010200403900000d150310009c000029950000213d0000000102200190000029950000c13d000000400010043f000000000001042d00000d990100004100000000001004350000004101000039000000040010043f00000d9a010000410000343100010430000000000401001900000dfc0120009c000029ce0000813d0000003f01200039000000200500008a000000000551016f000000400100043d0000000005510019000000000615004b0000000006000019000000010600403900000d150750009c000029ce0000213d0000000106600190000029ce0000c13d000000400050043f00000000052104360000000006420019000000000336004b000029d40000213d0000001f0320018f00000001044003670000000506200272000029bc0000613d000000000700001900000005087002100000000009850019000000000884034f000000000808043b00000000008904350000000107700039000000000867004b000029b40000413d000000000703004b000029cb0000613d0000000506600210000000000464034f00000000066500190000000303300210000000000706043300000000073701cf000000000737022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000373019f000000000036043500000000022500190000000000020435000000000001042d00000d990100004100000000001004350000004101000039000000040010043f00000d9a010000410000343100010430000000000100001900003431000104300000000f02000039000000000302041a000000000313004b000029de0000a13d000000000020043500000dc9011000410000000002000019000000000001042d00000d990100004100000000001004350000003201000039000000040010043f00000d9a0100004100003431000104300000000e02000039000000000302041a000000000313004b000029ec0000a13d000000000020043500000d87011000410000000002000019000000000001042d00000d990100004100000000001004350000003201000039000000040010043f00000d9a0100004100003431000104300003000000000002000000000202004b00002a360000c13d000000000201041a000000010320019000000001042002700000007f0640018f000000000604c0190000001f0460008c00000000040000190000000104002039000000010440018f000000000443004b00002a3b0000c13d000000400500043d0000000004650436000000000303004b00002a220000613d000100000004001d000200000006001d000300000005001d000000000010043500000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d16011001c70000801002000039342f342a0000040f000000010220019000002a450000613d0000000206000029000000000206004b00000000020000190000000305000029000000010700002900002a280000613d000000000101043b00000000020000190000000003270019000000000401041a000000000043043500000001011000390000002002200039000000000362004b00002a1a0000413d00002a280000013d000001000100008a000000000112016f0000000000140435000000000106004b000000200200003900000000020060190000003f01200039000000200200008a000000000221016f0000000001520019000000000221004b0000000002000019000000010200403900000d150310009c00002a3f0000213d000000010220019000002a3f0000c13d000000400010043f0000000001050019000000000001042d00000d99010000410000000000100435000000040000043f00000d9a01000041000034310001043000000d99010000410000000000100435000000220100003900002a420000013d00000d990100004100000000001004350000004101000039000000040010043f00000d9a010000410000343100010430000000000100001900003431000104300001000000000002000000000301041a000100000002001d000000000223004b00002a5c0000a13d000000000010043500000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d16011001c70000801002000039342f342a0000040f000000010220019000002a620000613d00000001020000290000000a322000c9000000000101043b0000000001210019000000000001042d00000d990100004100000000001004350000003201000039000000040010043f00000d9a0100004100003431000104300000000001000019000034310001043000000d110110019800002a760000613d00000000001004350000000301000039000000200010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f000000010220019000002a8b0000613d000000000101043b000000000101041a000000000001042d000000400100043d000000640210003900000de4030000410000000000320435000000440210003900000de303000041000000000032043500000024021000390000002903000039000000000032043500000d2a02000041000000000021043500000004021000390000002003000039000000000032043500000d0d0200004100000d0d0310009c0000000001028019000000400110021000000d7c011001c700003431000104300000000001000019000034310001043000000000001004350000000201000039000000200010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f000000010220019000002a9f0000613d000000000101043b000000000101041a00000d110110019800002aa10000613d000000000001042d00000000010000190000343100010430000000400100043d000000440210003900000df303000041000000000032043500000024021000390000001803000039000000000032043500000d2a02000041000000000021043500000004021000390000002003000039000000000032043500000d0d0200004100000d0d0310009c0000000001028019000000400110021000000d2b011001c700003431000104300001000000000002000100000001001d00000000001004350000000201000039000000200010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f000000010220019000002ad80000613d000000000101043b000000000101041a00000d110110019800002ada0000613d000000010100002900000000001004350000000401000039000000200010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f000000010220019000002ad80000613d000000000101043b000000000101041a00000d1101100197000000000001042d00000000010000190000343100010430000000400100043d000000440210003900000df303000041000000000032043500000024021000390000001803000039000000000032043500000d2a02000041000000000021043500000004021000390000002003000039000000000032043500000d0d0200004100000d0d0310009c0000000001028019000000400110021000000d2b011001c70000343100010430000000000101004b00002aef0000613d000000000001042d000000400100043d000000640210003900000dfd030000410000000000320435000000440210003900000dfe03000041000000000032043500000024021000390000002d03000039000000000032043500000d2a02000041000000000021043500000004021000390000002003000039000000000032043500000d0d0200004100000d0d0310009c0000000001028019000000400110021000000d7c011001c700003431000104300009000000000002000100000004001d000300000002001d000600000001001d000700000003001d00000000003004350000000201000039000500000001001d000000200010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f0000000003000411000200000003001d000000010220019000002c800000613d000000000101043b000000000101041a00000d110110019800002c820000613d000000020200002900040d110020019b000000040210006b00002b640000613d00000000001004350000000501000039000000200010043f00000d0d03000041000000000100041400000d0d0210009c0000000001038019000000c00110021000000d73011001c70000801002000039342f342a0000040f000000010220019000002c800000613d000000000101043b00000004020000290000000000200435000000200010043f000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d73011001c70000801002000039342f342a0000040f000000010220019000002c800000613d000000000101043b000000000101041a000000ff0110019000002b640000c13d000000070100002900000000001004350000000501000029000000200010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f000000010220019000002c800000613d000000000101043b000000000101041a00000d110110019800002c820000613d000000070100002900000000001004350000000401000039000000200010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f000000010220019000002c800000613d000000000101043b000000000101041a00000d1101100197000000040110006c00002cfa0000c13d000000070100002900000000001004350000000501000029000000200010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f000000010220019000002c800000613d000000000101043b000000000101041a00000d110210019800002c820000613d000000060100002900000d1101100197000000000112004b00002c940000c13d000600000002001d000000030100002900040d110010019c00002c9e0000613d000000070100002900000000001004350000000501000029000000200010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f000000010220019000002c800000613d000000000101043b000000000101041a00000d1101100198000000060200002900002c820000613d000000000121004b00002c940000c13d000000070100002900000000001004350000000401000039000000200010043f00000d0d03000041000000000100041400000d0d0210009c0000000001038019000000c00110021000000d73011001c70000801002000039342f342a0000040f000000010220019000002c800000613d000000000101043b000000000201041a00000d1702200197000000000021041b000000060100002900000000001004350000000301000039000000200010043f000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d73011001c70000801002000039342f342a0000040f000000010220019000002c800000613d000000000101043b000000000201041a000000010220008a000000000021041b0000000401000029000000000010043500000d0d03000041000000000100041400000d0d0210009c0000000001038019000000c00110021000000d73011001c70000801002000039342f342a0000040f000000010220019000002c800000613d000000000101043b000000000201041a0000000102200039000000000021041b000000070100002900000000001004350000000501000029000000200010043f000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d73011001c70000801002000039342f342a0000040f000000010220019000002c800000613d000000000101043b000000000201041a00000d17022001970000000406000029000000000262019f000000000021041b00000d0d03000041000000000100041400000d0d0210009c0000000001038019000000c00110021000000d18011001c70000800d02000039000000040300003900000db00400004100000006050000290000000707000029342f34250000040f000000010120019000002c800000613d0000000001000415000500000001001d00000e0101000041000000000010043900000003010000290000000400100443000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000e02011001c70000800202000039342f342a0000040f000000010220019000002cb30000613d000000000101043b000000000101004b000000010600002900002c260000613d000000400a00043d0000006401a00039000000800700003900000000007104350000004401a00039000000070200002900000000002104350000002401a000390000000602000029000000000021043500000e030100004100000000001a04350000000401a000390000000202000029000000000021043500000000010604330000008402a000390000000000120435000000a402a00039000000000301004b00002c170000613d000000000300001900000000042300190000002003300039000000000563001900000000050504330000000000540435000000000413004b00002c100000413d0000000002210019000000000002043500000000060004140000000402000029000000040320008c00002c2a0000c13d0000000005000415000000090550008a00000005055002100000000003000031000000200130008c00000000040300190000002004008039000900000000001d00002c670000013d00000000010004150000000501100069000000000100000200002c7f0000013d000600000007001d0000001f01100039000000200300008a000000000131016f00000d0d0300004100000d0d04a0009c000000000403001900000000040a40190000004004400210000000a40110003900000d0d0510009c00000000010380190000006001100210000000000141019f00000d0d0460009c0000000006038019000000c003600210000000000113019f00070000000a001d342f34250000040f000000070a0000290000000003010019000000600330027000000d0d03300197000000200430008c000000000403001900000020040080390000001f0540018f000000050640027200002c510000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00002c490000413d000000000705004b00002c600000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000000000003001f0000000005000415000000080550008a0000000505500210000800000000001d000000010220019000002cb40000613d0000001f01400039000000600210018f0000000001a20019000000000221004b0000000002000019000000010200403900000d150410009c00002cf40000213d000000010220019000002cf40000c13d000000400010043f000000200130008c00002c800000413d00000000010a043300000df502100197000000000221004b00002c800000c13d0000000502500270000000000201001f00000000020004150000000502200069000000000200000200000e030110009c00002ce30000c13d000000000001042d00000000010000190000343100010430000000400100043d000000440210003900000df303000041000000000032043500000024021000390000001803000039000000000032043500000d2a02000041000000000021043500000004021000390000002003000039000000000032043500000d0d0200004100000d0d0310009c0000000001028019000000400110021000000d2b011001c70000343100010430000000400100043d000000640210003900000dff030000410000000000320435000000440210003900000e000300004100000000003204350000002402100039000000250300003900002ca70000013d000000400100043d000000640210003900000e04030000410000000000320435000000440210003900000e0503000041000000000032043500000024021000390000002403000039000000000032043500000d2a02000041000000000021043500000004021000390000002003000039000000000032043500000d0d0200004100000d0d0310009c0000000001028019000000400110021000000d7c011001c70000343100010430000000000001042f0000006002000039000000000403004b00002ce00000613d0000003f0230003900000d1004200197000000400200043d0000000004420019000000000524004b0000000005000019000000010500403900000d150640009c00002cf40000213d000000010550019000002cf40000c13d000000400040043f0000001f0430018f0000000008320436000000050330027200002cd00000613d000000000500001900000005065002100000000007680019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00002cc80000413d000600000008001d000000000504004b00002ce00000613d0000000503300210000000000131034f00000006033000290000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000000001020433000000000201004b00002d040000c13d000000400200043d000700000002001d00000d2a0100004100000000001204350000000401200039342f2d090000040f0000000704000029000000000141004900000d0d0200004100000d0d0310009c000000000102801900000d0d0340009c000000000402801900000040024002100000006001100210000000000121019f000034310001043000000d990100004100000000001004350000004101000039000000040010043f00000d9a010000410000343100010430000000400100043d000000640210003900000dfd030000410000000000320435000000440210003900000dfe03000041000000000032043500000024021000390000002d0300003900002ca70000013d00000d0d0200004100000d0d0310009c0000000001028019000000060400002900002cee0000013d000000600210003900000e06030000410000000000320435000000400210003900000e07030000410000000000320435000000200210003900000032030000390000000000320435000000200200003900000000002104350000008001100039000000000001042d0003000000000002000300000001001d000200000002001d00000000002004350000000201000039000100000001001d000000200010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f000000010220019000002d750000613d000000000101043b000000000101041a00000d110210019800002d770000613d0000000101000039000000030300002900030d110030019b000000030320006b00002d740000613d00000000002004350000000501000039000000200010043f00000d0d03000041000000000100041400000d0d0210009c0000000001038019000000c00110021000000d73011001c70000801002000039342f342a0000040f000000010220019000002d750000613d000000000101043b00000003020000290000000000200435000000200010043f000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d73011001c70000801002000039342f342a0000040f000000010220019000002d750000613d000000000101043b000000000101041a000000ff0110019000002d740000c13d000000020100002900000000001004350000000101000029000000200010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f000000010220019000002d750000613d000000000101043b000000000101041a00000d110110019800002d770000613d000000020100002900000000001004350000000401000039000000200010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f000000010220019000002d750000613d000000000101043b000000000101041a00000d1101100197000000030110006c00000000010000190000000101006039000000000001042d00000000010000190000343100010430000000400100043d000000440210003900000df303000041000000000032043500000024021000390000001803000039000000000032043500000d2a02000041000000000021043500000004021000390000002003000039000000000032043500000d0d0200004100000d0d0310009c0000000001028019000000400110021000000d2b011001c700003431000104300004000000000002000100000002001d000300000001001d000400000003001d00000000003004350000000201000039000200000001001d000000200010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f000000010220019000002e110000613d000000000101043b000000000101041a00000d110210019800002e130000613d000000030100002900000d1101100197000000000112004b00002e250000c13d000300000002001d000000010100002900010d110010019c00002e2f0000613d000000040100002900000000001004350000000201000029000000200010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f000000010220019000002e110000613d000000000101043b000000000101041a00000d1101100198000000030200002900002e130000613d000000000121004b00002e250000c13d000000040100002900000000001004350000000401000039000000200010043f00000d0d03000041000000000100041400000d0d0210009c0000000001038019000000c00110021000000d73011001c70000801002000039342f342a0000040f000000010220019000002e110000613d000000000101043b000000000201041a00000d1702200197000000000021041b000000030100002900000000001004350000000301000039000000200010043f000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d73011001c70000801002000039342f342a0000040f000000010220019000002e110000613d000000000101043b000000000201041a000000010220008a000000000021041b0000000101000029000000000010043500000d0d03000041000000000100041400000d0d0210009c0000000001038019000000c00110021000000d73011001c70000801002000039342f342a0000040f000000010220019000002e110000613d000000000101043b000000000201041a0000000102200039000000000021041b000000040100002900000000001004350000000201000029000000200010043f000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d73011001c70000801002000039342f342a0000040f000000010220019000002e110000613d000000000101043b000000000201041a00000d17022001970000000106000029000000000262019f000000000021041b00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d18011001c70000800d02000039000000040300003900000db00400004100000003050000290000000407000029342f34250000040f000000010120019000002e110000613d000000000001042d00000000010000190000343100010430000000400100043d000000440210003900000df303000041000000000032043500000024021000390000001803000039000000000032043500000d2a02000041000000000021043500000004021000390000002003000039000000000032043500000d0d0200004100000d0d0310009c0000000001028019000000400110021000000d2b011001c70000343100010430000000400100043d000000640210003900000dff030000410000000000320435000000440210003900000e000300004100000000003204350000002402100039000000250300003900002e380000013d000000400100043d000000640210003900000e04030000410000000000320435000000440210003900000e0503000041000000000032043500000024021000390000002403000039000000000032043500000d2a02000041000000000021043500000004021000390000002003000039000000000032043500000d0d0200004100000d0d0310009c0000000001028019000000400110021000000d7c011001c7000034310001043000050000000000020000000004010019000000006502043400000dfc0150009c00002eb30000813d000000000104041a000000010310019000000001011002700000007f0710018f000000000701c0190000001f0170008c00000000010000190000000101002039000000010110018f000000000113004b00002eb70000c13d000300000002001d000000200170008c000500000004001d000400000005001d00002e790000413d000100000007001d000200000006001d000000000040043500000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d16011001c70000801002000039342f342a0000040f000000010220019000002ebd0000613d00000004050000290000001f025000390000000502200270000000200350008c0000000002004019000000000301043b00000001010000290000001f01100039000000050110027000000000011300190000000002230019000000000312004b0000000504000029000000020600002900002e790000813d000000000002041b0000000102200039000000000312004b00002e750000413d0000001f0150008c00002ea60000a13d000000000040043500000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d16011001c70000801002000039342f342a0000040f000000010220019000002ebd0000613d000000200200008a000000040600002900000000032601700000002002000039000000000101043b000000030700002900002e970000613d0000002002000039000000000400001900000000057200190000000005050433000000000051041b000000200220003900000001011000390000002004400039000000000534004b00002e8f0000413d000000000363004b00002ea20000813d0000000303600210000000f80330018f000000010400008a000000000334022f000000000343013f00000000027200190000000002020433000000000232016f000000000021041b000000010160021000000001011001bf000000050400002900002eb10000013d000000000105004b000000000100001900002eaa0000613d00000000010604330000000302500210000000010300008a000000000223022f000000000232013f000000000121016f0000000102500210000000000121019f000000000014041b000000000001042d00000d99010000410000000000100435000000410100003900002eba0000013d00000d990100004100000000001004350000002201000039000000040010043f00000d9a0100004100003431000104300000000001000019000034310001043000070000000000020000000004010019000000000102004b00002f690000c13d0000000021030434000000000014041b0000000005020433000000008705043400000dfc0170009c00002f6e0000813d0000000106400039000000000106041a000000010210019000000001011002700000007f0910018f000000000901c0190000001f0190008c00000000010000190000000101002039000000010110018f000000000112004b00002f720000c13d000300000005001d000000200190008c000700000004001d000600000003001d000500000006001d000400000007001d00002efe0000413d000100000009001d000200000008001d000000000060043500000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d16011001c70000801002000039342f342a0000040f000000010220019000002f760000613d00000004070000290000001f027000390000000502200270000000200370008c0000000002004019000000000301043b00000001010000290000001f01100039000000050110027000000000011300190000000002230019000000000312004b000000070400002900000006030000290000000506000029000000020800002900002efe0000813d000000000002041b0000000102200039000000000512004b00002efa0000413d0000001f0170008c00002f2d0000a13d000000000060043500000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d16011001c70000801002000039342f342a0000040f000000010220019000002f760000613d000000200200008a000000040700002900000000032701700000002002000039000000000101043b000000030800002900002f1c0000613d0000002002000039000000000400001900000000058200190000000005050433000000000051041b000000200220003900000001011000390000002004400039000000000534004b00002f140000413d000000000373004b000000050600002900002f280000813d0000000303700210000000f80330018f000000010400008a000000000334022f000000000343013f00000000028200190000000002020433000000000232016f000000000021041b000000010170021000000001011001bf0000000704000029000000060300002900002f380000013d000000000107004b000000000100001900002f310000613d00000000010804330000000302700210000000010500008a000000000225022f000000000252013f000000000121016f0000000102700210000000000121019f000000000016041b000000400130003900000000010104330000000202400039000000000012041b000000600130003900000000010104330000000302400039000000000012041b000000800130003900000000010104330000000402400039000000000012041b000000a00130003900000000010104330000000502400039000000000012041b000000c0013000390000000001010433000000000101004b0000000601400039000000000201041a00000e0802200197000000010220c1bf000000e005300039000000000505043300000008055002100000ff000550018f000000000225019f000000000021041b000001000130003900000000010104330000000702400039000000000012041b000000080140003900000120023000390000000002020433000000000021041b00000140013000390000000001010433000000030210008c00002f780000813d0000000902400039000000000302041a000001000400008a000000000343016f000000000113019f000000000012041b000000000001042d00000d99010000410000000000100435000000040000043f00000d9a01000041000034310001043000000d99010000410000000000100435000000410100003900002f7b0000013d00000d99010000410000000000100435000000220100003900002f7b0000013d0000000001000019000034310001043000000d990100004100000000001004350000002101000039000000040010043f00000d9a010000410000343100010430000700000000000200000000040100190000001102000039000000000102041a00000dfc0310009c0000302f0000813d0000000103100039000000000032041b00000000002004350000000a151000c900000d88015000410000000032040434000000000021041b00000d9d065000410000000003030433000000008703043400000d150170009c0000302f0000213d000000000106041a000000010210019000000001011002700000007f0910018f000000000901c0190000001f0190008c00000000010000190000000101002039000000010110018f000000000112004b000030330000c13d000300000003001d000000200190008c000700000004001d000600000005001d000500000006001d000400000007001d00002fc40000413d000100000009001d000200000008001d000000000060043500000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d16011001c70000801002000039342f342a0000040f0000000102200190000030370000613d00000004070000290000001f027000390000000502200270000000200370008c0000000002004019000000000301043b00000001010000290000001f01100039000000050110027000000000011300190000000002230019000000000312004b000000070400002900000006050000290000000506000029000000020800002900002fc40000813d000000000002041b0000000102200039000000000312004b00002fc00000413d0000001f0170008c00002ff30000a13d000000000060043500000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d16011001c70000801002000039342f342a0000040f0000000102200190000030370000613d000000200200008a000000040700002900000000032701700000002002000039000000000101043b000000030800002900002fe20000613d0000002002000039000000000400001900000000058200190000000005050433000000000051041b000000200220003900000001011000390000002004400039000000000534004b00002fda0000413d000000000373004b000000050600002900002fee0000813d0000000303700210000000f80330018f000000010400008a000000000334022f000000000343013f00000000028200190000000002020433000000000232016f000000000021041b000000010170021000000001011001bf0000000704000029000000060500002900002ffe0000013d000000000107004b000000000100001900002ff70000613d00000000010804330000000302700210000000010300008a000000000223022f000000000232013f000000000121016f0000000102700210000000000121019f000000000016041b0000004001400039000000000101043300000d8602500041000000000012041b0000006001400039000000000101043300000da202500041000000000012041b0000008001400039000000000101043300000da102500041000000000012041b000000a001400039000000000101043300000da002500041000000000012041b000000c0014000390000000001010433000000000101004b00000d8301500041000000000201041a00000e0802200197000000010220c1bf000000e003400039000000000303043300000008033002100000ff000330018f000000000232019f000000000021041b0000010001400039000000000101043300000d9f02500041000000000012041b00000d9e0150004100000120024000390000000002020433000000000021041b00000140014000390000000001010433000000030210008c000030390000813d00000da302500041000000000302041a000001000400008a000000000343016f000000000113019f000000000012041b000000000001042d00000d9901000041000000000010043500000041010000390000303c0000013d00000d9901000041000000000010043500000022010000390000303c0000013d0000000001000019000034310001043000000d990100004100000000001004350000002101000039000000040010043f00000d9a010000410000343100010430000300000000000200010d110010019c000030a90000613d000300000002001d00000000002004350000000201000039000200000001001d000000200010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f00000001022001900000309b0000613d000000000101043b000000000101041a00000d11011001980000309d0000c13d000000030100002900000000001004350000000201000029000000200010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f00000001022001900000309b0000613d000000000101043b000000000101041a00000d11011001980000309d0000c13d000000010100002900000000001004350000000301000039000000200010043f00000d0d03000041000000000100041400000d0d0210009c0000000001038019000000c00110021000000d73011001c70000801002000039342f342a0000040f00000001022001900000309b0000613d000000000101043b000000000201041a0000000102200039000000000021041b000000030100002900000000001004350000000201000029000000200010043f000000000100041400000d0d0210009c00000d0d01008041000000c00110021000000d73011001c70000801002000039342f342a0000040f00000001022001900000309b0000613d000000000101043b000000000201041a00000d17022001970000000106000029000000000262019f000000000021041b00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d18011001c70000800d02000039000000040300003900000db00400004100000000050000190000000307000029342f34250000040f00000001012001900000309b0000613d000000000001042d00000000010000190000343100010430000000400100043d000000440210003900000daf03000041000000000032043500000024021000390000001c03000039000000000032043500000d2a02000041000000000021043500000004021000390000002003000039000030b30000013d000000400100043d000000440210003900000e0903000041000000000032043500000d2a0200004100000000002104350000002402100039000000200300003900000000003204350000000402100039000000000032043500000d0d0200004100000d0d0310009c0000000001028019000000400110021000000d2b011001c700003431000104300006000000000002000500000002001d000600000001001d00000000001004350000000201000039000000200010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f00000001022001900000315d0000613d000000000101043b000000000101041a00000d11011001980000315f0000613d000000060100002900000000001004350000000601000039000000200010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f00000001022001900000315d0000613d000000000401043b0000000501000029000000006501043400000dfc0150009c000031740000813d000000000104041a000000010210019000000001011002700000007f0310018f000000000301c0190000001f0130008c00000000010000190000000101002039000000010110018f000000000112004b000031780000c13d000000200130008c000400000004001d000300000005001d000031100000413d000100000003001d000200000006001d000000000040043500000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d16011001c70000801002000039342f342a0000040f00000001022001900000315d0000613d00000003050000290000001f025000390000000502200270000000200350008c0000000002004019000000000301043b00000001010000290000001f01100039000000050110027000000000011300190000000002230019000000000312004b00000004040000290000000206000029000031100000813d000000000002041b0000000102200039000000000312004b0000310c0000413d0000001f0150008c0000313d0000a13d000000000040043500000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d16011001c70000801002000039342f342a0000040f00000001022001900000315d0000613d000000200200008a000000030700002900000000032701700000002002000039000000000101043b00000005060000290000312e0000613d0000002002000039000000000400001900000000056200190000000005050433000000000051041b000000200220003900000001011000390000002004400039000000000534004b000031260000413d000000000373004b000031390000813d0000000303700210000000f80330018f000000010400008a000000000334022f000000000343013f00000000026200190000000002020433000000000232016f000000000021041b000000010170021000000001011001bf0000000404000029000031480000013d000000000105004b0000000001000019000031410000613d00000000010604330000000302500210000000010300008a000000000223022f000000000232013f000000000121016f0000000102500210000000000121019f000000000014041b000000400100043d0000000602000029000000000021043500000d0d02000041000000000300041400000d0d0430009c000000000302801900000d0d0410009c00000000010280190000004001100210000000c002300210000000000112019f00000d16011001c70000800d02000039000000010300003900000db104000041342f34250000040f00000001012001900000315d0000613d000000000001042d00000000010000190000343100010430000000400100043d000000640210003900000db2030000410000000000320435000000440210003900000db303000041000000000032043500000024021000390000002e03000039000000000032043500000d2a02000041000000000021043500000004021000390000002003000039000000000032043500000d0d0200004100000d0d0310009c0000000001028019000000400110021000000d7c011001c7000034310001043000000d9901000041000000000010043500000041010000390000317b0000013d00000d990100004100000000001004350000002201000039000000040010043f00000d9a01000041000034310001043000060000000000020000000006010019000000400500043d00000e0a0150009c000031fa0000813d0000016001500039000000400010043f000000000106041a00000000071504360000000101600039000000000201041a000000010320019000000001042002700000007f0940018f000000000904c0190000001f0490008c00000000040000190000000104002039000000010440018f000000000443004b000031fe0000c13d000000400800043d0000000004980436000000000303004b000031bb0000613d000100000004001d000200000009001d000300000008001d000400000007001d000500000006001d000600000005001d000000000010043500000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d16011001c70000801002000039342f342a0000040f0000000102200190000032080000613d0000000209000029000000000209004b00000000020000190000000605000029000000050600002900000004070000290000000308000029000000010a000029000031c10000613d000000000101043b000000000200001900000000032a0019000000000401041a000000000043043500000001011000390000002002200039000000000392004b000031b30000413d000031c10000013d000001000100008a000000000112016f0000000000140435000000000109004b000000200200003900000000020060190000003f01200039000000200200008a000000000221016f0000000001820019000000000221004b0000000002000019000000010200403900000d150310009c000031fa0000213d0000000102200190000031fa0000c13d000000400010043f00000000008704350000000201600039000000000101041a000000400250003900000000001204350000000301600039000000000101041a000000600250003900000000001204350000000401600039000000000101041a000000800250003900000000001204350000000501600039000000000101041a000000a00250003900000000001204350000000601600039000000000101041a0000000802100270000000ff0220018f000000e0035000390000000000230435000000ff011001900000000001000019000000010100c039000000c00250003900000000001204350000000701600039000000000101041a0000010002500039000000000012043500000120015000390000000802600039000000000202041a00000000002104350000000901600039000000000101041a000000ff0110018f000000030210008c000032020000813d000001400250003900000000001204350000000001050019000000000001042d00000d990100004100000000001004350000004101000039000032050000013d00000d990100004100000000001004350000002201000039000032050000013d00000d990100004100000000001004350000002101000039000000040010043f00000d9a01000041000034310001043000000000010000190000343100010430000c00000000000200000000070100190000001105000039000000000105041a000000000121004b000033760000a13d000500000005001d000000400800043d00000e0a0180009c000033700000813d0000000a192000c90000016001800039000000400010043f00000d8801900041000000000101041a000000000a18043600000d9d01900041000000000201041a000000010620019000000001052002700000007f0c50018f000000000c05c0190000001f05c0008c00000000050000190000000105002039000000010550018f000000000556004b0000337a0000c13d000000400b00043d000000000dcb0436000000000506004b000a00000004001d000900000003001d000032520000613d00010000000d001d00020000000c001d00030000000b001d00040000000a001d000600000009001d000700000008001d000800000007001d000000000010043500000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d16011001c70000801002000039342f342a0000040f0000000102200190000033740000613d000000020c00002900000000020c004b0000000002000019000000080700002900000007080000290000000609000029000000040a000029000000030b000029000000010d000029000032580000613d000000000101043b000000000200001900000000062d0019000000000501041a0000000000560435000000010110003900000020022000390000000005c2004b0000324a0000413d000032580000013d000001000100008a000000000112016f00000000001d043500000000010c004b000000200200003900000000020060190000003f01200039000000200200008a000000000221016f0000000001b20019000000000221004b0000000002000019000000010200403900000d150510009c000033700000213d0000000102200190000033700000c13d000000400010043f0000000000ba043500000d8601900041000000000101041a0000004002800039000000000012043500000da201900041000000000101041a0000006002800039000000000012043500000da101900041000000000101041a0000008002800039000000000012043500000da001900041000000000101041a000000a002800039000000000012043500000d8301900041000000000101041a000000ff021001900000000002000019000000010200c039000000c00380003900000000002304350000000801100270000000ff0110018f000000e002800039000700000002001d000000000012043500000d9f01900041000000000101041a0000010002800039000800000002001d0000000000120435000001200280003900000d9e01900041000000000101041a000600000002001d000000000012043500000da301900041000000000101041a000000ff0110018f000000030210008c0000337e0000813d0000014002800039000000000012043500000000007004350000001001000039000000200010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f0000000102200190000033740000613d000000400500043d00000d8a0250009c0000000a0d0000290000000908000029000033700000213d000000000601043b000000e001500039000000400010043f000000000106041a00000000011504360000000102600039000000000202041a00000000002104350000000201600039000000000201041a000000400150003900000000002104350000000301600039000000000101041a000000600450003900000000001404350000000401600039000000000301041a000000800150003900000000003104350000000503600039000000000303041a000000ff0730018f000000a0035000390000000000730435000000c0055000390000000606600039000000000606041a0000000000650435000000000508004b000032d20000613d00000000658200a9000000000602004b000032c90000613d00000000622500d9000000000282004b0000336c0000c13d0000000002040433000000000402004b000033820000613d00000000422500d900000000050004150000000c0550008a0000000505500210000c00000000001d000032d70000013d00000000050004150000000b0550008a0000000505500210000b00000000001d00000000080404330000000504500270000000000408001f00000000040d004b000032dd0000c13d0000000604000029000000000d04043300000064542000c9000000000502004b000032e30000613d00000000522400d9000000640220008c0000336c0000c13d00000008020000290000000005020433000000010200008a000000000625004b0000336c0000613d00000064768000c9000000000708004b000032ee0000613d00000000878600d9000000640770008c0000336c0000c13d00000000022d004b0000336c0000613d00000001075000390000006402000039000000320850008c000032f80000a13d0000004602000039000000640550008c000032f80000213d000000550200003900000000497400d900000007040000290000000004040433000000ff0a40018f0000000003030433000000ff0b30018f0000000003ab004b0000000003000019000000010300c03900000000040b004b0000000004000019000000010400603900000000054301a00000000f07000039000000000700c01900000000030b004b000033270000613d00000000030a004b000033270000613d0000000a04000039000003e8030000390000000108b0008c000033120000c13d0000000208a0008c00000000080000190000332a0000613d0000000208b0008c000033170000c13d0000000108a0008c00000000080000190000332a0000613d0000000b08b0008c0000331c0000c13d0000000408a0008c00000000080000190000332a0000613d0000000b08a0015f000000040ab0015f00000000088a01a00000000008000019000000010800c03900000001088001900000000008000019000000010800c039000000000300c019000000000400c0190000332a0000013d00000001080000390000000003000019000000000400001900000023ba9000c900000023cba0011a0000000009b9004b0000336c0000c13d0000000109d0003900000000969600d900000023b96000c900000023cb90011a0000000006b6004b0000336c0000c13d0000000006a90019000000000996004b0000000009000019000000010900403900000001099001900000336c0000c13d00000000010104330000001ea91000c90000001eba90011a0000000001a1004b0000336c0000c13d0000000001690019000000000691004b0000000006000019000000010600403900000001066001900000336c0000c13d000000010900003900000064a67000c9000000010a5001900000334f0000c13d0000ffff0770018f0000ffff0960018f00000000977900d9000000640770008c0000000009000019000000010900c0390000000107900190000033540000613d000000010550015f00000001055001900000336c0000c13d0000000001160019000000000561004b0000000005000019000000010500403900000001055001900000336c0000c13d000000000508004b0000335f0000c13d00000000544300d9000000640440008c0000336c0000c13d000000000431004b0000336c0000413d0000000001310049000000643110011a00000000211200a9000000642110011a0000000d02000039000000000202041a000000000321004b00000000010280190000000a0210008c0000000a0100a039000000000001042d00000d990100004100000000001004350000000501000029000033850000013d00000d990100004100000000001004350000004101000039000033850000013d0000000001000019000034310001043000000d990100004100000000001004350000003201000039000033850000013d00000d990100004100000000001004350000002201000039000033850000013d00000d990100004100000000001004350000002101000039000033850000013d00000d990100004100000000001004350000001201000039000000040010043f00000d9a0100004100003431000104300003000000000002000300000001001d00000000001004350000000201000039000000200010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f0000000102200190000033f00000613d000000000101043b000000000101041a00000d1101100198000033f60000613d000000030100002900000000001004350000000601000039000000200010043f00000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d73011001c70000801002000039342f342a0000040f0000000102200190000033f00000613d000000000101043b000000000201041a000000010320019000000001042002700000007f0640018f000000000604c0190000001f0460008c00000000040000190000000104002039000000010440018f000000000443004b000034080000c13d000000400500043d0000000004650436000000000303004b000033d70000613d000100000004001d000200000006001d000300000005001d000000000010043500000d0d01000041000000000200041400000d0d0320009c0000000002018019000000c00120021000000d16011001c70000801002000039342f342a0000040f0000000102200190000033f00000613d0000000206000029000000000206004b000000000200001900000003050000290000000107000029000033dd0000613d000000000101043b00000000020000190000000003270019000000000401041a000000000043043500000001011000390000002002200039000000000362004b000033cf0000413d000033dd0000013d000001000100008a000000000112016f0000000000140435000000000106004b000000200200003900000000020060190000003f01200039000000200200008a000000000221016f0000000001520019000000000221004b0000000002000019000000010200403900000d150310009c000033f20000213d0000000102200190000033f20000c13d000000400010043f00000da50210009c000033f20000213d0000002002100039000000400020043f00000000000104350000000001050019000000000001042d0000000001000019000034310001043000000d9901000041000000000010043500000041010000390000340b0000013d000000400100043d000000440210003900000df303000041000000000032043500000024021000390000001803000039000000000032043500000d2a02000041000000000021043500000004021000390000002003000039000000000032043500000d0d0200004100000d0d0310009c0000000001028019000000400110021000000d2b011001c7000034310001043000000d990100004100000000001004350000002201000039000000040010043f00000d9a010000410000343100010430000000000001042f00000d0d0300004100000d0d0410009c0000000001038019000000400110021000000d0d0420009c00000000020380190000006002200210000000000112019f000000000200041400000d0d0420009c0000000002038019000000c002200210000000000112019f00000d18011001c70000801002000039342f342a0000040f0000000102200190000034230000613d000000000101043b000000000001042d0000000001000019000034310001043000003428002104210000000102000039000000000001042d0000000002000019000000000001042d0000342d002104230000000102000039000000000001042d0000000002000019000000000001042d0000342f00000432000034300001042e00003431000104300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000009fffffffffffffffffffffffffffffffffffffffffffffffff000000000000007f00000000000000000000000000000000000000000000000000000001ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffbf50656e6775696e57697a6172644e46540000000000000000000000000000000050574e4654000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff0200000000000000000000000000000000000020000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000008be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0000000000000000000000000000000000000000000000000fffffffffffffe7f4e6f6e65000000000000000000000000000000000000000000000000000000004e6563726f6d616e63657200000000000000000000000000000000000000000050616c6164696e00000000000000000000000000000000000000000000000000417263616e6973740000000000000000000000000000000000000000000000005079726f6d616e6365720000000000000000000000000000000000000000000046726f7374204d616765000000000000000000000000000000000000000000004368726f6e6f6d616e6365720000000000000000000000000000000000000000447275696400000000000000000000000000000000000000000000000000000047686f73740000000000000000000000000000000000000000000000000000005370656c6c626c616465000000000000000000000000000000000000000000004661652053756d6d6f6e6572000000000000000000000000000000000000000057697a6172640000000000000000000000000000000000000000000000000000f2e85f30a3ee58b43c07e017f75374e0be9165ef3a0a7bb639f350ffbea2996f0000000200000000000000000000000000000040000001000000000000000000496e76616c69642077697a61726420746f6b656e20616464726573730000000008c379a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000000000000000000000299cc7d8000000000000000000000000000000000000000000000000000000007968267600000000000000000000000000000000000000000000000000000000b98d323500000000000000000000000000000000000000000000000000000000e54f26ee00000000000000000000000000000000000000000000000000000000eacabe1300000000000000000000000000000000000000000000000000000000ee69a58400000000000000000000000000000000000000000000000000000000ee69a58500000000000000000000000000000000000000000000000000000000f2fde38b00000000000000000000000000000000000000000000000000000000eacabe1400000000000000000000000000000000000000000000000000000000edc2b82e00000000000000000000000000000000000000000000000000000000e54f26ef00000000000000000000000000000000000000000000000000000000e678728000000000000000000000000000000000000000000000000000000000e985e9c500000000000000000000000000000000000000000000000000000000e085f97f00000000000000000000000000000000000000000000000000000000e085f98000000000000000000000000000000000000000000000000000000000e37dd34c00000000000000000000000000000000000000000000000000000000e3cd1dcc00000000000000000000000000000000000000000000000000000000b98d323600000000000000000000000000000000000000000000000000000000c87b56dd00000000000000000000000000000000000000000000000000000000e0391b090000000000000000000000000000000000000000000000000000000095d89b4000000000000000000000000000000000000000000000000000000000a22cb46400000000000000000000000000000000000000000000000000000000a22cb46500000000000000000000000000000000000000000000000000000000b093a53700000000000000000000000000000000000000000000000000000000b88d4fde0000000000000000000000000000000000000000000000000000000095d89b41000000000000000000000000000000000000000000000000000000009d6fac6f000000000000000000000000000000000000000000000000000000009f4d5856000000000000000000000000000000000000000000000000000000007d31a5b1000000000000000000000000000000000000000000000000000000007d31a5b20000000000000000000000000000000000000000000000000000000080ea3de1000000000000000000000000000000000000000000000000000000008da5cb5b0000000000000000000000000000000000000000000000000000000079682677000000000000000000000000000000000000000000000000000000007c15b017000000000000000000000000000000000000000000000000000000007ca4b900000000000000000000000000000000000000000000000000000000003bb659a1000000000000000000000000000000000000000000000000000000006352211d000000000000000000000000000000000000000000000000000000006e99d52e00000000000000000000000000000000000000000000000000000000715018a500000000000000000000000000000000000000000000000000000000715018a60000000000000000000000000000000000000000000000000000000075794a3c000000000000000000000000000000000000000000000000000000006e99d52f0000000000000000000000000000000000000000000000000000000070a08231000000000000000000000000000000000000000000000000000000006352211e00000000000000000000000000000000000000000000000000000000638addaa0000000000000000000000000000000000000000000000000000000064ba144e000000000000000000000000000000000000000000000000000000004e08daaf000000000000000000000000000000000000000000000000000000004e08dab000000000000000000000000000000000000000000000000000000000555bb57c000000000000000000000000000000000000000000000000000000005b7a164c000000000000000000000000000000000000000000000000000000003bb659a20000000000000000000000000000000000000000000000000000000042842e0e000000000000000000000000000000000000000000000000000000004cafc9300000000000000000000000000000000000000000000000000000000013e4a6980000000000000000000000000000000000000000000000000000000022cc22420000000000000000000000000000000000000000000000000000000022cc22430000000000000000000000000000000000000000000000000000000023b872dd000000000000000000000000000000000000000000000000000000003b76594d0000000000000000000000000000000000000000000000000000000013e4a69900000000000000000000000000000000000000000000000000000000155dd5ee0000000000000000000000000000000000000000000000000000000018148f1b00000000000000000000000000000000000000000000000000000000095ea7b200000000000000000000000000000000000000000000000000000000095ea7b3000000000000000000000000000000000000000000000000000000000edfbba50000000000000000000000000000000000000000000000000000000010cc46a40000000000000000000000000000000000000000000000000000000001ffc9a70000000000000000000000000000000000000000000000000000000006fdde0300000000000000000000000000000000000000000000000000000000081812fc4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000840000008000000000000000000200000000000000000000000000000000000040000000000000000000000000496e76616c696420717565737420696e646578000000000000000000000000004e465420494420646f6573206e6f74206d61746368207175657374000000000002000000000000000000000000000000000000c0000000000000000000000000ce86400611dc2053ff2caf024579bf1d74b564730351f150b6afd6e47fa4642002000000000000000000000000000000000000e00000000000000000000000005bbba90cc47159a4c77062ba998464546a0a7354ac5f226cc5096d182c8a5d8268616e20300000000000000000000000000000000000000000000000000000005570677261646520706f696e7473206d757374206265206772656174657220740000000000000000000000000000000000000084000000000000000000000000496e76616c69642075736572206164647265737300000000000000000000000000000000000000000000000000000000000000640000008000000000000000008000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff00000000000000804e6f74204e4654206f776e65720000000000000000000000000000000000000031ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c6e796b89b91644bc98cd93958e4c9038275d622183e25ac5af08cc6b5d95539132020000020000000000000000000000000000000400000000000000000000000031ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c6abb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c6823b872dd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff1f000000000000000000000000000000000000000000000000fffffffffffffebfb01c6f111ccf2d738b45ffe57725d969f4a4e893a0777391d77fc2351b5f30542db4aab4d3ae84faf382e04999f0da1d1629beee26d0d302edc5caa9e402dc2857495a41524420746f6b656e207472616e73666572206661696c656400000000496e76616c696420636c617373206e616d6500000000000000000000000000004c75636b206d7573742062652067726561746572207468616e203000000000004865616c7468206d7573742062652067726561746572207468616e2030000000506f776572206d7573742062652067726561746572207468616e2030000000004c6576656c206d7573742062652067726561746572207468616e203000000000496e73756666696369656e7420666f6c6c6f77657273000000000000000000004e4654206f6e20636f6f6c646f776e00000000000000000000000000000000005175657374206e6f7420617661696c61626c65000000000000000000000000005265656e7472616e637947756172643a207265656e7472616e742063616c6c0000000000000000000000000000000000000000200000008000000000000000004e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000e000000080000000000000000031ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c6931ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c7031ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c6f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c6d31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c6c31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c6b31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c71000000000000000000000000000000000000000000000000ffffffffffffff7f000000000000000000000000000000000000000000000000ffffffffffffffdf17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c314552433732313a20617070726f766520746f2063616c6c6572000000000000000000000000000000000000000000000000000140000000000000000000000000b10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf602000000000000000000000000000000000000200000008000000000000000003b897fd6944545fcb6a5d5b058781d763169157f8559ca1a7f3276b981d09971436f6f6c646f776e20706572696f64206d7573742062652067726561746572207468616e20300000000000000000000000000000000000000000000000000000417272617973206d757374206861766520657175616c206c656e6774680000004552433732313a20746f6b656e20616c7265616479206d696e74656400000000ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3eff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce76578697374656e7420746f6b656e00000000000000000000000000000000000045524337323155524953746f726167653a2055524920736574206f66206e6f6e5552492063616e6e6f7420626520656d70747900000000000000000000000000496e76616c696420726563697069656e742061646472657373000000000000004174206c65617374206f6e65204e4654206d757374206265206d696e746564005accfa1db1add38db9944346372420ac2184016e63eca524c71334abee49d1ca4d617820737563636573732072617465206d757374206265206265747765656e203120616e64203130300000000000000000000000000000000000000000000051756573747320616c726561647920696e697469616c697a656400000000000042756720426f756e747920426c69747a0000000000000000000000000000000000000000000000000000000000000000000000000000043c33c19375648000000000000000000000000000000000000000000000000009bdaa3d398e00c000000200000000000000000000000000000000000160000000000000000000000000635a39b478d49e734a454e73050f7ac65079cc710fb74cda9108a140709c0d7dd796e63d4150d72252f21897bc5077f8a0bd5b8a155c70863722f042649eadc4000000000000000000000000000000000000000000000000fffffffffffffe9f4c6971756964697479204c61627972696e74680000000000000000000000000000000000000000000000000000000000000000000000185a29990fe301e00000000000000000000000000000000000000000000000000a968163f0a57b400000536861646f7720536c61790000000000000000000000000000000000000000004f7261636c6520547261696c00000000000000000000000000000000000000000000000000000000000000000000000000000000000030b453321fc603c0000000000000000000000000000000000000000000000000152d02c7e14af68000008d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8028d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac803be3e5c214ef2c73fbe0fbe05e26c635546169b1765d255d5b18880a72bcb07ed6c2073697a65206f66203530000000000000000000000000000000000000000043616e6e6f7420657863656564206d6178696d756d2072657761726420706f6f546f6b656e205552492061727261792063616e6e6f7420626520656d70747900000000000000000000000000000000000000000000000000fffffffffffffe1f000000000000000000000000000000000000000000000000fffffffffffffcbf000000000000000000000000000000000000000000000000ffffffffffffff5f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572543ba50a5eec5e6178218e364b1d0f396157b3c8fa278522c2cb7fd99407d474416d6f756e74206d7573742062652067726561746572207468616e20300000001db19898da3e04b432c70a1022b1f864e62184ad03b48c4e26a3b53f02d32aae4e465400000000000000000000000000000000000000000000000000000000004e6f206163746976652071756573747320666f756e6420666f72207468697320517565737420616c726561647920636f6d706c657465640000000000000000000200000000000000000000000000000000000080000000000000000000000000c322a0be4b85a96bc71504f0148ccc679ede41f28972724c42ec4f466915a6a270a0823100000000000000000000000000000000000000000000000000000000a9059cbb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044000000000000000000000000f5d5944ab876618fc95592a56e06f4e728bbdad22921b9b8d860c82172106c144e46542072657761726420706f6f6c20697320656d707479000000000000000025231a68ef8c0596ecda8dbe29ab3bdd0b73edc9fe032899758a06b90d7727ed6164790000000000000000000000000000000000000000000000000000000000416374697665207175657374206e6f7420666f756e64206f72206e6f742072654552433732313a2061646472657373207a65726f206973206e6f7420612076616c6964206f776e657200000000000000000000000000000000000000000000000000000000000000000000000000000000000044000000800000000000000000eaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d496e73756666696369656e742074726561737572792062616c616e6365000000496e76616c696420636c61737320696e646578000000000000000000000000005472616974732063616e6e6f7420657863656564203130300000000000000000496e76616c6964207175657374204944000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000416374697665207175657374206e6f7420666f756e64206f72206578706972654e465420646f6573206e6f7420657869737400000000000000000000000000006b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000004552433732313a20617070726f76652063616c6c6572206973206e6f7420746f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92572000000000000000000000000000000000000000000000000000000000000004552433732313a20617070726f76616c20746f2063757272656e74206f776e654552433732313a20696e76616c696420746f6b656e2049440000000000000000290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563ffffffff000000000000000000000000000000000000000000000000000000005b5e139effffffffffffffffffffffffffffffffffffffffffffffffffffffff80ac58cd000000000000000000000000000000000000000000000000000000005b5e139f0000000000000000000000000000000000000000000000000000000001ffc9a7000000000000000000000000000000000000000000000000000000004906490600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffe0000000000000000000000000000000000000000000000001000000000000000072206f7220617070726f766564000000000000000000000000000000000000004552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e656f776e65720000000000000000000000000000000000000000000000000000004552433732313a207472616e736665722066726f6d20696e636f7272656374201806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b830200000200000000000000000000000000000024000000000000000000000000150b7a020000000000000000000000000000000000000000000000000000000072657373000000000000000000000000000000000000000000000000000000004552433732313a207472616e7366657220746f20746865207a65726f2061646463656976657220696d706c656d656e74657200000000000000000000000000004552433732313a207472616e7366657220746f206e6f6e204552433732315265ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00004552433732313a206d696e7420746f20746865207a65726f2061646472657373000000000000000000000000000000000000000000000000fffffffffffffea0000000000000000000000000000000000000000000000000000000000000000087f5a00768d94a00a4578a2abfe42defa3a6acfd8d33026a0b059c68b55a4c5f
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.