More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 10,403,630 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Swap Compact | 50542013 | 14 secs ago | IN | 0 ETH | 0.00010954 | ||||
Swap | 50541959 | 1 min ago | IN | 0 ETH | 0.00001948 | ||||
Swap Compact | 50541958 | 1 min ago | IN | 0 ETH | 0.00001689 | ||||
Swap | 50541937 | 1 min ago | IN | 0 ETH | 0.00001501 | ||||
Swap | 50541915 | 2 mins ago | IN | 0 ETH | 0.00002574 | ||||
Swap Compact | 50541899 | 2 mins ago | IN | 0 ETH | 0.00002949 | ||||
Swap | 50541896 | 2 mins ago | IN | 0 ETH | 0.00004133 | ||||
Swap Compact | 50541874 | 2 mins ago | IN | 0 ETH | 0.000021 | ||||
Swap Compact | 50541859 | 3 mins ago | IN | 0 ETH | 0.00003052 | ||||
Swap Compact | 50541859 | 3 mins ago | IN | 0.02 ETH | 0.00000867 | ||||
Swap Compact | 50541839 | 3 mins ago | IN | 0 ETH | 0.0000283 | ||||
Swap Compact | 50541832 | 3 mins ago | IN | 0 ETH | 0.00004269 | ||||
Swap Compact | 50541824 | 3 mins ago | IN | 0 ETH | 0.00003573 | ||||
Swap Compact | 50541820 | 4 mins ago | IN | 0 ETH | 0.00001558 | ||||
Swap Compact | 50541793 | 4 mins ago | IN | 0 ETH | 0.00008515 | ||||
Swap Compact | 50541769 | 4 mins ago | IN | 0.738 ETH | 0.00002029 | ||||
Swap Multi Compa... | 50541754 | 5 mins ago | IN | 0 ETH | 0.0000181 | ||||
Swap Compact | 50541608 | 7 mins ago | IN | 0.0001 ETH | 0.00001859 | ||||
Swap Compact | 50541596 | 7 mins ago | IN | 0.01 ETH | 0.00001088 | ||||
Swap Compact | 50541574 | 8 mins ago | IN | 0.00001 ETH | 0.00001166 | ||||
Swap Compact | 50541552 | 8 mins ago | IN | 0 ETH | 0.00001959 | ||||
Swap Compact | 50541532 | 9 mins ago | IN | 0 ETH | 0.00001191 | ||||
Swap Compact | 50541518 | 9 mins ago | IN | 0 ETH | 0.00001829 | ||||
Swap Compact | 50541346 | 12 mins ago | IN | 0.0033 ETH | 0.00000944 | ||||
Swap Compact | 50541296 | 13 mins ago | IN | 0 ETH | 0.00001591 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
50541859 | 3 mins ago | 0.02 ETH | ||||
50541859 | 3 mins ago | 0.02 ETH | ||||
50541769 | 4 mins ago | 0.738 ETH | ||||
50541769 | 4 mins ago | 0.738 ETH | ||||
50541769 | 4 mins ago | 0.738 ETH | ||||
50541769 | 4 mins ago | 0.738 ETH | ||||
50541754 | 5 mins ago | 0.00090274 ETH | ||||
50541754 | 5 mins ago | 0.00000036 ETH | ||||
50541754 | 5 mins ago | 0.00090328 ETH | ||||
50541608 | 7 mins ago | 0.0001 ETH | ||||
50541608 | 7 mins ago | 0.0001 ETH | ||||
50541596 | 7 mins ago | 0.01 ETH | ||||
50541596 | 7 mins ago | 0.01 ETH | ||||
50541574 | 8 mins ago | 0.00001 ETH | ||||
50541574 | 8 mins ago | 0.00001 ETH | ||||
50541346 | 12 mins ago | 0.0033 ETH | ||||
50541346 | 12 mins ago | 0.0033 ETH | ||||
50541223 | 14 mins ago | 0.00070953 ETH | ||||
50541223 | 14 mins ago | 0.00070953 ETH | ||||
50540835 | 21 mins ago | 0.00001 ETH | ||||
50540835 | 21 mins ago | 0.00001 ETH | ||||
50540821 | 21 mins ago | 0.00022972 ETH | ||||
50540821 | 21 mins ago | 0.00022972 ETH | ||||
50540693 | 24 mins ago | 0.07777 ETH | ||||
50540693 | 24 mins ago | 0.07777 ETH |
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:
OdosRouterV2
Compiler Version
v0.8.8+commit.dddeac2f
ZkSolc Version
v1.3.10
Contract Source Code (Solidity)
/** *Submitted for verification at era.zksync.network on 2024-01-04 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.8; // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) /** * @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; } } // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol) /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. */ interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); } // OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol) /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return 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); } } } // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol) /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } function safePermit( IERC20Permit token, address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) internal { uint256 nonceBefore = token.nonces(owner); token.permit(owner, spender, value, deadline, v, r, s); uint256 nonceAfter = token.nonces(owner); require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed"); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) /** * @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); } // https://github.com/Uniswap/permit2 /// @title SignatureTransfer /// @notice Handles ERC20 token transfers through signature based actions /// @dev Requires user's token approval on the Permit2 contract interface ISignatureTransfer { /// @notice The token and amount details for a transfer signed in the permit transfer signature struct TokenPermissions { // ERC20 token address address token; // the maximum amount that can be spent uint256 amount; } /// @notice The signed permit message for a single token transfer struct PermitTransferFrom { TokenPermissions permitted; // a unique value for every token owner's signature to prevent signature replays uint256 nonce; // deadline on the permit signature uint256 deadline; } /// @notice Specifies the recipient address and amount for batched transfers. /// @dev Recipients and amounts correspond to the index of the signed token permissions array. /// @dev Reverts if the requested amount is greater than the permitted signed amount. struct SignatureTransferDetails { // recipient address address to; // spender requested amount uint256 requestedAmount; } /// @notice Used to reconstruct the signed permit message for multiple token transfers /// @dev Do not need to pass in spender address as it is required that it is msg.sender /// @dev Note that a user still signs over a spender address struct PermitBatchTransferFrom { // the tokens and corresponding amounts permitted for a transfer TokenPermissions[] permitted; // a unique value for every token owner's signature to prevent signature replays uint256 nonce; // deadline on the permit signature uint256 deadline; } /// @notice Transfers a token using a signed permit message /// @dev Reverts if the requested amount is greater than the permitted signed amount /// @param permit The permit data signed over by the owner /// @param owner The owner of the tokens to transfer /// @param transferDetails The spender's requested transfer details for the permitted token /// @param signature The signature to verify function permitTransferFrom( PermitTransferFrom memory permit, SignatureTransferDetails calldata transferDetails, address owner, bytes calldata signature ) external; /// @notice Transfers multiple tokens using a signed permit message /// @param permit The permit data signed over by the owner /// @param owner The owner of the tokens to transfer /// @param transferDetails Specifies the recipient and requested amount for the token transfer /// @param signature The signature to verify function permitTransferFrom( PermitBatchTransferFrom memory permit, SignatureTransferDetails[] calldata transferDetails, address owner, bytes calldata signature ) external; } // @dev interface for interacting with an Odos executor interface IOdosExecutor { function executePath ( bytes calldata bytecode, uint256[] memory inputAmount, address msgSender ) external payable; } /// @title Routing contract for Odos SOR /// @author Semiotic AI /// @notice Wrapper with security gaurentees around execution of arbitrary operations on user tokens contract OdosRouterV2 is Ownable { using SafeERC20 for IERC20; /// @dev The zero address is uniquely used to represent eth since it is already /// recognized as an invalid ERC20, and due to its gas efficiency address constant _ETH = address(0); /// @dev Address list where addresses can be cached for use when reading from storage is cheaper // than reading from calldata. addressListStart is the storage slot of the first dynamic array element uint256 private constant addressListStart = 80084422859880547211683076133703299733277748156566366325829078699459944778998; address[] public addressList; // @dev constants for managing referrals and fees uint256 public constant REFERRAL_WITH_FEE_THRESHOLD = 1 << 31; uint256 public constant FEE_DENOM = 1e18; // @dev fee taken on multi-input and multi-output swaps instead of positive slippage uint256 public swapMultiFee; /// @dev Contains all information needed to describe the input and output for a swap struct permit2Info { address contractAddress; uint256 nonce; uint256 deadline; bytes signature; } /// @dev Contains all information needed to describe the input and output for a swap struct swapTokenInfo { address inputToken; uint256 inputAmount; address inputReceiver; address outputToken; uint256 outputQuote; uint256 outputMin; address outputReceiver; } /// @dev Contains all information needed to describe an intput token for swapMulti struct inputTokenInfo { address tokenAddress; uint256 amountIn; address receiver; } /// @dev Contains all information needed to describe an output token for swapMulti struct outputTokenInfo { address tokenAddress; uint256 relativeValue; address receiver; } // @dev event for swapping one token for another event Swap( address sender, uint256 inputAmount, address inputToken, uint256 amountOut, address outputToken, int256 slippage, uint32 referralCode ); /// @dev event for swapping multiple input and/or output tokens event SwapMulti( address sender, uint256[] amountsIn, address[] tokensIn, uint256[] amountsOut, address[] tokensOut, uint32 referralCode ); /// @dev Holds all information for a given referral struct referralInfo { uint64 referralFee; address beneficiary; bool registered; } /// @dev Register referral fee and information mapping(uint32 => referralInfo) public referralLookup; /// @dev Set the null referralCode as "Unregistered" with no additional fee constructor() { referralLookup[0].referralFee = 0; referralLookup[0].beneficiary = address(0); referralLookup[0].registered = true; swapMultiFee = 5e14; } /// @dev Must exist in order for contract to receive eth receive() external payable { } /// @notice Custom decoder to swap with compact calldata for efficient execution on L2s function swapCompact() external payable returns (uint256) { swapTokenInfo memory tokenInfo; address executor; uint32 referralCode; bytes calldata pathDefinition; { address msgSender = msg.sender; assembly { // Define function to load in token address, either from calldata or from storage function getAddress(currPos) -> result, newPos { let inputPos := shr(240, calldataload(currPos)) switch inputPos // Reserve the null address as a special case that can be specified with 2 null bytes case 0x0000 { newPos := add(currPos, 2) } // This case means that the address is encoded in the calldata directly following the code case 0x0001 { result := and(shr(80, calldataload(currPos)), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF) newPos := add(currPos, 22) } // Otherwise we use the case to load in from the cached address list default { result := sload(add(addressListStart, sub(inputPos, 2))) newPos := add(currPos, 2) } } let result := 0 let pos := 4 // Load in the input and output token addresses result, pos := getAddress(pos) mstore(tokenInfo, result) result, pos := getAddress(pos) mstore(add(tokenInfo, 0x60), result) // Load in the input amount - a 0 byte means the full balance is to be used let inputAmountLength := shr(248, calldataload(pos)) pos := add(pos, 1) if inputAmountLength { mstore(add(tokenInfo, 0x20), shr(mul(sub(32, inputAmountLength), 8), calldataload(pos))) pos := add(pos, inputAmountLength) } // Load in the quoted output amount let quoteAmountLength := shr(248, calldataload(pos)) pos := add(pos, 1) let outputQuote := shr(mul(sub(32, quoteAmountLength), 8), calldataload(pos)) mstore(add(tokenInfo, 0x80), outputQuote) pos := add(pos, quoteAmountLength) // Load the slippage tolerance and use to get the minimum output amount { let slippageTolerance := shr(232, calldataload(pos)) mstore(add(tokenInfo, 0xA0), div(mul(outputQuote, sub(0xFFFFFF, slippageTolerance)), 0xFFFFFF)) } pos := add(pos, 3) // Load in the executor address executor, pos := getAddress(pos) // Load in the destination to send the input to - Zero denotes the executor result, pos := getAddress(pos) if eq(result, 0) { result := executor } mstore(add(tokenInfo, 0x40), result) // Load in the destination to send the output to - Zero denotes msg.sender result, pos := getAddress(pos) if eq(result, 0) { result := msgSender } mstore(add(tokenInfo, 0xC0), result) // Load in the referralCode referralCode := shr(224, calldataload(pos)) pos := add(pos, 4) // Set the offset and size for the pathDefinition portion of the msg.data pathDefinition.length := mul(shr(248, calldataload(pos)), 32) pathDefinition.offset := add(pos, 1) } } return _swapApproval( tokenInfo, pathDefinition, executor, referralCode ); } /// @notice Externally facing interface for swapping two tokens /// @param tokenInfo All information about the tokens being swapped /// @param pathDefinition Encoded path definition for executor /// @param executor Address of contract that will execute the path /// @param referralCode referral code to specify the source of the swap function swap( swapTokenInfo memory tokenInfo, bytes calldata pathDefinition, address executor, uint32 referralCode ) external payable returns (uint256 amountOut) { return _swapApproval( tokenInfo, pathDefinition, executor, referralCode ); } /// @notice Internal function for initiating approval transfers /// @param tokenInfo All information about the tokens being swapped /// @param pathDefinition Encoded path definition for executor /// @param executor Address of contract that will execute the path /// @param referralCode referral code to specify the source of the swap function _swapApproval( swapTokenInfo memory tokenInfo, bytes calldata pathDefinition, address executor, uint32 referralCode ) internal returns (uint256 amountOut) { if (tokenInfo.inputToken == _ETH) { // Support rebasing tokens by allowing the user to trade the entire balance if (tokenInfo.inputAmount == 0) { tokenInfo.inputAmount = msg.value; } else { require(msg.value == tokenInfo.inputAmount, "Wrong msg.value"); } } else { // Support rebasing tokens by allowing the user to trade the entire balance if (tokenInfo.inputAmount == 0) { tokenInfo.inputAmount = IERC20(tokenInfo.inputToken).balanceOf(msg.sender); } IERC20(tokenInfo.inputToken).safeTransferFrom( msg.sender, tokenInfo.inputReceiver, tokenInfo.inputAmount ); } return _swap( tokenInfo, pathDefinition, executor, referralCode ); } /// @notice Externally facing interface for swapping two tokens /// @param permit2 All additional info for Permit2 transfers /// @param tokenInfo All information about the tokens being swapped /// @param pathDefinition Encoded path definition for executor /// @param executor Address of contract that will execute the path /// @param referralCode referral code to specify the source of the swap function swapPermit2( permit2Info memory permit2, swapTokenInfo memory tokenInfo, bytes calldata pathDefinition, address executor, uint32 referralCode ) external returns (uint256 amountOut) { ISignatureTransfer(permit2.contractAddress).permitTransferFrom( ISignatureTransfer.PermitTransferFrom( ISignatureTransfer.TokenPermissions( tokenInfo.inputToken, tokenInfo.inputAmount ), permit2.nonce, permit2.deadline ), ISignatureTransfer.SignatureTransferDetails( tokenInfo.inputReceiver, tokenInfo.inputAmount ), msg.sender, permit2.signature ); return _swap( tokenInfo, pathDefinition, executor, referralCode ); } /// @notice contains the main logic for swapping one token for another /// Assumes input tokens have already been sent to their destinations and /// that msg.value is set to expected ETH input value, or 0 for ERC20 input /// @param tokenInfo All information about the tokens being swapped /// @param pathDefinition Encoded path definition for executor /// @param executor Address of contract that will execute the path /// @param referralCode referral code to specify the source of the swap function _swap( swapTokenInfo memory tokenInfo, bytes calldata pathDefinition, address executor, uint32 referralCode ) internal returns (uint256 amountOut) { // Check for valid output specifications require(tokenInfo.outputMin <= tokenInfo.outputQuote, "Minimum greater than quote"); require(tokenInfo.outputMin > 0, "Slippage limit too low"); require(tokenInfo.inputToken != tokenInfo.outputToken, "Arbitrage not supported"); uint256 balanceBefore = _universalBalance(tokenInfo.outputToken); // Delegate the execution of the path to the specified Odos Executor uint256[] memory amountsIn = new uint256[](1); amountsIn[0] = tokenInfo.inputAmount; IOdosExecutor(executor).executePath{value: msg.value}(pathDefinition, amountsIn, msg.sender); amountOut = _universalBalance(tokenInfo.outputToken) - balanceBefore; if (referralCode > REFERRAL_WITH_FEE_THRESHOLD) { referralInfo memory thisReferralInfo = referralLookup[referralCode]; _universalTransfer( tokenInfo.outputToken, thisReferralInfo.beneficiary, amountOut * thisReferralInfo.referralFee * 8 / (FEE_DENOM * 10) ); amountOut = amountOut * (FEE_DENOM - thisReferralInfo.referralFee) / FEE_DENOM; } int256 slippage = int256(amountOut) - int256(tokenInfo.outputQuote); if (slippage > 0) { amountOut = tokenInfo.outputQuote; } require(amountOut >= tokenInfo.outputMin, "Slippage Limit Exceeded"); // Transfer out the final output to the end user _universalTransfer(tokenInfo.outputToken, tokenInfo.outputReceiver, amountOut); emit Swap( msg.sender, tokenInfo.inputAmount, tokenInfo.inputToken, amountOut, tokenInfo.outputToken, slippage, referralCode ); } /// @notice Custom decoder to swapMulti with compact calldata for efficient execution on L2s function swapMultiCompact() external payable returns (uint256[] memory amountsOut) { address executor; uint256 valueOutMin; inputTokenInfo[] memory inputs; outputTokenInfo[] memory outputs; uint256 pos = 6; { address msgSender = msg.sender; uint256 numInputs; uint256 numOutputs; assembly { numInputs := shr(248, calldataload(4)) numOutputs := shr(248, calldataload(5)) } inputs = new inputTokenInfo[](numInputs); outputs = new outputTokenInfo[](numOutputs); assembly { // Define function to load in token address, either from calldata or from storage function getAddress(currPos) -> result, newPos { let inputPos := shr(240, calldataload(currPos)) switch inputPos // Reserve the null address as a special case that can be specified with 2 null bytes case 0x0000 { newPos := add(currPos, 2) } // This case means that the address is encoded in the calldata directly following the code case 0x0001 { result := and(shr(80, calldataload(currPos)), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF) newPos := add(currPos, 22) } // Otherwise we use the case to load in from the cached address list default { result := sload(add(addressListStart, sub(inputPos, 2))) newPos := add(currPos, 2) } } executor, pos := getAddress(pos) // Load in the quoted output amount let outputMinAmountLength := shr(248, calldataload(pos)) pos := add(pos, 1) valueOutMin := shr(mul(sub(32, outputMinAmountLength), 8), calldataload(pos)) pos := add(pos, outputMinAmountLength) let result := 0 let memPos := 0 for { let element := 0 } lt(element, numInputs) { element := add(element, 1) } { memPos := mload(add(inputs, add(mul(element, 0x20), 0x20))) // Load in the token address result, pos := getAddress(pos) mstore(memPos, result) // Load in the input amount - a 0 byte means the full balance is to be used let inputAmountLength := shr(248, calldataload(pos)) pos := add(pos, 1) if inputAmountLength { mstore(add(memPos, 0x20), shr(mul(sub(32, inputAmountLength), 8), calldataload(pos))) pos := add(pos, inputAmountLength) } result, pos := getAddress(pos) if eq(result, 0) { result := executor } mstore(add(memPos, 0x40), result) } for { let element := 0 } lt(element, numOutputs) { element := add(element, 1) } { memPos := mload(add(outputs, add(mul(element, 0x20), 0x20))) // Load in the token address result, pos := getAddress(pos) mstore(memPos, result) // Load in the quoted output amount let outputAmountLength := shr(248, calldataload(pos)) pos := add(pos, 1) mstore(add(memPos, 0x20), shr(mul(sub(32, outputAmountLength), 8), calldataload(pos))) pos := add(pos, outputAmountLength) result, pos := getAddress(pos) if eq(result, 0) { result := msgSender } mstore(add(memPos, 0x40), result) } } } uint32 referralCode; bytes calldata pathDefinition; assembly { // Load in the referralCode referralCode := shr(224, calldataload(pos)) pos := add(pos, 4) // Set the offset and size for the pathDefinition portion of the msg.data pathDefinition.length := mul(shr(248, calldataload(pos)), 32) pathDefinition.offset := add(pos, 1) } return _swapMultiApproval( inputs, outputs, valueOutMin, pathDefinition, executor, referralCode ); } /// @notice Externally facing interface for swapping between two sets of tokens /// @param inputs list of input token structs for the path being executed /// @param outputs list of output token structs for the path being executed /// @param valueOutMin minimum amount of value out the user will accept /// @param pathDefinition Encoded path definition for executor /// @param executor Address of contract that will execute the path /// @param referralCode referral code to specify the source of the swap function swapMulti( inputTokenInfo[] memory inputs, outputTokenInfo[] memory outputs, uint256 valueOutMin, bytes calldata pathDefinition, address executor, uint32 referralCode ) external payable returns (uint256[] memory amountsOut) { return _swapMultiApproval( inputs, outputs, valueOutMin, pathDefinition, executor, referralCode ); } /// @notice Internal logic for swapping between two sets of tokens with approvals /// @param inputs list of input token structs for the path being executed /// @param outputs list of output token structs for the path being executed /// @param valueOutMin minimum amount of value out the user will accept /// @param pathDefinition Encoded path definition for executor /// @param executor Address of contract that will execute the path /// @param referralCode referral code to specify the source of the swap function _swapMultiApproval( inputTokenInfo[] memory inputs, outputTokenInfo[] memory outputs, uint256 valueOutMin, bytes calldata pathDefinition, address executor, uint32 referralCode ) internal returns (uint256[] memory amountsOut) { // If input amount is still 0 then that means the maximum possible input is to be used uint256 expected_msg_value = 0; for (uint256 i = 0; i < inputs.length; i++) { if (inputs[i].tokenAddress == _ETH) { if (inputs[i].amountIn == 0) { inputs[i].amountIn = msg.value; } expected_msg_value = inputs[i].amountIn; } else { if (inputs[i].amountIn == 0) { inputs[i].amountIn = IERC20(inputs[i].tokenAddress).balanceOf(msg.sender); } IERC20(inputs[i].tokenAddress).safeTransferFrom( msg.sender, inputs[i].receiver, inputs[i].amountIn ); } } require(msg.value == expected_msg_value, "Wrong msg.value"); return _swapMulti( inputs, outputs, valueOutMin, pathDefinition, executor, referralCode ); } /// @notice Externally facing interface for swapping between two sets of tokens with Permit2 /// @param permit2 All additional info for Permit2 transfers /// @param inputs list of input token structs for the path being executed /// @param outputs list of output token structs for the path being executed /// @param valueOutMin minimum amount of value out the user will accept /// @param pathDefinition Encoded path definition for executor /// @param executor Address of contract that will execute the path /// @param referralCode referral code to specify the source of the swap function swapMultiPermit2( permit2Info memory permit2, inputTokenInfo[] memory inputs, outputTokenInfo[] memory outputs, uint256 valueOutMin, bytes calldata pathDefinition, address executor, uint32 referralCode ) external payable returns (uint256[] memory amountsOut) { ISignatureTransfer.PermitBatchTransferFrom memory permit; ISignatureTransfer.SignatureTransferDetails[] memory transferDetails; { uint256 permit_length = msg.value > 0 ? inputs.length - 1 : inputs.length; permit = ISignatureTransfer.PermitBatchTransferFrom( new ISignatureTransfer.TokenPermissions[](permit_length), permit2.nonce, permit2.deadline ); transferDetails = new ISignatureTransfer.SignatureTransferDetails[](permit_length); } { uint256 expected_msg_value = 0; for (uint256 i = 0; i < inputs.length; i++) { if (inputs[i].tokenAddress == _ETH) { if (inputs[i].amountIn == 0) { inputs[i].amountIn = msg.value; } expected_msg_value = inputs[i].amountIn; } else { if (inputs[i].amountIn == 0) { inputs[i].amountIn = IERC20(inputs[i].tokenAddress).balanceOf(msg.sender); } uint256 permit_index = expected_msg_value == 0 ? i : i - 1; permit.permitted[permit_index].token = inputs[i].tokenAddress; permit.permitted[permit_index].amount = inputs[i].amountIn; transferDetails[permit_index].to = inputs[i].receiver; transferDetails[permit_index].requestedAmount = inputs[i].amountIn; } } require(msg.value == expected_msg_value, "Wrong msg.value"); } ISignatureTransfer(permit2.contractAddress).permitTransferFrom( permit, transferDetails, msg.sender, permit2.signature ); return _swapMulti( inputs, outputs, valueOutMin, pathDefinition, executor, referralCode ); } /// @notice contains the main logic for swapping between two sets of tokens /// assumes that inputs have already been sent to the right location and msg.value /// is set correctly to be 0 for no native input and match native inpuit otherwise /// @param inputs list of input token structs for the path being executed /// @param outputs list of output token structs for the path being executed /// @param valueOutMin minimum amount of value out the user will accept /// @param pathDefinition Encoded path definition for executor /// @param executor Address of contract that will execute the path /// @param referralCode referral code to specify the source of the swap function _swapMulti( inputTokenInfo[] memory inputs, outputTokenInfo[] memory outputs, uint256 valueOutMin, bytes calldata pathDefinition, address executor, uint32 referralCode ) internal returns (uint256[] memory amountsOut) { // Check for valid output specifications require(valueOutMin > 0, "Slippage limit too low"); // Extract arrays of input amount values and tokens from the inputs struct list uint256[] memory amountsIn = new uint256[](inputs.length); address[] memory tokensIn = new address[](inputs.length); // Check input specification validity and transfer input tokens to executor { for (uint256 i = 0; i < inputs.length; i++) { amountsIn[i] = inputs[i].amountIn; tokensIn[i] = inputs[i].tokenAddress; for (uint256 j = 0; j < i; j++) { require( inputs[i].tokenAddress != inputs[j].tokenAddress, "Duplicate source tokens" ); } for (uint256 j = 0; j < outputs.length; j++) { require( inputs[i].tokenAddress != outputs[j].tokenAddress, "Arbitrage not supported" ); } } } // Check outputs for duplicates and record balances before swap uint256[] memory balancesBefore = new uint256[](outputs.length); for (uint256 i = 0; i < outputs.length; i++) { for (uint256 j = 0; j < i; j++) { require( outputs[i].tokenAddress != outputs[j].tokenAddress, "Duplicate destination tokens" ); } balancesBefore[i] = _universalBalance(outputs[i].tokenAddress); } // Delegate the execution of the path to the specified Odos Executor IOdosExecutor(executor).executePath{value: msg.value}(pathDefinition, amountsIn, msg.sender); referralInfo memory thisReferralInfo; if (referralCode > REFERRAL_WITH_FEE_THRESHOLD) { thisReferralInfo = referralLookup[referralCode]; } { uint256 valueOut; uint256 _swapMultiFee = swapMultiFee; amountsOut = new uint256[](outputs.length); for (uint256 i = 0; i < outputs.length; i++) { // Record the destination token balance before the path is executed amountsOut[i] = _universalBalance(outputs[i].tokenAddress) - balancesBefore[i]; // Remove the swapMulti Fee (taken instead of positive slippage) amountsOut[i] = amountsOut[i] * (FEE_DENOM - _swapMultiFee) / FEE_DENOM; if (referralCode > REFERRAL_WITH_FEE_THRESHOLD) { _universalTransfer( outputs[i].tokenAddress, thisReferralInfo.beneficiary, amountsOut[i] * thisReferralInfo.referralFee * 8 / (FEE_DENOM * 10) ); amountsOut[i] = amountsOut[i] * (FEE_DENOM - thisReferralInfo.referralFee) / FEE_DENOM; } _universalTransfer( outputs[i].tokenAddress, outputs[i].receiver, amountsOut[i] ); // Add the amount out sent to the user to the total value of output valueOut += amountsOut[i] * outputs[i].relativeValue; } require(valueOut >= valueOutMin, "Slippage Limit Exceeded"); } address[] memory tokensOut = new address[](outputs.length); for (uint256 i = 0; i < outputs.length; i++) { tokensOut[i] = outputs[i].tokenAddress; } emit SwapMulti( msg.sender, amountsIn, tokensIn, amountsOut, tokensOut, referralCode ); } /// @notice Register a new referrer, optionally with an additional swap fee /// @param _referralCode the referral code to use for the new referral /// @param _referralFee the additional fee to add to each swap using this code /// @param _beneficiary the address to send the referral's share of fees to function registerReferralCode( uint32 _referralCode, uint64 _referralFee, address _beneficiary ) external { // Do not allow for any overwriting of referral codes require(!referralLookup[_referralCode].registered, "Code in use"); // Maximum additional fee a referral can set is 2% require(_referralFee <= FEE_DENOM / 50, "Fee too high"); // Reserve the lower half of referral codes to be informative only if (_referralCode <= REFERRAL_WITH_FEE_THRESHOLD) { require(_referralFee == 0, "Invalid fee for code"); } else { require(_referralFee > 0, "Invalid fee for code"); // Make sure the beneficiary is not the null address if there is a fee require(_beneficiary != address(0), "Null beneficiary"); } referralLookup[_referralCode].referralFee = _referralFee; referralLookup[_referralCode].beneficiary = _beneficiary; referralLookup[_referralCode].registered = true; } /// @notice Set the fee used for swapMulti /// @param _swapMultiFee the new fee for swapMulti function setSwapMultiFee( uint256 _swapMultiFee ) external onlyOwner { // Maximum swapMultiFee that can be set is 0.5% require(_swapMultiFee <= FEE_DENOM / 200, "Fee too high"); swapMultiFee = _swapMultiFee; } /// @notice Push new addresses to the cached address list for when storage is cheaper than calldata /// @param addresses list of addresses to be added to the cached address list function writeAddressList( address[] calldata addresses ) external onlyOwner { for (uint256 i = 0; i < addresses.length; i++) { addressList.push(addresses[i]); } } /// @notice Allows the owner to transfer funds held by the router contract /// @param tokens List of token address to be transferred /// @param amounts List of amounts of each token to be transferred /// @param dest Address to which the funds should be sent function transferRouterFunds( address[] calldata tokens, uint256[] calldata amounts, address dest ) external onlyOwner { require(tokens.length == amounts.length, "Invalid funds transfer"); for (uint256 i = 0; i < tokens.length; i++) { _universalTransfer( tokens[i], dest, amounts[i] == 0 ? _universalBalance(tokens[i]) : amounts[i] ); } } /// @notice Directly swap funds held in router /// @param inputs list of input token structs for the path being executed /// @param outputs list of output token structs for the path being executed /// @param valueOutMin minimum amount of value out the user will accept /// @param pathDefinition Encoded path definition for executor /// @param executor Address of contract that will execute the path function swapRouterFunds( inputTokenInfo[] memory inputs, outputTokenInfo[] memory outputs, uint256 valueOutMin, bytes calldata pathDefinition, address executor ) external onlyOwner returns (uint256[] memory amountsOut) { uint256[] memory amountsIn = new uint256[](inputs.length); address[] memory tokensIn = new address[](inputs.length); for (uint256 i = 0; i < inputs.length; i++) { tokensIn[i] = inputs[i].tokenAddress; amountsIn[i] = inputs[i].amountIn == 0 ? _universalBalance(tokensIn[i]) : inputs[i].amountIn; _universalTransfer( tokensIn[i], inputs[i].receiver, amountsIn[i] ); } // Check outputs for duplicates and record balances before swap uint256[] memory balancesBefore = new uint256[](outputs.length); address[] memory tokensOut = new address[](outputs.length); for (uint256 i = 0; i < outputs.length; i++) { tokensOut[i] = outputs[i].tokenAddress; balancesBefore[i] = _universalBalance(tokensOut[i]); } // Delegate the execution of the path to the specified Odos Executor IOdosExecutor(executor).executePath{value: 0}(pathDefinition, amountsIn, msg.sender); uint256 valueOut; amountsOut = new uint256[](outputs.length); for (uint256 i = 0; i < outputs.length; i++) { // Record the destination token balance before the path is executed amountsOut[i] = _universalBalance(tokensOut[i]) - balancesBefore[i]; _universalTransfer( outputs[i].tokenAddress, outputs[i].receiver, amountsOut[i] ); // Add the amount out sent to the user to the total value of output valueOut += amountsOut[i] * outputs[i].relativeValue; } require(valueOut >= valueOutMin, "Slippage Limit Exceeded"); emit SwapMulti( msg.sender, amountsIn, tokensIn, amountsOut, tokensOut, 0 ); } /// @notice helper function to get balance of ERC20 or native coin for this contract /// @param token address of the token to check, null for native coin /// @return balance of specified coin or token function _universalBalance(address token) private view returns(uint256) { if (token == _ETH) { return address(this).balance; } else { return IERC20(token).balanceOf(address(this)); } } /// @notice helper function to transfer ERC20 or native coin /// @param token address of the token being transferred, null for native coin /// @param to address to transfer to /// @param amount to transfer function _universalTransfer(address token, address to, uint256 amount) private { if (token == _ETH) { (bool success,) = payable(to).call{value: amount}(""); require(success, "ETH transfer failed"); } else { IERC20(token).safeTransfer(to, amount); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"inputAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"inputToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"address","name":"outputToken","type":"address"},{"indexed":false,"internalType":"int256","name":"slippage","type":"int256"},{"indexed":false,"internalType":"uint32","name":"referralCode","type":"uint32"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"indexed":false,"internalType":"address[]","name":"tokensIn","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"indexed":false,"internalType":"address[]","name":"tokensOut","type":"address[]"},{"indexed":false,"internalType":"uint32","name":"referralCode","type":"uint32"}],"name":"SwapMulti","type":"event"},{"inputs":[],"name":"FEE_DENOM","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REFERRAL_WITH_FEE_THRESHOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"addressList","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"","type":"uint32"}],"name":"referralLookup","outputs":[{"internalType":"uint64","name":"referralFee","type":"uint64"},{"internalType":"address","name":"beneficiary","type":"address"},{"internalType":"bool","name":"registered","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_referralCode","type":"uint32"},{"internalType":"uint64","name":"_referralFee","type":"uint64"},{"internalType":"address","name":"_beneficiary","type":"address"}],"name":"registerReferralCode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapMultiFee","type":"uint256"}],"name":"setSwapMultiFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"inputToken","type":"address"},{"internalType":"uint256","name":"inputAmount","type":"uint256"},{"internalType":"address","name":"inputReceiver","type":"address"},{"internalType":"address","name":"outputToken","type":"address"},{"internalType":"uint256","name":"outputQuote","type":"uint256"},{"internalType":"uint256","name":"outputMin","type":"uint256"},{"internalType":"address","name":"outputReceiver","type":"address"}],"internalType":"struct OdosRouterV2.swapTokenInfo","name":"tokenInfo","type":"tuple"},{"internalType":"bytes","name":"pathDefinition","type":"bytes"},{"internalType":"address","name":"executor","type":"address"},{"internalType":"uint32","name":"referralCode","type":"uint32"}],"name":"swap","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"swapCompact","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"internalType":"struct OdosRouterV2.inputTokenInfo[]","name":"inputs","type":"tuple[]"},{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"relativeValue","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"internalType":"struct OdosRouterV2.outputTokenInfo[]","name":"outputs","type":"tuple[]"},{"internalType":"uint256","name":"valueOutMin","type":"uint256"},{"internalType":"bytes","name":"pathDefinition","type":"bytes"},{"internalType":"address","name":"executor","type":"address"},{"internalType":"uint32","name":"referralCode","type":"uint32"}],"name":"swapMulti","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"swapMultiCompact","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"swapMultiFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct OdosRouterV2.permit2Info","name":"permit2","type":"tuple"},{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"internalType":"struct OdosRouterV2.inputTokenInfo[]","name":"inputs","type":"tuple[]"},{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"relativeValue","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"internalType":"struct OdosRouterV2.outputTokenInfo[]","name":"outputs","type":"tuple[]"},{"internalType":"uint256","name":"valueOutMin","type":"uint256"},{"internalType":"bytes","name":"pathDefinition","type":"bytes"},{"internalType":"address","name":"executor","type":"address"},{"internalType":"uint32","name":"referralCode","type":"uint32"}],"name":"swapMultiPermit2","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct OdosRouterV2.permit2Info","name":"permit2","type":"tuple"},{"components":[{"internalType":"address","name":"inputToken","type":"address"},{"internalType":"uint256","name":"inputAmount","type":"uint256"},{"internalType":"address","name":"inputReceiver","type":"address"},{"internalType":"address","name":"outputToken","type":"address"},{"internalType":"uint256","name":"outputQuote","type":"uint256"},{"internalType":"uint256","name":"outputMin","type":"uint256"},{"internalType":"address","name":"outputReceiver","type":"address"}],"internalType":"struct OdosRouterV2.swapTokenInfo","name":"tokenInfo","type":"tuple"},{"internalType":"bytes","name":"pathDefinition","type":"bytes"},{"internalType":"address","name":"executor","type":"address"},{"internalType":"uint32","name":"referralCode","type":"uint32"}],"name":"swapPermit2","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"internalType":"struct OdosRouterV2.inputTokenInfo[]","name":"inputs","type":"tuple[]"},{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"relativeValue","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"internalType":"struct OdosRouterV2.outputTokenInfo[]","name":"outputs","type":"tuple[]"},{"internalType":"uint256","name":"valueOutMin","type":"uint256"},{"internalType":"bytes","name":"pathDefinition","type":"bytes"},{"internalType":"address","name":"executor","type":"address"}],"name":"swapRouterFunds","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"address","name":"dest","type":"address"}],"name":"transferRouterFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"writeAddressList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
9c4d535b0000000000000000000000000000000000000000000000000000000000000000010009bb93de91d4241c531ca04d3613d9f5fcb83495282f3bfce53e4a061d3500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x00040000000000020001000000000002000000000301001900000060033002700000094f04300197000300000041035500020000000103550000094f0030019d000100000000001f0000008001000039000000400010043f00000001012001900000003a0000c13d0000000001000031000000040210008c000000690000413d0000000202000367000000000202043b000000e0022002700000095a0320009c0000006d0000a13d0000095b0320009c000000880000213d000009620320009c000000bc0000a13d000009630120009c0000011b0000613d000009640120009c000001290000613d000009650120009c000002010000c13d0000000001000416000000000110004c000002010000c13d000000040100008a00000000011000310000097402000041000000200310008c000000000300001900000000030240190000097401100197000000000410004c000000000200a019000009740110009c00000000010300190000000001026019000000000110004c000002010000c13d00000004010000390000000201100367000000000101043b25381d510000040f0000094f01000041000000400200043d0000094f0320009c00000000010240190000004001100210000025390001042e0000000001000416000000000110004c000002010000c13d000000000200041a00000950012001970000000006000411000000000161019f000000000010041b0000094f0100004100000000030004140000094f0430009c0000000001034019000000c00110021000000951011001c700000952052001970000800d0200003900000003030000390000095304000041000100000003001d2538252e0000040f0000000101200190000002010000613d00000000000004350000000101000029000000200010043f0000000001000019253802030000040f000000000201041a0000095402200197000000000021041b253802150000040f000000000201041a0000095502200197000000000021041b253802150000040f000000000201041a000009560220019700000957022001c7000000000021041b00000958010000410000000202000039000000000012041b0000002001000039000001000010044300000120000004430000095901000041000025390001042e000000000110004c000002010000c13d0000000001000019000025390001042e000009680320009c000000aa0000a13d000009690320009c000000dd0000a13d0000096a0320009c000001440000613d0000096b0320009c0000015e0000613d0000096c0220009c000002010000c13d253805610000040f253812ee0000040f0000000002010019000000400100043d000100000001001d253803820000040f000000010400002900000000014100490000094f020000410000094f0310009c00000000010280190000094f0340009c000000000204401900000040022002100000006001100210000000000121019f000025390001042e0000095c0120009c000000fb0000a13d0000095d0120009c000001760000613d0000095e0120009c000001910000613d0000095f0120009c000002010000c13d0000000001000416000000000110004c000002010000c13d0000000001000031253807650000040f2538077a0000040f000000000401001900000000050200190000000006030019000000400100043d000100000001001d000000000204001900000000030500190000000004060019253807920000040f000000010400002900000000014100490000094f020000410000094f0310009c00000000010280190000094f0340009c000000000204401900000040022002100000006001100210000000000121019f000025390001042e0000096f0320009c0000010b0000213d000009720320009c0000019d0000613d000009730120009c000002010000c13d0000000001000416000000000110004c000002010000c13d0000000001000031253803910000040f25381db50000040f0000094f01000041000000400200043d0000094f0320009c00000000010240190000004001100210000025390001042e000009660320009c000001ae0000613d000009670220009c000002010000c13d000000040110008a0000097402000041000000000310004c000000000300001900000000030240190000097401100197000000000410004c000000000200a019000009740110009c00000000010300190000000001026019000000000110004c000002010000c13d253810dc0000040f0000000002010019000000400100043d000100000001001d253803820000040f000000010400002900000000014100490000094f020000410000094f0310009c00000000010280190000094f0340009c000000000204401900000040022002100000006001100210000000000121019f000025390001042e0000096d0320009c000001c40000613d0000096e0120009c000002010000c13d0000000001000416000000000110004c000002010000c13d000000040100008a00000000011000310000097402000041000000000310004c000000000300001900000000030240190000097401100197000000000410004c000000000200a019000009740110009c00000000010300190000000001026019000000000110004c000002010000c13d000000400100043d000009770200004100000000002104350000094f020000410000094f0310009c0000000001028019000000400110021000000975011001c7000025390001042e000009600120009c000001ce0000613d000009610120009c000002010000c13d0000000001000416000000000110004c000002010000c13d0000000001000031253807330000040f25381ca40000040f0000094f01000041000000400200043d0000094f0320009c00000000010240190000004001100210000025390001042e000009700120009c000001ec0000613d000009710120009c000002010000c13d0000000001000416000000000110004c000002010000c13d0000000001000031253804c80000040f25381d7e0000040f0000094f01000041000000400200043d0000094f0320009c00000000010240190000004001100210000025390001042e0000000001000416000000000110004c000002010000c13d00000000010000312538064c0000040f25380bbe0000040f000000400200043d00000000001204350000094f010000410000094f0320009c0000000001024019000000400110021000000975011001c7000025390001042e0000000001000416000000000110004c000002010000c13d000000040100008a00000000011000310000097402000041000000000310004c000000000300001900000000030240190000097401100197000000000410004c000000000200a019000009740110009c00000000010300190000000001026019000000000110004c000002010000c13d000000000100041a0000095201100197000000400200043d00000000001204350000094f010000410000094f0320009c0000000001024019000000400110021000000975011001c7000025390001042e0000000001000416000000000110004c000002010000c13d000000040100008a00000000011000310000097402000041000000000310004c000000000300001900000000030240190000097401100197000000000410004c000000000200a019000009740110009c00000000010300190000000001026019000000000110004c000002010000c13d000000400100043d000009760200004100000000002104350000094f020000410000094f0310009c0000000001028019000000400110021000000975011001c7000025390001042e0000000001000416000000000110004c000002010000c13d000000040100008a00000000011000310000097402000041000000000310004c000000000300001900000000030240190000097401100197000000000410004c000000000200a019000009740110009c00000000010300190000000001026019000000000110004c000002010000c13d2538079e0000040f0000094f01000041000000400200043d0000094f0320009c00000000010240190000004001100210000025390001042e0000000001000416000000000110004c000002010000c13d000000040100008a00000000011000310000097402000041000000000310004c000000000300001900000000030240190000097401100197000000000410004c000000000200a019000009740110009c00000000010300190000000001026019000000000110004c000002010000c13d0000000201000039000000000101041a000000400200043d00000000001204350000094f010000410000094f0320009c0000000001024019000000400110021000000975011001c7000025390001042e0000000001000416000000000110004c000002010000c13d0000000001000031253807500000040f253807cb0000040f0000094f01000041000000400200043d0000094f0320009c00000000010240190000004001100210000025390001042e253802260000040f253814090000040f0000000002010019000000400100043d000100000001001d253803820000040f000000010400002900000000014100490000094f020000410000094f0310009c00000000010280190000094f0340009c000000000204401900000040022002100000006001100210000000000121019f000025390001042e000000040110008a0000097402000041000000000310004c000000000300001900000000030240190000097401100197000000000410004c000000000200a019000009740110009c00000000010300190000000001026019000000000110004c000002010000c13d253808100000040f000000400200043d00000000001204350000094f010000410000094f0320009c0000000001024019000000400110021000000975011001c7000025390001042e253804f70000040f253809990000040f000000400200043d00000000001204350000094f010000410000094f0320009c0000000001024019000000400110021000000975011001c7000025390001042e0000000001000416000000000110004c000002010000c13d000000040100008a00000000011000310000097402000041000000200310008c000000000300001900000000030240190000097401100197000000000410004c000000000200a019000009740110009c00000000010300190000000001026019000000000110004c000002010000c13d00000004010000390000000201100367000000000101043b253807280000040f0000095201100197000000400200043d00000000001204350000094f010000410000094f0320009c0000000001024019000000400110021000000975011001c7000025390001042e0000000001000416000000000110004c000002010000c13d0000000001000031253803e10000040f25381f340000040f0000000002010019000000400100043d000100000001001d253803820000040f000000010400002900000000014100490000094f020000410000094f0310009c00000000010280190000094f0340009c000000000204401900000040022002100000006001100210000000000121019f000025390001042e00000000010000190000253a000104300000094f0200004100000000030004140000094f0430009c00000000030280190000094f0410009c00000000010280190000004001100210000000c002300210000000000112019f00000978011001c70000801002000039253825330000040f0000000102200190000002130000613d000000000101043b000000000001042d00000000010000190000253a0001043000000000000004350000000301000039000000200010043f0000094f0100004100000000020004140000094f0320009c0000000001024019000000c00110021000000978011001c70000801002000039253825330000040f0000000102200190000002240000613d000000000101043b000000000001042d00000000010000190000253a00010430000000040210008a0000097403000041000000df0420008c000000000400001900000000040320190000097402200197000000000520004c0000000003008019000009740220009c00000000020400190000000002036019000000000220004c0000037a0000613d00000004020000390000000202200367000000000302043b000009790230009c0000037a0000213d000000040230003900000000042100490000097405000041000000800640008c000000000600001900000000060540190000097404400197000000000740004c000000000500a019000009740440009c00000000040600190000000004056019000000000440004c0000037a0000c13d000000400900043d0000097a0490009c0000037c0000813d0000008004900039000000400040043f0000000204200367000000000404043b000009520540009c0000037a0000213d000000000449043600000024053000390000000205500367000000000505043b000000000054043500000044043000390000000204400367000000000404043b0000004005900039000000000045043500000064043000390000000203000367000000000443034f000000000404043b000009790540009c0000037a0000213d00000000062400190000001f026000390000097404000041000000000512004b0000000005000019000000000504801900000974022001970000097407100197000000000872004b0000000004008019000000000272013f000009740220009c00000000020500190000000002046019000000000220004c0000037a0000c13d000000000263034f000000000202043b000009790320009c0000037c0000213d0000003f04200039000000200300008a000000000534016f000000400400043d0000000005540019000000000745004b00000000070000190000000107004039000009790850009c0000037c0000213d00000001077001900000037c0000c13d000000400050043f000000000524043600000020076000390000000006720019000000000616004b0000037a0000213d0000001f0620018f00000002077003670000000508200272000002920000613d000000000a000019000000050ba00210000000000cb50019000000000bb7034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b0000028a0000413d000000000a60004c000002a10000613d0000000508800210000000000787034f00000000088500190000000306600210000000000a080433000000000a6a01cf000000000a6a022f000000000707043b0000010006600089000000000767022f00000000066701cf0000000006a6019f0000000000680435000000000225001900000000000204350000006002900039000000000042043500000002020003670000002404200370000000000404043b000009790540009c0000037a0000213d00000023054000390000097406000041000000000715004b0000000007000019000000000706801900000974081001970000097405500197000000000a85004b0000000006008019000000000585013f000009740550009c00000000050700190000000005066019000000000550004c0000037a0000c13d0000000405400039000000000252034f000000000602043b000009790260009c0000037c0000213d00000005026002100000003f02200039000000000532016f000000400200043d0000000005520019000000000725004b00000000070000190000000107004039000009790850009c0000037c0000213d00000001077001900000037c0000c13d000000400050043f0000000000620435000000240440003900000060756000c90000000005450019000000000715004b0000037a0000213d000000000660004c000002fb0000613d000000000602001900000000074100490000097408000041000000600a70008c000000000a000019000000000a0840190000097407700197000000000b70004c000000000800a019000009740770009c00000000070a00190000000007086019000000000770004c0000037a0000c13d000000400700043d0000097b0870009c0000037c0000213d0000006008700039000000400080043f0000000208400367000000000808043b000009520a80009c0000037a0000213d0000000008870436000000200a400039000000020aa00367000000000a0a043b0000000000a8043500000040084000390000000208800367000000000808043b000009520a80009c0000037a0000213d0000002006600039000000400a70003900000000008a043500000000007604350000006004400039000000000754004b000002d40000413d00000002050003670000004404500370000000000404043b000009790640009c0000037a0000213d00000023064000390000097407000041000000000816004b00000000080000190000000008078019000009740a1001970000097406600197000000000ba6004b00000000070080190000000006a6013f000009740660009c00000000060800190000000006076019000000000660004c0000037a0000c13d0000000406400039000000000565034f000000000605043b000009790560009c0000037c0000213d00000005056002100000003f05500039000000000535016f000000400300043d0000000005530019000000000735004b00000000070000190000000107004039000009790850009c0000037c0000213d00000001077001900000037c0000c13d000000400050043f0000000000630435000000240440003900000060756000c90000000005450019000000000715004b0000037a0000213d000000000660004c000003510000613d000000000603001900000000074100490000097408000041000000600a70008c000000000a000019000000000a0840190000097407700197000000000b70004c000000000800a019000009740770009c00000000070a00190000000007086019000000000770004c0000037a0000c13d000000400700043d0000097b0870009c0000037c0000213d0000006008700039000000400080043f0000000208400367000000000808043b000009520a80009c0000037a0000213d0000000008870436000000200a400039000000020aa00367000000000a0a043b0000000000a8043500000040084000390000000208800367000000000808043b000009520a80009c0000037a0000213d0000002006600039000000400a70003900000000008a043500000000007604350000006004400039000000000754004b0000032a0000413d00000002080003670000006404800370000000000404043b0000008405800370000000000505043b000009790650009c0000037a0000213d00000023065000390000097407000041000000000a16004b000000000a000019000000000a078019000009740b1001970000097406600197000000000cb6004b00000000070080190000000006b6013f000009740660009c00000000060a00190000000006076019000000000660004c0000037a0000c13d0000000406500039000000000668034f000000000606043b000009790760009c0000037a0000213d00000024055000390000000007560019000000000117004b0000037a0000213d000000a401800370000000000701043b000009520170009c0000037a0000213d000000c401800370000000000801043b0000094f0180009c0000037a0000213d0000000001090019000000000001042d00000000010000190000253a000104300000097c0100004100000000001004350000004101000039000000040010043f0000097d010000410000253a0001043000000020030000390000000004310436000000000302043300000000003404350000004001100039000000000430004c000003900000613d00000000040000190000002002200039000000000502043300000000015104360000000104400039000000000534004b0000038a0000413d000000000001042d000000040210008a00000974030000410000005f0420008c000000000400001900000000040320190000097402200197000000000520004c0000000003008019000009740220009c00000000020400190000000002036019000000000220004c000003df0000613d00000002050003670000000402500370000000000302043b000009790230009c000003df0000213d00000023023000390000097404000041000000000612004b0000000006000019000000000604801900000974071001970000097402200197000000000872004b0000000004008019000000000272013f000009740220009c00000000020600190000000002046019000000000220004c000003df0000c13d0000000402300039000000000225034f000000000202043b000009790420009c000003df0000213d000000240630003900000005032002100000000003630019000000000313004b000003df0000213d0000002403500370000000000303043b000009790430009c000003df0000213d00000023043000390000097407000041000000000814004b0000000008000019000000000807801900000974091001970000097404400197000000000a94004b0000000007008019000000000494013f000009740440009c00000000040800190000000004076019000000000440004c000003df0000c13d0000000404300039000000000445034f000000000404043b000009790740009c000003df0000213d000000240330003900000005074002100000000007370019000000000117004b000003df0000213d0000004401500370000000000501043b000009520150009c000003df0000213d0000000001060019000000000001042d00000000010000190000253a00010430000000040210008a00000974030000410000009f0420008c000000000400001900000000040320190000097402200197000000000520004c0000000003008019000009740220009c00000000020400190000000002036019000000000220004c000004c00000613d00000002020003670000000403200370000000000303043b000009790430009c000004c00000213d00000023043000390000097405000041000000000614004b0000000006000019000000000605801900000974071001970000097404400197000000000874004b0000000005008019000000000474013f000009740440009c00000000040600190000000004056019000000000440004c000004c00000c13d0000000404300039000000000242034f000000000502043b0000097e0250009c000004c20000813d00000005025002100000003f04200039000000200200008a000000000424016f000000400700043d0000000004470019000000000674004b00000000060000190000000106004039000009790840009c000004c20000213d0000000106600190000004c20000c13d000000400040043f0000000000570435000000240330003900000060645000c90000000004340019000000000614004b000004c00000213d000000000550004c000004450000613d000000000507001900000000063100490000097408000041000000600960008c000000000900001900000000090840190000097406600197000000000a60004c000000000800a019000009740660009c00000000060900190000000006086019000000000660004c000004c00000c13d000000400600043d0000097b0860009c000004c20000213d0000006008600039000000400080043f0000000208300367000000000808043b000009520980009c000004c00000213d000000000886043600000020093000390000000209900367000000000909043b000000000098043500000040083000390000000208800367000000000808043b000009520980009c000004c00000213d00000020055000390000004009600039000000000089043500000000006504350000006003300039000000000643004b0000041e0000413d00000002040003670000002403400370000000000303043b000009790530009c000004c00000213d00000023053000390000097406000041000000000815004b0000000008000019000000000806801900000974091001970000097405500197000000000a95004b0000000006008019000000000595013f000009740550009c00000000050800190000000005066019000000000550004c000004c00000c13d0000000405300039000000000454034f000000000504043b000009790450009c000004c20000213d00000005045002100000003f04400039000000000424016f000000400200043d0000000004420019000000000624004b00000000060000190000000106004039000009790840009c000004c20000213d0000000106600190000004c20000c13d000000400040043f0000000000520435000000240330003900000060645000c90000000004340019000000000614004b000004c00000213d000000000550004c0000049b0000613d000000000502001900000000063100490000097408000041000000600960008c000000000900001900000000090840190000097406600197000000000a60004c000000000800a019000009740660009c00000000060900190000000006086019000000000660004c000004c00000c13d000000400600043d0000097b0860009c000004c20000213d0000006008600039000000400080043f0000000208300367000000000808043b000009520980009c000004c00000213d000000000886043600000020093000390000000209900367000000000909043b000000000098043500000040083000390000000208800367000000000808043b000009520980009c000004c00000213d00000020055000390000004009600039000000000089043500000000006504350000006003300039000000000643004b000004740000413d00000002060003670000004403600370000000000303043b0000006404600370000000000404043b000009790540009c000004c00000213d00000023054000390000097408000041000000000915004b00000000090000190000000009088019000009740a1001970000097405500197000000000ba5004b00000000080080190000000005a5013f000009740550009c00000000050900190000000005086019000000000550004c000004c00000c13d0000000405400039000000000556034f000000000505043b000009790850009c000004c00000213d00000024044000390000000008450019000000000118004b000004c00000213d0000008401600370000000000601043b000009520160009c000004c00000213d0000000001070019000000000001042d00000000010000190000253a000104300000097c0100004100000000001004350000004101000039000000040010043f0000097d010000410000253a00010430000000040210008a00000974030000410000001f0420008c000000000400001900000000040320190000097402200197000000000520004c0000000003008019000009740220009c00000000020400190000000002036019000000000220004c000004f50000613d00000002020003670000000403200370000000000303043b000009790430009c000004f50000213d00000023043000390000097405000041000000000614004b0000000006000019000000000605801900000974071001970000097404400197000000000874004b0000000005008019000000000474013f000009740440009c00000000040600190000000004056019000000000440004c000004f50000c13d0000000404300039000000000242034f000000000202043b000009790420009c000004f50000213d000000240330003900000005042002100000000004340019000000000114004b000004f50000213d0000000001030019000000000001042d00000000010000190000253a000104300000000004010019000000040140008a00000974020000410000013f0310008c000000000300001900000000030220190000097401100197000000000510004c0000000002008019000009740110009c00000000010300190000000001026019000000000110004c000005590000613d000000400100043d0000097f0210009c0000055b0000813d000000e002100039000000400020043f00000004020000390000000202200367000000000202043b000009520320009c000005590000213d000000000221043600000024030000390000000203300367000000000303043b000000000032043500000044020000390000000202200367000000000202043b000009520320009c000005590000213d0000004003100039000000000023043500000064020000390000000202200367000000000202043b000009520320009c000005590000213d0000006003100039000000000023043500000084020000390000000202200367000000000202043b00000080031000390000000000230435000000a4020000390000000202200367000000000202043b000000a0031000390000000000230435000000c4020000390000000202200367000000000202043b000009520320009c000005590000213d000000c00310003900000000002304350000000205000367000000e402500370000000000202043b000009790320009c000005590000213d00000023032000390000097406000041000000000743004b0000000007000019000000000706801900000974084001970000097403300197000000000983004b0000000006008019000000000383013f000009740330009c00000000030700190000000003066019000000000330004c000005590000c13d0000000403200039000000000335034f000000000303043b000009790630009c000005590000213d00000024022000390000000006230019000000000446004b000005590000213d0000010404500370000000000404043b000009520640009c000005590000213d0000012405500370000000000505043b0000094f0650009c000005590000213d000000000001042d00000000010000190000253a000104300000097c0100004100000000001004350000004101000039000000040010043f0000097d010000410000253a00010430000000040210008a0000097403000041000000bf0420008c000000000400001900000000040320190000097402200197000000000520004c0000000003008019000009740220009c00000000020400190000000002036019000000000220004c000006440000613d00000002020003670000000403200370000000000303043b000009790430009c000006440000213d00000023043000390000097405000041000000000614004b0000000006000019000000000605801900000974071001970000097404400197000000000874004b0000000005008019000000000474013f000009740440009c00000000040600190000000004056019000000000440004c000006440000c13d0000000404300039000000000242034f000000000502043b0000097e0250009c000006460000813d00000005025002100000003f04200039000000200200008a000000000424016f000000400800043d0000000004480019000000000684004b00000000060000190000000106004039000009790740009c000006460000213d0000000106600190000006460000c13d000000400040043f0000000000580435000000240330003900000060645000c90000000004340019000000000614004b000006440000213d000000000550004c000005c50000613d000000000508001900000000063100490000097407000041000000600960008c000000000900001900000000090740190000097406600197000000000a60004c000000000700a019000009740660009c00000000060900190000000006076019000000000660004c000006440000c13d000000400600043d0000097b0760009c000006460000213d0000006007600039000000400070043f0000000207300367000000000707043b000009520970009c000006440000213d000000000776043600000020093000390000000209900367000000000909043b000000000097043500000040073000390000000207700367000000000707043b000009520970009c000006440000213d00000020055000390000004009600039000000000079043500000000006504350000006003300039000000000643004b0000059e0000413d00000002040003670000002403400370000000000303043b000009790530009c000006440000213d00000023053000390000097406000041000000000715004b0000000007000019000000000706801900000974091001970000097405500197000000000a95004b0000000006008019000000000595013f000009740550009c00000000050700190000000005066019000000000550004c000006440000c13d0000000405300039000000000454034f000000000504043b000009790450009c000006460000213d00000005045002100000003f04400039000000000424016f000000400200043d0000000004420019000000000624004b00000000060000190000000106004039000009790740009c000006460000213d0000000106600190000006460000c13d000000400040043f0000000000520435000000240330003900000060645000c90000000004340019000000000614004b000006440000213d000000000550004c0000061b0000613d000000000502001900000000063100490000097407000041000000600960008c000000000900001900000000090740190000097406600197000000000a60004c000000000700a019000009740660009c00000000060900190000000006076019000000000660004c000006440000c13d000000400600043d0000097b0760009c000006460000213d0000006007600039000000400070043f0000000207300367000000000707043b000009520970009c000006440000213d000000000776043600000020093000390000000209900367000000000909043b000000000097043500000040073000390000000207700367000000000707043b000009520970009c000006440000213d00000020055000390000004009600039000000000079043500000000006504350000006003300039000000000643004b000005f40000413d00000002070003670000004403700370000000000303043b0000006404700370000000000404043b000009790540009c000006440000213d00000023054000390000097406000041000000000915004b00000000090000190000000009068019000009740a1001970000097405500197000000000ba5004b00000000060080190000000005a5013f000009740550009c00000000050900190000000005066019000000000550004c000006440000c13d0000000405400039000000000557034f000000000505043b000009790650009c000006440000213d00000024044000390000000006450019000000000116004b000006440000213d0000008401700370000000000601043b000009520160009c000006440000213d000000a401700370000000000701043b0000094f0170009c000006440000213d0000000001080019000000000001042d00000000010000190000253a000104300000097c0100004100000000001004350000004101000039000000040010043f0000097d010000410000253a00010430000000040210008a00000974030000410000015f0420008c000000000400001900000000040320190000097402200197000000000520004c0000000003008019000009740220009c00000000020400190000000002036019000000000220004c000007200000613d00000004020000390000000202200367000000000302043b000009790230009c000007200000213d000000040230003900000000042100490000097405000041000000800640008c000000000600001900000000060540190000097404400197000000000740004c000000000500a019000009740440009c00000000040600190000000004056019000000000440004c000007200000c13d000000400700043d0000097a0470009c000007220000813d0000008004700039000000400040043f0000000204200367000000000404043b000009520540009c000007200000213d000000000447043600000024053000390000000205500367000000000505043b000000000054043500000044043000390000000204400367000000000404043b0000004005700039000000000045043500000064043000390000000203000367000000000443034f000000000404043b000009790540009c000007200000213d00000000052400190000001f025000390000097404000041000000000612004b0000000006000019000000000604801900000974022001970000097408100197000000000982004b0000000004008019000000000282013f000009740220009c00000000020600190000000002046019000000000220004c000007200000c13d000000000253034f000000000202043b000009790320009c000007220000213d0000003f03200039000000200400008a000000000443016f000000400300043d0000000004430019000000000634004b00000000060000190000000106004039000009790840009c000007220000213d0000000106600190000007220000c13d000000400040043f000000000423043600000020065000390000000005620019000000000515004b000007200000213d0000001f0520018f00000002066003670000000508200272000006b80000613d0000000009000019000000050a900210000000000ba40019000000000aa6034f000000000a0a043b0000000000ab04350000000109900039000000000a89004b000006b00000413d000000000950004c000006c70000613d0000000508800210000000000686034f00000000088400190000000305500210000000000908043300000000095901cf000000000959022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000595019f00000000005804350000000002240019000000000002043500000060027000390000000000320435000000400200043d000009800320009c000007220000213d000000e003200039000000400030043f00000024030000390000000203300367000000000303043b000009520430009c000007200000213d000000000332043600000044040000390000000204400367000000000404043b000000000043043500000064030000390000000203300367000000000303043b000009520430009c000007200000213d0000004004200039000000000034043500000084030000390000000203300367000000000303043b000009520430009c000007200000213d00000060042000390000000000340435000000a4030000390000000203300367000000000303043b00000080042000390000000000340435000000c4030000390000000203300367000000000303043b000000a0042000390000000000340435000000e4030000390000000203300367000000000303043b000009520430009c000007200000213d000000c004200039000000000034043500000002060003670000010403600370000000000303043b000009790430009c000007200000213d00000023043000390000097405000041000000000814004b0000000008000019000000000805801900000974091001970000097404400197000000000a94004b0000000005008019000000000494013f000009740440009c00000000040800190000000004056019000000000440004c000007200000c13d0000000404300039000000000446034f000000000404043b000009790540009c000007200000213d00000024033000390000000005340019000000000115004b000007200000213d0000012401600370000000000501043b000009520150009c000007200000213d0000014401600370000000000601043b0000094f0160009c000007200000213d0000000001070019000000000001042d00000000010000190000253a000104300000097c0100004100000000001004350000004101000039000000040010043f0000097d010000410000253a000104300000000102000039000000000302041a000000000313004b000007310000a13d00000000002004350000098101100041000000000101041a0000095201100197000000000001042d00000000010000190000253a00010430000000040110008a00000974020000410000005f0310008c000000000300001900000000030220190000097401100197000000000410004c0000000002008019000009740110009c00000000010300190000000001026019000000000110004c0000074e0000613d00000002030003670000000401300370000000000101043b0000094f0210009c0000074e0000213d0000002402300370000000000202043b000009790420009c0000074e0000213d0000004403300370000000000303043b000009520430009c0000074e0000213d000000000001042d00000000010000190000253a00010430000000040110008a00000974020000410000001f0310008c000000000300001900000000030220190000097401100197000000000410004c0000000002008019000009740110009c00000000010300190000000001026019000000000110004c000007630000613d00000004010000390000000201100367000000000101043b000009520210009c000007630000213d000000000001042d00000000010000190000253a00010430000000040110008a00000974020000410000001f0310008c000000000300001900000000030220190000097401100197000000000410004c0000000002008019000009740110009c00000000010300190000000001026019000000000110004c000007780000613d00000004010000390000000201100367000000000101043b0000094f0210009c000007780000213d000000000001042d00000000010000190000253a000104300000094f0110019700000000001004350000000301000039000000200010043f0000094f0100004100000000020004140000094f0320009c0000000001024019000000c00110021000000978011001c70000801002000039253825330000040f0000000102200190000007900000613d000000000101043b000000000301041a000000400130027000000952021001970000097901300197000000e003300270000000ff0330018f000000000001042d00000000010000190000253a00010430000000000440004c0000000004000019000000010400c03900000040051000390000000000450435000009520330019700000020041000390000000000340435000009790220019700000000002104350000006001100039000000000001042d000000000100041a00000952051001970000000002000411000000000225004b000007b80000c13d0000095001100197000000000010041b000000400100043d0000094f0200004100000000030004140000094f0430009c00000000030280190000094f0410009c00000000010280190000004001100210000000c002300210000000000112019f00000985011001c70000800d020000390000000303000039000009530400004100000000060000192538252e0000040f0000000101200190000007c90000613d000000000001042d000000400100043d00000044021000390000098203000041000000000032043500000983020000410000000000210435000000240210003900000020030000390000000000320435000000040210003900000000003204350000094f020000410000094f0310009c0000000001028019000000400110021000000984011001c70000253a0001043000000000010000190000253a000104300000000006010019000000000100041a00000952051001970000000002000411000000000225004b000007e80000c13d0000095202600198000007f90000613d0000095001100197000000000121019f000000000010041b000000400100043d0000094f0200004100000000030004140000094f0430009c00000000030280190000094f0410009c00000000010280190000004001100210000000c002300210000000000112019f00000985011001c70000800d02000039000000030300003900000953040000412538252e0000040f00000001012001900000080e0000613d000000000001042d000000400100043d00000044021000390000098203000041000000000032043500000983020000410000000000210435000000240210003900000020030000390000000000320435000000040210003900000000003204350000094f020000410000094f0310009c0000000001028019000000400110021000000984011001c70000253a00010430000000400100043d000000640210003900000986030000410000000000320435000000440210003900000987030000410000000000320435000000240210003900000026030000390000000000320435000009830200004100000000002104350000000402100039000000200300003900000000003204350000094f020000410000094f0310009c0000000001028019000000400110021000000988011001c70000253a0001043000000000010000190000253a000104300009000000000002000000400a00043d0000097f01a0009c0000096b0000813d000000e001a00039000000400010043f0000000604000039000000c001a000390000000000010435000000a002a0003900000000000204350000008003a0003900000000000304350000006005a000390000000000050435000000400ba0003900000000000b0435000000000c0a043600000000000c043500000004060000390000000206600367000000000706043b000000f006700272000008300000613d000000010860008c0000082e0000c13d0000001a0400003900000050067002700000095206600197000008300000013d0000098906600041000000000606041a00000000006a043500000002060000390000000207400367000000000807043b000000f0078002720000083e0000613d000000010970008c0000083c0000c13d0000001606000039000000500780027000000952077001970000083e0000013d0000098907700041000000000707041a0000000000750435000000000646001900000001046001bf0000000205000367000000000665034f000000000606043b0000098a0760009c000008540000413d000000f80660027000000003076002100000000007700049000001000800008a000000000887004b0000000008000019000008510000413d000000000545034f000000000505043b0000010007700039000000000875022f00000000008c043500000000046400190000000205000367000000000645034f000000000606043b000000f80660027000000003076002100000000008700049000001000700008a000000000778004b0000000007000019000008620000413d0000000107400039000000000575034f000000000505043b0000010007800039000000000775022f0000000000730435000000000346001900000001043000390000000204400367000000000404043b000000010500008a000000000454013f000000e80440027000000000547400a90000098b5440012a0000000000420435000000020700003900000004023000390000000203000367000000000523034f000000000505043b000000f0045002720000087c0000613d000000010640008c0000087a0000c13d0000001607000039000000500550027000000952045001970000087c0000013d0000098905400041000000000405041a0000000002270019000000000323034f000000000503043b000000f003500270000000010630008c000008860000613d000000000530004c0000088a0000c13d0000000202200039000008900000013d0000001606000039000000500350027000000952033001970000088d0000013d00000002060000390000098903300041000000000303041a0000000002260019000000000530004c000008910000c13d000000000304001900000000003b04350000000203200367000000000503043b000000f003500270000000010630008c0000089b0000613d000000000530004c0000089f0000c13d0000000205200039000008a50000013d000000160600003900000050035002700000095203300197000008a20000013d00000002060000390000098903300041000000000303041a0000000005260019000000000230004c000008a60000c13d000000000300041100000000003104350000000201000367000000000251034f0000000403500039000000000131034f00000000030c0433000000000601043b000000000702043b00000000010a04330000095208100198000008bb0000613d000500000006001d000600000005001d000000000230004c00090000000a001d000800000004001d000700000007001d000008d20000613d000000000200041100000952082001970000094b0000013d0000000001000416000000000230004c000008f50000613d000000000131004b000009640000613d000000400100043d00000044021000390000099103000041000000000032043500000024021000390000000f030000390000000000320435000009830200004100000000002104350000000402100039000000200300003900000000003204350000094f020000410000094f0310009c0000000001028019000000400110021000000984011001c70000253a000104300000098c010000410000000000100439000200000008001d00000004008004430000094f0100004100000000020004140000094f0320009c0000000001024019000000c0011002100000098d011001c7000080020200003900040000000b001d00030000000c001d253825330000040f0000000305000029000000040b000029000000090a0000290000000102200190000009710000613d000000000101043b000000000110004c000009710000613d000000400900043d0000098e010000410000000000190435000000000100041100000952081001970000000401900039000000000081043500000000010004140000000202000029000000040320008c000008f70000c13d00000001030000310000092e0000013d00000000001c0435000009640000013d000100000008001d0000094f040000410000094f0310009c00000000010480190000094f0390009c000000000304001900000000030940190000004003300210000000c001100210000000000131019f0000097d011001c7000200000009001d253825330000040f0000000209000029000000000301001900000060033002700000094f03300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000009170000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b0000090f0000413d000000000640004c000009260000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000102200190000000090a000029000000040b00002900000003050000290000000108000029000009730000613d0000001f01300039000000200200008a000000000221016f0000000001920019000000000221004b00000000020000190000000102004039000009790310009c0000096b0000213d00000001022001900000096b0000c13d000000400010043f00000974010000410000000102000031000000200320008c000000000300001900000000030140190000097402200197000000000420004c000000000100a019000009740220009c000000000103c019000000000110004c000009710000c13d0000000003090433000000000035043500000000010a04330000000804000029000000070700002900000000040b0433000000400200043d00000020052000390000098f060000410000000000650435000000640520003900000000003504350000095203400197000000440420003900000000003404350000002403200039000000000083043500000064030000390000000000320435000009900320009c0000096b0000213d000000a003200039000000400030043f000009520110019725380a800000040f000000090a00002900000008040000290000000605000029000000050600002900000007070000290000000502500039000000e005700270000000f30160027000001fe00310018f00000000010a001925380caa0000040f000000000001042d0000097c0100004100000000001004350000004101000039000000040010043f0000097d010000410000253a0001043000000000010000190000253a00010430000000400200043d0000001f0430018f0000000503300272000009800000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000009780000413d000000000540004c0000098f0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000094f0100004100000001030000310000094f0430009c00000000030180190000094f0420009c000000000102401900000040011002100000006002300210000000000112019f0000253a00010430000800000000000200000000080100190000002009800039000000000709043300000000010804330000095206100198000009aa0000613d000400000002001d000500000003001d000600000004001d000700000005001d000000000270004c000800000008001d000009c10000613d0000000002000411000009520920019700000a350000013d0000000001000416000000000670004c000009e20000613d000000000171004b00000a4f0000613d000000400100043d00000044021000390000099103000041000000000032043500000024021000390000000f030000390000000000320435000009830200004100000000002104350000000402100039000000200300003900000000003204350000094f020000410000094f0310009c0000000001028019000000400110021000000984011001c70000253a000104300000098c010000410000000000100439000200000006001d00000004006004430000094f0100004100000000020004140000094f0320009c0000000001024019000000c0011002100000098d011001c70000800202000039000300000009001d253825330000040f00000003050000290000000808000029000000010220019000000a580000613d000000000101043b000000000110004c00000a580000613d000000400a00043d0000098e0100004100000000001a0435000000000100041100000952091001970000000401a00039000000000091043500000000010004140000000202000029000000040320008c000009e40000c13d000000010300003100000a1a0000013d000000000019043500000a4f0000013d000100000009001d0000094f040000410000094f0310009c00000000010480190000094f03a0009c000000000304001900000000030a40190000004003300210000000c001100210000000000131019f0000097d011001c700020000000a001d253825330000040f000000020a000029000000000301001900000060033002700000094f03300197000000200430008c000000200500003900000000050340190000001f0450018f000000050550027200000a040000613d0000000006000019000000050760021000000000087a0019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000009fc0000413d000000000640004c00000a130000613d0000000505500210000000000651034f00000000055a00190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f0003000000010355000000010220019000000008080000290000000305000029000000010900002900000a5a0000613d0000001f01300039000000200200008a000000000221016f0000000001a20019000000000221004b00000000020000190000000102004039000009790310009c00000a520000213d000000010220019000000a520000c13d000000400010043f00000974010000410000000102000031000000200320008c000000000300001900000000030140190000097402200197000000000420004c000000000100a019000009740220009c000000000103c019000000000110004c00000a580000c13d00000000070a04330000000000750435000000000108043300000040028000390000000004020433000000400200043d00000020052000390000098f060000410000000000650435000000640520003900000000007504350000095203400197000000440420003900000000003404350000002403200039000000000093043500000064030000390000000000320435000009920320009c00000a520000813d000000a003200039000000400030043f000009520110019725380a800000040f00000008080000290000000705000029000000060400002900000005030000290000000402000029000000000108001925380caa0000040f000000000001042d0000097c0100004100000000001004350000004101000039000000040010043f0000097d010000410000253a0001043000000000010000190000253a00010430000000400200043d0000001f0430018f000000050330027200000a670000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000a5f0000413d000000000540004c00000a760000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000094f0100004100000001030000310000094f0430009c00000000030180190000094f0420009c000000000102401900000040011002100000006002300210000000000112019f0000253a0001043000050000000000020000095206100197000000400700043d000009930170009c00000b6d0000813d0000004001700039000000400010043f0000002001700039000009940300004100000000003104350000002001000039000300000001001d000000000017043500000000230204340000000001000414000000040460008c00000ae30000c13d0000006009000039000000010100003200000ac10000613d000009790210009c00000b6d0000213d0000003f02100039000000200300008a000000000232016f000000400900043d0000000002290019000000000392004b00000000030000190000000103004039000009790420009c00000b6d0000213d000000010330019000000b6d0000c13d000000400020043f0000000001190436000000030200036700000001040000310000001f0340018f000000050440027200000ab20000613d000000000500001900000005065002100000000007610019000000000662034f000000000606043b00000000006704350000000105500039000000000645004b00000aaa0000413d000000000530004c00000ac10000613d0000000504400210000000000242034f00000000014100190000000303300210000000000401043300000000043401cf000000000434022f000000000202043b0000010003300089000000000232022f00000000023201cf000000000242019f00000000002104350000000002000415000000050220008a00000020022000c90000000001090433000000000310004c00000b2c0000c13d0000098c010000410000000000100439000000040100003900000004001004430000094f0100004100000000020004140000094f0320009c0000000001024019000000c0011002100000098d011001c70000800202000039000200000009001d253825330000040f0000000209000029000000010220019000000b6b0000613d0000000002000415000000050220008a00000020022000c9000000000101043b000000000110004c00000b590000613d0000000001090433000000200220011a000000000209001f000000000210004c00000b2e0000c13d00000b430000013d0000094f040000410000094f0530009c000000000304801900000060033002100000094f0520009c00000000020480190000004002200210000000000223019f0000094f0310009c0000000001048019000000c001100210000000000112019f000200000006001d0000000002060019000100000007001d2538252e0000040f0000006009000039000300000001035500000060011002700001094f0010019d0000094f0110019800000b230000613d0000003f031000390000099503300197000000400900043d0000000003390019000000000493004b00000000040000190000000104004039000009790530009c00000b6d0000213d000000010440019000000b6d0000c13d000000400030043f0000000001190436000000030300036700000001050000310000001f0450018f000000050550027200000b140000613d000000000600001900000005076002100000000008710019000000000773034f000000000707043b00000000007804350000000106600039000000000756004b00000b0c0000413d000000000640004c00000b230000613d0000000505500210000000000353034f00000000015100190000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f00000000003104350000000031090434000000010220019000000b880000613d0000000002000415000000040220008a00000020022000c9000000000310004c000000020300002900000b440000613d000000200220011a000000000209001f0000097402000041000000200310008c000000000300001900000000030240190000097401100197000000000410004c000000000200a019000009740110009c00000000010300190000000001026019000000000110004c00000b6b0000c13d00000020019000390000000001010433000000000210004c0000000002000019000000010200c039000000000221004b00000b6b0000c13d000000000110004c00000b730000613d000000000001042d0000098c01000041000000000010043900000004003004430000094f0100004100000000020004140000094f0320009c0000000001024019000000c0011002100000098d011001c70000800202000039000200000009001d253825330000040f0000000209000029000000010220019000000b6b0000613d0000000002000415000000040220008a00000020022000c9000000000101043b000000000110004c00000add0000c13d000000400100043d00000044021000390000099803000041000000000032043500000024021000390000001d030000390000000000320435000009830200004100000000002104350000000402100039000000030300002900000000003204350000094f020000410000094f0310009c0000000001028019000000400110021000000984011001c70000253a0001043000000000010000190000253a000104300000097c0100004100000000001004350000004101000039000000040010043f0000097d010000410000253a00010430000000400100043d00000064021000390000099603000041000000000032043500000044021000390000099703000041000000000032043500000024021000390000002a030000390000000000320435000009830200004100000000002104350000000402100039000000030300002900000000003204350000094f020000410000094f0310009c0000000001028019000000400110021000000988011001c70000253a00010430000000000210004c00000b9f0000c13d000000400300043d000200000003001d000009830100004100000000001304350000000401300039000000030200002900000000002104350000002402300039000000010100002925380ba80000040f000000020400002900000000014100490000094f020000410000094f0310009c00000000010280190000094f0340009c000000000204401900000040022002100000006001100210000000000121019f0000253a000104300000094f020000410000094f0430009c00000000030280190000094f0410009c000000000102801900000060011002100000004002300210000000000121019f0000253a0001043000000000030104330000000002320436000000000430004c00000bb90000613d000000000400001900000000054200190000002004400039000000000614001900000000060604330000000000650435000000000534004b00000bad0000413d000000000134004b00000bb90000a13d0000000001320019000000000001043500000bb90000013d0000001f01300039000000200300008a000000000131016f0000000001120019000000000001042d000c000000000002000900000006001d000800000005001d000700000004001d000600000003001d000000000802001900000000420104340000095209200197000000400300043d000009930230009c00000c7c0000813d0000002002800039000000000508043300000000060204330000004007300039000000400070043f0000002007300039000000000067043500000952055001970000000000530435000000400700043d0000097b0570009c00000c7c0000213d0000000004040433000000400510003900000000050504330000006006700039000000400060043f0000004006700039000b00000006001d00000000005604350000000003370436000a00000003001d0000000000430435000000400500043d000009990350009c00000c7c0000213d000300000007001d0000000002020433000000400380003900000000030304330000004004500039000000400040043f0000095203300197000200000005001d0000000003350436000100000003001d000000000023043500000060011000390000000001010433000400000001001d0000098c010000410000000000100439000500000009001d00000004009004430000094f0100004100000000020004140000094f0320009c0000000001024019000000c0011002100000098d011001c70000800202000039000c00000008001d253825330000040f0000000c06000029000000010220019000000c820000613d000000000101043b000000000110004c00000c820000613d000000400800043d0000099a0100004100000000001804350000000301000029000000000101043300000000210104340000095201100197000000040380003900000000001304350000000001020433000000240280003900000000001204350000000a010000290000000001010433000000440280003900000000001204350000000b010000290000000001010433000000640280003900000000001204350000000201000029000000000101043300000952011001970000008402800039000000000012043500000001010000290000000001010433000000e4028000390000010003000039000000000032043500000000020004110000095202200197000000c4038000390000000000230435000000a40280003900000000001204350000000409000029000000000109043300000104028000390000000000120435000000000210004c000000050200002900000c3c0000613d0000012407800039000000000300001900000000047300190000002003300039000000000593001900000000050504330000000000540435000000000413004b00000c310000413d000000000313004b00000c3c0000a13d000000000371001900000000000304350000000007000414000000040320008c00000c410000c13d000000010400003100000c5d0000013d0000001f01100039000000200300008a000000000131016f0000094f030000410000094f0480009c00000000040300190000000004084019000000400440021000000124011000390000094f0510009c00000000010380190000006001100210000000000141019f0000094f0470009c0000000003074019000000c003300210000000000113019f000b00000008001d2538252e0000040f0000000b080000290000000c06000029000000000301001900000060033002700001094f0030019d0000094f043001970003000000010355000000010220019000000c840000613d0000001f01400039000000200200008a000000000221016f0000000001820019000000000221004b00000000020000190000000102004039000009790310009c00000c7c0000213d000000010220019000000c7c0000c13d000000400010043f00000974010000410000000102000031000000000320004c000000000300001900000000030140190000097402200197000000000420004c000000000100a019000009740220009c000000000103c019000000000110004c00000c820000c13d0000000001060019000000060200002900000007030000290000000804000029000000090500002925380caa0000040f000000000001042d0000097c0100004100000000001004350000004101000039000000040010043f0000097d010000410000253a0001043000000000010000190000253a00010430000000400200043d0000001f0340018f000000050440027200000c910000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00000c890000413d000000000530004c00000ca00000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000094f0100004100000001030000310000094f0430009c00000000030180190000094f0420009c000000000102401900000040011002100000006002300210000000000112019f0000253a00010430000d000000000002000500000005001d000800000004001d000c00000003001d000700000002001d000000a004100039000000000304043300000080051000390000000002050433000000000223004b0000100a0000213d000000000230004c0000101c0000613d0000006002100039000d00000002001d000000000202043300000952062001970000000032010434000b00000003001d0000095202200197000000000262004b0000102e0000613d000300000005001d000200000004001d000a00000001001d000000000160004c0000000002000410000900000002001d00000ce40000613d0000098c010000410000000000100439000600000006001d00000004006004430000094f0100004100000000020004140000094f0320009c0000000001024019000000c0011002100000098d011001c70000800202000039253825330000040f000000010220019000000ffc0000613d000000000101043b000000000110004c00000ffc0000613d000000400900043d0000098e01000041000000000019043500000004019000390000000902000029000000000021043500000000010004140000000602000029000000040320008c00000cf50000c13d000000010300003100000d270000013d0000099b01000041000000000010043900000004002004430000094f0100004100000000020004140000094f0320009c0000000001024019000000c0011002100000098d011001c70000800a02000039253825330000040f000000010220019000000ffc0000613d000000400600043d000000000101043b000400000001001d00000d410000013d0000094f040000410000094f0310009c00000000010480190000094f0390009c000000000304001900000000030940190000004003300210000000c001100210000000000131019f0000097d011001c7000600000009001d253825330000040f0000000609000029000000000301001900000060033002700000094f03300197000000200430008c000000200500003900000000050340190000001f0450018f000000050550027200000d140000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00000d0c0000413d000000000640004c00000d230000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000102200190000010900000613d0000001f01300039000000200200008a000000000121016f0000000006910019000000000116004b00000000010000190000000101004039000009790260009c00000ffe0000213d000000010110019000000ffe0000c13d000000400060043f00000974010000410000000102000031000000200320008c000000000300001900000000030140190000097402200197000000000420004c000000000100a019000009740220009c000000000103c019000000000110004c00000ffc0000c13d0000000001090433000400000001001d000009990160009c00000ffe0000213d0000004001600039000000400010043f0000000101000039000100000001001d000000000116043600000000020000310000000202200367000000000300001900000005043002100000000005410019000000000442034f000000000404043b0000000000450435000000010330003a00000000040000190000000104006039000000010440019000000d4b0000c13d000600000006001d0000000002060433000000000220004c000010400000613d0000000b02000029000000000202043300000000002104350000098c01000041000000000010043900000008010000290000095201100197000800000001001d00000004001004430000094f0100004100000000020004140000094f0320009c0000000001024019000000c0011002100000098d011001c70000800202000039253825330000040f0000000102200190000000060900002900000ffc0000613d000000000101043b000000000110004c00000ffc0000613d000000400a00043d0000099c0100004100000000001a04350000006401a000390000000c0500002900000000005104350000000401a00039000000600200003900000000002104350000001f0250018f0000008403a0003900000007040000290000000204400367000000050550027200000d880000613d000000000600001900000005076002100000000008730019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b00000d800000413d000000000620004c00000d970000613d0000000505500210000000000454034f00000000055300190000000302200210000000000605043300000000062601cf000000000626022f000000000404043b0000010002200089000000000424022f00000000022401cf000000000262019f000000000025043500000000020004110000000c04000029000000000343001900000000000304350000001f03400039000000200400008a000c00000004001d000000000343016f0000002404a00039000000800530003900000000005404350000000001310019000000000309043300000080041000390000000000340435000000a001100039000000000430004c000000080400002900000db10000613d00000000060000190000002009900039000000000509043300000000015104360000000106600039000000000536004b00000dab0000413d00000952032001970000004402a00039000700000003001d000000000032043500000000030004160000000002000414000000040540008c00000dbb0000c13d000000010400003100000ddb0000013d0000000001a100490000094f070000410000094f05a0009c00060000000a001d000000000507001900000000050a401900000040055002100000094f0610009c00000000010780190000006001100210000000000151019f0000094f0520009c0000000002078019000000c002200210000000000112019f000000000230004c00000dd10000613d00000985011001c7000080090200003900000000050000192538252e0000040f00000dd30000013d00000000020400192538252e0000040f0003000000010355000000000301001900000060033002700001094f0030019d0000094f043001970000000102200190000000060a0000290000106a0000613d0000001f014000390000000c02000029000000000221016f0000000001a20019000000000221004b00000000020000190000000102004039000009790310009c00000ffe0000213d000000010220019000000ffe0000c13d000000400010043f00000974010000410000000102000031000000000320004c000000000300001900000000030140190000097402200197000000000420004c000000000100a019000009740220009c000000000103c019000000000110004c00000ffc0000c13d0000000d010000290000000001010433000009520210019800000e140000613d0000098c010000410000000000100439000800000002001d00000004002004430000094f0100004100000000020004140000094f0320009c0000000001024019000000c0011002100000098d011001c70000800202000039253825330000040f000000010220019000000ffc0000613d000000000101043b000000000110004c00000ffc0000613d000000400900043d0000098e01000041000000000019043500000004019000390000000902000029000000000021043500000000010004140000000802000029000000040320008c00000e240000c13d000000010300003100000e560000013d0000099b010000410000000000100439000000090100002900000004001004430000094f0100004100000000020004140000094f0320009c0000000001024019000000c0011002100000098d011001c70000800a02000039253825330000040f000000010220019000000ffc0000613d000000000101043b00000e6f0000013d0000094f040000410000094f0310009c00000000010480190000094f0390009c000000000304001900000000030940190000004003300210000000c001100210000000000131019f0000097d011001c7000900000009001d253825330000040f0000000909000029000000000301001900000060033002700000094f03300197000000200430008c000000200500003900000000050340190000001f0450018f000000050550027200000e430000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00000e3b0000413d000000000640004c00000e520000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000102200190000010b60000613d0000001f013000390000000c02000029000000000221016f0000000001920019000000000221004b00000000020000190000000102004039000009790310009c00000ffe0000213d000000010220019000000ffe0000c13d000000400010043f00000974010000410000000102000031000000200320008c000000000300001900000000030140190000097402200197000000000420004c000000000100a019000009740220009c000000000103c019000000000110004c00000ffc0000c13d00000000010904330000000403000029000000000231004b000010040000413d000000000731004900000005010000290000094f01100197000800000001001d0000099d0110009c00000f1e0000413d000900000007001d000000080100002900000000001004350000000301000039000000200010043f0000094f0100004100000000020004140000094f0320009c0000000001024019000000c00110021000000978011001c70000801002000039253825330000040f000000010220019000000ffc0000613d000000400a00043d0000097b02a0009c000000090900002900000ffe0000213d000000000101043b0000006002a00039000000400020043f000000000101041a0000099e021001980000000002000019000000010200c0390000004003a000390000000000230435000009790210019700000000032a04360000004001100270000009520410019700000000004304350000000d0100002900000000010104330000095201100197000000000390004c00000ea20000613d000000010300008a00000000539300d9000000000323004b000010040000413d00000000259200a90000099f0250009c000010040000213d000000400200043d000009a06350012a000000000610004c00000ebb0000613d0000002005200039000009a1060000410000000000650435000000440520003900000000003504350000002403200039000000000043043500000044030000390000000000320435000009a20320009c00000ffe0000213d0000008003200039000000400030043f00060000000a001d25380a800000040f000000060a000029000000090900002900000f100000013d0000000001000414000000040640008c00000ec10000c13d0000000102000039000000010100003100000edf0000013d00060000000a001d0000094f060000410000094f0710009c00000000010680190000094f0720009c00000000020680190000004002200210000000c001100210000000000121019f000009a00250009c00000ed50000813d00000000020400192538252e0000040f000300000001035500000060011002700001094f0010019d0000094f011001970000000909000029000000060a00002900000edf0000013d00000985011001c7000080090200003900000000050000192538252e0000040f000300000001035500000060011002700001094f0010019d0000094f011001970000000909000029000000060a000029000000000310004c00000f0e0000613d000009790310009c00000ffe0000213d0000003f031000390000000c04000029000000000443016f000000400300043d0000000004430019000000000534004b00000000050000190000000105004039000009790640009c00000ffe0000213d000000010550019000000ffe0000c13d000000400040043f0000000001130436000000030300036700000001050000310000001f0450018f000000050550027200000eff0000613d000000000600001900000005076002100000000008710019000000000773034f000000000707043b00000000007804350000000106600039000000000756004b00000ef70000413d000000000640004c00000f0e0000613d0000000505500210000000000353034f00000000015100190000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f00000000003104350000000101200190000010580000613d00000000010a04330000097901100197000009770210009c000010040000213d00000977020000410000000001120049000000000290004c00000f1c0000613d000000010200008a00000000329200d9000000000212004b000010040000413d00000000219100a9000009771710012a000000030100002900000000010104330000097402000041000000000310004c000000000300001900000000030240190000097404100197000000000540004c000000000200a019000009740440009c00000000030260190000097402100167000000000330004c00000f3a0000c13d0000097403000041000000000472004b0000000004000019000000000403201900000974057001970000097402200197000000000652004b0000000003008019000000000252013f000009740220009c00000000020400190000000002036019000000000220004c000010040000c13d000009a3021000410000097403000041000000000472004b0000000004000019000000000403401900000974057001970000097402200197000000000652004b000000000300a019000000000252013f000009740220009c00000000020400190000000002036019000000000220004c0000000002000019000000010200c039000000ff031002700000000002230170000010040000c13d00000000091700490000097402000041000000000390004c000000000300001900000000030220190000097404900197000000000540004c0000000002008019000009740440009c000000000203c019000000000220004c0000000008070019000000000801c01900000002010000290000000001010433000000000118004b000010460000413d000000400200043d0000000a01000029000000c001100039000000000101043300000952041001970000000d0100002900000000010104330000095201100198000900000008001d00000f7a0000613d0000002003200039000009a1050000410000000000530435000000440320003900000000008304350000002403200039000000000043043500000044030000390000000000320435000009a20320009c00000ffe0000213d0000008003200039000000400030043f000600000009001d25380a800000040f0000000609000029000000090800002900000fd20000013d0000000001000414000000040340008c00000f7f0000c13d000000010100003100000fa00000013d000600000009001d0000094f030000410000094f0510009c00000000010380190000094f0520009c00000000020380190000004002200210000000c001100210000000000121019f000000000280004c00000f970000613d00000985011001c70000800902000039000000000308001900000000050000192538252e0000040f0000000908000029000100000002001d000300000001035500000060011002700001094f0010019d0000094f01100197000000060900002900000fa00000013d00000000020400192538252e0000040f0000000908000029000100000002001d000300000001035500000060011002700001094f0010019d0000094f011001970000000609000029000000000210004c00000fcf0000613d000009790210009c00000ffe0000213d0000003f021000390000000c03000029000000000332016f000000400200043d0000000003320019000000000423004b00000000040000190000000104004039000009790530009c00000ffe0000213d000000010440019000000ffe0000c13d000000400030043f0000000001120436000000030200036700000001040000310000001f0340018f000000050440027200000fc00000613d000000000500001900000005065002100000000007610019000000000662034f000000000606043b00000000006704350000000105500039000000000645004b00000fb80000413d000000000530004c00000fcf0000613d0000000504400210000000000242034f00000000014100190000000303300210000000000401043300000000043401cf000000000434022f000000000202043b0000010003300089000000000232022f00000000023201cf000000000242019f000000000021043500000001010000290000000101100190000010580000613d0000000a0100002900000000010104330000000d0200002900000000020204330000000b030000290000000003030433000000400400043d000000c00540003900000008060000290000000000650435000000a00540003900000000009504350000006005400039000000000085043500000020054000390000000000350435000009520220019700000080034000390000000000230435000009520110019700000040024000390000000000120435000000070100002900000000001404350000094f0100004100000000020004140000094f0320009c00000000020180190000094f0340009c00000000010440190000004001100210000000c002200210000000000112019f000009a5011001c70000800d020000390000000103000039000009a6040000412538252e0000040f000000010120019000000ffc0000613d0000000901000029000000000001042d00000000010000190000253a000104300000097c0100004100000000001004350000004101000039000000040010043f0000097d010000410000253a000104300000097c0100004100000000001004350000001101000039000000040010043f0000097d010000410000253a00010430000000400100043d0000004402100039000009aa03000041000000000032043500000024021000390000001a030000390000000000320435000009830200004100000000002104350000000402100039000000200300003900000000003204350000094f020000410000094f0310009c0000000001028019000000400110021000000984011001c70000253a00010430000000400100043d0000004402100039000009a9030000410000000000320435000000240210003900000016030000390000000000320435000009830200004100000000002104350000000402100039000000200300003900000000003204350000094f020000410000094f0310009c0000000001028019000000400110021000000984011001c70000253a00010430000000400100043d0000004402100039000009a8030000410000000000320435000000240210003900000017030000390000000000320435000009830200004100000000002104350000000402100039000000200300003900000000003204350000094f020000410000094f0310009c0000000001028019000000400110021000000984011001c70000253a000104300000097c0100004100000000001004350000003201000039000000040010043f0000097d010000410000253a00010430000000400100043d0000004402100039000009a7030000410000000000320435000000240210003900000017030000390000000000320435000009830200004100000000002104350000000402100039000000200300003900000000003204350000094f020000410000094f0310009c0000000001028019000000400110021000000984011001c70000253a00010430000000400100043d0000004402100039000009a4030000410000000000320435000000240210003900000013030000390000000000320435000009830200004100000000002104350000000402100039000000200300003900000000003204350000094f020000410000094f0310009c0000000001028019000000400110021000000984011001c70000253a00010430000000400200043d0000001f0340018f0000000504400272000010770000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b0000106f0000413d000000000530004c000010860000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000094f0100004100000001030000310000094f0430009c00000000030180190000094f0420009c000000000102401900000040011002100000006002300210000000000112019f0000253a00010430000000400200043d0000001f0430018f00000005033002720000109d0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000010950000413d000000000540004c000010ac0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000094f0100004100000001030000310000094f0430009c00000000030180190000094f0420009c000000000102401900000040011002100000006002300210000000000112019f0000253a00010430000000400200043d0000001f0430018f0000000503300272000010c30000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000010bb0000413d000000000540004c000010d20000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000094f0100004100000001030000310000094f0430009c00000000030180190000094f0420009c000000000102401900000040011002100000006002300210000000000112019f0000253a00010430000d00000000000200000002010003670000000502100370000000000302043b0000000401100370000000000601043b000000f80560027000000005015002100000003f0210003900003fe00420018f000000400f00043d0000000002f40019000000000442004b00000000040000190000000104004039000009790720009c000012a80000213d0000000104400190000012a80000c13d000000400020043f00000000025f0436000d00000002001d0000098a0260009c000011040000413d0000000002000019000000400400043d0000097b0740009c000012a80000213d0000006007400039000000400070043f0000004007400039000000000007043500000020074000390000000000070435000000000004043500000020022000390000000007f200190000000000470435000000000412004b000010f50000413d000000f80130027000000005041002100000003f0240003900003fe00220018f000000400700043d0000000002270019000900000007001d000000000772004b00000000070000190000000107004039000009790820009c000012a80000213d0000000107700190000012a80000c13d000000400020043f000000090200002900000000021204360000098a0730009c000011280000413d0000000007000019000000400800043d0000097b0980009c000012a80000213d0000006009800039000000400090043f000000400980003900000000000904350000002009800039000000000009043500000000000804350000002007700039000000090900002900000000099700190000000000890435000000000847004b000011180000413d000000080400003900000002070003670000000608700370000000000808043b000000f00a800272000011360000613d0000000109a0008c000011340000c13d0000001c040000390000005008800270000009520a800197000011360000013d0000098908a00041000000000a08041a000b0000000a001d000000000747034f000000000707043b000000f80770027000000001044001bf000400000007001d000000000c7400190000098a0660009c000012240000813d0000098a0330009c000012670000813d0000000401c000390000000202000367000000000112034f0000000003c2034f000000000242034f000000000202043b000100000002001d000000000203043b000300000002001d000000000101043b000200000001001d00000000010f0433000000000210004c000700000000001d0000000b060000290000120c0000613d0000000004000019000700000000001d000a0000000f001d00080000000c001d000011590000013d0000000104400039000000000214004b0000120c0000813d00000005024002100000000d03000029000000000723001900000000030704330000002002300039000000000202043300000000030304330000095203300198000011850000613d000000000220004c000c00000004001d000011ea0000c13d000500000007001d0000098c010000410000000000100439000600000003001d00000004003004430000094f0100004100000000020004140000094f0320009c0000000001024019000000c0011002100000098d011001c70000800202000039253825330000040f0000000a050000290000000102200190000012b40000613d000000000101043b000000000110004c000012b40000613d000000400900043d0000098e010000410000000000190435000000000100041100000952011001970000000402900039000000000012043500000000010004140000000602000029000000040320008c000011960000c13d0000000103000031000011c80000013d000000000220004c0000118f0000c13d000000000100041600000000020f0433000000000242004b000012ae0000a13d00000000020704330000002002200039000000000012043500000000010f0433000000000241004b000012ae0000a13d000000000207043300000020022000390000000002020433000700000002001d000011560000013d0000094f040000410000094f0310009c00000000010480190000094f0390009c000000000304001900000000030940190000004003300210000000c001100210000000000131019f0000097d011001c7000600000009001d253825330000040f0000000609000029000000000301001900000060033002700000094f03300197000000200430008c000000200500003900000000050340190000000504500272000011b40000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000746004b000011ac0000413d0000001f05500190000011c30000613d0000000504400210000000000641034f00000000044900190000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f0000000000540435000100000003001f000300000001035500000001022001900000000a05000029000012b60000613d0000001f01300039000000200200008a000000000221016f0000000001920019000000000221004b00000000020000190000000102004039000009790310009c000012a80000213d0000000102200190000012a80000c13d000000400010043f00000974010000410000000102000031000000200320008c000000000300001900000000030140190000097402200197000000000420004c000000000100a019000009740220009c000000000103c019000000000110004c000012b40000c13d00000000010504330000000c04000029000000000141004b0000000507000029000012ae0000a13d00000000010904330000000002070433000000200220003900000000001204350000000001050433000000000141004b000012ae0000a13d00000000010704330000004002100039000000000302043300000000210104340000000004020433000000400200043d00000020052000390000098f06000041000000000065043500000064052000390000000000450435000009520330019700000044042000390000000000340435000000000300041100000952033001970000002404200039000000000034043500000064030000390000000000320435000009900320009c000012a80000213d000000a003200039000000400030043f000009520110019725380a800000040f0000000a0f00002900000000010f04330000000b06000029000000080c0000290000000c04000029000011560000013d00000000010004160000000702000029000000000121004b000012dc0000c13d0000000401000029000000030110021000000100021000890000000103000029000000000223022f0000000001100049000001000300008a000000000131004b000000000302001900000000030040190000000504c000390000000301000029000000e0071002700000000201000029000000f30110027000001fe00510018f00000000010f00190000000902000029253816770000040f000000000001042d000000020600003900000000070000190000122e0000013d000000020c9000390000000b0a00002900000040088000390000000000a804350000000107700039000000000857004b0000113f0000813d00000005087002100000000d09000029000000000889001900000000080804330000000209c00367000000000a09043b000000f009a00272000000000b060019000012400000613d000000010b90008c0000123d0000c13d000000160b0000390000005009a002700000095209900197000012400000013d0000098909900041000000000909041a000000000b060019000000000a980436000000000ccb00190000000109c00039000000020b000367000000000ccb034f000000000c0c043b0000098a0dc0009c000012550000413d000000000b9b034f000000000b0b043b000000f80cc00270000000030dc00210000001000ed00089000000000beb022f000000000dd00049000001000e00008a000000000ded004b000000000b0040190000000000ba04350000000009c90019000000020b000367000000000a9b034f000000000c0a043b000000f00ac00270000000010ba0008c000012600000613d000000000ba0004c000012270000613d000000020b000039000009890aa00041000000000a0a041a000012630000013d000000160b000039000000500ac00270000009520aa00197000000000c9b00190000000009a0004c000012290000c13d000012280000013d00000000030004110000000205000039000001000600008a0000000007000019000012730000013d000000030ca00039000000000a03001900000040088000390000000000a804350000000107700039000000000817004b000011410000813d0000000508700210000000000882001900000000080804330000000209c00367000000000b09043b000000f009b00272000000000a050019000012840000613d000000010a90008c000012810000c13d000000160a0000390000005009b002700000095209900197000012840000013d0000098909900041000000000909041a000000000a0500190000000009980436000000000aca0019000000010ba00039000000020c000367000000000bbc034f000000000b0b043b000000000cac034f000000000c0c043b000000f80cc00270000000030dc00210000001000ed00089000000000beb022f000000000dd00049000000000d6d004b000000000b0040190000000000b90435000000000aac00190000000109a00039000000020b900367000000000d0b043b000000f00cd00270000000010bc0008c000012a10000613d000000000bc0004c0000126c0000613d000000020b000039000009890ac00041000000000a0a041a000012a40000013d000000160b000039000000500ad00270000009520aa00197000000000c9b00190000000009a0004c0000126e0000c13d0000126d0000013d0000097c0100004100000000001004350000004101000039000000040010043f0000097d010000410000253a000104300000097c0100004100000000001004350000003201000039000000040010043f0000097d010000410000253a0001043000000000010000190000253a00010430000000400200043d0000001f0430018f0000000503300272000012c30000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000012bb0000413d000000000540004c000012d20000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000094f0100004100000001030000310000094f0430009c00000000030180190000094f0420009c000000000102401900000040011002100000006002300210000000000112019f0000253a00010430000000400100043d00000044021000390000099103000041000000000032043500000024021000390000000f030000390000000000320435000009830200004100000000002104350000000402100039000000200300003900000000003204350000094f020000410000094f0310009c0000000001028019000000400110021000000984011001c70000253a00010430000d000000000002000600000007001d000500000006001d000400000005001d000300000004001d000200000003001d000100000002001d000c00000001001d0000000021010434000b00000002001d000000000210004c000900000000001d000013b60000613d0000000004000019000900000000001d000013010000013d0000000104400039000000000214004b000013b60000813d00000005024002100000000b030000290000000005230019000000000305043300000020023000390000000002020433000000000303043300000952033001980000132e0000613d000000000220004c0000000007000411000d00000004001d000013970000c13d000700000005001d0000098c010000410000000000100439000800000003001d00000004003004430000094f0100004100000000020004140000094f0320009c0000000001024019000000c0011002100000098d011001c70000800202000039000a00000007001d253825330000040f0000000a070000290000000102200190000013cf0000613d000000000101043b000000000110004c000013cf0000613d000000400900043d0000098e01000041000000000019043500000952017001970000000402900039000000000012043500000000010004140000000802000029000000040320008c000013410000c13d0000000103000031000013730000013d000000000220004c0000133a0000c13d00000000010004160000000c020000290000000002020433000000000242004b000013c30000a13d0000000002050433000000200220003900000000001204350000000c010000290000000001010433000000000241004b000013c30000a13d000000000205043300000020022000390000000002020433000900000002001d000012fe0000013d0000094f040000410000094f0310009c00000000010480190000094f0390009c000000000304001900000000030940190000004003300210000000c001100210000000000131019f0000097d011001c7000800000009001d253825330000040f0000000809000029000000000301001900000060033002700000094f03300197000000200430008c0000002005000039000000000503401900000005045002720000135f0000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000746004b000013570000413d0000001f055001900000136e0000613d0000000504400210000000000641034f00000000044900190000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f0000000000540435000100000003001f000300000001035500000001022001900000000a07000029000013d10000613d0000001f01300039000000200200008a000000000221016f0000000001920019000000000221004b00000000020000190000000102004039000009790310009c000013c90000213d0000000102200190000013c90000c13d000000400010043f00000974010000410000000102000031000000200320008c000000000300001900000000030140190000097402200197000000000420004c000000000100a019000009740220009c000000000103c019000000000110004c000013cf0000c13d0000000c0100002900000000010104330000000d04000029000000000141004b0000000705000029000013c30000a13d00000000010904330000000002050433000000200220003900000000001204350000000c010000290000000001010433000000000141004b000013c30000a13d00000000010504330000004002100039000000000302043300000000210104340000000004020433000000400200043d00000020052000390000098f0600004100000000006504350000006405200039000000000045043500000952033001970000004404200039000000000034043500000952037001970000002404200039000000000034043500000064030000390000000000320435000009920320009c000013c90000813d000000a003200039000000400030043f000009520110019725380a800000040f0000000c0100002900000000010104330000000d04000029000012fe0000013d00000000010004160000000902000029000000000121004b000013f70000c13d0000000c01000029000000010200002900000002030000290000000304000029000000040500002900000005060000290000000607000029253816770000040f000000000001042d0000097c0100004100000000001004350000003201000039000000040010043f0000097d010000410000253a000104300000097c0100004100000000001004350000004101000039000000040010043f0000097d010000410000253a0001043000000000010000190000253a00010430000000400200043d0000001f0430018f0000000503300272000013de0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000013d60000413d000000000540004c000013ed0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000094f0100004100000001030000310000094f0430009c00000000030180190000094f0420009c000000000102401900000040011002100000006002300210000000000112019f0000253a00010430000000400100043d00000044021000390000099103000041000000000032043500000024021000390000000f030000390000000000320435000009830200004100000000002104350000000402100039000000200300003900000000003204350000094f020000410000094f0310009c0000000001028019000000400110021000000984011001c70000253a000104300014000000000002000800000008001d000700000007001d000600000006001d000500000005001d000400000004001d000300000003001d000e00000002001d000a00000001001d000000400100043d000009ab0210009c0000160b0000813d0000006002100039000000400020043f0000006002000039000900000002001d000000000221043600000040011000390000000000010435000000000002043500000000010004160000000e020000290000000032020434000000000110004c000014250000613d000000000120004c000016130000613d000000010220008a000c00000003001d000009790120009c0000160b0000213d00000005012002100000003f03100039000000200400008a000d00000004001d000000000343016f000000400400043d0000000005340019000000000645004b00000000060000190000000106004039000009790750009c0000160b0000213d00000001066001900000160b0000c13d000000400050043f0000000000240435000000000520004c000014480000613d0000000005000019000000400600043d000009990760009c0000160b0000213d0000004007600039000000400070043f000000200760003900000000000704350000000000060435000000200550003900000000074500190000000000670435000000000615004b0000143b0000413d000000400900043d0000097b0590009c0000160b0000213d0000000a0600002900000020056000390000000005050433000000400660003900000000060604330000006007900039000000400070043f0000004007900039000200000007001d00000000006704350000000004490436000100000004001d0000000000540435000000400800043d0000000003380019000000000483004b00000000040000190000000104004039000009790530009c0000160b0000213d00000001044001900000160b0000c13d000000400030043f0000000000280435000000000220004c000014730000613d0000000002000019000000400300043d000009990430009c0000160b0000213d0000004004300039000000400040043f000000200430003900000000000404350000000000030435000000200220003900000000048200190000000000340435000000000312004b000014660000413d0000000e050000290000000001050433000000000210004c0000000002000411000b00000002001d000000000a000019001000000008001d0000000c06000029000f00000009001d000015560000613d000000000a0000190000000007000019000014830000013d0000000107700039000000000217004b000015560000813d0000000502700210000000000b26001900000000030b04330000002002300039000000000202043300000000030304330000095203300198000014b10000613d000000000120004c000015180000c13d00110000000b001d00120000000a001d0000098c010000410000000000100439001300000003001d00000004003004430000094f0100004100000000020004140000094f0320009c0000000001024019000000c0011002100000098d011001c70000800202000039001400000007001d253825330000040f00000014070000290000000f0900002900000010080000290000000102200190000016110000613d000000000101043b000000000110004c000016110000613d000000400c00043d0000098e0100004100000000001c04350000000b0100002900000952011001970000000402c00039000000000012043500000000010004140000001302000029000000040320008c000014c10000c13d0000000103000031000014f50000013d000000000220004c000014bb0000c13d00000000010004160000000002050433000000000272004b000016050000a13d00000000020b0433000000200220003900000000001204350000000001050433000000000271004b000016050000a13d00000000020b04330000002002200039000000000a020433000014800000013d0000094f040000410000094f0310009c00000000010480190000094f03c0009c000000000304001900000000030c40190000004003300210000000c001100210000000000131019f0000097d011001c700130000000c001d253825330000040f000000130c000029000000000301001900000060033002700000094f03300197000000200430008c000000200500003900000000050340190000000504500272000014df0000613d0000000006000019000000050760021000000000087c0019000000000771034f000000000707043b00000000007804350000000106600039000000000746004b000014d70000413d0000001f055001900000001008000029000014ef0000613d0000000504400210000000000641034f00000000044c00190000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f0000000000540435000100000003001f000300000001035500000001022001900000000f090000290000001407000029000016190000613d0000001f013000390000000d02000029000000000221016f0000000001c20019000000000221004b00000000020000190000000102004039000009790310009c0000160b0000213d00000001022001900000160b0000c13d000000400010043f00000974010000410000000102000031000000200320008c000000000300001900000000030140190000097402200197000000000420004c000000000100a019000009740220009c000000000103c019000000000110004c000016110000c13d0000000e050000290000000001050433000000000171004b0000000c06000029000000120a000029000000110b000029000016050000a13d00000000010c043300000000020b0433000000200220003900000000001204350000000001a0004c00000000010700190000151e0000613d000000000170004c000016130000613d000000010170008a0000000002050433000000000272004b000016050000a13d00000000030904330000000002030433000000000212004b000016050000a13d000000050210021000000020022000390000000003320019000000000303043300000000040b04330000000004040433000009520440019700000000004304350000000003050433000000000373004b000016050000a13d00000000030904330000000004030433000000000414004b000016050000a13d00000000033200190000000003030433000000200330003900000000040b04330000002004400039000000000404043300000000004304350000000003050433000000000373004b000016050000a13d0000000003080433000000000313004b000016050000a13d000000000282001900000000030b0433000000400330003900000000030304330000095203300197000000000402043300000000003404350000000003050433000000000373004b000016050000a13d0000000003080433000000000113004b000016050000a13d00000000010b0433000000200110003900000000010104330000000002020433000000200220003900000000001204350000000001050433000014800000013d00000000010004160000000001a1004b0000163f0000c13d0000000a0200002900000060012000390000000001010433001300000001001d00000000010204330000098c0200004100000000002004390000095201100197001400000001001d00000004001004430000094f0100004100000000020004140000094f0320009c0000000001024019000000c0011002100000098d011001c70000800202000039253825330000040f000000010220019000000010080000290000000f03000029000016110000613d000000000101043b000000000110004c000016110000613d000000400900043d000009ac0100004100000000001904350000000401900039000000800200003900000000002104350000000003030433000000840290003900000009040000290000000000420435000000e402900039000000000403043300000000004204350000010402900039000000000540004c0000158e0000613d0000000005000019000000200330003900000000060304330000000076060434000009520660019700000000066204360000000007070433000000000076043500000040022000390000000105500039000000000645004b000015830000413d00000001030000290000000003030433000000a404900039000000000034043500000000031200490000000204000029000000000404043300000024059000390000000000350435000000c403900039000000000043043500000000030804330000000002320436000000000430004c000015a90000613d0000000004000019000000200880003900000000050804330000000065050434000009520550019700000000055204360000000006060433000000000065043500000040022000390000000104400039000000000534004b0000159e0000413d0000000001120049000000640390003900000000001304350000000b01000029000009520110019700000044039000390000000000130435000000130600002900000000030604330000000001320436000000000230004c000015c10000613d000000000200001900000000041200190000002002200039000000000562001900000000050504330000000000540435000000000432004b000015b60000413d000000000232004b000015c10000a13d0000000002130019000000000002043500000000050004140000001402000029000000040420008c000015c80000c13d00000001040000310000000d05000029000015e50000013d0000001f033000390000000d04000029000000000343016f000000000191004900000000013100190000094f030000410000094f0410009c000000000103801900000060011002100000094f0490009c000000000403001900000000040940190000004004400210000000000141019f0000094f0450009c0000000003054019000000c003300210000000000113019f001400000009001d2538252e0000040f00000014090000290000000d05000029000000000301001900000060033002700001094f0030019d0000094f0430019700030000000103550000000102200190000016510000613d0000001f01400039000000000251016f0000000001920019000000000221004b00000000020000190000000102004039000009790310009c0000160b0000213d00000001022001900000160b0000c13d000000400010043f00000974010000410000000102000031000000000320004c000000000300001900000000030140190000097402200197000000000420004c000000000100a019000009740220009c000000000103c019000000000110004c000016110000c13d0000000e01000029000000030200002900000004030000290000000504000029000000060500002900000007060000290000000807000029253816770000040f000000000001042d0000097c0100004100000000001004350000003201000039000000040010043f0000097d010000410000253a000104300000097c0100004100000000001004350000004101000039000000040010043f0000097d010000410000253a0001043000000000010000190000253a000104300000097c0100004100000000001004350000001101000039000000040010043f0000097d010000410000253a00010430000000400200043d0000001f0430018f0000000503300272000016260000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000161e0000413d000000000540004c000016350000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000094f0100004100000001030000310000094f0430009c00000000030180190000094f0420009c000000000102401900000040011002100000006002300210000000000112019f0000253a00010430000000400100043d00000044021000390000099103000041000000000032043500000024021000390000000f030000390000000000320435000009830200004100000000002104350000000402100039000000200300003900000000003204350000094f020000410000094f0310009c0000000001028019000000400110021000000984011001c70000253a00010430000000400200043d0000001f0340018f00000005044002720000165e0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000016560000413d000000000530004c0000166d0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000094f0100004100000001030000310000094f0430009c00000000030180190000094f0420009c000000000102401900000040011002100000006002300210000000000112019f0000253a000104300016000000000002000900000007001d000c00000006001d000b00000005001d000a00000004001d001600000002001d000200000003001d000000000230004c00001c6c0000613d00000000230104340000097e0430009c00001bf60000813d00000005063002100000003f04600039000000200500008a000d00000005001d000000000454016f000000400500043d0000000004450019000600000005001d000000000554004b00000000050000190000000105004039000009790740009c00001bf60000213d000000010550019000001bf60000c13d000000400040043f000000060400002900000000033404360000001f0460018f000000000500003100000002055003670000000506600272000016a30000613d000000000700001900000005087002100000000009830019000000000885034f000000000808043b00000000008904350000000107700039000000000867004b0000169b0000413d000000000740004c000016b20000613d0000000506600210000000000565034f00000000066300190000000304400210000000000706043300000000074701cf000000000747022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000474019f00000000004604350000000004010433000009790540009c00001bf60000213d00000005074002100000003f057000390000000d06000029000000000565016f000000400600043d0000000005560019000500000006001d000000000665004b00000000060000190000000106004039000009790850009c00001bf60000213d000000010660019000001bf60000c13d000000400050043f000000050500002900000000044504360000001f0570018f000000000600003100000002066003670000000507700272000016d40000613d00000000080000190000000509800210000000000a940019000000000996034f000000000909043b00000000009a04350000000108800039000000000978004b000016cc0000413d000000000850004c000016e30000613d0000000507700210000000000676034f00000000077400190000000305500210000000000807043300000000085801cf000000000858022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000585019f00000000005704350000000005010433000000000550004c0000001605000029000000200b500039000017340000613d0000000005000019000016ed0000013d0000000105500039000000000675004b000017340000813d00000006060000290000000006060433000000000656004b00001bb20000a13d00000005075002100000000006270019000000000837001900000000090604330000002009900039000000000909043300000000009804350000000008010433000000000858004b00001bb20000a13d00000005080000290000000008080433000000000858004b00001bb20000a13d00000000074700190000000008060433000000000808043300000952088001970000000000870435000000000750004c0000171f0000613d0000000007010433000000000857004b00001bb20000a13d0000000008060433000000000808043300000000090204330000000009090433000000000989013f000009520990019800001bca0000613d000000020950008c0000171f0000413d0000000109000039000000000a97004b00001bb20000a13d000000050a900210000000000a2a0019000000000a0a0433000000000a0a0433000000000a8a013f000009520aa0019800001bca0000613d0000000109900039000000000a59004b000017130000413d000000000701043300000016080000290000000008080433000000000980004c000016ea0000613d000000000957004b00001bb20000a13d000000000606043300000000060604330000000009000019000000050a900210000000000aab0019000000000a0a0433000000000a0a0433000000000a6a013f000009520aa0019800001bb80000613d0000000109900039000000000a89004b000017290000413d000016ea0000013d00000016010000290000000001010433000009790210009c00001bf60000213d00000005031002100000003f023000390000000d04000029000000000242016f000000400400043d0000000002240019001100000004001d000000000442004b00000000040000190000000104004039000009790520009c00001bf60000213d000000010440019000001bf60000c13d000000400020043f000000110200002900000000071204360000001f0130018f000000000200003100000002022003670000000503300272000017570000613d000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000534004b0000174f0000413d000000000410004c000017660000613d0000000503300210000000000232034f00000000033700190000000301100210000000000403043300000000041401cf000000000414022f000000000202043b0000010001100089000000000212022f00000000011201cf000000000141019f000000000013043500000016010000290000000001010433000000000210004c0000000002000410000e00000002001d00120000000b001d0000181f0000613d0000800a02000039000f00000002001d0000000006000019001300000007001d0000000508600210000000000260004c0000178c0000613d0000000002b800190000000003020433000000000303043300000000040b04330000000004040433000000000434013f000009520440019800001bdc0000613d000000020460008c0000178e0000413d0000000104000039000000000541004b00001bb20000a13d00000005054002100000000005b5001900000000050504330000000005050433000000000535013f000009520550019800001bdc0000613d0000000104400039000000000564004b0000177f0000413d0000178e0000013d00000000028b00190000000008000019001400000008001d001500000006001d000000000102043300000000010104330000095202100198000017b30000613d0000098c010000410000000000100439001000000002001d00000004002004430000094f0100004100000000020004140000094f0320009c0000000001024019000000c0011002100000098d011001c70000800202000039253825330000040f00000001022001900000001307000029000000150600002900001bf40000613d000000000101043b000000000110004c00001bf40000613d000000400900043d0000098e01000041000000000019043500000004019000390000000e02000029000000000021043500000000010004140000001002000029000000040320008c000017c60000c13d0000000103000031000017f90000013d0000099b0100004100000000001004390000000e0100002900000004001004430000094f0100004100000000020004140000094f0320009c0000000001024019000000c0011002100000098d011001c70000000f02000029253825330000040f00000001022001900000001307000029000000150600002900001bf40000613d000000000101043b0000001403000029000018130000013d0000094f040000410000094f0310009c00000000010480190000094f0390009c000000000304001900000000030940190000004003300210000000c001100210000000000131019f0000097d011001c7001000000009001d253825330000040f0000001009000029000000000301001900000060033002700000094f03300197000000200430008c000000200500003900000000050340190000000504500272000017e40000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000746004b000017dc0000413d0000001f05500190000017f30000613d0000000504400210000000000641034f00000000044900190000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f0000000000540435000100000003001f000300000001035500000001022001900000001307000029000000150600002900001c340000613d0000001f013000390000000d02000029000000000221016f0000000001920019000000000221004b00000000020000190000000102004039000009790310009c00001bf60000213d000000010220019000001bf60000c13d000000400010043f00000974010000410000000102000031000000200320008c000000000300001900000000030140190000097402200197000000000420004c000000000100a019000009740220009c000000000103c019000000000110004c00001bf40000c13d0000000001090433000000140300002900000011020000290000000002020433000000000262004b000000120b00002900001bb20000a13d00000000027300190000000000120435000000010660003900000016010000290000000001010433000000000216004b000017710000413d0000098c0100004100000000001004390000000c010000290000095201100197001500000001001d00000004001004430000094f0100004100000000020004140000094f0320009c0000000001024019000000c0011002100000098d011001c70000800202000039253825330000040f000000010220019000001bf40000613d000000000101043b000000000110004c00001bf40000613d000000400a00043d0000099c0100004100000000001a04350000006401a000390000000b0900002900000000009104350000000401a00039000000600200003900000000002104350000001f0390018f0000008402a000390000000a04000029000000020440036700000005059002720000184a0000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b000018420000413d000000000630004c000018590000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f00000000003504350000000003000411000000000292001900000000000204350000001f029000390000000d04000029000000000242016f0000002404a000390000008005200039000000000054043500000000012100190000000605000029000000000205043300000080041000390000000000240435000000a001100039000000000420004c0000001504000029000018720000613d00000000070000190000002005500039000000000605043300000000016104360000000107700039000000000627004b0000186c0000413d00000952053001970000004402a00039000000000052043500000000030004160000000002000414000000040640008c000100000005001d0000187c0000c13d00000001040000310000189c0000013d0000000001a100490000094f070000410000094f05a0009c00140000000a001d000000000507001900000000050a401900000040055002100000094f0610009c00000000010780190000006001100210000000000151019f0000094f0520009c0000000002078019000000c002200210000000000112019f000000000230004c000018920000613d00000985011001c7000080090200003900000000050000192538252e0000040f000018940000013d00000000020400192538252e0000040f0003000000010355000000000301001900000060033002700001094f0030019d0000094f043001970000000102200190000000140a00002900001c7e0000613d0000001f014000390000000d02000029000000000121016f0000000002a10019000000000112004b00000000010000190000000101004039000a00000002001d000009790220009c00001bf60000213d000000010110019000001bf60000c13d0000000a01000029000000400010043f00000974010000410000000102000031000000000320004c000000000300001900000000030140190000097402200197000000000420004c000000000100a019000009740220009c000000000103c019000000000110004c00001bf40000c13d0000000a010000290000097b0110009c000000120900002900001bf60000213d0000000a020000290000006001200039000000400010043f0000004001200039000000000001043500000020012000390000000000010435000000000002043500000009010000290000094f01100197000900000001001d0000099d0110009c000018e90000413d000000090100002900000000001004350000000301000039000000200010043f0000094f0100004100000000020004140000094f0320009c0000000001024019000000c00110021000000978011001c70000801002000039253825330000040f000000010220019000001bf40000613d000000400200043d000a00000002001d0000097b0220009c000000120900002900001bf60000213d000000000101043b0000000a040000290000006002400039000000400020043f000000000101041a0000099e021001980000000002000019000000010200c03900000040034000390000000000230435000009790210019700000000022404360000004001100270000009520110019700000000001204350000000201000039000000000101041a000800000001001d00000016010000290000000001010433000009790210009c00001bf60000213d00000005031002100000003f023000390000000d04000029000000000242016f000000400a00043d00000000022a00190000000004a2004b00000000040000190000000104004039000009790520009c00001bf60000213d000000010440019000001bf60000c13d000000400020043f00000000071a04360000001f0130018f0000000002000031000000020220036700000005033002720000190d0000613d000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000534004b000019050000413d000000000410004c0000191c0000613d0000000503300210000000000232034f00000000033700190000000301100210000000000403043300000000041401cf000000000414022f000000000202043b0000010001100089000000000212022f00000000011201cf000000000141019f0000000000130435000700000007001d00000016010000290000000001010433000000000110004c00001c5a0000613d000009770100004100000008020000290000000001210049000c00000001001d0000000a010000290000002001100039000400000001001d0000800a01000039000300000001001d001300000000001d000000000b00001900100000000a001d00150000000b001d0000000501b00210000f00000001001d0000000001190019001400000001001d000000000101043300000000010104330000095202100198000019550000613d0000098c010000410000000000100439000b00000002001d00000004002004430000094f0100004100000000020004140000094f0320009c0000000001024019000000c0011002100000098d011001c70000800202000039253825330000040f0000000102200190000000100a000029000000150b00002900001bf40000613d000000000101043b000000000110004c00001bf40000613d000000400900043d0000098e01000041000000000019043500000004019000390000000e02000029000000000021043500000000010004140000000b02000029000000040320008c000019670000c13d00000001030000310000199a0000013d0000099b0100004100000000001004390000000e0100002900000004001004430000094f0100004100000000020004140000094f0320009c0000000001024019000000c0011002100000098d011001c70000000302000029253825330000040f0000000102200190000000100a000029000000150b00002900001bf40000613d000000000101043b000019b30000013d0000094f040000410000094f0310009c00000000010480190000094f0390009c000000000304001900000000030940190000004003300210000000c001100210000000000131019f0000097d011001c7000b00000009001d253825330000040f0000000b09000029000000000301001900000060033002700000094f03300197000000200430008c000000200500003900000000050340190000000504500272000019850000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000746004b0000197d0000413d0000001f05500190000000150b000029000019950000613d0000000504400210000000000641034f00000000044900190000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f0000000000540435000100000003001f00030000000103550000000102200190000000100a00002900001c0e0000613d0000001f013000390000000d02000029000000000221016f0000000001920019000000000221004b00000000020000190000000102004039000009790310009c00001bf60000213d000000010220019000001bf60000c13d000000400010043f00000974010000410000000102000031000000200320008c000000000300001900000000030140190000097402200197000000000420004c000000000100a019000009740220009c000000000103c019000000000110004c00001bf40000c13d0000000001090433000000110200002900000000020204330000000002b2004b00000012090000290000000f0500002900001bb20000a13d0000001102000029000000000225001900000020022000390000000002020433000000000321004b00001bee0000413d00000000030a04330000000003b3004b00001bb20000a13d00000000032100490000000704000029000000000c45001900000000003c043500000000040a04330000000004b4004b00001bb20000a13d0000000804000029000009770440009c00001bee0000213d000000000121004b000019d30000613d000000010100008a00000000213100d90000000c02000029000000000121004b00001bee0000413d0000000c0100002900000000121300a9000009771320012a00000000003c043500000009010000290000099d0110009c000f0000000c001d00001a770000413d000000160100002900000000010104330000000001b1004b00001bb20000a13d000000040100002900000000010104330000095204100197000000140100002900000000010104330000000001010433000009520110019700000000050a04330000000005b5004b00001bb20000a13d0000000a0500002900000000050504330000097905500197000009770220009c000019f20000413d000000010200008a00000000623200d9000000000252004b00001bee0000413d00000000253500a90000099f0250009c00001bee0000213d000000400200043d000009a06350012a000000000610004c00001a0c0000613d0000002005200039000009a1060000410000000000650435000000440520003900000000003504350000002403200039000000000043043500000044030000390000000000320435000009a20320009c00001bf60000213d0000008003200039000000400030043f25380a800000040f0000000f0c000029000000150b000029000000100a000029000000120900002900001a630000013d0000000001000414000000040640008c00001a120000c13d0000000102000039000000010100003100001a330000013d0000094f060000410000094f0710009c00000000010680190000094f0720009c00000000020680190000004002200210000000c001100210000000000121019f000009a00250009c00001a270000813d00000000020400192538252e0000040f000300000001035500000060011002700001094f0010019d0000094f011001970000001209000029000000100a000029000000150b0000290000000f0c00002900001a330000013d00000985011001c7000080090200003900000000050000192538252e0000040f000300000001035500000060011002700001094f0010019d0000094f011001970000001209000029000000100a000029000000150b0000290000000f0c000029000000000310004c00001a610000613d000009790310009c00001bf60000213d0000003f031000390000000d04000029000000000443016f000000400300043d0000000004430019000000000534004b00000000050000190000000105004039000009790640009c00001bf60000213d000000010550019000001bf60000c13d000000400040043f000000000113043600000003030003670000000105000031000000050450027200001a520000613d000000000600001900000005076002100000000008710019000000000773034f000000000707043b00000000007804350000000106600039000000000746004b00001a4a0000413d0000001f0550019000001a610000613d0000000504400210000000000343034f00000000014100190000000304500210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000310435000000010120019000001bfc0000613d00000000010a04330000000001b1004b00001bb20000a13d00000000010c04330000000a0200002900000000020204330000097902200197000009770320009c00001bee0000213d00000977030000410000000002230049000000000310004c00001a740000613d000000010300008a00000000431300d9000000000323004b00001bee0000413d00000000211200a9000009771310012a00000000003c0435000000160100002900000000010104330000000001b1004b00001bb20000a13d000000140100002900000000020104330000000001020433000009520110019700000040022000390000000002020433000009520420019700000000020a04330000000002b2004b00001bb20000a13d000000400200043d000000000510004c00001a9b0000613d0000002005200039000009a1060000410000000000650435000000440520003900000000003504350000002403200039000000000043043500000044030000390000000000320435000009a20320009c00001bf60000213d0000008003200039000000400030043f25380a800000040f0000000f0c000029000000150b000029000000100a000029000000120900002900001af20000013d0000000001000414000000040540008c00001aa10000c13d0000000102000039000000010100003100001ac20000013d0000094f050000410000094f0610009c00000000010580190000094f0620009c00000000020580190000004002200210000000c001100210000000000121019f000000000230004c00001ab80000613d00000985011001c7000080090200003900000000050000192538252e0000040f000300000001035500000060011002700001094f0010019d0000094f011001970000001209000029000000100a000029000000150b0000290000000f0c00002900001ac20000013d00000000020400192538252e0000040f000300000001035500000060011002700001094f0010019d0000094f011001970000001209000029000000100a000029000000150b0000290000000f0c000029000000000310004c00001af00000613d000009790310009c00001bf60000213d0000003f031000390000000d04000029000000000443016f000000400300043d0000000004430019000000000534004b00000000050000190000000105004039000009790640009c00001bf60000213d000000010550019000001bf60000c13d000000400040043f000000000113043600000003030003670000000105000031000000050450027200001ae10000613d000000000600001900000005076002100000000008710019000000000773034f000000000707043b00000000007804350000000106600039000000000746004b00001ad90000413d0000001f0550019000001af00000613d0000000504400210000000000343034f00000000014100190000000304500210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000310435000000010120019000001bfc0000613d00000000010a04330000000001b1004b00001bb20000a13d000000160100002900000000020104330000000001b2004b00001bb20000a13d00000000010c04330000001403000029000000000303043300000020033000390000000003030433000000000410004c00001b040000613d000000010400008a00000000541400d9000000000434004b00001bee0000413d00000000311300a9000000010300008a000000000331013f0000001304000029000000000334004b00001bee0000213d00000013030000290000000003130019001300000003001d000000010bb0003900000000012b004b0000192d0000413d00000002010000290000001303000029000000000113004b00001c5a0000413d000009790120009c00001bf60000213d00000005052002100000003f015000390000000d03000029000000000331016f000000400100043d0000000003310019000000000413004b00000000040000190000000104004039000009790630009c00001bf60000213d000000010440019000001bf60000c13d000000400030043f00000000022104360000001f0350018f00000000040000310000000204400367000000050550027200001b330000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b00001b2b0000413d000000000630004c00001b420000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f000000000035043500000016030000290000000003030433000000000330004c00001b560000613d00000000030000190000000004010433000000000434004b00001bb20000a13d0000000504300210000000000524001900000000044900190000000004040433000000000404043300000952044001970000000000450435000000010330003900000016040000290000000004040433000000000443004b00001b470000413d000000400200043d0000002003200039000000c00400003900000000004304350000000103000029000000000032043500000006070000290000000004070433000000c0032000390000000000430435000000e003200039000000000540004c00001b6a0000613d00000000050000190000002007700039000000000607043300000000036304360000000105500039000000000645004b00001b640000413d000000000423004900000040052000390000000000450435000000050700002900000000040704330000000003430436000000000540004c00001b7a0000613d000000000500001900000020077000390000000006070433000009520660019700000000036304360000000105500039000000000645004b00001b730000413d00000000042300490000006005200039000000000045043500000000040a04330000000003430436000000000540004c00001b890000613d000000000500001900000000060a00190000002006600039000000000706043300000000037304360000000105500039000000000745004b00001b830000413d00000000042300490000008005200039000000000045043500000000040104330000000003430436000000000540004c00001b980000613d000000000500001900000020011000390000000006010433000009520660019700000000036304360000000105500039000000000645004b00001b910000413d000000a0012000390000000904000029000000000041043500000000012300490000094f030000410000094f0420009c000000000203801900000040022002100000094f0410009c00000000010380190000006001100210000000000121019f00000000020004140000094f0420009c0000000002038019000000c002200210000000000121019f00000985011001c70000800d020000390000000103000039000009af040000412538252e0000040f0000000101200190000000100100002900001bf40000613d000000000001042d0000097c0100004100000000001004350000003201000039000000040010043f0000097d010000410000253a00010430000000400100043d0000004402100039000009a8030000410000000000320435000000240210003900000017030000390000000000320435000009830200004100000000002104350000000402100039000000200300003900000000003204350000094f020000410000094f0310009c0000000001028019000000400110021000000984011001c70000253a00010430000000400100043d0000004402100039000009ad030000410000000000320435000000240210003900000017030000390000000000320435000009830200004100000000002104350000000402100039000000200300003900000000003204350000094f020000410000094f0310009c0000000001028019000000400110021000000984011001c70000253a00010430000000400100043d0000004402100039000009ae03000041000000000032043500000024021000390000001c030000390000000000320435000009830200004100000000002104350000000402100039000000200300003900000000003204350000094f020000410000094f0310009c0000000001028019000000400110021000000984011001c70000253a000104300000097c0100004100000000001004350000001101000039000000040010043f0000097d010000410000253a0001043000000000010000190000253a000104300000097c0100004100000000001004350000004101000039000000040010043f0000097d010000410000253a00010430000000400100043d0000004402100039000009a4030000410000000000320435000000240210003900000013030000390000000000320435000009830200004100000000002104350000000402100039000000200300003900000000003204350000094f020000410000094f0310009c0000000001028019000000400110021000000984011001c70000253a00010430000000400200043d0000001f0430018f000000050330027200001c1b0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00001c130000413d000000000540004c00001c2a0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000094f0100004100000001030000310000094f0430009c00000000030180190000094f0420009c000000000102401900000040011002100000006002300210000000000112019f0000253a00010430000000400200043d0000001f0430018f000000050330027200001c410000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00001c390000413d000000000540004c00001c500000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000094f0100004100000001030000310000094f0430009c00000000030180190000094f0420009c000000000102401900000040011002100000006002300210000000000112019f0000253a00010430000000400100043d0000004402100039000009a7030000410000000000320435000000240210003900000017030000390000000000320435000009830200004100000000002104350000000402100039000000200300003900000000003204350000094f020000410000094f0310009c0000000001028019000000400110021000000984011001c70000253a00010430000000400100043d0000004402100039000009a9030000410000000000320435000000240210003900000016030000390000000000320435000009830200004100000000002104350000000402100039000000200300003900000000003204350000094f020000410000094f0310009c0000000001028019000000400110021000000984011001c70000253a00010430000000400200043d0000001f0340018f000000050440027200001c8b0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00001c830000413d000000000530004c00001c9a0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000094f0100004100000001030000310000094f0430009c00000000030180190000094f0420009c000000000102401900000040011002100000006002300210000000000112019f0000253a000104300004000000000002000200000003001d000100000002001d0000094f01100197000400000001001d00000000001004350000000301000039000300000001001d000000200010043f0000094f0100004100000000020004140000094f0320009c0000000001024019000000c00110021000000978011001c70000801002000039253825330000040f000000010220019000001d190000613d00000003030000290000000402000029000000000101043b000000000101041a0000099e0110019800001d1b0000c13d00000001010000290000097904100197000009b10140009c00001d2d0000813d000009760120009c000100000004001d00001cdb0000a13d000000000140004c00001d3f0000613d0000000201000029000009520110019800001cdd0000c13d000000400100043d0000004402100039000009b3030000410000000000320435000000240210003900000010030000390000000000320435000009830200004100000000002104350000000402100039000000200300003900000000003204350000094f020000410000094f0310009c0000000001028019000000400110021000000984011001c70000253a00010430000000000140004c00001d3f0000c13d0000000000200435000000200030043f0000094f0100004100000000020004140000094f0320009c0000000001024019000000c00110021000000978011001c70000801002000039253825330000040f000000010220019000001d190000613d000000000101043b000000000201041a00000954022001970000000103000029000000000232019f000000000021041b000000040100002900000000001004350000000301000029000000200010043f0000094f0100004100000000020004140000094f0320009c0000000001024019000000c00110021000000978011001c70000801002000039253825330000040f000000010220019000001d190000613d00000002020000290000004002200210000009b202200197000000000101043b000000000301041a0000095503300197000000000223019f000000000021041b000000040100002900000000001004350000000301000029000000200010043f0000094f0100004100000000020004140000094f0320009c0000000001024019000000c00110021000000978011001c70000801002000039253825330000040f000000010220019000001d190000613d000000000101043b000000000201041a000009560220019700000957022001c7000000000021041b000000000001042d00000000010000190000253a00010430000000400100043d0000004402100039000009b003000041000000000032043500000024021000390000000b030000390000000000320435000009830200004100000000002104350000000402100039000000200300003900000000003204350000094f020000410000094f0310009c0000000001028019000000400110021000000984011001c70000253a00010430000000400100043d0000004402100039000009b503000041000000000032043500000024021000390000000c030000390000000000320435000009830200004100000000002104350000000402100039000000200300003900000000003204350000094f020000410000094f0310009c0000000001028019000000400110021000000984011001c70000253a00010430000000400100043d0000004402100039000009b4030000410000000000320435000000240210003900000014030000390000000000320435000009830200004100000000002104350000000402100039000000200300003900000000003204350000094f020000410000094f0310009c0000000001028019000000400110021000000984011001c70000253a00010430000000000200041a00000952022001970000000003000411000000000232004b00001d5b0000c13d000009b60210009c00001d6c0000813d0000000202000039000000000012041b000000000001042d000000400100043d00000044021000390000098203000041000000000032043500000983020000410000000000210435000000240210003900000020030000390000000000320435000000040210003900000000003204350000094f020000410000094f0310009c0000000001028019000000400110021000000984011001c70000253a00010430000000400100043d0000004402100039000009b503000041000000000032043500000024021000390000000c030000390000000000320435000009830200004100000000002104350000000402100039000000200300003900000000003204350000094f020000410000094f0310009c0000000001028019000000400110021000000984011001c70000253a00010430000000000300041a00000952033001970000000004000411000000000343004b00001da40000c13d000000000320004c00001d9b0000613d00000001030000390000000004000019000000050540021000000000051500190000000205500367000000000505043b000009b70650009c00001d9c0000813d000000000603041a000009790760009c00001d9e0000213d0000000107600039000000000073041b00000000003004350000098106600041000000000706041a0000095007700197000000000557019f000000000056041b0000000104400039000000000524004b00001d870000413d000000000001042d00000000010000190000253a000104300000097c0100004100000000001004350000004101000039000000040010043f0000097d010000410000253a00010430000000400100043d00000044021000390000098203000041000000000032043500000983020000410000000000210435000000240210003900000020030000390000000000320435000000040210003900000000003204350000094f020000410000094f0310009c0000000001028019000000400110021000000984011001c70000253a000104300009000000000002000600000003001d0000000009020019000700000001001d000000000100041a00000952011001970000000002000411000000000121004b00001f110000c13d000000000149004b00001f220000c13d000000000190004c00001eca0000613d0000095201500197000800000001001d0000000001000410000300000001001d0000800a01000039000100000001001d000000000a000019000500000009001d00001dd00000013d000000010120019000001ed90000613d000000010aa0003900000000019a004b00001eca0000813d0000000501a00210000000070200002900000000032100190000000202000367000000000332034f000000000603043b000009b70360009c00001ecb0000813d00000000039a004b00001ed30000813d00000006030000290000000001310019000000000112034f000000000301043b000000000130004c00090000000a001d00001de50000613d000000400200043d000000000160004c00001e800000c13d00001e170000013d000000000160004c00001e050000613d0000098c01000041000000000010043900000004006004430000094f0100004100000000020004140000094f0320009c0000000001024019000000c0011002100000098d011001c70000800202000039000400000006001d253825330000040f00000004060000290000000102200190000000090a00002900001ecb0000613d000000000101043b000000000110004c00001ecb0000613d000000400900043d0000098e0100004100000000001904350000000401900039000000030200002900000000002104350000000001000414000000040260008c00001e340000c13d000000010300003100001e670000013d0000099b010000410000000000100439000000030100002900000004001004430000094f0100004100000000020004140000094f0320009c0000000001024019000000c0011002100000098d011001c70000000102000029253825330000040f00000001022001900000000509000029000000090a00002900001ecb0000613d000000400200043d000000000301043b00000000010004140000000804000029000000040440008c00001e1e0000c13d0000000102000039000000010100003100001e9b0000013d0000094f040000410000094f0510009c00000000010480190000094f0520009c00000000020480190000004002200210000000c001100210000000000121019f000000000230004c00001e930000613d00000985011001c70000800902000039000000080400002900000000050000192538252e0000040f000300000001035500000060011002700001094f0010019d0000094f011001970000000509000029000000090a00002900001e9b0000013d0000094f020000410000094f0310009c00000000010280190000094f0390009c00000000020940190000004002200210000000c001100210000000000121019f0000097d011001c70000000002060019000200000009001d253825330000040f0000000209000029000000000301001900000060033002700000094f03300197000000200430008c00000020050000390000000005034019000000050450027200001e520000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000746004b00001e4a0000413d0000001f0550019000001e610000613d0000000504400210000000000641034f00000000044900190000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f0000000000540435000100000003001f00030000000103550000000102200190000000090a000029000000040600002900001eeb0000613d0000001f01300039000000200200008a000000000121016f0000000002910019000000000112004b00000000010000190000000101004039000009790320009c00001ecd0000213d000000010110019000001ecd0000c13d000000400020043f00000974010000410000000103000031000000200430008c000000000400001900000000040140190000097403300197000000000530004c000000000100a019000009740330009c000000000104c019000000000110004c00001ecb0000c13d00000000030904330000002001200039000009a104000041000000000041043500000044012000390000000000310435000000240120003900000008030000290000000000310435000000440100003900000000001204350000097a0120009c00001ecd0000813d0000008001200039000000400010043f000000000106001925380a800000040f000000090a000029000000050900002900001dcd0000013d00000008020000292538252e0000040f000300000001035500000060011002700001094f0010019d0000094f011001970000000509000029000000090a000029000000000310004c00001dcb0000613d000009790310009c00001ecd0000213d0000003f03100039000000200400008a000000000443016f000000400300043d0000000004430019000000000534004b00000000050000190000000105004039000009790640009c00001ecd0000213d000000010550019000001ecd0000c13d000000400040043f000000000113043600000003030003670000000105000031000000050450027200001eba0000613d000000000600001900000005076002100000000008710019000000000773034f000000000707043b00000000007804350000000106600039000000000746004b00001eb20000413d0000001f0550019000001dcb0000613d0000000504400210000000000343034f00000000014100190000000304500210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f000000000031043500001dcb0000013d000000000001042d00000000010000190000253a000104300000097c0100004100000000001004350000004101000039000000040010043f0000097d010000410000253a000104300000097c0100004100000000001004350000003201000039000000040010043f0000097d010000410000253a00010430000000400100043d0000004402100039000009a4030000410000000000320435000000240210003900000013030000390000000000320435000009830200004100000000002104350000000402100039000000200300003900000000003204350000094f020000410000094f0310009c0000000001028019000000400110021000000984011001c70000253a00010430000000400200043d0000001f0430018f000000050330027200001ef80000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00001ef00000413d000000000540004c00001f070000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000094f0100004100000001030000310000094f0430009c00000000030180190000094f0420009c000000000102401900000040011002100000006002300210000000000112019f0000253a00010430000000400100043d00000044021000390000098203000041000000000032043500000983020000410000000000210435000000240210003900000020030000390000000000320435000000040210003900000000003204350000094f020000410000094f0310009c0000000001028019000000400110021000000984011001c70000253a00010430000000400100043d0000004402100039000009b8030000410000000000320435000000240210003900000016030000390000000000320435000009830200004100000000002104350000000402100039000000200300003900000000003204350000094f020000410000094f0310009c0000000001028019000000400110021000000984011001c70000253a000104300014000000000002000300000006001d000500000005001d000200000004001d000100000003001d001400000002001d0000000009010019000000000100041a00000952021001970000000001000411000400000002001d000000000112004b000024e60000c13d0000000021090434000f00000002001d0000097e0210009c000024560000813d00000005031002100000003f02300039000000200400008a000c00000004001d000000000242016f000000400400043d0000000002240019000b00000004001d000000000442004b00000000040000190000000104004039000009790520009c000024560000213d0000000104400190000024560000c13d000000400020043f0000000b02000029000000000a1204360000001f0130018f00000000020000310000000202200367000000050330027200001f650000613d0000000004000019000000050540021000000000065a0019000000000552034f000000000505043b00000000005604350000000104400039000000000534004b00001f5d0000413d000000000410004c00001f740000613d0000000503300210000000000232034f00000000033a00190000000301100210000000000403043300000000041401cf000000000414022f000000000202043b0000010001100089000000000212022f00000000011201cf000000000141019f00000000001304350000000001090433000009790210009c000024560000213d00000005031002100000003f023000390000000c04000029000000000242016f000000400400043d0000000002240019000e00000004001d000000000442004b00000000040000190000000104004039000009790520009c000024560000213d0000000104400190000024560000c13d000000400020043f0000000e02000029000000000b1204360000001f0130018f00000000020000310000000202200367000000050330027200001f960000613d0000000004000019000000050540021000000000065b0019000000000552034f000000000505043b00000000005604350000000104400039000000000534004b00001f8e0000413d000000000410004c00001fa50000613d0000000503300210000000000232034f00000000033b00190000000301100210000000000403043300000000041401cf000000000414022f000000000202043b0000010001100089000000000212022f00000000011201cf000000000141019f00000000001304350000000001090433000000000110004c0000000001000410000d00000001001d000020e10000613d0000800a01000039000600000001001d000000000c000019001200000009001d00110000000a001d00100000000b001d00001fb70000013d0000000101200190000024620000613d000000010cc00039000000000109043300000000011c004b000020e10000813d0000000502c002100000000f0100002900000000042100190000000001040433000000000101043300000952061001970000000e0100002900000000010104330000000001c1004b0000244e0000a13d0000000005b20019000000000065043500000000010904330000000001c1004b0000244e0000a13d000000000104043300000020011000390000000003010433000000000130004c00130000000c001d0000205e0000c13d0000000e0100002900000000010104330000000001c1004b0000244e0000a13d000800000005001d000900000002001d000a00000004001d000000000160004c00001ff60000613d0000098c010000410000000000100439000700000006001d00000004006004430000094f0100004100000000020004140000094f0320009c0000000001024019000000c0011002100000098d011001c70000800202000039253825330000040f00000001022001900000001209000029000000110a000029000000100b000029000000130c000029000024540000613d000000000101043b000000000110004c000024540000613d000000400d00043d0000098e0100004100000000001d04350000000401d000390000000d02000029000000000021043500000000010004140000000702000029000000040320008c0000200d0000c13d0000000103000031000020420000013d0000099b0100004100000000001004390000000d0100002900000004001004430000094f0100004100000000020004140000094f0320009c0000000001024019000000c0011002100000098d011001c70000000602000029253825330000040f00000001022001900000001209000029000000110a000029000000100b000029000000130c000029000024540000613d000000000301043b0000000a04000029000000090200002900000008050000290000205e0000013d0000094f040000410000094f0310009c00000000010480190000094f03d0009c000000000304001900000000030d40190000004003300210000000c001100210000000000131019f0000097d011001c700070000000d001d253825330000040f000000070d000029000000000301001900000060033002700000094f03300197000000200430008c0000002005000039000000000503401900000005045002720000202b0000613d0000000006000019000000050760021000000000087d0019000000000771034f000000000707043b00000000007804350000000106600039000000000746004b000020230000413d0000001f055001900000001209000029000000110a000029000000100b0000290000203d0000613d0000000504400210000000000641034f00000000044d00190000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f0000000000540435000100000003001f00030000000103550000000102200190000000130c000029000024c00000613d0000001f013000390000000c02000029000000000221016f0000000001d20019000000000221004b00000000020000190000000102004039000009790310009c000024560000213d0000000102200190000024560000c13d000000400010043f00000974010000410000000102000031000000200320008c000000000300001900000000030140190000097402200197000000000420004c000000000100a019000009740220009c000000000103c019000000000110004c000024540000c13d00000000030d04330000000a04000029000000090200002900000008050000290000000b0100002900000000010104330000000001c1004b0000244e0000a13d0000000001a2001900000000003104350000000e0100002900000000010104330000000001c1004b0000244e0000a13d0000000001050433000009520110019700000000020904330000000002c2004b0000244e0000a13d00000000020404330000004002200039000000000202043300000952042001970000000b0200002900000000020204330000000002c2004b0000244e0000a13d000000400200043d000000000510004c0000208b0000613d0000002005200039000009a1060000410000000000650435000000440520003900000000003504350000002403200039000000000043043500000044030000390000000000320435000009a20320009c000024560000213d0000008003200039000000400030043f25380a800000040f000000130c000029000000100b000029000000110a000029000000120900002900001fb30000013d0000000001000414000000040540008c000020910000c13d00000001020000390000000101000031000020b20000013d0000094f050000410000094f0610009c00000000010580190000094f0620009c00000000020580190000004002200210000000c001100210000000000121019f000000000230004c000020a80000613d00000985011001c7000080090200003900000000050000192538252e0000040f000300000001035500000060011002700001094f0010019d0000094f011001970000001209000029000000110a000029000000100b000029000000130c000029000020b20000013d00000000020400192538252e0000040f000300000001035500000060011002700001094f0010019d0000094f011001970000001209000029000000110a000029000000100b000029000000130c000029000000000310004c00001fb10000613d000009790310009c000024560000213d0000003f031000390000000c04000029000000000443016f000000400300043d0000000004430019000000000534004b00000000050000190000000105004039000009790640009c000024560000213d0000000105500190000024560000c13d000000400040043f0000000001130436000000030300036700000001050000310000000504500272000020d10000613d000000000600001900000005076002100000000008710019000000000773034f000000000707043b00000000007804350000000106600039000000000746004b000020c90000413d0000001f0550019000001fb10000613d0000000504400210000000000343034f00000000014100190000000304500210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f000000000031043500001fb10000013d00000014010000290000000021010434000a00000002001d000009790210009c000024560000213d00000005031002100000003f023000390000000c04000029000000000242016f000000400400043d0000000002240019000f00000004001d000000000442004b00000000040000190000000104004039000009790520009c000024560000213d0000000104400190000024560000c13d000000400020043f0000000f0200002900000000071204360000001f0130018f000000000200003100000002022003670000000503300272000021050000613d000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000534004b000020fd0000413d000000000410004c000021140000613d0000000503300210000000000232034f00000000033700190000000301100210000000000403043300000000041401cf000000000414022f000000000202043b0000010001100089000000000212022f00000000011201cf000000000141019f0000000000130435000900000007001d00000014010000290000000001010433000009790210009c000024560000213d00000005031002100000003f023000390000000c04000029000000000242016f000000400800043d0000000002280019000000000482004b00000000040000190000000104004039000009790520009c000024560000213d0000000104400190000024560000c13d000000400020043f00000000071804360000001f0130018f000000000200003100000002022003670000000503300272000021360000613d000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000534004b0000212e0000413d000000000410004c000021450000613d0000000503300210000000000232034f00000000033700190000000301100210000000000403043300000000041401cf000000000414022f000000000202043b0000010001100089000000000212022f00000000011201cf000000000141019f000000000013043500000014010000290000000001010433000000000110004c001300000008001d000021ec0000613d0000800a01000039000700000001001d0000000003000019000800000007001d00000005023002100000000a0100002900000000012100190000000001010433000000000101043300000952041001970000000001080433000000000131004b0000244e0000a13d000000000172001900000000004104350000000001080433000000000131004b0000244e0000a13d001100000002001d001200000003001d000000000140004c0000217e0000613d0000098c010000410000000000100439001000000004001d00000004004004430000094f0100004100000000020004140000094f0320009c0000000001024019000000c0011002100000098d011001c70000800202000039253825330000040f00000001022001900000001308000029000024540000613d000000000101043b000000000110004c000024540000613d000000400900043d0000098e01000041000000000019043500000004019000390000000d02000029000000000021043500000000010004140000001002000029000000040320008c000021920000c13d0000000103000031000021c40000013d0000099b0100004100000000001004390000000d0100002900000004001004430000094f0100004100000000020004140000094f0320009c0000000001024019000000c0011002100000098d011001c70000000702000029253825330000040f00000001022001900000001308000029000024540000613d000000000101043b000000080700002900000012030000290000001104000029000021e00000013d0000094f040000410000094f0310009c00000000010480190000094f0390009c000000000304001900000000030940190000004003300210000000c001100210000000000131019f0000097d011001c7001000000009001d253825330000040f0000001009000029000000000301001900000060033002700000094f03300197000000200430008c000000200500003900000000050340190000000504500272000021b00000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000746004b000021a80000413d0000001f055001900000001308000029000021c00000613d0000000504400210000000000641034f00000000044900190000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f0000000000540435000100000003001f00030000000103550000000102200190000024740000613d0000001f013000390000000c02000029000000000221016f0000000001920019000000000221004b00000000020000190000000102004039000009790310009c000024560000213d0000000102200190000024560000c13d000000400010043f00000974010000410000000102000031000000200320008c000000000300001900000000030140190000097402200197000000000420004c000000000100a019000009740220009c000000000103c019000000000110004c000024540000c13d00000000010904330000000807000029000000120300002900000011040000290000000f020000290000000002020433000000000232004b0000244e0000a13d000000090200002900000000022400190000000000120435000000010330003900000014010000290000000001010433000000000113004b0000214e0000413d0000098c01000041000000000010043900000003010000290000095201100197001200000001001d00000004001004430000094f0100004100000000020004140000094f0320009c0000000001024019000000c0011002100000098d011001c70000800202000039253825330000040f00000013090000290000000102200190000024540000613d000000000101043b000000000110004c000024540000613d000000400a00043d0000099c0100004100000000001a04350000006401a00039000000050500002900000000005104350000000401a00039000000600200003900000000002104350000001f0350018f0000008402a00039000000020400002900000002044003670000000505500272000022180000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b000022100000413d000000000630004c000022270000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f00000000003504350000000503000029000000000232001900000000000204350000001f023000390000000c03000029000000000232016f0000002403a000390000008004200039000000000043043500000000012100190000000b04000029000000000204043300000080031000390000000000230435000000a001100039000000000320004c0000223f0000613d00000000030000190000002004400039000000000504043300000000015104360000000103300039000000000523004b000022390000413d0000004402a000390000000403000029000000000032043500000000060004140000001202000029000000040320008c000022480000c13d0000000104000031000022610000013d0000000001a100490000094f030000410000094f04a0009c000000000403001900000000040a401900000040044002100000094f0510009c00000000010380190000006001100210000000000141019f0000094f0460009c0000000003064019000000c003300210000000000131019f00120000000a001d2538252e0000040f000000120a0000290000001309000029000000000301001900000060033002700001094f0030019d0000094f0430019700030000000103550000000102200190000025080000613d0000001f014000390000000c02000029000000000121016f0000000002a10019000000000112004b00000000010000190000000101004039001200000002001d000009790220009c000024560000213d0000000101100190000024560000c13d0000001201000029000000400010043f00000974010000410000000102000031000000000320004c000000000300001900000000030140190000097402200197000000000420004c000000000100a019000009740220009c000000000103c019000000000110004c000024540000c13d00000014010000290000000001010433000009790210009c000024560000213d00000005031002100000003f023000390000000c04000029000000000242016f00000012040000290000000002240019000009790420009c000024560000213d000000400020043f000000120200002900000000071204360000001f0130018f000000000200003100000002022003670000000503300272000022980000613d000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000534004b000022900000413d000000000410004c000022a70000613d0000000503300210000000000232034f00000000033700190000000301100210000000000403043300000000041401cf000000000414022f000000000202043b0000010001100089000000000212022f00000000011201cf000000000141019f000000000013043500000014010000290000000001010433000000000110004c001100000000001d000023ee0000613d0000800a01000039000600000001001d001100000000001d000000000a000019000a00000007001d00000000010904330000000001a1004b0000244e0000a13d00100000000a001d0000000501a00210000800000001001d0000002001100039000900000001001d000000000191001900000000010104330000095202100198000022dc0000613d0000098c010000410000000000100439000700000002001d00000004002004430000094f0100004100000000020004140000094f0320009c0000000001024019000000c0011002100000098d011001c70000800202000039253825330000040f00000001022001900000001309000029000000100a000029000024540000613d000000000101043b000000000110004c000024540000613d000000400b00043d0000098e0100004100000000001b04350000000401b000390000000d02000029000000000021043500000000010004140000000702000029000000040320008c000022ef0000c13d0000000103000031000023220000013d0000099b0100004100000000001004390000000d0100002900000004001004430000094f0100004100000000020004140000094f0320009c0000000001024019000000c0011002100000098d011001c70000000602000029253825330000040f00000001022001900000001309000029000000100a000029000024540000613d000000000501043b0000000a020000290000233c0000013d0000094f040000410000094f0310009c00000000010480190000094f03b0009c000000000304001900000000030b40190000004003300210000000c001100210000000000131019f0000097d011001c700070000000b001d253825330000040f000000070b000029000000000301001900000060033002700000094f03300197000000200430008c0000002005000039000000000503401900000005045002720000230d0000613d0000000006000019000000050760021000000000087b0019000000000771034f000000000707043b00000000007804350000000106600039000000000746004b000023050000413d0000001f055001900000001309000029000000100a0000290000231e0000613d0000000504400210000000000641034f00000000044b00190000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f0000000000540435000100000003001f000300000001035500000001022001900000249a0000613d0000001f013000390000000c02000029000000000221016f0000000001b20019000000000221004b00000000020000190000000102004039000009790310009c000024560000213d0000000102200190000024560000c13d000000400010043f00000974010000410000000102000031000000200320008c000000000300001900000000030140190000097402200197000000000420004c000000000100a019000009740220009c000000000103c019000000000110004c000024540000c13d00000000050b04330000000a020000290000000f0100002900000000010104330000000001a1004b00000009040000290000244e0000a13d0000000f0100002900000000011400190000000006010433000000000165004b0000245c0000413d000000120100002900000000010104330000000001a1004b0000244e0000a13d00000000036500490000000801000029000000000b21001900000000003b0435000000140100002900000000010104330000000001a1004b0000244e0000a13d0000001401000029000000000c14001900000000020c043300000000010204330000095201100197000000400220003900000000020204330000095204200197000000120200002900000000020204330000000002a2004b0000244e0000a13d000000400200043d000000000710004c000023760000613d0000002005200039000009a1060000410000000000650435000000440520003900000000003504350000002403200039000000000043043500000044030000390000000000320435000009a20320009c000024560000213d0000008003200039000000400030043f00090000000b001d00080000000c001d25380a800000040f000000080c000029000000090b000029000000100a0000290000001309000029000023cf0000013d0000000001000414000000040740008c0000237c0000c13d000000010200003900000001010000310000239f0000013d00080000000c001d00090000000b001d0000094f070000410000094f0810009c00000000010780190000094f0820009c00000000020780190000004002200210000000c001100210000000000121019f000000000265004b000023930000c13d00000000020400192538252e0000040f000300000001035500000060011002700001094f0010019d0000094f011001970000001309000029000000100a000029000000090b000029000000080c0000290000239f0000013d00000985011001c7000080090200003900000000050000192538252e0000040f000300000001035500000060011002700001094f0010019d0000094f011001970000001309000029000000100a000029000000090b000029000000080c000029000000000310004c000023cd0000613d000009790310009c000024560000213d0000003f031000390000000c04000029000000000443016f000000400300043d0000000004430019000000000534004b00000000050000190000000105004039000009790640009c000024560000213d0000000105500190000024560000c13d000000400040043f0000000001130436000000030300036700000001050000310000000504500272000023be0000613d000000000600001900000005076002100000000008710019000000000773034f000000000707043b00000000007804350000000106600039000000000746004b000023b60000413d0000001f05500190000023cd0000613d0000000504400210000000000343034f00000000014100190000000304500210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f00000000003104350000000101200190000024620000613d000000120100002900000000010104330000000001a1004b0000000a070000290000244e0000a13d000000140100002900000000010104330000000002a1004b0000244e0000a13d00000000020b043300000000030c043300000020033000390000000003030433000000000420004c000023e20000613d000000010400008a00000000542400d9000000000434004b0000245c0000413d00000000322300a9000000010300008a000000000332013f0000001104000029000000000334004b0000245c0000213d00000011030000290000000003230019001100000003001d000000010aa0003900000000011a004b000022b10000413d000000400100043d00000001020000290000001103000029000000000223004b000024f70000413d0000002002100039000000c0030000390000000000320435000000040200002900000000002104350000000b060000290000000003060433000000c0021000390000000000320435000000e002100039000000000430004c000024060000613d00000000040000190000002006600039000000000506043300000000025204360000000104400039000000000534004b000024000000413d0000000003120049000000400410003900000000003404350000000e0600002900000000030604330000000002320436000000000430004c000024160000613d000000000400001900000020066000390000000005060433000009520550019700000000025204360000000104400039000000000534004b0000240f0000413d000000000312004900000060041000390000000000340435000000120300002900000000030304330000000002320436000000000430004c000024260000613d000000000400001900000012050000290000002005500039000000000605043300000000026204360000000104400039000000000634004b000024200000413d00000000031200490000008004100039000000000034043500000000030904330000000002320436000000000430004c000024350000613d000000000400001900000020099000390000000005090433000009520550019700000000025204360000000104400039000000000534004b0000242e0000413d000000a003100039000000000003043500000000021200490000094f030000410000094f0410009c000000000103801900000040011002100000094f0420009c00000000020380190000006002200210000000000112019f00000000020004140000094f0420009c0000000002038019000000c002200210000000000121019f00000985011001c70000800d020000390000000103000039000009af040000412538252e0000040f0000000101200190000024540000613d0000001201000029000000000001042d0000097c0100004100000000001004350000003201000039000000040010043f0000097d010000410000253a0001043000000000010000190000253a000104300000097c0100004100000000001004350000004101000039000000040010043f0000097d010000410000253a000104300000097c0100004100000000001004350000001101000039000000040010043f0000097d010000410000253a00010430000000400100043d0000004402100039000009a4030000410000000000320435000000240210003900000013030000390000000000320435000009830200004100000000002104350000000402100039000000200300003900000000003204350000094f020000410000094f0310009c0000000001028019000000400110021000000984011001c70000253a00010430000000400200043d0000001f0430018f0000000503300272000024810000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000024790000413d000000000540004c000024900000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000094f0100004100000001030000310000094f0430009c00000000030180190000094f0420009c000000000102401900000040011002100000006002300210000000000112019f0000253a00010430000000400200043d0000001f0430018f0000000503300272000024a70000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000249f0000413d000000000540004c000024b60000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000094f0100004100000001030000310000094f0430009c00000000030180190000094f0420009c000000000102401900000040011002100000006002300210000000000112019f0000253a00010430000000400200043d0000001f0430018f0000000503300272000024cd0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000024c50000413d000000000540004c000024dc0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000094f0100004100000001030000310000094f0430009c00000000030180190000094f0420009c000000000102401900000040011002100000006002300210000000000112019f0000253a00010430000000400100043d00000044021000390000098203000041000000000032043500000983020000410000000000210435000000240210003900000020030000390000000000320435000000040210003900000000003204350000094f020000410000094f0310009c0000000001028019000000400110021000000984011001c70000253a000104300000004402100039000009a7030000410000000000320435000000240210003900000017030000390000000000320435000009830200004100000000002104350000000402100039000000200300003900000000003204350000094f020000410000094f0310009c0000000001028019000000400110021000000984011001c70000253a00010430000000400200043d0000001f0340018f0000000504400272000025150000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b0000250d0000413d000000000530004c000025240000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000094f0100004100000001030000310000094f0430009c00000000030180190000094f0420009c000000000102401900000040011002100000006002300210000000000112019f0000253a0001043000002531002104210000000102000039000000000001042d0000000002000019000000000001042d00002536002104230000000102000039000000000001042d0000000002000019000000000001042d0000253800000432000025390001042e0000253a00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000200000000000000000000000000000000000000000000800000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0ffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ffffffff0000000000000000000000000000000000000000ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c6bf5263400000000002000000000000000000000000000000400000010000000000000000000000000000000000000000000000000000000000000000000000000083bd37f800000000000000000000000000000000000000000000000000000000b810fb4200000000000000000000000000000000000000000000000000000000e7d3fc5f00000000000000000000000000000000000000000000000000000000e7d3fc6000000000000000000000000000000000000000000000000000000000f2fde38b00000000000000000000000000000000000000000000000000000000f827065e00000000000000000000000000000000000000000000000000000000b810fb4300000000000000000000000000000000000000000000000000000000e10895f90000000000000000000000000000000000000000000000000000000087b621b40000000000000000000000000000000000000000000000000000000087b621b5000000000000000000000000000000000000000000000000000000008da5cb5b000000000000000000000000000000000000000000000000000000009286b93d0000000000000000000000000000000000000000000000000000000083bd37f90000000000000000000000000000000000000000000000000000000084a7f3dd000000000000000000000000000000000000000000000000000000003b635ce3000000000000000000000000000000000000000000000000000000006c082c12000000000000000000000000000000000000000000000000000000006c082c1300000000000000000000000000000000000000000000000000000000715018a6000000000000000000000000000000000000000000000000000000007bf2d6d4000000000000000000000000000000000000000000000000000000003b635ce4000000000000000000000000000000000000000000000000000000004886c6750000000000000000000000000000000000000000000000000000000028be42f30000000000000000000000000000000000000000000000000000000028be42f4000000000000000000000000000000000000000000000000000000003596f9a200000000000000000000000000000000000000000000000000000000080c25b300000000000000000000000000000000000000000000000000000000174da6218000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000de0b6b3a76400000200000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffff80000000000000000000000000000000000000000000000000ffffffffffffff9f4e487b710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000ffffffffffffff20000000000000000000000000000000000000000000000000ffffffffffffff1fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf64f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657208c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064000000000000000000000000020000000000000000000000000000000000000000000000000000000000000064647265737300000000000000000000000000000000000000000000000000004f776e61626c653a206e6577206f776e657220697320746865207a65726f20610000000000000000000000000000000000000084000000000000000000000000b10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffff1806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83020000020000000000000000000000000000002400000000000000000000000070a082310000000000000000000000000000000000000000000000000000000023b872dd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff5f57726f6e67206d73672e76616c75650000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff60000000000000000000000000000000000000000000000000ffffffffffffffc05361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656400000000000000000000000000000000000000000000000000000001ffffffe06f742073756363656564000000000000000000000000000000000000000000005361666545524332303a204552433230206f7065726174696f6e20646964206e416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000000000000000000000000000000000000000000000000000ffffffffffffffbf30f28b7a000000000000000000000000000000000000000000000000000000009cc7f708afc65944829bd487b90b72536b1951864fbfc14e125fc972a6507f39cb70e273000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000001000000ff000000000000000000000000000000000000000000000000000000001fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000001158e460913d0000a9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff455448207472616e73666572206661696c65640000000000000000000000000002000000000000000000000000000000000000e0000000000000000000000000823eaf01002d7353fbcadb2ea3305cc46fa35d799cb0914846d185ac06f8ad05536c697070616765204c696d6974204578636565646564000000000000000000417262697472616765206e6f7420737570706f72746564000000000000000000536c697070616765206c696d697420746f6f206c6f77000000000000000000004d696e696d756d2067726561746572207468616e2071756f7465000000000000000000000000000000000000000000000000000000000000ffffffffffffffa0edd9444b000000000000000000000000000000000000000000000000000000004475706c696361746520736f7572636520746f6b656e730000000000000000004475706c69636174652064657374696e6174696f6e20746f6b656e73000000007d7fb03518253ae01913536628b78d6d82e63e19b943aab5f4948356021259be436f646520696e2075736500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000470de4df82000100000000ffffffffffffffffffffffffffffffffffffffff00000000000000004e756c6c2062656e656669636961727900000000000000000000000000000000496e76616c69642066656520666f7220636f646500000000000000000000000046656520746f6f206869676800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011c37937e080010000000000000000000000010000000000000000000000000000000000000000496e76616c69642066756e6473207472616e73666572000000000000000000000000000000000000000000000000000000000000000000000000000000000000f8e75a77f55bc1ad145d15f0163803469b2c8a3776b014e51323e3ad79002763
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ZKSYNC | Ether (ETH) | 28.92% | $3,865.76 | 3.5782 | $13,832.59 |
ZKSYNC | 18.46% | $0.228278 | 38,671.3174 | $8,827.81 | |
ZKSYNC | 18.22% | $1 | 8,708.1546 | $8,716.86 | |
ZKSYNC | 11.15% | $3,865.38 | 1.3803 | $5,335.38 | |
ZKSYNC | 5.54% | $1 | 2,642.5134 | $2,650.44 | |
ZKSYNC | 4.72% | $101,761 | 0.0222 | $2,257.91 | |
ZKSYNC | 4.27% | $1 | 2,039.7328 | $2,041.77 | |
ZKSYNC | 0.54% | $0.017973 | 14,315.2222 | $257.29 | |
ZKSYNC | 0.41% | $1 | 194.0526 | $194.44 | |
ZKSYNC | 0.39% | $1.61 | 116.4884 | $187.55 | |
ZKSYNC | 0.37% | $0.304297 | 573.9008 | $174.64 | |
ZKSYNC | 0.35% | $0.976436 | 171.5782 | $167.54 | |
ZKSYNC | 0.32% | $3.99 | 38.7159 | $154.48 | |
ZKSYNC | 0.31% | $0.998342 | 147.6061 | $147.36 | |
ZKSYNC | 0.13% | $0.000002 | 35,644,833.6858 | $62.02 | |
ZKSYNC | 0.11% | $0.011414 | 4,625.1004 | $52.79 | |
ZKSYNC | 0.11% | $0.006777 | 7,504.8766 | $50.86 | |
ZKSYNC | 0.11% | $0.164571 | 307.5787 | $50.62 | |
ZKSYNC | 0.08% | $1.72 | 21.1046 | $36.3 | |
ZKSYNC | 0.07% | $4,325.65 | 0.00825125 | $35.69 | |
ZKSYNC | 0.05% | $0.155906 | 165.5752 | $25.81 | |
ZKSYNC | 0.05% | $0.015606 | 1,488.9778 | $23.24 | |
ZKSYNC | 0.04% | $1 | 17.311 | $17.31 | |
ZKSYNC | 0.03% | $0.008856 | 1,687.0957 | $14.94 | |
ZKSYNC | 0.02% | $0.048102 | 236.1383 | $11.36 | |
ZKSYNC | 0.02% | $0.036504 | 266.269 | $9.72 | |
ZKSYNC | 0.02% | $0.011649 | 821.7214 | $9.57 | |
ZKSYNC | 0.02% | $0.075301 | 103.5191 | $7.8 | |
ZKSYNC | 0.01% | $0.004229 | 1,491.8405 | $6.31 | |
ZKSYNC | 0.01% | $0.104422 | 58.0404 | $6.06 | |
ZKSYNC | 0.01% | $0.046846 | 118.5102 | $5.55 | |
ZKSYNC | 0.01% | $0.000045 | 123,827.5485 | $5.54 | |
ZKSYNC | <0.01% | $0.023095 | 196.5652 | $4.54 | |
ZKSYNC | <0.01% | $0.0875 | 47.2843 | $4.14 | |
ZKSYNC | <0.01% | $0.000078 | 48,193.5097 | $3.75 | |
ZKSYNC | <0.01% | $0.001194 | 2,439.2167 | $2.91 | |
ZKSYNC | <0.01% | $0.99995 | 2.4961 | $2.5 | |
ZKSYNC | <0.01% | $0.003138 | 789.6562 | $2.48 | |
ZKSYNC | <0.01% | $0.003478 | 636.2314 | $2.21 | |
ZKSYNC | <0.01% | $0.063812 | 28.7818 | $1.84 | |
ZKSYNC | <0.01% | <$0.000001 | 530,100,488.016 | $1.01 | |
ZKSYNC | <0.01% | $0.012747 | 78.6782 | $1 | |
ZKSYNC | <0.01% | $0.000017 | 36,939.4747 | $0.615 | |
ZKSYNC | <0.01% | $0.022231 | 24.9759 | $0.5552 | |
ZKSYNC | <0.01% | $0.000332 | 1,509.267 | $0.5014 | |
ZKSYNC | <0.01% | $0.006055 | 52.1898 | $0.3159 | |
ARB | 2.28% | $3,863.5 | 0.2827 | $1,092.04 | |
ETH | 2.19% | $3,865.76 | 0.2714 | $1,049.01 | |
BASE | 0.51% | $3,865.75 | 0.0626 | $242.04 | |
OP | 0.05% | $3,865.1 | 0.0065 | $25.12 | |
ARBNOVA | 0.04% | $3,866.2 | 0.005 | $19.33 | |
POL | <0.01% | $0.712013 | 0.0009986 | $0.000711 |
[ 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.