From 3d412a4b30a9f7c7f51ea6562e694315948bd3da Mon Sep 17 00:00:00 2001 From: boris Date: Wed, 28 Nov 2018 16:00:02 +1300 Subject: cleaned up in short, the cheat and loader are now separate solutions. unused stuff was moved into the legacy solution in case anyone wants to compile it or whatever. i can change this back if you want to. also, i configured the loader to compile in x64, and have separate build types for linux and win64 --- tf2/ButtonCode_t.h | 253 ------- tf2/CAttribute.h | 41 - tf2/CBasePlayer.cpp | 264 ------- tf2/CBasePlayer.h | 241 ------ tf2/CBaseWeapon.cpp | 69 -- tf2/CBaseWeapon.h | 1389 ---------------------------------- tf2/CGlobalVarsBase.h | 14 - tf2/CHLClient.h | 32 - tf2/CInput.hpp | 55 -- tf2/CUserCmd.h | 51 -- tf2/ClientClass.h | 382 ---------- tf2/GlowObject.h | 43 -- tf2/IAppSystem.h | 31 - tf2/IClientEntity.h | 154 ---- tf2/IClientEntityList.h | 24 - tf2/IClientMode.h | 174 ----- tf2/ICvar.h | 201 ----- tf2/IEngineTrace.h | 268 ------- tf2/IEngineVGui.h | 26 - tf2/IGameEventManager.h | 77 -- tf2/IGameMovement.h | 118 --- tf2/IInputSystem.h | 163 ---- tf2/IMaterialSystem.hpp | 222 ------ tf2/IPanel.h | 13 - tf2/IPlayerInfoManager.h | 7 - tf2/ISurface.h | 223 ------ tf2/IVDebugOverlay.h | 10 - tf2/IVEngineClient.h | 192 ----- tf2/IVModelInfo.h | 179 ----- tf2/IVRenderView.h | 185 ----- tf2/KeyValues.cpp | 62 -- tf2/KeyValues.h | 46 -- tf2/README.md | 3 - tf2/ScreenSpaceEffects.h | 50 -- tf2/Source.cpp | 42 - tf2/UtlMem.h | 320 -------- tf2/VFunc.h | 12 - tf2/aim.cpp | 321 -------- tf2/aim.h | 75 -- tf2/aim_lagcomp.cpp | 150 ---- tf2/base_cheat.h | 22 - tf2/chams.cpp | 321 -------- tf2/chams.h | 49 -- tf2/checksum_crc.cpp | 169 ----- tf2/checksum_crc.h | 30 - tf2/chl_createmove.cpp | 93 --- tf2/clientmode_createmove.cpp | 53 -- tf2/color.hpp | 278 ------- tf2/con_alias.hpp | 60 -- tf2/con_fn.hpp | 172 ----- tf2/conditions.h | 106 --- tf2/console.cpp | 324 -------- tf2/console.hpp | 125 --- tf2/console_log.hpp | 34 - tf2/ctx.cpp | 97 --- tf2/ctx.hpp | 68 -- tf2/d3d.cpp | 367 --------- tf2/d3d.hpp | 126 --- tf2/d3d_sprite.cpp | 12 - tf2/d3d_sprite.hpp | 159 ---- tf2/directx.cpp | 233 ------ tf2/do_post_screen_space_effects.cpp | 16 - tf2/draw_model_execute.cpp | 125 --- tf2/dt_common.h | 127 ---- tf2/dt_recv.h | 479 ------------ tf2/emit_sound.cpp | 25 - tf2/extra.cpp | 91 --- tf2/extra.h | 21 - tf2/factory.cpp | 110 --- tf2/factory.h | 155 ---- tf2/factory.hpp | 190 ----- tf2/fnv.hpp | 64 -- tf2/framestagenotify.cpp | 41 - tf2/get_viewmodel_fov.cpp | 8 - tf2/graphics.cpp | 107 --- tf2/graphics.h | 80 -- tf2/hooks.cpp | 41 - tf2/hooks.h | 50 -- tf2/icons.hpp | 5 - tf2/icons/config.hpp | 1297 ------------------------------- tf2/icons/legit.hpp | 1316 -------------------------------- tf2/icons/misc.hpp | 1313 -------------------------------- tf2/icons/rage.hpp | 1293 ------------------------------- tf2/icons/visuals.hpp | 1318 -------------------------------- tf2/identity.h | 12 - tf2/input_system.cpp | 527 ------------- tf2/input_system.hpp | 185 ----- tf2/interfaces.cpp | 241 ------ tf2/interfaces.h | 160 ---- tf2/listener.cpp | 42 - tf2/listener.hpp | 24 - tf2/math.cpp | 267 ------- tf2/math.h | 157 ---- tf2/mem.hpp | 66 -- tf2/movement.cpp | 41 - tf2/movement.h | 19 - tf2/netvar_proxy.hpp | 37 - tf2/netvars.cpp | 93 --- tf2/netvars.h | 44 -- tf2/on_screen_size_changed.cpp | 9 - tf2/override_mouse_input.cpp | 14 - tf2/override_view.cpp | 17 - tf2/paint.cpp | 51 -- tf2/pattern.hpp | 68 -- tf2/prediction.cpp | 70 -- tf2/prediction.h | 10 - tf2/process_movement.cpp | 12 - tf2/projectile_pred.cpp | 70 -- tf2/projectile_pred.h | 15 - tf2/renderer.cpp | 93 --- tf2/renderer.hpp | 120 --- tf2/scene_end.cpp | 37 - tf2/sdk.h | 34 - tf2/settings.cpp | 4 - tf2/settings.h | 276 ------- tf2/shut_down.cpp | 16 - tf2/simple_settings.cpp | 32 - tf2/simple_settings.h | 204 ----- tf2/strings.hpp | 162 ---- tf2/test_cso2.vcxproj | 377 --------- tf2/test_cso2.vcxproj.filters | 428 ----------- tf2/ui.h | 374 --------- tf2/ui_base_item.h | 164 ---- tf2/ui_button.h | 56 -- tf2/ui_checkbox.h | 68 -- tf2/ui_color_picker.h | 201 ----- tf2/ui_draw.h | 163 ---- tf2/ui_dropdown.h | 217 ------ tf2/ui_dropdown_item.h | 83 -- tf2/ui_form.h | 187 ----- tf2/ui_key_picker.h | 164 ---- tf2/ui_label.h | 18 - tf2/ui_menu.h | 89 --- tf2/ui_render.h | 63 -- tf2/ui_slider.h | 165 ---- tf2/ui_tab_manager.h | 227 ------ tf2/ui_text_input.h | 47 -- tf2/util.cpp | 223 ------ tf2/util.hpp | 100 --- tf2/vector.hpp | 334 -------- tf2/visuals.hpp | 56 -- tf2/visuals_draw.cpp | 94 --- tf2/visuals_local.cpp | 207 ----- tf2/visuals_objects.cpp | 0 tf2/visuals_players.cpp | 551 -------------- tf2/visuals_world.cpp | 344 --------- tf2/vmt.h | 79 -- tf2/window_procedure.cpp | 59 -- tf2/x86.hpp | 47 -- 149 files changed, 25766 deletions(-) delete mode 100644 tf2/ButtonCode_t.h delete mode 100644 tf2/CAttribute.h delete mode 100644 tf2/CBasePlayer.cpp delete mode 100644 tf2/CBasePlayer.h delete mode 100644 tf2/CBaseWeapon.cpp delete mode 100644 tf2/CBaseWeapon.h delete mode 100644 tf2/CGlobalVarsBase.h delete mode 100644 tf2/CHLClient.h delete mode 100644 tf2/CInput.hpp delete mode 100644 tf2/CUserCmd.h delete mode 100644 tf2/ClientClass.h delete mode 100644 tf2/GlowObject.h delete mode 100644 tf2/IAppSystem.h delete mode 100644 tf2/IClientEntity.h delete mode 100644 tf2/IClientEntityList.h delete mode 100644 tf2/IClientMode.h delete mode 100644 tf2/ICvar.h delete mode 100644 tf2/IEngineTrace.h delete mode 100644 tf2/IEngineVGui.h delete mode 100644 tf2/IGameEventManager.h delete mode 100644 tf2/IGameMovement.h delete mode 100644 tf2/IInputSystem.h delete mode 100644 tf2/IMaterialSystem.hpp delete mode 100644 tf2/IPanel.h delete mode 100644 tf2/IPlayerInfoManager.h delete mode 100644 tf2/ISurface.h delete mode 100644 tf2/IVDebugOverlay.h delete mode 100644 tf2/IVEngineClient.h delete mode 100644 tf2/IVModelInfo.h delete mode 100644 tf2/IVRenderView.h delete mode 100644 tf2/KeyValues.cpp delete mode 100644 tf2/KeyValues.h delete mode 100644 tf2/README.md delete mode 100644 tf2/ScreenSpaceEffects.h delete mode 100644 tf2/Source.cpp delete mode 100644 tf2/UtlMem.h delete mode 100644 tf2/VFunc.h delete mode 100644 tf2/aim.cpp delete mode 100644 tf2/aim.h delete mode 100644 tf2/aim_lagcomp.cpp delete mode 100644 tf2/base_cheat.h delete mode 100644 tf2/chams.cpp delete mode 100644 tf2/chams.h delete mode 100644 tf2/checksum_crc.cpp delete mode 100644 tf2/checksum_crc.h delete mode 100644 tf2/chl_createmove.cpp delete mode 100644 tf2/clientmode_createmove.cpp delete mode 100644 tf2/color.hpp delete mode 100644 tf2/con_alias.hpp delete mode 100644 tf2/con_fn.hpp delete mode 100644 tf2/conditions.h delete mode 100644 tf2/console.cpp delete mode 100644 tf2/console.hpp delete mode 100644 tf2/console_log.hpp delete mode 100644 tf2/ctx.cpp delete mode 100644 tf2/ctx.hpp delete mode 100644 tf2/d3d.cpp delete mode 100644 tf2/d3d.hpp delete mode 100644 tf2/d3d_sprite.cpp delete mode 100644 tf2/d3d_sprite.hpp delete mode 100644 tf2/directx.cpp delete mode 100644 tf2/do_post_screen_space_effects.cpp delete mode 100644 tf2/draw_model_execute.cpp delete mode 100644 tf2/dt_common.h delete mode 100644 tf2/dt_recv.h delete mode 100644 tf2/emit_sound.cpp delete mode 100644 tf2/extra.cpp delete mode 100644 tf2/extra.h delete mode 100644 tf2/factory.cpp delete mode 100644 tf2/factory.h delete mode 100644 tf2/factory.hpp delete mode 100644 tf2/fnv.hpp delete mode 100644 tf2/framestagenotify.cpp delete mode 100644 tf2/get_viewmodel_fov.cpp delete mode 100644 tf2/graphics.cpp delete mode 100644 tf2/graphics.h delete mode 100644 tf2/hooks.cpp delete mode 100644 tf2/hooks.h delete mode 100644 tf2/icons.hpp delete mode 100644 tf2/icons/config.hpp delete mode 100644 tf2/icons/legit.hpp delete mode 100644 tf2/icons/misc.hpp delete mode 100644 tf2/icons/rage.hpp delete mode 100644 tf2/icons/visuals.hpp delete mode 100644 tf2/identity.h delete mode 100644 tf2/input_system.cpp delete mode 100644 tf2/input_system.hpp delete mode 100644 tf2/interfaces.cpp delete mode 100644 tf2/interfaces.h delete mode 100644 tf2/listener.cpp delete mode 100644 tf2/listener.hpp delete mode 100644 tf2/math.cpp delete mode 100644 tf2/math.h delete mode 100644 tf2/mem.hpp delete mode 100644 tf2/movement.cpp delete mode 100644 tf2/movement.h delete mode 100644 tf2/netvar_proxy.hpp delete mode 100644 tf2/netvars.cpp delete mode 100644 tf2/netvars.h delete mode 100644 tf2/on_screen_size_changed.cpp delete mode 100644 tf2/override_mouse_input.cpp delete mode 100644 tf2/override_view.cpp delete mode 100644 tf2/paint.cpp delete mode 100644 tf2/pattern.hpp delete mode 100644 tf2/prediction.cpp delete mode 100644 tf2/prediction.h delete mode 100644 tf2/process_movement.cpp delete mode 100644 tf2/projectile_pred.cpp delete mode 100644 tf2/projectile_pred.h delete mode 100644 tf2/renderer.cpp delete mode 100644 tf2/renderer.hpp delete mode 100644 tf2/scene_end.cpp delete mode 100644 tf2/sdk.h delete mode 100644 tf2/settings.cpp delete mode 100644 tf2/settings.h delete mode 100644 tf2/shut_down.cpp delete mode 100644 tf2/simple_settings.cpp delete mode 100644 tf2/simple_settings.h delete mode 100644 tf2/strings.hpp delete mode 100644 tf2/test_cso2.vcxproj delete mode 100644 tf2/test_cso2.vcxproj.filters delete mode 100644 tf2/ui.h delete mode 100644 tf2/ui_base_item.h delete mode 100644 tf2/ui_button.h delete mode 100644 tf2/ui_checkbox.h delete mode 100644 tf2/ui_color_picker.h delete mode 100644 tf2/ui_draw.h delete mode 100644 tf2/ui_dropdown.h delete mode 100644 tf2/ui_dropdown_item.h delete mode 100644 tf2/ui_form.h delete mode 100644 tf2/ui_key_picker.h delete mode 100644 tf2/ui_label.h delete mode 100644 tf2/ui_menu.h delete mode 100644 tf2/ui_render.h delete mode 100644 tf2/ui_slider.h delete mode 100644 tf2/ui_tab_manager.h delete mode 100644 tf2/ui_text_input.h delete mode 100644 tf2/util.cpp delete mode 100644 tf2/util.hpp delete mode 100644 tf2/vector.hpp delete mode 100644 tf2/visuals.hpp delete mode 100644 tf2/visuals_draw.cpp delete mode 100644 tf2/visuals_local.cpp delete mode 100644 tf2/visuals_objects.cpp delete mode 100644 tf2/visuals_players.cpp delete mode 100644 tf2/visuals_world.cpp delete mode 100644 tf2/vmt.h delete mode 100644 tf2/window_procedure.cpp delete mode 100644 tf2/x86.hpp (limited to 'tf2') diff --git a/tf2/ButtonCode_t.h b/tf2/ButtonCode_t.h deleted file mode 100644 index 1d11c19..0000000 --- a/tf2/ButtonCode_t.h +++ /dev/null @@ -1,253 +0,0 @@ -#pragma once - -#define MAX_SPLITSCREEN_CLIENT_BITS 2 -#define MAX_SPLITSCREEN_CLIENTS ( 1 << MAX_SPLITSCREEN_CLIENT_BITS ) // 4 - -#define JOYSTICK_BUTTON_INTERNAL( _joystick, _button ) ( JOYSTICK_FIRST_BUTTON + ((_joystick) * JOYSTICK_MAX_BUTTON_COUNT) + (_button) ) -#define JOYSTICK_POV_BUTTON_INTERNAL( _joystick, _button ) ( JOYSTICK_FIRST_POV_BUTTON + ((_joystick) * JOYSTICK_POV_BUTTON_COUNT) + (_button) ) -#define JOYSTICK_AXIS_BUTTON_INTERNAL( _joystick, _button ) ( JOYSTICK_FIRST_AXIS_BUTTON + ((_joystick) * JOYSTICK_AXIS_BUTTON_COUNT) + (_button) ) - -#define JOYSTICK_BUTTON( _joystick, _button ) ( (ButtonCode_t)JOYSTICK_BUTTON_INTERNAL( _joystick, _button ) ) -#define JOYSTICK_POV_BUTTON( _joystick, _button ) ( (ButtonCode_t)JOYSTICK_POV_BUTTON_INTERNAL( _joystick, _button ) ) -#define JOYSTICK_AXIS_BUTTON( _joystick, _button ) ( (ButtonCode_t)JOYSTICK_AXIS_BUTTON_INTERNAL( _joystick, _button ) ) - -enum { - MAX_JOYSTICKS = MAX_SPLITSCREEN_CLIENTS, - MOUSE_BUTTON_COUNT = 5, -}; - -enum JoystickAxis_t { - JOY_AXIS_X = 0, - JOY_AXIS_Y, - JOY_AXIS_Z, - JOY_AXIS_R, - JOY_AXIS_U, - JOY_AXIS_V, - MAX_JOYSTICK_AXES, -}; - -enum { - JOYSTICK_MAX_BUTTON_COUNT = 32, - JOYSTICK_POV_BUTTON_COUNT = 4, - JOYSTICK_AXIS_BUTTON_COUNT = MAX_JOYSTICK_AXES * 2, -}; - -enum ButtonCode_t { - BUTTON_CODE_INVALID = -1, - BUTTON_CODE_NONE = 0, - - KEY_FIRST = 0, - - KEY_NONE = KEY_FIRST, - KEY_0, - KEY_1, - KEY_2, - KEY_3, - KEY_4, - KEY_5, - KEY_6, - KEY_7, - KEY_8, - KEY_9, - KEY_A, - KEY_B, - KEY_C, - KEY_D, - KEY_E, - KEY_F, - KEY_G, - KEY_H, - KEY_I, - KEY_J, - KEY_K, - KEY_L, - KEY_M, - KEY_N, - KEY_O, - KEY_P, - KEY_Q, - KEY_R, - KEY_S, - KEY_T, - KEY_U, - KEY_V, - KEY_W, - KEY_X, - KEY_Y, - KEY_Z, - KEY_PAD_0, - KEY_PAD_1, - KEY_PAD_2, - KEY_PAD_3, - KEY_PAD_4, - KEY_PAD_5, - KEY_PAD_6, - KEY_PAD_7, - KEY_PAD_8, - KEY_PAD_9, - KEY_PAD_DIVIDE, - KEY_PAD_MULTIPLY, - KEY_PAD_MINUS, - KEY_PAD_PLUS, - KEY_PAD_ENTER, - KEY_PAD_DECIMAL, - KEY_LBRACKET, - KEY_RBRACKET, - KEY_SEMICOLON, - KEY_APOSTROPHE, - KEY_BACKQUOTE, - KEY_COMMA, - KEY_PERIOD, - KEY_SLASH, - KEY_BACKSLASH, - KEY_MINUS, - KEY_EQUAL, - KEY_ENTER, - KEY_SPACE, - KEY_BACKSPACE, - KEY_TAB, - KEY_CAPSLOCK, - KEY_NUMLOCK, - KEY_ESCAPE, - KEY_SCROLLLOCK, - KEY_INSERT, - KEY_DELETE, - KEY_HOME, - KEY_END, - KEY_PAGEUP, - KEY_PAGEDOWN, - KEY_BREAK, - KEY_LSHIFT, - KEY_RSHIFT, - KEY_LALT, - KEY_RALT, - KEY_LCONTROL, - KEY_RCONTROL, - KEY_LWIN, - KEY_RWIN, - KEY_APP, - KEY_UP, - KEY_LEFT, - KEY_DOWN, - KEY_RIGHT, - KEY_F1, - KEY_F2, - KEY_F3, - KEY_F4, - KEY_F5, - KEY_F6, - KEY_F7, - KEY_F8, - KEY_F9, - KEY_F10, - KEY_F11, - KEY_F12, - KEY_CAPSLOCKTOGGLE, - KEY_NUMLOCKTOGGLE, - KEY_SCROLLLOCKTOGGLE, - - KEY_LAST = KEY_SCROLLLOCKTOGGLE, - KEY_COUNT = KEY_LAST - KEY_FIRST + 1, - - // Mouse - MOUSE_FIRST = KEY_LAST + 1, - - MOUSE_LEFT = MOUSE_FIRST, - MOUSE_RIGHT, - MOUSE_MIDDLE, - MOUSE_4, - MOUSE_5, - MOUSE_WHEEL_UP, // A fake button which is 'pressed' and 'released' when the wheel is moved up - MOUSE_WHEEL_DOWN, // A fake button which is 'pressed' and 'released' when the wheel is moved down - - MOUSE_LAST = MOUSE_WHEEL_DOWN, - MOUSE_COUNT = MOUSE_LAST - MOUSE_FIRST + 1, - - // Joystick - JOYSTICK_FIRST = MOUSE_LAST + 1, - - JOYSTICK_FIRST_BUTTON = JOYSTICK_FIRST, - JOYSTICK_LAST_BUTTON = JOYSTICK_BUTTON_INTERNAL( MAX_JOYSTICKS - 1, JOYSTICK_MAX_BUTTON_COUNT - 1 ), - JOYSTICK_FIRST_POV_BUTTON, - JOYSTICK_LAST_POV_BUTTON = JOYSTICK_POV_BUTTON_INTERNAL( MAX_JOYSTICKS - 1, JOYSTICK_POV_BUTTON_COUNT - 1 ), - JOYSTICK_FIRST_AXIS_BUTTON, - JOYSTICK_LAST_AXIS_BUTTON = JOYSTICK_AXIS_BUTTON_INTERNAL( MAX_JOYSTICKS - 1, JOYSTICK_AXIS_BUTTON_COUNT - 1 ), - - JOYSTICK_LAST = JOYSTICK_LAST_AXIS_BUTTON, - - BUTTON_CODE_LAST, - BUTTON_CODE_COUNT = BUTTON_CODE_LAST - KEY_FIRST + 1, - - // Helpers for XBox 360 - KEY_XBUTTON_UP = JOYSTICK_FIRST_POV_BUTTON, // POV buttons - KEY_XBUTTON_RIGHT, - KEY_XBUTTON_DOWN, - KEY_XBUTTON_LEFT, - - KEY_XBUTTON_A = JOYSTICK_FIRST_BUTTON, // Buttons - KEY_XBUTTON_B, - KEY_XBUTTON_X, - KEY_XBUTTON_Y, - KEY_XBUTTON_LEFT_SHOULDER, - KEY_XBUTTON_RIGHT_SHOULDER, - KEY_XBUTTON_BACK, - KEY_XBUTTON_START, - KEY_XBUTTON_STICK1, - KEY_XBUTTON_STICK2, - KEY_XBUTTON_INACTIVE_START, - - KEY_XSTICK1_RIGHT = JOYSTICK_FIRST_AXIS_BUTTON, // XAXIS POSITIVE - KEY_XSTICK1_LEFT, // XAXIS NEGATIVE - KEY_XSTICK1_DOWN, // YAXIS POSITIVE - KEY_XSTICK1_UP, // YAXIS NEGATIVE - KEY_XBUTTON_LTRIGGER, // ZAXIS POSITIVE - KEY_XBUTTON_RTRIGGER, // ZAXIS NEGATIVE - KEY_XSTICK2_RIGHT, // UAXIS POSITIVE - KEY_XSTICK2_LEFT, // UAXIS NEGATIVE - KEY_XSTICK2_DOWN, // VAXIS POSITIVE - KEY_XSTICK2_UP, // VAXIS NEGATIVE - KEY_MAX, -}; - -enum AnalogCode_t { - ANALOG_CODE_INVALID = -1, - MOUSE_X = 0, - MOUSE_Y, - MOUSE_XY, // Invoked when either x or y changes - MOUSE_WHEEL, - - JOYSTICK_FIRST_AXIS, - JOYSTICK_LAST_AXIS = 5, - - ANALOG_CODE_LAST, -}; - -enum InputStandardCursor_t { - INPUT_CURSOR_NONE = 0, - INPUT_CURSOR_ARROW, - INPUT_CURSOR_IBEAM, - INPUT_CURSOR_HOURGLASS, - INPUT_CURSOR_CROSSHAIR, - INPUT_CURSOR_WAITARROW, - INPUT_CURSOR_UP, - INPUT_CURSOR_SIZE_NW_SE, - INPUT_CURSOR_SIZE_NE_SW, - INPUT_CURSOR_SIZE_W_E, - INPUT_CURSOR_SIZE_N_S, - INPUT_CURSOR_SIZE_ALL, - INPUT_CURSOR_NO, - INPUT_CURSOR_HAND, - - INPUT_CURSOR_COUNT -}; - -using PlatWindow_t = void*; -using InputCursorHandle_t = void*; - -struct InputEvent_t { - int m_nType; // Type of the event (see InputEventType_t) - int m_nTick; // Tick on which the event occurred - int m_nData; // Generic 32-bit data, what it contains depends on the event - int m_nData2; // Generic 32-bit data, what it contains depends on the event - int m_nData3; // Generic 32-bit data, what it contains depends on the event -}; \ No newline at end of file diff --git a/tf2/CAttribute.h b/tf2/CAttribute.h deleted file mode 100644 index a7dd944..0000000 --- a/tf2/CAttribute.h +++ /dev/null @@ -1,41 +0,0 @@ -#pragma once -#include "UtlMem.h" - -class c_attribute { -private: - void* vtable; -public: - uint16_t m_attribute_definition_index; - float m_value; -private: - uint32_t unk; - -public: - __forceinline c_attribute( unsigned short index, float value ) { - m_attribute_definition_index = index; - m_value = value; - } -}; - -class c_attribute_list { -private: - uint32_t unk; -public: - CUtlVector< c_attribute, CUtlMemory< c_attribute > > m_attributes; - - __forceinline void add_attribute( int index, float value ) { - if ( m_attributes.Count( ) >= 15 ) return; //setting this above 15 will crash - if ( has_attrib( index ) ) return; - - c_attribute attribute( index, value ); - m_attributes.AddToTail( attribute ); - } - - __forceinline bool has_attrib( int index ) { - for ( int i{ }; i < m_attributes.Count( ); i++ ) { - if ( !m_attributes ) continue; - if ( m_attributes[ i ].m_attribute_definition_index == index ) return true; - } - return false; - } -}; \ No newline at end of file diff --git a/tf2/CBasePlayer.cpp b/tf2/CBasePlayer.cpp deleted file mode 100644 index a5860ac..0000000 --- a/tf2/CBasePlayer.cpp +++ /dev/null @@ -1,264 +0,0 @@ -#include "CBasePlayer.h" -#include "sdk.h" -#include -#include "math.h" -#include "graphics.h" -#include "CBaseWeapon.h" -#include "ClientClass.h" -#include "IVEngineClient.h" - -vec3_t c_base_player::get_eye_pos( ) { - vec3_t offset = get_view_offset( ); - vec3_t origin = get_origin( ); - return offset + origin; -} - -uintptr_t c_base_player::get_player_resource( ) { - for( int i{ 1 }; i < cl.m_entlist( )->get_highest_entity_index( ); ++i ) { - auto ent = cl.m_entlist( )->get_client_entity< IClientEntity >( i ); - if( !ent ) continue; - auto class_ = ent->GetClientClass( ); - if( class_ ) { - if( class_->m_class_id == CTFPlayerResource ) { - return uintptr_t( ent ); - } - } - } - - return 0; -} - -player_info_t c_base_player::get_info( ) { - player_info_t info; - cl.m_engine( )->GetPlayerInfo( ce( )->index( ), &info ); - - return info; -} - -void c_base_player::get_name_safe( char* buf ) { - player_info_t info; - if( cl.m_engine( )->GetPlayerInfo( this->ce( )->index( ), &info ) ) { - for( size_t i{ }; i < 32; ++i ) { - switch( info.name[ i ] ) { - case '"': - case '\\': - case ';': - case '\n': - buf[ i ] = ' '; - break; - default: - buf[ i ] = info.name[ i ]; - break; - } - } - - buf[ 31 ] = 0; - } -} - -uintptr_t c_base_player::get_game_rules( ) { - static uintptr_t** game_rules = pattern::first_code_match< uintptr_t** >( cl.m_chl.dll( ), xors( "A1 ? ? ? ? 85 C0 0F 84 ? ? ? ? 80 B8 ? ? ? ? ? 0F 84 ? ? ? ? 0F 10 05" ), 0x1 ); - return **game_rules; -} - -bool c_base_player::is_valid( ) { - auto local = cl.m_entlist( )->get_local_player( ); - return ( this != local && !is_dormant( ) && is_alive( ) && GetClientClass( )->m_class_id == CTFPlayer ); -} - -vec3_t c_base_player::get_origin( ) { - return m_vecOrigin( ); -} - -vec3_t c_base_player::get_view_offset( ) { - return m_vecViewOffset( ); -} - -vec3_t c_base_player::get_eye_angles( ) { - return m_angEyeAngles( ); -} - -vec3_t c_base_player::get_velocity( ) { - return m_vecVelocity( ); -} - -vec3_t c_base_player::get_bone_position( int bone ) { - matrix3x4 matrix[ 128 ]; - - setup_bones( matrix, 128, 0x100, cl.m_globals->curtime ); - - return vec3_t( matrix[ bone ][ 0 ][ 3 ], matrix[ bone ][ 1 ][ 3 ], matrix[ bone ][ 2 ][ 3 ] ); -} - -// bye fps lol -vec3_t c_base_player::get_hitbox_position( int hitbox ) { - const auto model = get_model( ); - if ( !model ) return vec3_t{ }; - - auto hdr = cl.m_modelinfo( )->GetStudioModel( model ); - if ( !hdr ) return vec3_t{ }; - - matrix3x4 matrix[ 128 ]; - if ( !setup_bones( matrix, 128, 0x100, cl.m_globals->curtime ) ) return vec3_t{ }; - - auto set = hdr->pHitboxSet( m_nHitboxSet( ) ); - if ( !set ) return vec3_t{ }; - - auto box = set->pHitbox( hitbox ); - - vec3_t hitbox_center = ( box->bbmin + box->bbmax ) * 0.5f; - - vec3_t transformed = math::vector_transform( hitbox_center, matrix[ box->bone ] ); - - return transformed; -} - -int c_base_player::get_team( ) { - return m_iTeamNum( ); -} - -bool c_base_player::is_enemy( ) { - auto local = g_ctx.m_local; - if ( !local ) return false; - return get_team( ) != local->get_team( ); -} - -int c_base_player::get_class( ) { - int class_num = m_iClass( ); - return std::clamp( class_num, 0, 10 ); //to prevent crashes if its out of bounds -} - -const char* c_base_player::get_class_name( ) { - static const char* tf2_class_names[ ] = { - "none", - "scout", - "sniper", - "soldier", - "demoman", - "medic", - "heavy", - "pyro", - "spy", - "engineer", - "invalid" - }; - return tf2_class_names[ get_class( ) ]; -} - -byte c_base_player::get_life_state( ) { - return m_lifeState( ); -} - -int c_base_player::get_flags( ) { - return m_fFlags( ); -} - -int c_base_player::get_health( ) { - return m_iHealth( ); -} - -int c_base_player::get_max_health( ) { - IClientEntity* player_resource{ }; - for ( int i{ }; i < cl.m_entlist( )->get_highest_entity_index( ); i++ ) { - auto ent = cl.m_entlist( )->get_client_entity( i ); - if ( ent && ent->GetClientClass( )->m_class_id == CTFPlayerResource ) { - player_resource = ent; - break; - } - } - if ( !player_resource ) return 0; - - return *reinterpret_cast< int* >( uintptr_t( player_resource ) + m_iMaxHealth( ) + ( 4 * this->index( ) ) ); -} - -bool c_base_player::is_buffed( ) { - return get_health( ) > get_max_health( ); -} - -bool c_base_player::is_alive( ) { - return m_iHealth( ) > 0 && get_life_state( ) == LIFE_ALIVE; -} - -int c_base_player::get_tick_base( ) { - return m_nTickBase( ); -} - -bool c_base_player::is_visible( ) { - auto local = cl.m_entlist( )->get_local_player( ); - if ( !local ) return true; - trace_t tr; - Ray_t ray; - CTraceFilter filter; - - filter.pSkip = local; - - ray.Init( local->get_eye_pos( ), get_eye_pos( ) ); - - cl.m_trace( )->trace_ray( ray, MASK_AIM, &filter, &tr ); - - return ( tr.m_pEnt == this || tr.fraction > 0.99f ); -} - -bool c_base_player::is_visible( int hitbox ) { - auto local = cl.m_entlist( )->get_local_player( ); - if ( !local ) return true; - trace_t tr; - Ray_t ray; - CTraceFilter filter; - - filter.pSkip = local; - - ray.Init( local->get_eye_pos( ), get_hitbox_position( hitbox ) ); - - cl.m_trace( )->trace_ray( ray, MASK_AIM, &filter, &tr ); - - return ( tr.m_pEnt == this || tr.fraction > 0.99f ); -} - -dynamic_box_t c_base_player::get_dynamic_box( ) { - const matrix3x4& trans = m_CollisionGroup( ); - - vec3_t min = *reinterpret_cast< vec3_t* >( this + m_Collision( ) + 0x8 ); - vec3_t max = *reinterpret_cast< vec3_t* >( this + m_Collision( ) + 0x14 ); - - vec3_t point_list[ ] = { - vec3_t( min.x, min.y, min.z ), - vec3_t( min.x, max.y, min.z ), - vec3_t( max.x, max.y, min.z ), - vec3_t( max.x, min.y, min.z ), - vec3_t( max.x, max.y, max.z ), - vec3_t( min.x, max.y, max.z ), - vec3_t( min.x, min.y, max.z ), - vec3_t( max.x, min.y, max.z ) - }; - - vec3_t transformed[ 8 ]; - - for ( int i{ }; i < 8; i++ ) { - transformed[ i ] = math::vector_transform( point_list[ i ], trans ); - } - - vec2_t screen_pos[ 8 ]{ vec2_t( 0.f, 0.f ) }; - - for ( int i = 0; i < 8; i++ ) { - screen_pos[ i ] = graphics.world_to_screen( transformed[ i ] ); - } - - float left = FLT_MAX, top = FLT_MIN, right = FLT_MIN, bottom = FLT_MAX; - - for ( int i{ }; i < 8; i++ ) { - left = std::min< float >( left, screen_pos[ i ].x ); - top = std::max< float >( top, screen_pos[ i ].y ); - right = std::max< float >( right, screen_pos[ i ].x ); - bottom = std::min< float >( bottom, screen_pos[ i ].y ); - } - - if ( right - left > 4000.f || top - bottom > 4000.f ) return{ 10000, 10000, 0, 0 }; //sanity check - return{ ( int )left, ( int )bottom, ( int )( right - left ), ( int )( top - bottom ) + 4 }; -} - -c_base_weapon* c_base_player::get_active_weapon( ) { - auto wep_handle = m_hActiveWeapon( ); - auto weapon = reinterpret_cast< c_base_weapon* >( cl.m_entlist( )->get_entity_from_handle( wep_handle ) ); - return weapon; -} diff --git a/tf2/CBasePlayer.h b/tf2/CBasePlayer.h deleted file mode 100644 index dbce5cd..0000000 --- a/tf2/CBasePlayer.h +++ /dev/null @@ -1,241 +0,0 @@ -#pragma once -#include "vector.hpp" -#include "CBaseWeapon.h" -#include "IVEngineClient.h" - -enum MoveType_t { - MOVETYPE_NONE = 0, // never moves - MOVETYPE_ISOMETRIC, // For players -- in TF2 commander view, etc. - MOVETYPE_WALK, // Player only - moving on the ground - MOVETYPE_STEP, // gravity, special edge handling -- monsters use this - MOVETYPE_FLY, // No gravity, but still collides with stuff - MOVETYPE_FLYGRAVITY, // flies through the air + is affected by gravity - MOVETYPE_VPHYSICS, // uses VPHYSICS for simulation - MOVETYPE_PUSH, // no clip to world, push and crush - MOVETYPE_NOCLIP, // No gravity, no collisions, still do velocity/avelocity - MOVETYPE_LADDER, // Used by players only when going onto a ladder - MOVETYPE_OBSERVER, // Observer movement, depends on player's observer mode - MOVETYPE_CUSTOM, // Allows the entity to describe its own physics - MOVETYPE_LAST = MOVETYPE_CUSTOM, // should always be defined as the last item in the list - MOVETYPE_MAX_BITS = 4, -}; - -enum TFClasses_t { - TF2_None = 0, - TF2_Scout, - TF2_Sniper, - TF2_Soldier, - TF2_Demoman, - TF2_Medic, - TF2_Heavy, - TF2_Pyro, - TF2_Spy, - TF2_Engineer -}; - -enum LifeStates_t { - LIFE_ALIVE = 0, - LIFE_DYING, - LIFE_DEAD, - LIFE_RESPAWNABLE, - LIFE_DISCARDBODY -}; - -enum PlayerStates_t { - FL_ONGROUND = ( 1 << 0 ), - FL_DUCKING = ( 1 << 1 ), - FL_WATERJUMP = ( 1 << 2 ), - FL_ONTRAIN = ( 1 << 3 ), - FL_INRAIN = ( 1 << 4 ), - FL_FROZEN = ( 1 << 5 ), - FL_ATCONTROLS = ( 1 << 6 ), - FL_CLIENT = ( 1 << 7 ), - FL_FAKECLIENT = ( 1 << 8 ), - FL_INWATER = ( 1 << 9 ), -}; - -struct dynamic_box_t { - int x, y, w, h; -}; - -enum PlayerConds_t -{ - TFCond_Slowed = ( 1 << 0 ), //Toggled when a player is slowed down. - TFCond_Zoomed = ( 1 << 1 ), //Toggled when a player is zoomed. - TFCond_Disguising = ( 1 << 2 ), //Toggled when a Spy is disguising. - TFCond_Disguised = ( 1 << 3 ), //Toggled when a Spy is disguised. - TFCond_Cloaked = ( 1 << 4 ), //Toggled when a Spy is invisible. - TFCond_Ubercharged = ( 1 << 5 ), //Toggled when a player is ÜberCharged. - TFCond_TeleportedGlow = ( 1 << 6 ), //Toggled when someone leaves a teleporter and has glow beneath their feet. - TFCond_Taunting = ( 1 << 7 ), //Toggled when a player is taunting. - TFCond_UberchargeFading = ( 1 << 8 ), //Toggled when the ÜberCharge is fading. - TFCond_CloakFlicker = ( 1 << 9 ), //Toggled when a Spy is visible during cloak. - TFCond_Teleporting = ( 1 << 10 ), //Only activates for a brief second when the player is being teleported; not very useful. - TFCond_Kritzkrieged = ( 1 << 11 ), //Toggled when a player is being crit buffed by the KritzKrieg. - TFCond_TmpDamageBonus = ( 1 << 12 ), //Unknown what this is for. Name taken from the AlliedModders SDK. - TFCond_DeadRingered = ( 1 << 13 ), //Toggled when a player is taking reduced damage from the Deadringer. - TFCond_Bonked = ( 1 << 14 ), //Toggled when a player is under the effects of The Bonk! Atomic Punch. - TFCond_Stunned = ( 1 << 15 ), //Toggled when a player's speed is reduced from airblast or a Sandman ball. - TFCond_Buffed = ( 1 << 16 ), //Toggled when a player is within range of an activated Buff Banner. - TFCond_Charging = ( 1 << 17 ), //Toggled when a Demoman charges with the shield. - TFCond_DemoBuff = ( 1 << 18 ), //Toggled when a Demoman has heads from the Eyelander. - TFCond_CritCola = ( 1 << 19 ), //Toggled when the player is under the effect of The Crit-a-Cola. - TFCond_InHealRadius = ( 1 << 20 ), //Unused condition, name taken from AlliedModders SDK. - TFCond_Healing = ( 1 << 21 ), //Toggled when someone is being healed by a medic or a dispenser. - TFCond_OnFire = ( 1 << 22 ), //Toggled when a player is on fire. - TFCond_Overhealed = ( 1 << 23 ), //Toggled when a player has >100% health. - TFCond_Jarated = ( 1 << 24 ), //Toggled when a player is hit with a Sniper's Jarate. - TFCond_Bleeding = ( 1 << 25 ), //Toggled when a player is taking bleeding damage. - TFCond_DefenseBuffed = ( 1 << 26 ), //Toggled when a player is within range of an activated Battalion's Backup. - TFCond_Milked = ( 1 << 27 ), //Player was hit with a jar of Mad Milk. - TFCond_MegaHeal = ( 1 << 28 ), //Player is under the effect of Quick-Fix charge. - TFCond_RegenBuffed = ( 1 << 29 ), //Toggled when a player is within a Concheror's range. - TFCond_MarkedForDeath = ( 1 << 30 ), //Player is marked for death by a Fan O'War hit. Effects are similar to TFCond_Jarated. - TFCond_NoHealingDamageBuff = ( 1 << 31 ), //Unknown what this is used for. - - TFCondEx_SpeedBuffAlly = ( 1 << 0 ), //Toggled when a player gets hit with the disciplinary action. - TFCondEx_HalloweenCritCandy = ( 1 << 1 ), //Only for Scream Fortress event maps that drop crit candy. - TFCondEx_CritCanteen = ( 1 << 2 ), //Player is getting a crit boost from a MVM canteen. - TFCondEx_CritDemoCharge = ( 1 << 3 ), //From demo's shield - TFCondEx_CritHype = ( 1 << 4 ), //Soda Popper crits. - TFCondEx_CritOnFirstBlood = ( 1 << 5 ), //Arena first blood crit buff. - TFCondEx_CritOnWin = ( 1 << 6 ), //End of round crits. - TFCondEx_CritOnFlagCapture = ( 1 << 7 ), //CTF intelligence capture crits. - TFCondEx_CritOnKill = ( 1 << 8 ), //Unknown what this is for. - TFCondEx_RestrictToMelee = ( 1 << 9 ), //Unknown what this is for. - TFCondEx_DefenseBuffNoCritBlock = ( 1 << 10 ), //MvM Buff. - TFCondEx_Reprogrammed = ( 1 << 11 ), //MvM Bot has been reprogrammed. - TFCondEx_PyroCrits = ( 1 << 12 ), //Player is getting crits from the Mmmph charge. - TFCondEx_PyroHeal = ( 1 << 13 ), //Player is being healed from the Mmmph charge. - TFCondEx_FocusBuff = ( 1 << 14 ), //Player is getting a focus buff. - TFCondEx_DisguisedRemoved = ( 1 << 15 ), //Disguised remove from a bot. - TFCondEx_MarkedForDeathSilent = ( 1 << 16 ), //Player is under the effects of the Escape Plan/Equalizer or GRU. - TFCondEx_DisguisedAsDispenser = ( 1 << 17 ), //Bot is disguised as dispenser. - TFCondEx_Sapped = ( 1 << 18 ), //MvM bot is being sapped. - TFCondEx_UberchargedHidden = ( 1 << 19 ), //MvM Related - TFCondEx_UberchargedCanteen = ( 1 << 20 ), //Player is receiving ÜberCharge from a canteen. - TFCondEx_HalloweenBombHead = ( 1 << 21 ), //Player has a bomb on their head from Merasmus. - TFCondEx_HalloweenThriller = ( 1 << 22 ), //Players are forced to dance from Merasmus. - TFCondEx_BulletCharge = ( 1 << 26 ), //Player is receiving 75% reduced damage from bullets. - TFCondEx_ExplosiveCharge = ( 1 << 27 ), //Player is receiving 75% reduced damage from explosives. - TFCondEx_FireCharge = ( 1 << 28 ), //Player is receiving 75% reduced damage from fire. - TFCondEx_BulletResistance = ( 1 << 29 ), //Player is receiving 10% reduced damage from bullets. - TFCondEx_ExplosiveResistance = ( 1 << 30 ), //Player is receiving 10% reduced damage from explosives. - TFCondEx_FireResistance = ( 1 << 31 ), //Player is receiving 10% reduced damage from fire. - - TFCondEx2_Stealthed = ( 1 << 0 ), - TFCondEx2_MedigunDebuff = ( 1 << 1 ), - TFCondEx2_StealthedUserBuffFade = ( 1 << 2 ), - TFCondEx2_BulletImmune = ( 1 << 3 ), - TFCondEx2_BlastImmune = ( 1 << 4 ), - TFCondEx2_FireImmune = ( 1 << 5 ), - TFCondEx2_PreventDeath = ( 1 << 6 ), - TFCondEx2_MVMBotRadiowave = ( 1 << 7 ), - TFCondEx2_HalloweenSpeedBoost = ( 1 << 8 ), //Wheel has granted player speed boost. - TFCondEx2_HalloweenQuickHeal = ( 1 << 9 ), //Wheel has granted player quick heal. - TFCondEx2_HalloweenGiant = ( 1 << 10 ), //Wheel has granted player giant mode. - TFCondEx2_HalloweenTiny = ( 1 << 11 ), //Wheel has granted player tiny mode. - TFCondEx2_HalloweenInHell = ( 1 << 12 ), //Wheel has granted player in hell mode. - TFCondEx2_HalloweenGhostMode = ( 1 << 13 ), //Wheel has granted player ghost mode. - TFCondEx2_Parachute = ( 1 << 16 ), //Player has deployed the BASE Jumper. - TFCondEx2_BlastJumping = ( 1 << 17 ), //Player has sticky or rocket jumped. - - TFCond_MiniCrits = ( TFCond_Buffed | TFCond_CritCola ), - TFCond_IgnoreStates = ( TFCond_Ubercharged | TFCond_Bonked ), - TFCondEx_IgnoreStates = ( TFCondEx_PyroHeal ) -}; - -enum tf_hitbox : int { - head = 0, - pelvis = 1, - spine_0 = 2, - spine_1 = 3, - spine_2 = 4, - spine_3 = 5, - upperArm_L = 6, - lowerArm_L = 7, - hand_L = 8, - upperArm_R = 9, - lowerArm_R = 10, - hand_R = 11, - hip_L = 12, - knee_L = 13, - foot_L = 14, - hip_R = 15, - knee_R = 16, - foot_R = 17, -}; - -class c_base_player : public IClientEntity { -public: - - NETVAR( m_nMoveType, "m_nRenderMode", "DT_BaseEntity", 1, MoveType_t ); - NETVAR( m_fFlags, "m_fFlags", "DT_BasePlayer", 0, int ); - NETVAR( m_vecVelocity, "m_vecVelocity[0]", "DT_BasePlayer", 0, vec3_t ); - NETVAR( m_flSimulationTime, "m_flSimulationTime", "DT_BaseEntity", 0, float ); - NETVAR( m_vecOrigin, "m_vecOrigin", "DT_BaseEntity", 0, vec3_t ); - NETVAR( m_angRotation, "m_angRotation", "DT_BaseEntity", 0, vec3_t ); - NETVAR( m_CollisionGroup, "m_CollisionGroup", "DT_BaseEntity", -0x4c, matrix3x4 ); - NETVAR( m_Collision, "m_Collision", "DT_BaseEntity", 0, std::ptrdiff_t ); - NETVAR( m_vecViewOffset, "m_vecViewOffset[0]", "DT_BasePlayer", 0, vec3_t ); - NETVAR( m_nTickBase, "m_nTickBase", "DT_BasePlayer", 0, int ); - NETVAR( m_lifeState, "m_lifeState", "DT_BasePlayer", 0, byte ); - NETVAR( m_iHealth, "m_iHealth", "DT_BasePlayer", 0, int ); - NETVAR( m_iTeamNum, "m_iTeamNum", "DT_BasePlayer", 0, int ); - NETVAR( m_nHitboxSet, "m_nHitboxSet", "DT_BaseAnimating", 0, int ); - NETVAR( m_PlayerClass, "m_PlayerClass", "DT_TFPlayer", 0, int ); - NETVAR( m_iClass, "m_iClass", "DT_TFPlayer", 0, int ); - NETVAR( m_angEyeAngles, "m_angEyeAngles[0]", "DT_TFPlayer", 0, vec3_t ); - NETVAR( m_hActiveWeapon, "m_hActiveWeapon", "DT_BaseCombatCharacter", 0, uintptr_t ); - NETVAR( m_iMaxHealth, "m_iMaxHealth", "DT_TFPlayerResource", 0, std::ptrdiff_t ); - NETVAR( m_hObserverTarget, "m_hObserverTarget", "DT_BasePlayer", 0, uint32_t ); - NETVAR( m_bIsScoped, "m_bIsScoped", "DT_TFPlayer", 0, bool ); - NETVAR( m_vecMins, "m_vecMins", "DT_BaseEntity", 0, vec3_t ); - NETVAR( m_vecMaxs, "m_vecMaxs", "DT_BaseEntity", 0, vec3_t ); - NETVAR( m_iObserverMode, "m_iObserverMode", "DT_Base_player", 0, int ); - NETVAR( m_bGlowEnabled, "m_bGlowEnabled", "DT_TFPlayer", 0, bool ); - NETVAR( m_nPlayerCond, "m_nPlayerCond", "DT_TFPlayer", 0, int ); - - //fuck you this is for ragdolls - NETVAR( m_vecRagdollVelocity, "m_vecRagdollVelocity", "DT_TFRagdoll", 0, vec3_t ); - - - - static uintptr_t get_player_resource( ); - static uintptr_t get_game_rules( ); - - __forceinline IClientEntity* ce( ) { - return reinterpret_cast< IClientEntity* >( this ); - } - - __forceinline bool is_player( ) { - client_class_t* client_class = ce( )->GetClientClass( ); - return client_class && client_class->m_class_id == CTFPlayer; - } - - player_info_t get_info( ); - void get_name_safe( char* buf ); - bool is_valid( ); - vec3_t get_eye_pos( ); - vec3_t get_origin( ); - vec3_t get_view_offset( ); - vec3_t get_bone_position( int ); - vec3_t get_hitbox_position( int ); - vec3_t get_eye_angles( ); - vec3_t get_velocity( ); - int get_team( ); - bool is_enemy( ); - const char* get_class_name( ); - int get_class( ); - byte get_life_state( ); - int get_flags( ); - bool is_alive( ); - bool is_visible( ); - bool is_visible( int ); - dynamic_box_t get_dynamic_box( ); - int get_health( ); - int get_max_health( ); - bool is_buffed( ); - int get_tick_base( ); - c_base_weapon* get_active_weapon( ); -}; \ No newline at end of file diff --git a/tf2/CBaseWeapon.cpp b/tf2/CBaseWeapon.cpp deleted file mode 100644 index b9881d1..0000000 --- a/tf2/CBaseWeapon.cpp +++ /dev/null @@ -1,69 +0,0 @@ -#include "CBaseWeapon.h" -#include "interfaces.h" - -int c_base_weapon::get_max_clip_1( ) { - return call_vfunc< int( __thiscall* )( void* ) >( this, 318 )( this ); -} - -int c_base_weapon::get_max_clip_2( ) { - return call_vfunc< int( __thiscall* )( void* ) >( this, 319 )( this ); -} - -int c_base_weapon::get_slot( ) { - return call_vfunc< int( __thiscall* )( void* ) >( this, 327 )( this ); -} - -char* c_base_weapon::get_name( ) { - return call_vfunc< char *( __thiscall* )( void* ) >( this, 329 )( this ); -} - -char* c_base_weapon::get_print_name( ) { - return call_vfunc< char *( __thiscall* )( void* ) >( this, 330 )( this ); -} - -vec3_t& c_base_weapon::get_bullet_spread( ) { - return call_vfunc< vec3_t& ( __thiscall* )( void* ) >( this, 286 )( this ); -} - -float c_base_weapon::get_spread( ) { - return call_vfunc< float( __thiscall* )( void* ) >( this, 455 )( this ); -} - -int c_base_weapon::get_weaponid( ) { - return call_vfunc< int( __thiscall* )( void* ) >( this, 422 )( this ); -} - -bool c_base_weapon::can_fire( ) { - auto cur_time = g_ctx.m_local->get_tick_base( ) * cl.m_globals->interval_per_tick; - auto next_primary_attack = m_flNextPrimaryAttack( ); - return cur_time >= next_primary_attack; -} - -bool c_base_weapon::is_non_aim( ) { - if ( get_slot( ) >= 2 ) return true; - //more checks to be added - return false; -} - -int& c_base_weapon::get_inspect_stage( ) { - return m_nInspectStage( ); -} - -float& c_base_weapon::get_inspect_time( ) { - return m_flInspectAnimTime( ); -} - -c_attribute_list* c_base_weapon::get_attribute_list( ) { - return reinterpret_cast< c_attribute_list* >( this + 0xA8 ); -} - -float c_base_weapon::get_distance( ) { - - if( is_melee( ) ) - return 100.f; - - if( is_flame_thrower( ) ) - return 185.f; - - return 8012.f; -} diff --git a/tf2/CBaseWeapon.h b/tf2/CBaseWeapon.h deleted file mode 100644 index 213a576..0000000 --- a/tf2/CBaseWeapon.h +++ /dev/null @@ -1,1389 +0,0 @@ -#pragma once -#include "IClientEntity.h" -#include "CAttribute.h" -#include "netvars.h" -enum class weapon_attributes { - weapon_allow_inspect = 731, -}; - -enum scoutweapons -{ - //Primary - WPN_Scattergun = 13, - WPN_NewScattergun = 200, - WPN_FAN = 45, - WPN_Shortstop = 220, - WPN_SodaPopper = 448, - WPN_BabyFaceBlaster = 772, - WPN_BotScattergunS = 799, - WPN_BotScattergunG = 808, - WPN_BotScattergunR = 888, - WPN_BotScattergunB = 897, - WPN_BotScattergunC = 906, - WPN_BotScattergunD = 915, - WPN_BotScattergunES = 964, - WPN_BotScattergunEG = 973, - WPN_FestiveFaN = 1078, - WPN_BackScatter = 1103, - //Secondary - WPN_ScoutPistol = 23, - WPN_NewPistol = 209, - WPN_Bonk = 46, - WPN_CritCola = 163, - WPN_Lugermorph = 160, - WPN_Milk = 222, - WPN_Lugermorph2 = 294, - WPN_Winger = 449, - WPN_PocketPistol = 773, - WPN_MutatedMilk = 1121, - WPN_CAPPER = 30666, - //Melee - WPN_Bat = 0, - WPN_NewBat = 190, - WPN_Sandman = 44, - WPN_Fish = 221, - WPN_Cane = 317, - WPN_BostonBasher = 325, - WPN_SunStick = 349, - WPN_FanOWar = 355, - WPN_RuneBlade = 452, - WPN_Saxxy = 423, - WPN_Atomizer = 450, - WPN_ConscientiousObjector = 474, - WPN_UnarmedCombat = 572, - WPN_WrapAssassin = 648, - WPN_FestiveBat = 660, - WPN_FestiveScattergun = 669, - WPN_FlyingGuillotine1 = 812, - WPN_FlyingGuillotine2 = 833, - WPN_FreedomStaff = 880, - WPN_BatOuttaHell = 939, - WPN_MemoryMaker = 954, - WPN_FestiveFish = 999, - WPN_TheHamShank = 1013, - WPN_CrossingGuard = 1127, - WPN_NecroSmasher = 1123, - WPN_Batsaber = 30667, -}; -enum soldierweapons -{ - //Primary - WPN_RocketLauncher = 18, - WPN_NewRocketLauncher = 205, - WPN_DirectHit = 127, - WPN_BlackBox = 228, - WPN_RocketJumper = 237, - WPN_LibertyLauncher = 414, - WPN_CowMangler = 441, - WPN_Original = 513, - WPN_FestiveRocketLauncher = 658, - WPN_BeggersBazooka = 730, - WPN_BotRocketlauncherS = 800, - WPN_BotRocketlauncherG = 809, - WPN_BotRocketlauncherR = 889, - WPN_BotRocketlauncherB = 898, - WPN_BotRocketlauncherC = 907, - WPN_BotRocketlauncherD = 916, - WPN_BotRocketlauncherES = 965, - WPN_BotRocketlauncherEG = 974, - WPN_FestiveBlackbox = 1085, - WPN_Airstrike = 1104, - //Secondary - WPN_SoldierShotgun = 10, - WPN_NewShotgun = 199, - WPN_BuffBanner = 129, - WPN_BattalionBackup = 226, - WPN_Concheror = 354, - WPN_ReserveShooter = 415, - WPN_RighteousBison = 442, - WPN_FestiveBuffBanner = 1001, - WPN_PanicAttack = 1153, - WPN_ManTreads = 444, - WPN_GunBoats = 133, - WPN_BASEJumper = 1101, - //Melee - WPN_Shovel = 6, - WPN_NewShovel = 196, - WPN_Equalizer = 128, - WPN_PainTrain = 154, - WPN_Katana = 357, - WPN_MarketGardener = 416, - WPN_DisciplinaryAction = 447, - WPN_EscapePlan = 775, -}; -enum pyroweapons -{ - //Primary - WPN_Flamethrower = 21, - WPN_NewFlamethrower = 208, - WPN_Backburner = 40, - WPN_Degreaser = 215, - WPN_FestiveFlamethrower = 659, - WPN_Phlogistinator = 594, - WPN_Rainblower = 741, - WPN_BotFlamethrowerS = 798, - WPN_BotFlamethrowerG = 807, - WPN_BotFlamethrowerR = 887, - WPN_BotFlamethrowerB = 896, - WPN_BotFlamethrowerC = 905, - WPN_BotFlamethrowerD = 914, - WPN_BotFlamethrowerES = 963, - WPN_BotFlamethrowerEG = 972, - WPN_FestiveBackburner = 1146, - //Secondary - WPN_PyroShotgun = 12, - WPN_Flaregun = 39, - WPN_Detonator = 351, - WPN_ManMelter = 595, - WPN_ScorchShot = 740, - WPN_FestiveFlaregun = 1081, - WPN_ThermalThruster = 1179, - WPN_GasPasser = 1180, - //Melee - WPN_Fireaxe = 2, - WPN_NewAxe = 192, - WPN_Axtingusher = 38, - WPN_HomeWrecker = 153, - WPN_PowerJack = 214, - WPN_Backscratcher = 326, - WPN_VolcanoFragment = 348, - WPN_Maul = 466, - WPN_Mailbox = 457, - WPN_ThirdDegree = 593, - WPN_Lollychop = 739, - WPN_NeonAnnihilator1 = 813, - WPN_NeonAnnihilator2 = 834, - WPN_FestiveAxtingisher = 1000, -}; -enum demomanweapons -{ - //Primary - WPN_GrenadeLauncher = 19, - WPN_NewGrenadeLauncher = 206, - WPN_LochNLoad = 308, - WPN_LoooseCannon = 996, - WPN_FestiveGrenadeLauncher = 1007, - WPN_IronBomber = 1151, - //Secondary - WPN_StickyLauncher = 20, - WPN_NewStickyLauncher = 207, - WPN_ScottishResistance = 130, - WPN_StickyJumper = 265, - WPN_FestiveStickyLauncher = 661, - WPN_BotStickyS = 797, - WPN_BotStickyG = 806, - WPN_BotStickyR = 886, - WPN_BotStickyB = 895, - WPN_BotStickyC = 904, - WPN_BotStickyD = 913, - WPN_BotStickyES = 962, - WPN_BotStickyEG = 971, - WPN_QuickieBombLauncher = 1150, - WPN_SplendidScreen = 406, - WPN_CharginTarge = 131, - WPN_FestiveCharginTarge = 1144, - WPN_TideTurner = 1099, - //Melee - WPN_Bottle = 1, - WPN_NewBottle = 191, - WPN_Sword = 132, - WPN_ScottsSkullctter = 172, - WPN_Fryingpan = 264, - WPN_Headless = 266, - WPN_Ullapool = 307, - WPN_Claidheamhmor = 327, - WPN_PersainPersuader = 404, - WPN_Golfclub = 482, - WPN_ScottishHandshake = 609, - WPN_GoldenFryingPan = 1071, - WPN_FestiveEyelander = 1082, -}; -enum heavyweapons -{ - //Primary - WPN_Minigun = 15, - WPN_NewMinigun = 202, - WPN_Natascha = 41, - WPN_IronCurtain = 298, - WPN_BrassBeast = 312, - WPN_Tomislav = 424, - WPN_FestiveMinigun = 654, - WPN_HuoLongHeatmaker1 = 811, - WPN_HuoLongHeatmaker2 = 832, - WPN_BotMinigunS = 793, - WPN_BotMinigunG = 802, - WPN_BotMinigunR = 882, - WPN_BotMinigunB = 891, - WPN_BotMinigunC = 900, - WPN_BotMinigunD = 909, - WPN_Deflector = 850, - WPN_BotMinigunES = 958, - WPN_BotMinigunEG = 967, - //Secondary - WPN_HeavyShotgun = 11, - WPN_Sandvich = 42, - WPN_CandyBar = 159, - WPN_Steak = 311, - WPN_Fishcake = 433, - WPN_FamilyBuisness = 425, - WPN_RobotSandvich = 863, - WPN_FestiveSandvich = 1002, - //Melee - WPN_Fists = 5, - WPN_NewFists = 195, - WPN_KGB = 43, - WPN_GRU = 239, - WPN_WarriorSpirit = 310, - WPN_FistsOfSteel = 331, - WPN_EvictionNotice = 426, - WPN_ApocoFists = 587, - WPN_HolidayPunch = 656, - WPN_FestiveGRU = 1084, - WPN_BreadBite = 1100, -}; -enum engineerweapons -{ - //Primary - WPN_EngineerShotgun = 9, - WPN_FrontierJustice = 141, - WPN_Widowmaker = 527, - WPN_Pomson = 588, - WPN_RescueRanger = 997, - WPN_FestiveFrontierJustice = 1004, - //Secondary - WPN_EngineerPistol = 22, - WPN_Wrangler = 140, - WPN_ShortCircut = 528, - WPN_FestiveWrangler = 1086, - WPN_GeigerCounter = 30668, - //Melee - WPN_Wrench = 7, - WPN_NewWrench = 197, - WPN_Goldenwrench = 169, - WPN_SouthernHospitality = 155, - WPN_Gunslinger = 142, - WPN_Jag = 329, - WPN_FestiveWrench = 662, - WPN_EurekaEffect = 589, - WPN_BotWrenchS = 795, - WPN_BotWrenchG = 804, - WPN_BotWrenchR = 884, - WPN_BotWrenchB = 893, - WPN_BotWrenchC = 902, - WPN_BotWrenchD = 911, - WPN_BotWrenchES = 960, - WPN_BotWrenchEG = 969, - //Misc - WPN_Builder = 25, - WPN_Builder2 = 737, - WPN_Destructor = 26, - WPN_Toolbox = 28, -}; -enum medicweapons -{ - //Primary - WPN_SyringeGun = 17, - WPN_NewSyringeGun = 204, - WPN_Blutsauger = 36, - WPN_Crossbow = 305, - WPN_Overdose = 412, - WPN_FestiveCrossbow = 1079, - //Secondary - WPN_Medigun = 29, - WPN_NewMedigun = 211, - WPN_Kritzkrieg = 35, - WPN_QuickFix = 411, - WPN_FestiveMedigun = 663, - WPN_MedigunS = 796, - WPN_MedigunG = 805, - WPN_MedigunR = 885, - WPN_MedigunB = 894, - WPN_MedigunC = 903, - WPN_MedigunD = 912, - WPN_Vaccinator = 998, - WPN_MedigunES = 961, - WPN_MedigunEG = 970, - //Melee - WPN_Bonesaw = 8, - WPN_NewBonesaw = 198, - WPN_Ubersaw = 37, - WPN_Vitasaw = 173, - WPN_Amputator = 304, - WPN_Solemnvow = 413, - WPN_FestiveUbersaw = 1003, -}; -enum sniperweapons -{ - //Primary - WPN_SniperRifle = 14, - WPN_NewSniperRifle = 201, - WPN_Huntsman = 56, - WPN_SydneySleeper = 230, - WPN_Bazaarbargain = 402, - WPN_Machina = 526, - WPN_FestiveSniperRifle = 664, - WPN_HitmanHeatmaker = 752, - WPN_BotSniperRifleS = 792, - WPN_BotSniperRifleG = 801, - WPN_BotSniperRifleR = 881, - WPN_BotSniperRifleB = 890, - WPN_BotSniperRifleC = 899, - WPN_BotSniperRifleD = 908, - WPN_AWP = 851, - WPN_BotSniperRifleES = 957, - WPN_BotSniperRifleEG = 966, - WPN_FestiveHuntsman = 1005, - WPN_CompoundBow = 1092, - WPN_ClassicSniperRifle = 1098, - WPN_ShootingStar = 30665, - //Secondary - WPN_SMG = 16, - WPN_NewSMG = 203, - WPN_Jarate = 58, - WPN_DarwinDangerShield = 231, - WPN_CleanersCarbine = 751, - WPN_FestiveJarate = 1083, - WPN_SelfAwareBeautyMark = 1105, - WPN_RAZORBACK = 57, - WPN_COZYCAMPER = 642, - //Melee - WPN_Kukri = 3, - WPN_NewKukri = 193, - WPN_TribalmansShiv = 171, - WPN_Bushwacka = 232, - WPN_Shahanshah = 401, -}; -enum spyweapons -{ - //Primary - WPN_Revolver = 24, - WPN_NewRevolver = 210, - WPN_Ambassador = 61, - WPN_BigKill = 161, - WPN_Letranger = 224, - WPN_Enforcer = 460, - WPN_Diamondback = 525, - WPN_FestiveAmbassador = 1006, - //Melee - WPN_Knife = 4, - WPN_NewKnife = 194, - WPN_EternalReward = 225, - WPN_DisguiseKit = 27, - WPN_Kunai = 356, - WPN_BigEarner = 461, - WPN_WangaPrick = 574, - WPN_SharpDresser = 638, - WPN_Spycicle = 649, - WPN_FestiveKnife = 665, - WPN_BlackRose = 727, - WPN_BotKnifeS = 794, - WPN_BotKnifeG = 803, - WPN_BotKnifeR = 883, - WPN_BotKnifeB = 892, - WPN_BotKnifeC = 901, - WPN_BotKnifeD = 910, - WPN_BotKnifeES = 959, - WPN_BotKnifeEG = 968, - //Watches - WPN_InivisWatch = 30, - WPN_DeadRinger = 59, - WPN_CloakAndDagger = 60, - WPN_TimePiece = 297, - //Sapper - WPN_Sapper = 735, - WPN_Sapper2 = 736, - WPN_RedTape1 = 810, - WPN_RedTape2 = 831, - WPN_ApSap = 933, - WPN_FestiveSapper = 1080, - WPN_SnackAttack = 1102, -}; - - -class c_base_weapon : public IClientEntity -{ -public: - - NETVAR( m_iItemDefinitionIndex, "m_iItemDefinitionIndex", "DT_BaseAttributableItem", 0, int ); - NETVAR( m_flNextPrimaryAttack, "m_flNextPrimaryAttack", "DT_TFWeaponBase", 0, float ); - NETVAR( m_nInspectStage, "m_nInspectStage", "DT_TFWeaponBase", 0, int ); - NETVAR( m_flInspectAnimTime, "m_flInspectAnimTime", "DT_TFWeaponBase", 0, float ); - NETVAR( m_AttributeList, "m_AttributeList", "DT_BaseAttributableItem", 0, c_attribute_list* ) - NETVAR( m_hOwnerEntity, "m_hOwnerEntity", "DT_BaseEntity", 0, uint32_t ); - NETVAR( m_iClip1, "m_iClip1", "DT_BaseCombatWeapon", 0, int ); - NETVAR( m_hBuilder, "m_hBuilder", "DT_BaseObject", 0, uint32_t ); - void get_weapon_class( ); - - bool is_sniper( ) { - switch( m_iItemDefinitionIndex( ) ) { - case WPN_SniperRifle: - case WPN_NewSniperRifle: - case WPN_Huntsman: - case WPN_SydneySleeper: - case WPN_Bazaarbargain: - case WPN_Machina: - case WPN_FestiveSniperRifle: - case WPN_HitmanHeatmaker: - case WPN_BotSniperRifleS: - case WPN_BotSniperRifleG: - case WPN_BotSniperRifleR: - case WPN_BotSniperRifleB: - case WPN_BotSniperRifleC: - case WPN_BotSniperRifleD: - case WPN_AWP: - case WPN_BotSniperRifleES: - case WPN_BotSniperRifleEG: - case WPN_FestiveHuntsman: - case WPN_CompoundBow: - case WPN_ClassicSniperRifle: - case WPN_ShootingStar: - return true; - break; - default: - return false; - } - } - - - bool has_trajectory( ) { - switch( m_iItemDefinitionIndex( ) ) { - case WPN_Sandman: - case WPN_WrapAssassin: - case WPN_FlyingGuillotine1: - case WPN_FlyingGuillotine2: - case WPN_Flaregun: - case WPN_Detonator: - case WPN_ScorchShot: - case WPN_FestiveFlaregun: - case WPN_GrenadeLauncher: - case WPN_NewGrenadeLauncher: - case WPN_LochNLoad: - case WPN_LoooseCannon: - case WPN_FestiveGrenadeLauncher: - case WPN_IronBomber: - case WPN_Ullapool: - case WPN_QuickieBombLauncher: - case WPN_StickyJumper: - case WPN_NewStickyLauncher: - case WPN_StickyLauncher: - case WPN_ScottishResistance: - case WPN_FestiveHuntsman: - case WPN_Huntsman: - case WPN_FestiveJarate: - case WPN_Jarate: - case WPN_SelfAwareBeautyMark: - case WPN_GasPasser: - case WPN_CompoundBow: - return true; - break; - default: - return false; - } - } - - bool is_primary( ) { - switch( m_iItemDefinitionIndex( ) ) { - case WPN_Scattergun: - case WPN_NewScattergun: - case WPN_FAN: - case WPN_Shortstop: - case WPN_SodaPopper: - case WPN_BabyFaceBlaster: - case WPN_BotScattergunS: - case WPN_BotScattergunG: - case WPN_BotScattergunR: - case WPN_BotScattergunB: - case WPN_BotScattergunC: - case WPN_BotScattergunD: - case WPN_BotScattergunES: - case WPN_BotScattergunEG: - case WPN_FestiveFaN: - case WPN_BackScatter: - case WPN_RocketLauncher: - case WPN_NewRocketLauncher: - case WPN_DirectHit: - case WPN_BlackBox: - case WPN_RocketJumper: - case WPN_LibertyLauncher: - case WPN_CowMangler: - case WPN_Original: - case WPN_FestiveRocketLauncher: - case WPN_BeggersBazooka: - case WPN_BotRocketlauncherS: - case WPN_BotRocketlauncherG: - case WPN_BotRocketlauncherR: - case WPN_BotRocketlauncherB: - case WPN_BotRocketlauncherC: - case WPN_BotRocketlauncherD: - case WPN_BotRocketlauncherES: - case WPN_BotRocketlauncherEG: - case WPN_FestiveBlackbox: - case WPN_Airstrike: - case WPN_Flamethrower: - case WPN_NewFlamethrower: - case WPN_Backburner: - case WPN_Degreaser: - case WPN_FestiveFlamethrower: - case WPN_Phlogistinator: - case WPN_Rainblower: - case WPN_BotFlamethrowerS: - case WPN_BotFlamethrowerG: - case WPN_BotFlamethrowerR: - case WPN_BotFlamethrowerB: - case WPN_BotFlamethrowerC: - case WPN_BotFlamethrowerD: - case WPN_BotFlamethrowerES: - case WPN_BotFlamethrowerEG: - case WPN_FestiveBackburner: - case WPN_GrenadeLauncher: - case WPN_NewGrenadeLauncher: - case WPN_LochNLoad: - case WPN_LoooseCannon: - case WPN_FestiveGrenadeLauncher: - case WPN_IronBomber: - case WPN_Minigun: - case WPN_NewMinigun: - case WPN_Natascha: - case WPN_IronCurtain: - case WPN_BrassBeast: - case WPN_Tomislav: - case WPN_FestiveMinigun: - case WPN_HuoLongHeatmaker1: - case WPN_HuoLongHeatmaker2: - case WPN_BotMinigunS: - case WPN_BotMinigunG: - case WPN_BotMinigunR: - case WPN_BotMinigunB: - case WPN_BotMinigunC: - case WPN_BotMinigunD: - case WPN_Deflector: - case WPN_BotMinigunES: - case WPN_BotMinigunEG: - case WPN_EngineerShotgun: - case WPN_FrontierJustice: - case WPN_Widowmaker: - case WPN_Pomson: - case WPN_RescueRanger: - case WPN_FestiveFrontierJustice: - case WPN_SyringeGun: - case WPN_NewSyringeGun: - case WPN_Blutsauger: - case WPN_Crossbow: - case WPN_Overdose: - case WPN_FestiveCrossbow: - case WPN_SniperRifle: - case WPN_NewSniperRifle: - case WPN_Huntsman: - case WPN_SydneySleeper: - case WPN_Bazaarbargain: - case WPN_Machina: - case WPN_FestiveSniperRifle: - case WPN_HitmanHeatmaker: - case WPN_BotSniperRifleS: - case WPN_BotSniperRifleG: - case WPN_BotSniperRifleR: - case WPN_BotSniperRifleB: - case WPN_BotSniperRifleC: - case WPN_BotSniperRifleD: - case WPN_AWP: - case WPN_BotSniperRifleES: - case WPN_BotSniperRifleEG: - case WPN_FestiveHuntsman: - case WPN_CompoundBow: - case WPN_ClassicSniperRifle: - case WPN_ShootingStar: - case WPN_Revolver: - case WPN_NewRevolver: - case WPN_Ambassador: - case WPN_BigKill: - case WPN_Letranger: - case WPN_Enforcer: - case WPN_Diamondback: - case WPN_FestiveAmbassador: - return true; - break; - default: - return false; - } - } - - bool is_secondary( ) { - switch( m_iItemDefinitionIndex( ) ) { - case WPN_ScoutPistol: - case WPN_NewPistol: - case WPN_Bonk: - case WPN_CritCola: - case WPN_Lugermorph: - case WPN_Milk: - case WPN_Lugermorph2: - case WPN_Winger: - case WPN_PocketPistol: - case WPN_MutatedMilk: - case WPN_CAPPER: - case WPN_SoldierShotgun: - case WPN_NewShotgun: - case WPN_BuffBanner: - case WPN_BattalionBackup: - case WPN_Concheror: - case WPN_ReserveShooter: - case WPN_RighteousBison: - case WPN_FestiveBuffBanner: - case WPN_PanicAttack: - case WPN_ManTreads: - case WPN_GunBoats: - case WPN_BASEJumper: - case WPN_PyroShotgun: - case WPN_Flaregun: - case WPN_Detonator: - case WPN_ManMelter: - case WPN_ScorchShot: - case WPN_FestiveFlaregun: - case WPN_ThermalThruster: - case WPN_GasPasser: - case WPN_StickyLauncher: - case WPN_NewStickyLauncher: - case WPN_ScottishResistance: - case WPN_StickyJumper: - case WPN_FestiveStickyLauncher: - case WPN_BotStickyS: - case WPN_BotStickyG: - case WPN_BotStickyR: - case WPN_BotStickyB: - case WPN_BotStickyC: - case WPN_BotStickyD: - case WPN_BotStickyES: - case WPN_BotStickyEG: - case WPN_QuickieBombLauncher: - case WPN_SplendidScreen: - case WPN_CharginTarge: - case WPN_FestiveCharginTarge: - case WPN_TideTurner: - case WPN_HeavyShotgun: - case WPN_Sandvich: - case WPN_CandyBar: - case WPN_Steak: - case WPN_Fishcake: - case WPN_FamilyBuisness: - case WPN_RobotSandvich: - case WPN_FestiveSandvich: - case WPN_EngineerPistol: - case WPN_Wrangler: - case WPN_ShortCircut: - case WPN_FestiveWrangler: - case WPN_GeigerCounter: - case WPN_Medigun: - case WPN_NewMedigun: - case WPN_Kritzkrieg: - case WPN_QuickFix: - case WPN_FestiveMedigun: - case WPN_MedigunS: - case WPN_MedigunG: - case WPN_MedigunR: - case WPN_MedigunB: - case WPN_MedigunC: - case WPN_MedigunD: - case WPN_Vaccinator: - case WPN_MedigunES: - case WPN_MedigunEG: - case WPN_SMG: - case WPN_NewSMG: - case WPN_Jarate: - case WPN_DarwinDangerShield: - case WPN_CleanersCarbine: - case WPN_FestiveJarate: - case WPN_SelfAwareBeautyMark: - case WPN_RAZORBACK: - case WPN_COZYCAMPER: - return true; - break; - default: - return false; - } - } - - bool is_third( ) { - switch( m_iItemDefinitionIndex( ) ) { - case WPN_Bat: - case WPN_NewBat: - case WPN_Sandman: - case WPN_Fish: - case WPN_Cane: - case WPN_BostonBasher: - case WPN_SunStick: - case WPN_FanOWar: - case WPN_RuneBlade: - case WPN_Saxxy: - case WPN_Atomizer: - case WPN_ConscientiousObjector: - case WPN_UnarmedCombat: - case WPN_WrapAssassin: - case WPN_FestiveBat: - case WPN_FestiveScattergun: - case WPN_FlyingGuillotine1: - case WPN_FlyingGuillotine2: - case WPN_FreedomStaff: - case WPN_BatOuttaHell: - case WPN_MemoryMaker: - case WPN_FestiveFish: - case WPN_TheHamShank: - case WPN_CrossingGuard: - case WPN_NecroSmasher: - case WPN_Batsaber: - case WPN_Shovel: - case WPN_NewShovel: - case WPN_Equalizer: - case WPN_PainTrain: - case WPN_Katana: - case WPN_MarketGardener: - case WPN_DisciplinaryAction: - case WPN_EscapePlan: - case WPN_Fireaxe: - case WPN_NewAxe: - case WPN_Axtingusher: - case WPN_HomeWrecker: - case WPN_PowerJack: - case WPN_Backscratcher: - case WPN_VolcanoFragment: - case WPN_Maul: - case WPN_Mailbox: - case WPN_ThirdDegree: - case WPN_Lollychop: - case WPN_NeonAnnihilator1: - case WPN_NeonAnnihilator2: - case WPN_FestiveAxtingisher: - case WPN_Bottle: - case WPN_NewBottle: - case WPN_Sword: - case WPN_ScottsSkullctter: - case WPN_Fryingpan: - case WPN_Headless: - case WPN_Ullapool: - case WPN_Claidheamhmor: - case WPN_PersainPersuader: - case WPN_Golfclub: - case WPN_ScottishHandshake: - case WPN_GoldenFryingPan: - case WPN_FestiveEyelander: - case WPN_Fists: - case WPN_NewFists: - case WPN_KGB: - case WPN_GRU: - case WPN_WarriorSpirit: - case WPN_FistsOfSteel: - case WPN_EvictionNotice: - case WPN_ApocoFists: - case WPN_HolidayPunch: - case WPN_FestiveGRU: - case WPN_BreadBite: - case WPN_Wrench: - case WPN_NewWrench: - case WPN_Goldenwrench: - case WPN_SouthernHospitality: - case WPN_Gunslinger: - case WPN_Jag: - case WPN_FestiveWrench: - case WPN_EurekaEffect: - case WPN_BotWrenchS: - case WPN_BotWrenchG: - case WPN_BotWrenchR: - case WPN_BotWrenchB: - case WPN_BotWrenchC: - case WPN_BotWrenchD: - case WPN_BotWrenchES: - case WPN_BotWrenchEG: - case WPN_Bonesaw: - case WPN_NewBonesaw: - case WPN_Ubersaw: - case WPN_Vitasaw: - case WPN_Amputator: - case WPN_Solemnvow: - case WPN_FestiveUbersaw: - case WPN_Kukri: - case WPN_NewKukri: - case WPN_TribalmansShiv: - case WPN_Bushwacka: - case WPN_Shahanshah: - return true; - break; - default: - return false; - } - } - - bool is_shield( ) { - switch( m_iItemDefinitionIndex( ) ) { - case WPN_CharginTarge: - case WPN_SplendidScreen: - case WPN_TideTurner: - case WPN_FestiveCharginTarge: - return true; - break; - default: - return false; - } - } - - - bool is_shotgun( ) { - switch( m_iItemDefinitionIndex( ) ) { - case WPN_Scattergun: - case WPN_NewScattergun: - case WPN_FAN: - case WPN_SodaPopper: - case WPN_FestiveFaN: - case WPN_BackScatter: - case WPN_SoldierShotgun: - case WPN_NewShotgun: - case WPN_ReserveShooter: - case WPN_PanicAttack: - case WPN_PyroShotgun: - case WPN_HeavyShotgun: - case WPN_FamilyBuisness: - case WPN_EngineerShotgun: - case WPN_FrontierJustice: - case WPN_Widowmaker: - case WPN_Pomson: - case WPN_RescueRanger: - case WPN_FestiveFrontierJustice: - return true; - break; - default: - return false; - } - } - - bool is_melee( ) { - switch( m_iItemDefinitionIndex( ) ) { - case WPN_Bat: - case WPN_NewBat: - case WPN_Sandman: - case WPN_Fish: - case WPN_Cane: - case WPN_BostonBasher: - case WPN_SunStick: - case WPN_FanOWar: - case WPN_RuneBlade: - case WPN_Saxxy: - case WPN_Atomizer: - case WPN_ConscientiousObjector: - case WPN_UnarmedCombat: - case WPN_WrapAssassin: - case WPN_FestiveBat: - case WPN_FreedomStaff: - case WPN_BatOuttaHell: - case WPN_MemoryMaker: - case WPN_FestiveFish: - case WPN_TheHamShank: - case WPN_CrossingGuard: - case WPN_NecroSmasher: - case WPN_Batsaber: - case WPN_Shovel: - case WPN_NewShovel: - case WPN_Equalizer: - case WPN_PainTrain: - case WPN_Katana: - case WPN_MarketGardener: - case WPN_DisciplinaryAction: - case WPN_EscapePlan: - case WPN_Fireaxe: - case WPN_NewAxe: - case WPN_Axtingusher: - case WPN_HomeWrecker: - case WPN_PowerJack: - case WPN_Backscratcher: - case WPN_VolcanoFragment: - case WPN_Maul: - case WPN_Mailbox: - case WPN_ThirdDegree: - case WPN_Lollychop: - case WPN_NeonAnnihilator1: - case WPN_NeonAnnihilator2: - case WPN_FestiveAxtingisher: - case WPN_Bottle: - case WPN_NewBottle: - case WPN_Sword: - case WPN_ScottsSkullctter: - case WPN_Fryingpan: - case WPN_Headless: - case WPN_Ullapool: - case WPN_Claidheamhmor: - case WPN_PersainPersuader: - case WPN_Golfclub: - case WPN_ScottishHandshake: - case WPN_GoldenFryingPan: - case WPN_FestiveEyelander: - case WPN_Fists: - case WPN_NewFists: - case WPN_KGB: - case WPN_GRU: - case WPN_WarriorSpirit: - case WPN_FistsOfSteel: - case WPN_EvictionNotice: - case WPN_ApocoFists: - case WPN_HolidayPunch: - case WPN_FestiveGRU: - case WPN_BreadBite: - case WPN_Wrench: - case WPN_NewWrench: - case WPN_Goldenwrench: - case WPN_SouthernHospitality: - case WPN_Gunslinger: - case WPN_Jag: - case WPN_Bonesaw: - case WPN_NewBonesaw: - case WPN_Ubersaw: - case WPN_Vitasaw: - case WPN_Amputator: - case WPN_Solemnvow: - case WPN_FestiveUbersaw: - case WPN_Kukri: - case WPN_NewKukri: - case WPN_TribalmansShiv: - case WPN_Bushwacka: - case WPN_Shahanshah: - return true; - break; - default: - return false; - } - } - - bool is_pistol( ) { - switch( m_iItemDefinitionIndex( ) ) { - case WPN_EngineerPistol: - case WPN_ScoutPistol: - case WPN_NewPistol: - case WPN_Lugermorph: - case WPN_Lugermorph2: - case WPN_Winger: - case WPN_PocketPistol: - case WPN_CAPPER: - case WPN_ShortCircut: - case WPN_Flaregun: - case WPN_FestiveFlaregun: - case WPN_Detonator: - case WPN_ManMelter: - case WPN_ScorchShot: - case WPN_Shortstop: - return true; - break; - default: - return false; - } - } - - bool is_grenade( ) { - switch( m_iItemDefinitionIndex( ) ) { - case WPN_Milk: - case WPN_MutatedMilk: - case WPN_Jarate: - case WPN_FestiveJarate: - case WPN_SelfAwareBeautyMark: - case WPN_GasPasser: - case WPN_FlyingGuillotine1: - case WPN_FlyingGuillotine2: - return true; - break; - default: - return false; - - } - } - - - bool is_util( ) { - switch( m_iItemDefinitionIndex( ) ) { - case WPN_Milk: - case WPN_MutatedMilk: - case WPN_Jarate: - case WPN_FestiveJarate: - case WPN_DarwinDangerShield: - case WPN_RAZORBACK: - case WPN_COZYCAMPER: - case WPN_BuffBanner: - case WPN_BattalionBackup: - case WPN_Concheror: - case WPN_BASEJumper: - case WPN_ManTreads: - case WPN_GunBoats: - case WPN_ThermalThruster: - case WPN_DisguiseKit: - case WPN_Builder: - case WPN_Builder2: - case WPN_Destructor: - case WPN_Toolbox: - return true; - break; - default: - return false; - - } - } - - bool is_flame_thrower( ) { - switch( m_iItemDefinitionIndex( ) ) { - case WPN_Flamethrower: - case WPN_NewFlamethrower: - case WPN_Backburner: - case WPN_Degreaser: - case WPN_FestiveFlamethrower: - case WPN_Phlogistinator: - case WPN_Rainblower: - case WPN_BotFlamethrowerS: - case WPN_BotFlamethrowerG: - case WPN_BotFlamethrowerR: - case WPN_BotFlamethrowerB: - case WPN_BotFlamethrowerC: - case WPN_BotFlamethrowerD: - case WPN_BotFlamethrowerES: - case WPN_BotFlamethrowerEG: - case WPN_FestiveBackburner: - return true; - break; - default: - return false; - } - } - - bool is_sticky( ) { - switch( m_iItemDefinitionIndex( ) ) { - case WPN_StickyLauncher: - case WPN_NewStickyLauncher: - case WPN_ScottishResistance: - case WPN_StickyJumper: - case WPN_FestiveStickyLauncher: - case WPN_BotStickyS: - case WPN_BotStickyG: - case WPN_BotStickyR: - case WPN_BotStickyB: - case WPN_BotStickyC: - case WPN_BotStickyD: - case WPN_BotStickyES: - case WPN_BotStickyEG: - case WPN_QuickieBombLauncher: - return true; - break; - default: - return false; - } - } - - bool is_grenade_launcher( ) { - switch( m_iItemDefinitionIndex( ) ) { - case WPN_GrenadeLauncher: - case WPN_NewGrenadeLauncher: - case WPN_LochNLoad: - case WPN_LoooseCannon: - case WPN_FestiveGrenadeLauncher: - case WPN_IronBomber: - return true; - break; - default: - return false; - } - } - - bool is_rocket_launcher( ) { - switch( m_iItemDefinitionIndex( ) ) { - case WPN_RocketLauncher: - case WPN_NewRocketLauncher: - case WPN_DirectHit: - case WPN_BlackBox: - case WPN_RocketJumper: - case WPN_LibertyLauncher: - case WPN_CowMangler: - case WPN_Original: - case WPN_FestiveRocketLauncher: - case WPN_BeggersBazooka: - case WPN_BotRocketlauncherS: - case WPN_BotRocketlauncherG: - case WPN_BotRocketlauncherR: - case WPN_BotRocketlauncherB: - case WPN_BotRocketlauncherC: - case WPN_BotRocketlauncherD: - case WPN_BotRocketlauncherES: - case WPN_BotRocketlauncherEG: - case WPN_FestiveBlackbox: - case WPN_Airstrike: - return true; - break; - default: - return false; - } - } - - bool is_minigun( ) { - switch( m_iItemDefinitionIndex( ) ) { - case WPN_Minigun: - case WPN_NewMinigun: - case WPN_Natascha: - case WPN_IronCurtain: - case WPN_BrassBeast: - case WPN_Tomislav: - case WPN_FestiveMinigun: - case WPN_HuoLongHeatmaker1: - case WPN_HuoLongHeatmaker2: - case WPN_BotMinigunS: - case WPN_BotMinigunG: - case WPN_BotMinigunR: - case WPN_BotMinigunB: - case WPN_BotMinigunC: - case WPN_BotMinigunD: - case WPN_Deflector: - case WPN_BotMinigunES: - case WPN_BotMinigunEG: - return true; - break; - default: - return false; - } - } - - bool is_edible( ) { - switch( m_iItemDefinitionIndex( ) ) { - case WPN_Bonk: - case WPN_CritCola: - case WPN_CandyBar: - case WPN_Steak: - case WPN_Fishcake: - case WPN_Sandvich: - case WPN_RobotSandvich: - case WPN_FestiveSandvich: - return true; - break; - default: - return false; - } - } - - bool is_wrench( ) { - switch( m_iItemDefinitionIndex( ) ) { - case WPN_Wrench: - case WPN_NewWrench: - case WPN_Goldenwrench: - case WPN_SouthernHospitality: - case WPN_Gunslinger: - case WPN_Jag: - case WPN_FestiveWrench: - case WPN_EurekaEffect: - case WPN_BotWrenchS: - case WPN_BotWrenchG: - case WPN_BotWrenchR: - case WPN_BotWrenchB: - case WPN_BotWrenchC: - case WPN_BotWrenchD: - case WPN_BotWrenchES: - case WPN_BotWrenchEG: - return true; - break; - default: - return false; - } - } - - bool is_engineer( ) { - switch( m_iItemDefinitionIndex( ) ) { - case WPN_Builder: - case WPN_Builder2: - case WPN_Destructor: - case WPN_Toolbox: - return true; - break; - default: - return false; - } - } - - bool is_needle_gun( ) { - switch( m_iItemDefinitionIndex( ) ) { - case WPN_SyringeGun: - case WPN_NewSyringeGun: - case WPN_Blutsauger: - case WPN_Crossbow: - case WPN_Overdose: - case WPN_FestiveCrossbow: - return true; - break; - default: - return false; - } - } - - bool is_healing( ) { - switch( m_iItemDefinitionIndex( ) ) { - case WPN_Medigun: - case WPN_NewMedigun: - case WPN_Kritzkrieg: - case WPN_QuickFix: - case WPN_FestiveMedigun: - case WPN_MedigunS: - case WPN_MedigunG: - case WPN_MedigunR: - case WPN_MedigunB: - case WPN_MedigunC: - case WPN_MedigunD: - case WPN_Vaccinator: - case WPN_MedigunES: - case WPN_MedigunEG: - return true; - break; - default: - return false; - } - } - - bool is_revolver( ) { - switch( m_iItemDefinitionIndex( ) ) { - case WPN_Revolver: - case WPN_NewRevolver: - case WPN_Ambassador: - case WPN_BigKill: - case WPN_Letranger: - case WPN_Enforcer: - case WPN_Diamondback: - case WPN_FestiveAmbassador: - return true; - break; - default: - return false; - } - } - - bool is_spy_knife( ) { - switch( m_iItemDefinitionIndex( ) ) { - case WPN_Knife: - case WPN_NewKnife: - case WPN_EternalReward: - case WPN_DisguiseKit: - case WPN_Kunai: - case WPN_BigEarner: - case WPN_WangaPrick: - case WPN_SharpDresser: - case WPN_Spycicle: - case WPN_FestiveKnife: - case WPN_BlackRose: - case WPN_BotKnifeS: - case WPN_BotKnifeG: - case WPN_BotKnifeR: - case WPN_BotKnifeB: - case WPN_BotKnifeC: - case WPN_BotKnifeD: - case WPN_BotKnifeES: - case WPN_BotKnifeEG: - return true; - break; - default: - return false; - } - } - - bool is_watch( ) { - switch( m_iItemDefinitionIndex( ) ) { - case WPN_InivisWatch: - case WPN_DeadRinger: - case WPN_CloakAndDagger: - case WPN_TimePiece: - return true; - break; - default: - return false; - } - } - - bool is_sapper( ) { - switch( m_iItemDefinitionIndex( ) ) { - case WPN_Sapper: - case WPN_Sapper2: - case WPN_RedTape1: - case WPN_RedTape2: - case WPN_ApSap: - case WPN_FestiveSapper: - case WPN_SnackAttack: - return true; - break; - default: - return false; - } - } - - /*bool get_projectile_speed( float& speed ) { - speed = 0; - switch( m_iItemDefinitionIndex( ) ) { - case WPN_Milk: - case WPN_MutatedMilk: - speed = 1019.9; - break; - case WPN_FlyingGuillotine1: - case WPN_FlyingGuillotine2: - case WPN_Sandman: - case WPN_WrapAssassin: - case WPN_ManMelter: - speed = 3000; - break; - case WPN_RocketJumper: - case WPN_BlackBox: - case WPN_Original: - case WPN_BeggersBazooka: - case WPN_CowMangler: - speed = 1100; - break; - - case WPN_DirectHit: - speed = 1980; - break; - - case WPN_LibertyLauncher: - speed = 1540; - break; - - case WPN_RighteousBison: - case WPN_Pomson: - speed = 1200; - break; - - case WPN_Flaregun: - case WPN_FestiveFlaregun: - case WPN_ScorchShot: - case WPN_Detonator: - speed = 2000; - break; - - case WPN_GrenadeLauncher: - case WPN_NewGrenadeLauncher: - case WPN_FestiveGrenadeLauncher: - case WPN_IronBomber: - speed = 1216.6; - break; - - - - /* - get dynamically - - stickybomb launcher - scottish resistance - sticky jumper - quickiebomb launcher - huntman fortified compound - - - - } - return ( speed ); - }*/ - - int get_max_clip_1( ); - int get_max_clip_2( ); - int get_slot( ); - char* get_name( ); - char* get_print_name( ); - vec3_t& get_bullet_spread( ); - float get_spread( ); - int get_weaponid( ); - bool can_fire( ); - bool is_non_aim( ); - int& get_inspect_stage( ); - float& get_inspect_time( ); - c_attribute_list* get_attribute_list( ); - float get_distance( ); -}; \ No newline at end of file diff --git a/tf2/CGlobalVarsBase.h b/tf2/CGlobalVarsBase.h deleted file mode 100644 index 9b0d79f..0000000 --- a/tf2/CGlobalVarsBase.h +++ /dev/null @@ -1,14 +0,0 @@ -#pragma once - -class CGlobalVarsBase { -public: - float realtime; - int framecount; - float absoluteframetime; - float curtime; - float frametime; - int maxclients; - int tickcount; - float interval_per_tick; - float interpolation_amount; -}; \ No newline at end of file diff --git a/tf2/CHLClient.h b/tf2/CHLClient.h deleted file mode 100644 index 7eadb50..0000000 --- a/tf2/CHLClient.h +++ /dev/null @@ -1,32 +0,0 @@ -#pragma once -#include "dt_common.h" -#include "dt_recv.h" -#include "VFunc.h" -#include "ClientClass.h" - -enum frame_stages_t { - FRAME_UNDEFINED = -1, // (haven't run any frames yet) - FRAME_START, - FRAME_NET_UPDATE_START, - FRAME_NET_UPDATE_POSTDATAUPDATE_START, - FRAME_NET_UPDATE_POSTDATAUPDATE_END, - FRAME_NET_UPDATE_END, - - FRAME_RENDER_START, - FRAME_RENDER_END -}; - -class chl_client { -public: - client_class_t* GetAllClasses( ) { - return call_vfunc< client_class_t*( __thiscall* )( void* ) >( this, 8 )( this ); - } - - void in_activatemouse( ) { - call_vfunc< void( __thiscall* )( void* ) >( this, 15 )( this ); - } - - void in_deactivatemouse( ) { - call_vfunc< void( __thiscall* )( void* ) >( this, 16 )( this ); - } -}; \ No newline at end of file diff --git a/tf2/CInput.hpp b/tf2/CInput.hpp deleted file mode 100644 index 3fb8bff..0000000 --- a/tf2/CInput.hpp +++ /dev/null @@ -1,55 +0,0 @@ -#pragma once - -#include "vector.hpp" -#include "IClientMode.h" - -#define MULTIPLAYER_BACKUP 150 - -struct verified_cmd_t { - user_cmd_t m_cmd; - CRC32_t m_crc; -}; - -class CInput { - void* pvftable; //0x00 -public: - bool m_fTrackIRAvailable; //0x04 - bool m_fMouseInitialized; //0x05 - bool m_fMouseActive; //0x06 - bool m_fJoystickAdvancedInit; //0x07 -private: - char pad_0x08[ 0x2C ]; //0x08 -public: - void* m_pKeys; //0x34 -private: - char pad_0x38[ 0x64 ]; //0x38 - int pad_0x41; - int pad_0x42; -public: - bool m_fCameraInterceptingMouse; //0x9C - bool m_fCameraInThirdPerson; //0x9D - bool m_fCameraMovingWithMouse; //0x9E - vec3_t m_vecCameraOffset; //0xA0 - bool m_fCameraDistanceMove; //0xAC - int m_nCameraOldX; //0xB0 - int m_nCameraOldY; //0xB4 - int m_nCameraX; //0xB8 - int m_nCameraY; //0xBC - bool m_CameraIsOrthographic; //0xC0 - vec3_t m_angPreviousViewAngles; //0xC4 - vec3_t m_angPreviousViewAnglesTilt; //0xD0 - float m_flLastForwardMove; //0xDC - int m_nClearInputState; //0xE0 -public: - user_cmd_t * m_pCommands; //0xEC - verified_cmd_t* m_pVerifiedCommands; //0xF0 - int m_hSelectedWeapon; - - user_cmd_t* GetUserCmd( int slot, int seq_num ) { - return util::get_vfunc< 8, user_cmd_t* >( this, slot, seq_num ); - } - - void CreateMove( int sequence_number, float input_sample_time, bool active ) { - return util::get_vfunc< 3, void >( this, sequence_number, input_sample_time, active ); - } -}; diff --git a/tf2/CUserCmd.h b/tf2/CUserCmd.h deleted file mode 100644 index f9dd746..0000000 --- a/tf2/CUserCmd.h +++ /dev/null @@ -1,51 +0,0 @@ -#pragma once -#include "vector.hpp" - -enum PlayerControls_t { - IN_ATTACK = 1 << 0, - IN_JUMP = 1 << 1, - IN_DUCK = 1 << 2, - IN_FORWARD = 1 << 3, - IN_BACK = 1 << 4, - IN_USE = 1 << 5, - IN_CANCEL = 1 << 6, - IN_LEFT = 1 << 7, - IN_RIGHT = 1 << 8, - IN_MOVELEFT = 1 << 9, - IN_MOVERIGHT = 1 << 10, - IN_ATTACK2 = 1 << 11, - IN_RUN = 1 << 12, - IN_RELOAD = 1 << 13, - IN_ALT1 = 1 << 14, - IN_ALT2 = 1 << 15, - IN_SCORE = 1 << 16, - IN_SPEED = 1 << 17, - IN_WALK = 1 << 18, - IN_ZOOM = 1 << 19, - IN_WEAPON1 = 1 << 20, - IN_WEAPON2 = 1 << 21, - IN_BULLRUSH = 1 << 22, - IN_GRENADE1 = 1 << 23, - IN_GRENADE2 = 1 << 24, - IN_ATTACK3 = 1 << 25, -}; - -class user_cmd_t { -public: - virtual ~user_cmd_t( ) {}; - int command_number; //0 - int tick_count; //4 - vec3_t viewangles; //16 - float forwardmove; //20 - float sidemove; //24 - float upmove; //28 - int buttons; //32 - byte impulse; //33 - int weaponselect; // - int weaponsubtype; - int random_seed; - short mousedx; - short mousedy; - bool hasbeenpredicted; - int SetValue; -}; \ No newline at end of file diff --git a/tf2/ClientClass.h b/tf2/ClientClass.h deleted file mode 100644 index 56a1103..0000000 --- a/tf2/ClientClass.h +++ /dev/null @@ -1,382 +0,0 @@ -#pragma once -#include -#include "dt_recv.h" -typedef unsigned char byte; - -enum ClientClassIDs { - SporeExplosion = 359, - RocketTrail = 357, - SmokeTrail = 358, - CPropVehicleDriveable = 107, - ParticleSmokeGrenade = 356, - CParticleFire = 90, - MovieExplosion = 354, - CTEGaussExplosion = 154, - CEnvQuadraticBeam = 43, - CEmbers = 36, - CEnvWind = 47, - CPrecipitation = 106, - CBaseTempEntity = 17, - CWeaponIFMSteadyCam = 349, - CWeaponIFMBaseCamera = 348, - CWeaponIFMBase = 347, - CTFWearableVM = 341, - CTFWearable = 334, - CTFWearableItem = 337, - CEconWearable = 35, - CBaseAttributableItem = 3, - CEconEntity = 34, - CHandleTest = 72, - CTeamplayRoundBasedRulesProxy = 125, - CTeamRoundTimer = 126, - CSpriteTrail = 121, - CSpriteOriented = 120, - CSprite = 119, - CRagdollPropAttached = 110, - CRagdollProp = 109, - CPoseController = 105, - CGameRulesProxy = 68, - CInfoLadderDismount = 75, - CFuncLadder = 58, - CEnvDetailController = 40, - CWorld = 351, - CWaterLODControl = 346, - CWaterBullet = 345, - CVoteController = 344, - CVGuiScreen = 343, - CPropJeep = 0, - CPropVehicleChoreoGeneric = 0, - CTest_ProxyToggle_Networkable = 174, - CTesla = 169, - CTeamTrainWatcher = 127, - CBaseTeamObjectiveResource = 16, - CTeam = 124, - CSun = 123, - CParticlePerformanceMonitor = 91, - CSpotlightEnd = 118, - CSlideshowDisplay = 115, - CShadowControl = 114, - CSceneEntity = 113, - CRopeKeyframe = 112, - CRagdollManager = 108, - CPhysicsPropMultiplayer = 98, - CPhysBoxMultiplayer = 96, - CBasePropDoor = 15, - CDynamicProp = 33, - CPointCommentaryNode = 104, - CPointCamera = 103, - CPlayerResource = 102, - CPlasma = 100, - CPhysMagnet = 99, - CPhysicsProp = 97, - CPhysBox = 95, - CParticleSystem = 92, - CMaterialModifyControl = 81, - CLightGlow = 79, - CInfoOverlayAccessor = 77, - CFuncTrackTrain = 67, - CFuncSmokeVolume = 66, - CFuncRotating = 65, - CFuncReflectiveGlass = 62, - CFuncOccluder = 60, - CFuncMonitor = 59, - CFunc_LOD = 54, - CTEDust = 146, - CFunc_Dust = 53, - CFuncConveyor = 56, - CBreakableSurface = 25, - CFuncAreaPortalWindow = 55, - CFish = 51, - CEntityFlame = 38, - CFireSmoke = 49, - CEnvTonemapController = 46, - CEnvScreenEffect = 44, - CEnvScreenOverlay = 45, - CEnvProjectedTexture = 42, - CEnvParticleScript = 41, - CFogController = 52, - CEntityParticleTrail = 39, - CEntityDissolve = 37, - CDynamicLight = 32, - CColorCorrectionVolume = 30, - CColorCorrection = 29, - CBreakableProp = 24, - CBasePlayer = 13, - CBaseFlex = 8, - CBaseEntity_ = 7, - CBaseDoor = 6, - CBaseCombatCharacter = 4, - CBaseAnimatingOverlay = 2, - CBoneFollower = 20, - CBaseAnimating = 1, - CInfoLightingRelative = 76, - CAI_BaseNPC = 0, - CBeam = 19, - CBaseViewModel = 18, - CBaseProjectile = 14, - CBaseParticleEntity = 12, - CBaseGrenade = 9, - CBaseCombatWeapon = 5, - CTFWearableRazorback = 339, - CTFWearableDemoShield = 336, - CTFWearableLevelableItem = 338, - CTFWearableCampaignItem = 335, - CTFBaseRocket = 184, - CTFWeaponBaseMerasmusGrenade = 323, - CTFWeaponBaseMelee = 322, - CTFWeaponBaseGun = 321, - CTFWeaponBaseGrenadeProj = 320, - CTFWeaponBase = 319, - CTFWearableRobotArm = 340, - CTFRobotArm = 285, - CTFWrench = 342, - CTFProjectile_ThrowableBreadMonster = 277, - CTFProjectile_ThrowableBrick = 278, - CTFProjectile_ThrowableRepel = 279, - CTFProjectile_Throwable = 276, - CTFThrowable = 317, - CTFSyringeGun = 313, - CTFKatana = 224, - CTFSword = 312, - CSniperDot = 117, - CTFSniperRifleClassic = 306, - CTFSniperRifleDecap = 307, - CTFSniperRifle = 305, - CTFChargedSMG = 196, - CTFSMG = 304, - CTFSlap = 303, - CTFShovel = 302, - CTFShotgunBuildingRescue = 301, - CTFPEPBrawlerBlaster = 240, - CTFSodaPopper = 308, - CTFShotgun_Revenge = 299, - CTFScatterGun = 295, - CTFShotgun_Pyro = 298, - CTFShotgun_HWG = 297, - CTFShotgun_Soldier = 300, - CTFShotgun = 296, - CTFRocketPack = 294, - CTFCrossbow = 200, - CTFRocketLauncher_Mortar = 293, - CTFRocketLauncher_AirStrike = 291, - CTFRocketLauncher_DirectHit = 292, - CTFRocketLauncher = 290, - CTFRevolver = 284, - CTFDRGPomson = 201, - CTFRaygun = 282, - CTFPistol_ScoutSecondary = 245, - CTFPistol_ScoutPrimary = 244, - CTFPistol_Scout = 243, - CTFPistol = 242, - CTFPipebombLauncher = 241, - CTFWeaponPDA_Spy = 330, - CTFWeaponPDA_Engineer_Destroy = 329, - CTFWeaponPDA_Engineer_Build = 328, - CTFWeaponPDAExpansion_Teleporter = 332, - CTFWeaponPDAExpansion_Dispenser = 331, - CTFWeaponPDA = 327, - CTFParticleCannon = 238, - CTFParachute_Secondary = 237, - CTFParachute_Primary = 236, - CTFParachute = 235, - CTFMinigun = 233, - CTFMedigunShield = 230, - CWeaponMedigun = 350, - CTFMechanicalArm = 229, - CTFLunchBox_Drink = 228, - CTFLunchBox = 227, - CLaserDot = 78, - CTFLaserPointer = 226, - CTFKnife = 225, - CTFGasManager = 211, - CTFProjectile_JarGas = 260, - CTFJarGas = 222, - CTFProjectile_Cleaver = 253, - CTFProjectile_JarMilk = 261, - CTFProjectile_Jar = 259, - CTFCleaver = 197, - CTFJarMilk = 223, - CTFJar = 221, - CTFWeaponInvis = 326, - CTFCannon = 195, - CTFGrenadeLauncher = 215, - CTFGrenadePipebombProjectile = 216, - CTFGrapplingHook = 214, - CTFFlareGun_Revenge = 209, - CTFFlareGun = 208, - CTFFlameRocket = 206, - CTFFlameThrower = 207, - CTFFists = 204, - CTFFireAxe = 203, - CTFWeaponFlameBall = 325, - CTFCompoundBow = 199, - CTFClub = 198, - CTFBuffItem = 194, - CTFStickBomb = 310, - CTFBreakableSign = 193, - CTFBottle = 191, - CTFBreakableMelee = 192, - CTFBonesaw = 189, - CTFBall_Ornament = 181, - CTFStunBall = 311, - CTFBat_Giftwrap = 187, - CTFBat_Wood = 188, - CTFBat_Fish = 186, - CTFBat = 185, - CTFProjectile_EnergyRing = 255, - CTFDroppedWeapon = 202, - CTFWeaponSapper = 333, - CTFWeaponBuilder = 324, - C_TFWeaponBuilder = 0, - CTFProjectile_Rocket = 262, - CTFProjectile_Flare = 256, - CTFProjectile_EnergyBall = 254, - CTFProjectile_GrapplingHook = 257, - CTFProjectile_HealingBolt = 258, - CTFProjectile_Arrow = 251, - CTFTankBoss = 314, - CTFBaseBoss = 182, - CBossAlpha = 0, - NextBotCombatCharacter = 355, - CTFProjectile_SpellKartBats = 266, - CTFProjectile_SpellKartOrb = 267, - CTFHellZap = 219, - CTFProjectile_SpellLightningOrb = 268, - CTFProjectile_SpellTransposeTeleport = 275, - CTFProjectile_SpellMeteorShower = 269, - CTFProjectile_SpellSpawnBoss = 272, - CTFProjectile_SpellMirv = 270, - CTFProjectile_SpellPumpkin = 271, - CTFProjectile_SpellSpawnHorde = 273, - CTFProjectile_SpellSpawnZombie = 274, - CTFProjectile_SpellBats = 264, - CTFProjectile_SpellFireball = 265, - CTFSpellBook = 309, - CHightower_TeleportVortex = 74, - CTeleportVortex = 159, - CZombie = 352, - CMerasmusDancer = 83, - CMerasmus = 82, - CHeadlessHatman = 73, - CEyeballBoss = 48, - CTFBotHintEngineerNest = 190, - CBotNPCMinion = 0, - CBotNPC = 0, - CPasstimeGun = 94, - CTFViewModel = 318, - CRobotDispenser = 111, - CTFRobotDestruction_Robot = 286, - CTFReviveMarker = 283, - CTFPumpkinBomb = 280, - CTFProjectile_BallOfFire = 252, - CTFBaseProjectile = 183, - CTFPointManager = 249, - CBaseObjectUpgrade = 11, - CTFRobotDestructionLogic = 289, - CTFRobotDestruction_RobotGroup = 287, - CTFRobotDestruction_RobotSpawn = 288, - CTFPlayerDestructionLogic = 247, - CPlayerDestructionDispenser = 101, - CTFMinigameLogic = 232, - CTFHalloweenMinigame_FallingPlatforms = 218, - CTFHalloweenMinigame = 217, - CTFMiniGame = 231, - CTFPowerupBottle = 250, - CTFItem = 220, - CHalloweenSoulPack = 71, - CTFGenericBomb = 212, - CBonusRoundLogic = 23, - CTFGameRulesProxy = 210, - CTETFParticleEffect = 178, - CTETFExplosion = 177, - CTETFBlood = 176, - CTFFlameManager = 205, - CHalloweenGiftPickup = 69, - CBonusDuckPickup = 21, - CHalloweenPickup = 70, - CCaptureFlagReturnIcon = 27, - CCaptureFlag = 26, - CBonusPack = 22, - CTFTeam = 316, - CTFTauntProp = 315, - CTFPlayerResource = 248, - CTFPlayer = 246, - CTFRagdoll = 281, - CTEPlayerAnimEvent = 164, - CTFPasstimeLogic = 239, - CPasstimeBall = 93, - CTFObjectiveResource = 234, - CTFGlow = 213, - CTEFireBullets = 151, - CTFBuffBanner = 0, - CTFAmmoPack = 180, - CObjectTeleporter = 89, - CObjectSentrygun = 88, - CTFProjectile_SentryRocket = 263, - CObjectSapper = 87, - CObjectCartDispenser = 85, - CObjectDispenser = 86, - CMonsterResource = 84, - CFuncRespawnRoomVisualizer = 64, - CFuncRespawnRoom = 63, - CFuncPasstimeGoal = 61, - CFuncForceField = 57, - CCaptureZone = 28, - CCurrencyPack = 31, - CBaseObject = 10, - CTestTraceline = 175, - CTEWorldDecal = 179, - CTESpriteSpray = 173, - CTESprite = 172, - CTESparks = 171, - CTESmoke = 170, - CTEShowLine = 168, - CTEProjectedDecal = 166, - CTEPlayerDecal = 165, - CTEPhysicsProp = 163, - CTEParticleSystem = 162, - CTEMuzzleFlash = 161, - CTELargeFunnel = 158, - CTEKillPlayerAttachments = 157, - CTEImpact = 156, - CTEGlowSprite = 155, - CTEShatterSurface = 167, - CTEFootprintDecal = 153, - CTEFizz = 152, - CTEExplosion = 150, - CTEEnergySplash = 149, - CTEEffectDispatch = 148, - CTEDynamicLight = 147, - CTEDecal = 145, - CTEClientProjectile = 144, - CTEBubbleTrail = 143, - CTEBubbles = 142, - CTEBSPDecal = 141, - CTEBreakModel = 140, - CTEBloodStream = 139, - CTEBloodSprite = 138, - CTEBeamSpline = 137, - CTEBeamRingPoint = 136, - CTEBeamRing = 135, - CTEBeamPoints = 134, - CTEBeamLaser = 133, - CTEBeamFollow = 132, - CTEBeamEnts = 131, - CTEBeamEntPoint = 130, - CTEBaseBeam = 129, - CTEArmorRicochet = 128, - CTEMetalSparks = 160, - CSteamJet = 122, - CSmokeStack = 116, - DustTrail = 353, - CFireTrail = 50, -}; - -class client_class_t { - byte _chpadding[ 8 ]; -public: - char* m_name; - RecvTable* m_rt_table; - client_class_t* m_next; - int m_class_id; -}; \ No newline at end of file diff --git a/tf2/GlowObject.h b/tf2/GlowObject.h deleted file mode 100644 index 00dce81..0000000 --- a/tf2/GlowObject.h +++ /dev/null @@ -1,43 +0,0 @@ -#pragma once -#include "UtlMem.h" -#include -#include "color.hpp" - -static const int END_OF_FREE_LIST = -1; -static const int ENTRY_IN_USE = -2; - -struct GlowObject_t { - uintptr_t ent_ptr; - fclr_t glow_color; - - bool render_when_occluded; - bool render_when_unoccluded; - int pad; - - int next_free_slot; -}; - -struct GlowObjectManager_t { - CUtlVector< GlowObject_t > data; - int first_slot; - - int RegisterGlowObject( IClientEntity* ent ) { - for( int i{ }; i < data.Count( ); i++ ) { - if( data[ i ].ent_ptr == ent->get_ehandle( ) ) return 0; - } - int index{ }; - if( first_slot == -1 ) index = data.AddToTail( ); - else { - index = first_slot; - first_slot = data[ index ].next_free_slot; - } - data[ index ].ent_ptr = ent->get_ehandle( ); - data[ index ].glow_color = clr_t( 255, 255, 255, 255 ).to_fclr( ); - data[ index ].render_when_occluded = true; - data[ index ].render_when_unoccluded = true; - data[ index ].pad = -1; - data[ index ].next_free_slot = -2; - - return index; - } -}; \ No newline at end of file diff --git a/tf2/IAppSystem.h b/tf2/IAppSystem.h deleted file mode 100644 index 84af8c2..0000000 --- a/tf2/IAppSystem.h +++ /dev/null @@ -1,31 +0,0 @@ -#pragma once - -class AppSystemInfo_t; - -enum InitReturnVal_t; - -enum AppSystemTier_t { - APP_SYSTEM_TIER0 = 0, - APP_SYSTEM_TIER1, - APP_SYSTEM_TIER2, - APP_SYSTEM_TIER3, - - APP_SYSTEM_TIER_OTHER, -}; - -using CreateInterfaceFn = void*( *)( const char*, int* ); - -class IAppSystem { -public: - // Here's where the app systems get to learn about each other - virtual bool Connect( CreateInterfaceFn factory ) = 0; - virtual void Disconnect( ) = 0; - - // Here's where systems can access other interfaces implemented by this object - // Returns NULL if it doesn't implement the requested interface - virtual void *QueryInterface( const char *pInterfaceName ) = 0; - - // Init, shutdown - virtual InitReturnVal_t Init( ) = 0; - virtual void Shutdown( ) = 0; -}; \ No newline at end of file diff --git a/tf2/IClientEntity.h b/tf2/IClientEntity.h deleted file mode 100644 index 0ba0807..0000000 --- a/tf2/IClientEntity.h +++ /dev/null @@ -1,154 +0,0 @@ -#pragma once -#include "vector.hpp" -#include "VFunc.h" -#include "dt_common.h" -#include "dt_recv.h" -#include "search.h" -#include "util.hpp" -#include "ClientClass.h" - -using matrix3x4 = float[ 3 ][ 4 ]; -class bf_read; - -class ICollideable; -class IClientNetworkable; -class IClientRenderable; -class IClientThinkable; -class IClientEntity; -class IClientAlphaProperty; - -class IClientUnknown { -public: - virtual ICollideable* GetCollideable( ) = 0; - virtual IClientNetworkable* GetClientNetworkable( ) = 0; - virtual IClientRenderable* GetClientRenderable( ) = 0; - virtual IClientEntity* GetIClientEntity( ) = 0; - virtual IClientEntity* GetBaseEntity( ) = 0; - virtual IClientThinkable* GetClientThinkable( ) = 0; - //virtual IClientModelRenderable* GetClientModelRenderable() = 0; - virtual IClientAlphaProperty* GetClientAlphaProperty( ) = 0; -}; - -class IClientNetworkable { -public: - virtual IClientUnknown* GetIClientUnknown( ) = 0; - virtual void Release( ) = 0; - virtual client_class_t* GetClientClass( ) = 0; - virtual void NotifyShouldTransmit( int state ) = 0; - virtual void OnPreDataChanged( int updateType ) = 0; - virtual void OnDataChanged( int updateType ) = 0; - virtual void PreDataUpdate( int updateType ) = 0; - virtual void PostDataUpdate( int updateType ) = 0; - virtual void OnDataUnchangedInPVS( void ) = 0; - virtual bool IsDormant( void ) = 0; - virtual int EntIndex( void ) const = 0; - virtual void ReceiveMessage( int classID, bf_read& msg ) = 0; - virtual void* GetDataTableBasePtr( ) = 0; - virtual void SetDestroyedOnRecreateEntities( void ) = 0; -}; - -class IClientEntity { -public: - void* get_client_renderable( ) { - return reinterpret_cast< void* >( this + 0x4 ); - } - - IClientNetworkable* get_client_networkable( ) { - return reinterpret_cast< IClientNetworkable* >( this + 0x8 ); - } - -public: - uintptr_t get_ehandle( ) { - return call_vfunc< uintptr_t( __thiscall* )( void* ) >( this, 1 )( this ); - } - - bool setup_bones( matrix3x4* bonetoworld, int maxbones, long bonemask, float curtime ) { - return call_vfunc< bool( __thiscall* )( void*, matrix3x4*, int, long, float ) >( get_client_renderable( ), 16 )( get_client_renderable( ), bonetoworld, maxbones, bonemask, curtime ); - } - - int DrawModel( int flags, uint8_t alpha ) { - using fn = int( __thiscall* )( void*, int, uint8_t ); - return util::get_vfunc< fn >( this->get_client_renderable( ), 9 )( this->get_client_renderable( ), flags, alpha ); - } - - vec3_t& get_render_origin( ) { - using fn = vec3_t & ( __thiscall* )( void* ); - return util::get_vfunc< fn >( this, 10 )( this ); - } - - vec3_t& get_abs_origin( ) { - return call_vfunc< vec3_t&( __thiscall* )( void* ) >( this, 9 )( this ); - } - - vec3_t& get_abs_angles( ) { - return call_vfunc< vec3_t&( __thiscall* )( void* ) >( this, 10 )( this ); - } - - void* get_model( ) { - return call_vfunc< void*( __thiscall* )( void* ) >( get_client_renderable( ), 9 )( get_client_renderable( ) ); - } - - client_class_t* get_client_class( ) { - return call_vfunc< client_class_t*( __thiscall* )( void* ) >( get_client_networkable( ), 2 )( get_client_networkable( ) ); - } - - bool is_dormant( ) { - return call_vfunc< bool( __thiscall * )( void * ) >( get_client_networkable( ), 8 )( get_client_networkable( ) ); - } - - int index( ) { - return call_vfunc< int( __thiscall* )( void* ) >( get_client_networkable( ), 9 )( get_client_networkable( ) ); - } - - void update_glow_effect( ) { - //static auto fn = pattern::first_code_match< void( __thiscall* )( void* ) >( GetModuleHandleA( "client.dll" ), "8B 06 8D 4D F4 57 51 8D 4D F8", -0x2c ); - //if ( fn ) fn( this ); - return call_vfunc< void( __thiscall* )( void* ) >( this, 226 )( this ); - } - - void destroy_glow_effect( ) { - //static auto fn_offset = pattern::first_code_match< intptr_t >( GetModuleHandleA( "client.dll" ), "E8 ? ? ? ? 8B 9F ? ? ? ? 85 DB 74 3D 8B 33" ); - //static auto fn = reinterpret_cast< void( __thiscall* )( void* ) >( fn_offset + 5 + *( intptr_t* )( fn_offset + 1 ) ); - //if ( fn ) fn( this ); - return call_vfunc< void( __thiscall* )( void* ) >( this, 227 )( this ); - } - - client_class_t* GetClientClass( ) { - using fn = client_class_t* ( __thiscall* )( void* ); - return util::get_vfunc< fn >( get_client_networkable( ), 2 )( this ); - /* - try { - return get_client_networkable( )->GetClientClass( ); - } - catch( ... ) { - return 0; - }*/ - } - -public: - template< typename T = uintptr_t > - __forceinline T& get( std::ptrdiff_t offset = 0 ) { - return( *reinterpret_cast< T* >( ( uintptr_t )this + offset ) ); - } - - template< std::ptrdiff_t offset, typename T = uintptr_t > - __forceinline T& get( ) { - return( *reinterpret_cast< T* >( ( uintptr_t )this + offset ) ); - } - - template< typename T = uintptr_t > - __forceinline T at( std::ptrdiff_t offset = 0 ) { - return( reinterpret_cast< T >( uintptr_t( this ) + offset ) ); - } - - template< std::ptrdiff_t offset, typename T = uintptr_t > - __forceinline T at( ) { - return( reinterpret_cast< T >( uintptr_t( this ) + offset ) ); - } - - template < typename t > - t* as( ) { - return reinterpret_cast< t* >( this ); - } - -}; \ No newline at end of file diff --git a/tf2/IClientEntityList.h b/tf2/IClientEntityList.h deleted file mode 100644 index 18b4371..0000000 --- a/tf2/IClientEntityList.h +++ /dev/null @@ -1,24 +0,0 @@ -#pragma once -#include "VFunc.h" - -class IClientEntity; -class c_base_player; -using model_t = uintptr_t; -class client_ent_list { -public: - template< typename T = IClientEntity > T* get_client_entity( int index ) { - return call_vfunc< T* ( __thiscall* )( void*, int ) >( this, 3 )( this, index ); - } - - template< typename T = IClientEntity > T* get_entity_from_handle( uintptr_t handle ) { - return call_vfunc< T*( __thiscall* )( void*, uintptr_t ) >( this, 4 )( this, handle ); - } - - int get_highest_entity_index( ) { - return call_vfunc< int( __thiscall* )( void* ) >( this, 6 )( this ); - } - - template< typename T = c_base_player > __forceinline T* get_local_player( ) { - return get_client_entity< T >( cl.m_engine( )->GetLocalPlayer( ) ); - } -}; \ No newline at end of file diff --git a/tf2/IClientMode.h b/tf2/IClientMode.h deleted file mode 100644 index f528f3d..0000000 --- a/tf2/IClientMode.h +++ /dev/null @@ -1,174 +0,0 @@ -#pragma once - -#include "checksum_crc.h" - -#include "util.hpp" -#include "vector.hpp" - -enum player_controls_t { - IN_ATTACK = 1 << 0, - IN_JUMP = 1 << 1, - IN_DUCK = 1 << 2, - IN_FORWARD = 1 << 3, - IN_BACK = 1 << 4, - IN_USE = 1 << 5, - IN_CANCEL = 1 << 6, - IN_LEFT = 1 << 7, - IN_RIGHT = 1 << 8, - IN_MOVELEFT = 1 << 9, - IN_MOVERIGHT = 1 << 10, - IN_ATTACK2 = 1 << 11, - IN_RUN = 1 << 12, - IN_RELOAD = 1 << 13, - IN_ALT1 = 1 << 14, - IN_ALT2 = 1 << 15, - IN_SCORE = 1 << 16, - IN_SPEED = 1 << 17, - IN_WALK = 1 << 18, - IN_ZOOM = 1 << 19, - IN_WEAPON1 = 1 << 20, - IN_WEAPON2 = 1 << 21, - IN_BULLRUSH = 1 << 22, - IN_GRENADE1 = 1 << 23, - IN_GRENADE2 = 1 << 24, - IN_ATTACK3 = 1 << 25, -}; - -class user_cmd_t { -public: - virtual ~user_cmd_t( ) { }; - - int m_cmd_nr; // 0x04 For matching server and client commands for debugging - int m_tick_count; // 0x08 the tick the client created this command - vec3_t m_viewangles; // 0x0C Player instantaneous view angles. - float m_forwardmove; // 0x24 - float m_sidemove; // 0x28 - float m_upmove; // 0x2C - int m_buttons; // 0x30 Attack button states - uint8_t m_impulse; // 0x34 - int m_weaponselect; // 0x38 Current weapon id - int m_weaponsubtype; // 0x3C - int m_random_seed; // 0x40 For shared random functions - short m_mousedx; // 0x44 mouse accum in x from create move - short m_mousedy; // 0x46 mouse accum in y from create move - bool m_predicted; // 0x48 Client only, tracks whether we've predicted this command at least once - vec3_t headangles; // 0x49 - vec3_t headoffset; // 0x55 - - __forceinline user_cmd_t clamp( bool angles = true ) { - if( angles ) - m_viewangles.clamp( ); - - m_forwardmove = std::clamp( m_forwardmove, -450.f, 450.f ); - m_sidemove = std::clamp( m_sidemove, -450.f, 450.f ); - m_upmove = std::clamp( m_upmove, -450.f, 450.f ); - - return *this; - } - - CRC32_t get_check_sum( ) { - CRC32_t crc; - CRC32_Init( &crc ); - - CRC32_ProcessBuffer( &crc, &m_cmd_nr, sizeof( m_cmd_nr ) ); - CRC32_ProcessBuffer( &crc, &m_tick_count, sizeof( m_tick_count ) ); - CRC32_ProcessBuffer( &crc, &m_viewangles, sizeof( m_viewangles ) ); - CRC32_ProcessBuffer( &crc, &m_forwardmove, sizeof( m_forwardmove ) ); - CRC32_ProcessBuffer( &crc, &m_sidemove, sizeof( m_sidemove ) ); - CRC32_ProcessBuffer( &crc, &m_upmove, sizeof( m_upmove ) ); - CRC32_ProcessBuffer( &crc, &m_buttons, sizeof( m_buttons ) ); - CRC32_ProcessBuffer( &crc, &m_impulse, sizeof( m_impulse ) ); - CRC32_ProcessBuffer( &crc, &m_weaponselect, sizeof( m_weaponselect ) ); - CRC32_ProcessBuffer( &crc, &m_weaponsubtype, sizeof( m_weaponsubtype ) ); - CRC32_ProcessBuffer( &crc, &m_random_seed, sizeof( m_random_seed ) ); - CRC32_ProcessBuffer( &crc, &m_mousedx, sizeof( m_mousedx ) ); - CRC32_ProcessBuffer( &crc, &m_mousedy, sizeof( m_mousedy ) ); - - CRC32_Final( &crc ); - return crc; - } - -private: - - //char pad_0x4C[ 0x18 ]; // 0x4C Current sizeof( usercmd ) = 100 = 0x64 -}; - -class CHudChat { -public: - void ChatPrintf( int iPlayerIndex, int iFilter, const char* fmt ) { - using fn = void( __cdecl* )( void*, int, int, const char* ); - util::get_vfunc< fn >( this, 26 )( this, iPlayerIndex, iFilter, fmt ); - } -}; - -class CViewSetup { -public: - int m_x; - int m_oldX; - int m_y; - int m_oldY; - int m_width; - int m_oldWidth; - int m_height; - int m_oldHeight; - - bool m_bOrtho; - float m_OrthoLeft; - float m_OrthoTop; - float m_OrthoRight; - float m_OrthoBottom; - -private: - char pad1[ 0x7C ]; - -public: - float m_flFov; - float m_flFovViewmodel; - vec3_t m_vecOrigin; - vec3_t m_vecAngles; - - float zNear; - float zFar; - float zNearViewmodel; - float zFarViewmodel; - - float m_flAspectRatio; - float m_flNearBlurDepth; - float m_flNearFocusDepth; - float m_flFarFocusDepth; - float m_flFarBlurDepth; - float m_flNearBlurRadius; - float m_flFarBlurRadius; - int m_nDoFQuality; - int m_nMotionBlurMode; - - float m_flShutterTime; - vec3_t m_vShutterOpenPosition; - vec3_t m_shutterOpenAngles; - vec3_t m_vShutterClosePosition; - vec3_t m_shutterCloseAngles; - - float m_flOffCenterTop; - float m_flOffCenterBottom; - float m_flOffCenterLeft; - float m_flOffCenterRight; - - bool m_bOffCenter : 1; - bool m_bRenderToSubrectOfLargerScreen : 1; - bool m_bDoBloomAndToneMapping : 1; - bool m_bDoDepthOfField : 1; - bool m_bHDRTarget : 1; - bool m_bDrawWorldNormal : 1; - bool m_bCullFrontFaces : 1; - bool m_bCacheFullSceneState : 1; - bool m_bRenderFlashlightDepthTranslucents : 1; -private: - char pad2[ 0x40 ]; -}; - -class IClientMode { -public: - char _pad[ 28 ]; - - CHudChat* m_pChatElement; //0x2A -}; \ No newline at end of file diff --git a/tf2/ICvar.h b/tf2/ICvar.h deleted file mode 100644 index 19cb55f..0000000 --- a/tf2/ICvar.h +++ /dev/null @@ -1,201 +0,0 @@ -#pragma once -#include "IAppSystem.h" -#include "util.hpp" -#include "color.hpp" - -using CVarDLLIdentifier_t = int; -class IConVar; -using FnChangeCallback_t = void( *)( IConVar *var, const char *pOldValue, float flOldValue ); -class ConCommandBase; -class ConCommand; -class ICvarQuery; - -class IConsoleDisplayFunc { -public: - virtual void ColorPrint( const uint8_t* clr, const char *pMessage ) = 0; - virtual void Print( const char *pMessage ) = 0; - virtual void DPrint( const char *pMessage ) = 0; -}; - -#define FCVAR_NONE 0 - -// Command to ConVars and ConCommands -// ConVar Systems -#define FCVAR_UNREGISTERED (1<<0) // If this is set, don't add to linked list, etc. -#define FCVAR_DEVELOPMENTONLY (1<<1) // Hidden in released products. Flag is removed automatically if ALLOW_DEVELOPMENT_CVARS is defined. -#define FCVAR_GAMEDLL (1<<2) // defined by the game DLL -#define FCVAR_CLIENTDLL (1<<3) // defined by the client DLL -#define FCVAR_HIDDEN (1<<4) // Hidden. Doesn't appear in find or autocomplete. Like DEVELOPMENTONLY, but can't be compiled out. - -// ConVar only -#define FCVAR_PROTECTED (1<<5) // It's a server cvar, but we don't send the data since it's a password, etc. Sends 1 if it's not bland/zero, 0 otherwise as value -#define FCVAR_SPONLY (1<<6) // This cvar cannot be changed by clients connected to a multiplayer server. -#define FCVAR_ARCHIVE (1<<7) // set to cause it to be saved to vars.rc -#define FCVAR_NOTIFY (1<<8) // notifies players when changed -#define FCVAR_USERINFO (1<<9) // changes the client's info string -#define FCVAR_CHEAT (1<<14) // Only useable in singleplayer / debug / multiplayer & sv_cheats - -#define FCVAR_PRINTABLEONLY (1<<10) // This cvar's string cannot contain unprintable characters ( e.g., used for player name etc ). -#define FCVAR_UNLOGGED (1<<11) // If this is a FCVAR_SERVER, don't log changes to the log file / console if we are creating a log -#define FCVAR_NEVER_AS_STRING (1<<12) // never try to print that cvar - -// It's a ConVar that's shared between the client and the server. -// At signon, the values of all such ConVars are sent from the server to the client (skipped for local -// client, of course ) -// If a change is requested it must come from the console (i.e., no remote client changes) -// If a value is changed while a server is active, it's replicated to all connected clients -#define FCVAR_REPLICATED (1<<13) // server setting enforced on clients, TODO rename to FCAR_SERVER at some time -#define FCVAR_DEMO (1<<16) // record this cvar when starting a demo file -#define FCVAR_DONTRECORD (1<<17) // don't record these command in demofiles -#define FCVAR_RELOAD_MATERIALS (1<<20) // If this cvar changes, it forces a material reload -#define FCVAR_RELOAD_TEXTURES (1<<21) // If this cvar changes, if forces a texture reload - -#define FCVAR_NOT_CONNECTED (1<<22) // cvar cannot be changed by a client that is connected to a server -#define FCVAR_MATERIAL_SYSTEM_THREAD (1<<23) // Indicates this cvar is read from the material system thread -#define FCVAR_ARCHIVE_XBOX (1<<24) // cvar written to config.cfg on the Xbox - -#define FCVAR_ACCESSIBLE_FROM_THREADS (1<<25) // used as a debugging tool necessary to check material system thread convars - -#define FCVAR_SERVER_CAN_EXECUTE (1<<28)// the server is allowed to execute this command on clients via ClientCommand/NET_StringCmd/CBaseClientState::ProcessStringCmd. -#define FCVAR_SERVER_CANNOT_QUERY (1<<29)// If this is set, then the server is not allowed to query this cvar's value (via IServerPluginHelpers::StartQueryCvarValue). -#define FCVAR_CLIENTCMD_CAN_EXECUTE (1<<30) // IVEngineClient::ClientCmd is allowed to execute this command. - - -class cvar_t { -public: - void set_value( const char* value ) { - using fn = void( __thiscall* )( void*, const char* ); - return util::get_vfunc< fn >( this, 14 )( this, value ); - } - - void set_value( float value ) { - using fn = void( __thiscall* )( void*, float ); - return util::get_vfunc< fn >( this, 15 )( this, value ); - } - - void set_value( int value ) { - using fn = void( __thiscall* )( void*, int ); - return util::get_vfunc< fn >( this, 16 )( this, value ); - } - - char* get_name( ) { - using fn = char*( __thiscall* )( void* ); - return util::get_vfunc< fn >( this, 5 )( this ); - } - - char* get_default( ) { - return m_default; - } - - const char* get_string( ) { - return m_string; - } - - float get_float( ) { - //return call_vfunc< float( __thiscall* )( void* ) >( this, 12 )( this ); - return m_parent->m_flvalue; - } //crash no idea why - - int get_int( ) { - using fn = int( __thiscall* )( void* ); - return util::get_vfunc< fn >( this, 13 )( this ); - } - -private: - char pad_0x0000[ 0x4 ]; //0x0000 -public: - cvar_t * m_next; //0x0004 - __int32 m_registered; //0x0008 - char* m_name; //0x000C - char* m_help_str; //0x0010 - __int32 m_flags; //0x0014 -private: - char pad_0x0018[ 0x4 ]; //0x0018 -public: - cvar_t * m_parent; //0x001C - char* m_default; //0x0020 - char* m_string; //0x0024 - __int32 m_str_len; //0x0028 - float m_flvalue; //0x002C - __int32 m_nvalue; //0x0030 - __int32 m_has_min; //0x0034 - float m_min; //0x0038 - __int32 m_hax_max; //0x003C - float m_max; //0x0040 - void* m_change_callback; //0x0044 -};//Size=0x0048 - -class ICVar : public IAppSystem -{ -public: - // Allocate a unique DLL identifier - virtual CVarDLLIdentifier_t AllocateDLLIdentifier( ) = 0; - - // Register, unregister commands - virtual void RegisterConCommand( ConCommandBase *pCommandBase ) = 0; - virtual void UnregisterConCommand( ConCommandBase *pCommandBase ) = 0; - virtual void UnregisterConCommands( CVarDLLIdentifier_t id ) = 0; - - // If there is a + on the command line, this returns the value. - // Otherwise, it returns NULL. - virtual const char* GetCommandLineValue( const char *pVariableName ) = 0; - - // Try to find the cvar pointer by name - virtual ConCommandBase* FindCommandBase( const char *name ) = 0; - virtual const ConCommandBase* FindCommandBase( const char *name ) const = 0; - virtual cvar_t *FindVar( const char *var_name ) = 0; - virtual const cvar_t *FindVar( const char *var_name ) const = 0; - virtual ConCommand *FindCommand( const char *name ) = 0; - virtual const ConCommand *FindCommand( const char *name ) const = 0; - - - - // Install a global change callback (to be called when any convar changes) - virtual void InstallGlobalChangeCallback( FnChangeCallback_t callback ) = 0; - virtual void RemoveGlobalChangeCallback( FnChangeCallback_t callback ) = 0; - virtual void CallGlobalChangeCallbacks( cvar_t *var, const char *pOldString, float flOldValue ) = 0; - - // Install a console printer - virtual void InstallConsoleDisplayFunc( IConsoleDisplayFunc* pDisplayFunc ) = 0; - virtual void RemoveConsoleDisplayFunc( IConsoleDisplayFunc* pDisplayFunc ) = 0; - virtual void ConsoleColorPrintf( const clr_t& clr, const char *pFormat, ... ) const = 0; - virtual void ConsolePrintf( const char *pFormat, ... ) const = 0; - virtual void ConsoleDPrintf( const char *pFormat, ... ) const = 0; - - // Reverts cvars which contain a specific flag - virtual void RevertFlaggedConVars( int nFlag ) = 0; - - // Method allowing the engine ICvarQuery interface to take over - // A little hacky, owing to the fact the engine is loaded - // well after ICVar, so we can't use the standard connect pattern - virtual void InstallCVarQuery( ICvarQuery *pQuery ) = 0; - - - virtual void SetMaxSplitScreenSlots( int nSlots ) = 0; - virtual int GetMaxSplitScreenSlots( ) const = 0; - - virtual void AddSplitScreenConVars( ) = 0; - virtual void RemoveSplitScreenConVars( CVarDLLIdentifier_t id ) = 0; - - virtual int GetConsoleDisplayFuncCount( ) const = 0; - virtual void GetConsoleText( int nDisplayFuncIndex, char *pchText, size_t bufSize ) const = 0; - - // Utilities for convars accessed by the material system thread - virtual bool IsMaterialThreadSetAllowed( ) const = 0; - virtual void QueueMaterialThreadSetValue( cvar_t *pConVar, const char *pValue ) = 0; - virtual void QueueMaterialThreadSetValue( cvar_t *pConVar, int nValue ) = 0; - virtual void QueueMaterialThreadSetValue( cvar_t *pConVar, float flValue ) = 0; - virtual bool HasQueuedMaterialThreadConVarSets( ) const = 0; - virtual int ProcessQueuedMaterialThreadConVarSets( ) = 0; - - class ICVarIteratorInternal - { - public: - virtual void SetFirst( ) = 0; - virtual void Next( ) = 0; - virtual bool IsValid( ) = 0; - virtual ConCommandBase *Get( ) = 0; - }; - - virtual ICVarIteratorInternal* FactoryInternalIterator( ) = 0; -}; \ No newline at end of file diff --git a/tf2/IEngineTrace.h b/tf2/IEngineTrace.h deleted file mode 100644 index 7fb317d..0000000 --- a/tf2/IEngineTrace.h +++ /dev/null @@ -1,268 +0,0 @@ -#pragma once -#include "vector.hpp" -#include "VFunc.h" - -enum trace_type_t { - TRACE_EVERYTHING = 0, - TRACE_WORLD_ONLY, - TRACE_ENTITIES_ONLY, - TRACE_EVERYTHING_FILTER_PROPS, -}; - -enum SurfaceFlags_t { - DISPSURF_FLAG_SURFACE = ( 1 << 0 ), - DISPSURF_FLAG_WALKABLE = ( 1 << 1 ), - DISPSURF_FLAG_BUILDABLE = ( 1 << 2 ), - DISPSURF_FLAG_SURFPROP1 = ( 1 << 3 ), - DISPSURF_FLAG_SURFPROP2 = ( 1 << 4 ), -}; - -struct csurface_t { - const char *name; - short surfaceProps; - unsigned short flags; -}; - -struct cplane_t { - vec3_t normal; - float dist; - byte type; - byte signbits; - byte pad[ 2 ]; -}; - -class ITraceFilter { -public: - virtual bool ShouldHitEntity( void *pEntity, int contentsMask ) = 0; - virtual trace_type_t GetTraceType( ) const = 0; -}; - -class CTraceFilter : public ITraceFilter { -public: - bool ShouldHitEntity( void* pEntityHandle, int contentsMask ) { - return !( pEntityHandle == pSkip ); - } - virtual trace_type_t GetTraceType( ) const { - return TRACE_EVERYTHING; - } - - void* pSkip; -}; - -class CTraceFilterWorldAndPropsOnly : public ITraceFilter { -public: - bool ShouldHitEntity( void* pEntityHandle, int contentsMask ) override { - return false; - } - - trace_type_t GetTraceType( ) const override { - return TRACE_EVERYTHING; - } -}; - -class CTraceFilterSkipTwoEntities : public ITraceFilter { -public: - CTraceFilterSkipTwoEntities( void* pPassEnt1, void* pPassEnt2 ) - { - passentity1 = pPassEnt1; - passentity2 = pPassEnt2; - } - - virtual bool ShouldHitEntity( void* pEntityHandle, int contentsMask ) { - return !( pEntityHandle == passentity1 || pEntityHandle == passentity2 ); - } - - virtual trace_type_t GetTraceType( ) const { - return TRACE_EVERYTHING; - } - - void* passentity1; - void* passentity2; -}; - -class __declspec( align( 16 ) )VectorAligned : public vec3_t { -public: - VectorAligned& operator=( const vec3_t &vOther ) { - x = vOther.x; - y = vOther.y; - z = vOther.z; - return *this; - } - - VectorAligned& operator=( const float &other ) { - *this = { other, other, other }; - return *this; - } - float w; -}; - -struct Ray_t { - VectorAligned m_Start; - VectorAligned m_Delta; - VectorAligned m_StartOffset; - VectorAligned m_Extents; - - bool m_IsRay; - bool m_IsSwept; - - void Init( vec3_t& start, vec3_t& end ) { - m_Delta = end - start; - - m_IsSwept = ( m_Delta.lengthsqr( ) != 0 ); - - m_Extents = 0.f; - m_IsRay = true; - - m_StartOffset = 0.f; - m_Start = start; - } - - void Init( vec3_t& start, vec3_t& end, vec3_t& mins, vec3_t& maxs ) { - m_Delta = end - start; - - m_IsSwept = ( m_Delta.lengthsqr( ) != 0 ); - - m_Extents = maxs - mins; - m_Extents *= 0.5f; - m_IsRay = ( m_Extents.lengthsqr( ) < 1e-6 ); - - m_StartOffset = mins + maxs; - m_StartOffset *= 0.5f; - m_Start = start - m_StartOffset; - m_StartOffset *= -1.0f; - } -}; - -class CBaseTrace { -public: - bool IsDispSurface( void ) { return ( ( dispFlags & DISPSURF_FLAG_SURFACE ) != 0 ); } //not in csgo - bool IsDispSurfaceWalkable( void ) { return ( ( dispFlags & DISPSURF_FLAG_WALKABLE ) != 0 ); } - bool IsDispSurfaceBuildable( void ) { return ( ( dispFlags & DISPSURF_FLAG_BUILDABLE ) != 0 ); } - bool IsDispSurfaceProp1( void ) { return ( ( dispFlags & DISPSURF_FLAG_SURFPROP1 ) != 0 ); } - bool IsDispSurfaceProp2( void ) { return ( ( dispFlags & DISPSURF_FLAG_SURFPROP2 ) != 0 ); } - -public: - vec3_t startpos; - vec3_t endpos; - cplane_t plane; - - float fraction; - - int contents; - unsigned short dispFlags; - - bool allsolid; - bool startsolid; - - CBaseTrace( ) {} - -private: - CBaseTrace( const CBaseTrace& vOther ); -}; - -class CGameTrace : public CBaseTrace { -public: - bool DidHitWorld( ) const; - - bool DidHitNonWorldEntity( ) const; - - int GetEntityIndex( ) const; - - bool DidHit( ) const { - return fraction < 1 || allsolid || startsolid; - } - -public: - float fractionleftsolid; - csurface_t surface; - - int hitgroup; - - short physicsbone; - - IClientEntity* m_pEnt; - int hitbox; - - CGameTrace( ) {} - CGameTrace( const CGameTrace& vOther ); -}; - -typedef CGameTrace trace_t; - -class IEngineTrace { -public: - void clip_ray_to_ent( const Ray_t& ray, unsigned int fMask, IClientEntity* pEnt, trace_t* pTrace ) { - return call_vfunc< void( __thiscall* )( void*, const Ray_t&, unsigned int, IClientEntity*, trace_t* ) >( this, 2 )( this, ray, fMask, pEnt, pTrace ); - } - - void trace_ray( const Ray_t& ray, unsigned int fMask, ITraceFilter* pTraceFilter, trace_t* pTrace ) { - return call_vfunc< void( __thiscall* )( void*, const Ray_t&, unsigned int, ITraceFilter*, trace_t* ) >( this, 4 )( this, ray, fMask, pTraceFilter, pTrace ); - } -}; - - -#define CONTENTS_EMPTY 0 /**< No contents. */ -#define CONTENTS_SOLID 0x1 /**< an eye is never valid in a solid . */ -#define CONTENTS_WINDOW 0x2 /**< translucent, but not watery (glass). */ -#define CONTENTS_AUX 0x4 -#define CONTENTS_GRATE 0x8 /**< alpha-tested "grate" textures. Bullets/sight pass through, but solids don't. */ -#define CONTENTS_SLIME 0x10 -#define CONTENTS_WATER 0x20 -#define CONTENTS_MIST 0x40 -#define CONTENTS_OPAQUE 0x80 /**< things that cannot be seen through (may be non-solid though). */ -#define LAST_VISIBLE_CONTENTS 0x80 -#define ALL_VISIBLE_CONTENTS (LAST_VISIBLE_CONTENTS | (LAST_VISIBLE_CONTENTS-1)) -#define CONTENTS_TESTFOGVOLUME 0x100 -#define CONTENTS_UNUSED5 0x200 -#define CONTENTS_UNUSED6 0x4000 -#define CONTENTS_TEAM1 0x800 /**< per team contents used to differentiate collisions. */ -#define CONTENTS_TEAM2 0x1000 /**< between players and objects on different teams. */ -#define CONTENTS_IGNORE_NODRAW_OPAQUE 0x2000 /**< ignore CONTENTS_OPAQUE on surfaces that have SURF_NODRAW. */ -#define CONTENTS_MOVEABLE 0x4000 /**< hits entities which are MOVETYPE_PUSH (doors, plats, etc) */ -#define CONTENTS_AREAPORTAL 0x8000 /**< remaining contents are non-visible, and don't eat brushes. */ -#define CONTENTS_PLAYERCLIP 0x10000 -#define CONTENTS_MONSTERCLIP 0x20000 - -/** -* @section currents can be added to any other contents, and may be mixed -*/ -#define CONTENTS_CURRENT_0 0x40000 -#define CONTENTS_CURRENT_90 0x80000 -#define CONTENTS_CURRENT_180 0x100000 -#define CONTENTS_CURRENT_270 0x200000 -#define CONTENTS_CURRENT_UP 0x400000 -#define CONTENTS_CURRENT_DOWN 0x800000 - -/** -* @endsection -*/ - -#define CONTENTS_ORIGIN 0x1000000 /**< removed before bsping an entity. */ -#define CONTENTS_MONSTER 0x2000000 /**< should never be on a brush, only in game. */ -#define CONTENTS_DEBRIS 0x4000000 -#define CONTENTS_DETAIL 0x8000000 /**< brushes to be added after vis leafs. */ -#define CONTENTS_TRANSLUCENT 0x10000000 /**< auto set if any surface has trans. */ -#define CONTENTS_LADDER 0x20000000 -#define CONTENTS_HITBOX 0x40000000 /**< use accurate hitboxes on trace. */ - -/** -* @section Trace masks. -*/ -#define MASK_ALL (0xFFFFFFFF) -#define MASK_SOLID (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_WINDOW|CONTENTS_MONSTER|CONTENTS_GRATE) /**< everything that is normally solid */ -#define MASK_PLAYERSOLID (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_PLAYERCLIP|CONTENTS_WINDOW|CONTENTS_MONSTER|CONTENTS_GRATE) /**< everything that blocks player movement */ -#define MASK_NPCSOLID (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_MONSTERCLIP|CONTENTS_WINDOW|CONTENTS_MONSTER|CONTENTS_GRATE) /**< blocks npc movement */ -#define MASK_WATER (CONTENTS_WATER|CONTENTS_MOVEABLE|CONTENTS_SLIME) /**< water physics in these contents */ -#define MASK_OPAQUE (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_OPAQUE) /**< everything that blocks line of sight for AI, lighting, etc */ -#define MASK_OPAQUE_AND_NPCS (MASK_OPAQUE|CONTENTS_MONSTER) /**< everything that blocks line of sight for AI, lighting, etc, but with monsters added. */ -#define MASK_VISIBLE (MASK_OPAQUE|CONTENTS_IGNORE_NODRAW_OPAQUE) /**< everything that blocks line of sight for players */ -#define MASK_VISIBLE_AND_NPCS (MASK_OPAQUE_AND_NPCS|CONTENTS_IGNORE_NODRAW_OPAQUE) /**< everything that blocks line of sight for players, but with monsters added. */ -#define MASK_SHOT (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_MONSTER|CONTENTS_WINDOW|CONTENTS_DEBRIS|CONTENTS_HITBOX) /**< bullets see these as solid */ -#define MASK_SHOT_HULL (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_MONSTER|CONTENTS_WINDOW|CONTENTS_DEBRIS|CONTENTS_GRATE) /**< non-raycasted weapons see this as solid (includes grates) */ -#define MASK_SHOT_PORTAL (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_WINDOW) /**< hits solids (not grates) and passes through everything else */ -#define MASK_SOLID_BRUSHONLY (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_WINDOW|CONTENTS_GRATE) /**< everything normally solid, except monsters (world+brush only) */ -#define MASK_PLAYERSOLID_BRUSHONLY (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_WINDOW|CONTENTS_PLAYERCLIP|CONTENTS_GRATE) /**< everything normally solid for player movement, except monsters (world+brush only) */ -#define MASK_NPCSOLID_BRUSHONLY (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_WINDOW|CONTENTS_MONSTERCLIP|CONTENTS_GRATE) /**< everything normally solid for npc movement, except monsters (world+brush only) */ -#define MASK_NPCWORLDSTATIC (CONTENTS_SOLID|CONTENTS_WINDOW|CONTENTS_MONSTERCLIP|CONTENTS_GRATE) /**< just the world, used for route rebuilding */ -#define MASK_SPLITAREAPORTAL (CONTENTS_WATER|CONTENTS_SLIME) /**< These are things that can split areaportals */ -#define MASK_AIM ( 0x200400B | CONTENTS_HITBOX ) //this fixes the aimbot not shooting through shit like invis gates diff --git a/tf2/IEngineVGui.h b/tf2/IEngineVGui.h deleted file mode 100644 index 091c565..0000000 --- a/tf2/IEngineVGui.h +++ /dev/null @@ -1,26 +0,0 @@ -#pragma once - -enum VGuiPanel_t { - PANEL_ROOT = 0, - PANEL_GAMEUIDLL, - PANEL_CLIENTDLL, - PANEL_TOOLS, - PANEL_INGAMESCREENS, - PANEL_GAMEDLL, - PANEL_CLIENTDLL_TOOLS -}; - -enum PaintMode_t { - PAINT_UIPANELS = ( 1 << 0 ), - PAINT_INGAMEPANELS = ( 1 << 1 ), - PAINT_CURSOR = ( 1 << 2 ), // software cursor, if appropriate -}; - -class IEngineVGui { -public: - virtual ~IEngineVGui( void ) { } - - virtual unsigned int GetPanel( VGuiPanel_t type ) = 0; - - virtual bool IsGameUIVisible( ) = 0; -}; \ No newline at end of file diff --git a/tf2/IGameEventManager.h b/tf2/IGameEventManager.h deleted file mode 100644 index f2e7c25..0000000 --- a/tf2/IGameEventManager.h +++ /dev/null @@ -1,77 +0,0 @@ -#pragma once -#include "util.hpp" - -class IGameEvent -{ -public: - const char* GetName( ) { - return util::get_vfunc< 1, const char* >( this ); - } - - int GetInt( const char* szKeyName, int nDefault = 0 ) { - return util::get_vfunc< 6, int >( this, szKeyName, nDefault ); - } - - float GetFloat( const char* name, float default_ = 0 ) { - return util::get_vfunc< 8, float >( this, name, default_ ); - } - - const char* GetString( const char* szKeyName ) { - return util::get_vfunc< 9, const char* >( this, szKeyName, 0 ); - } - - void SetString( const char* szKeyName, const char* szValue ) { - return util::get_vfunc< 16, void >( this, szKeyName, szValue ); - } -}; - -class IGameEventListener2 { -public: - virtual ~IGameEventListener2( void ) {}; - - // FireEvent is called by EventManager if event just occured - // KeyValue memory will be freed by manager if not needed anymore - virtual void FireGameEvent( IGameEvent* event ) = 0; - - virtual int GetEventDebugID( void ) = 0; -}; - -class IGameEventManager2 { -public: - virtual ~IGameEventManager2( void ) {}; - - // load game event descriptions from a file eg "resource\gameevents.res" - virtual int LoadEventsFromFile( const char* filename ) = 0; - - // removes all and anything - virtual void Reset( ) = 0; - - // adds a listener for a particular event - virtual bool AddListener( IGameEventListener2* listener, const char* name, bool bServerSide ) = 0; - - // returns true if this listener is listens to given event - virtual bool FindListener( IGameEventListener2* listener, const char* name ) = 0; - - // removes a listener - virtual void RemoveListener( IGameEventListener2* listener ) = 0; - - // create an event by name, but doesn't fire it. returns NULL is event is not - // known or no listener is registered for it. bForce forces the creation even if no listener is active - virtual IGameEvent* CreateEvent( const char* name, bool bForce = false, int* pCookie = nullptr ) = 0; - - // fires a server event created earlier, if bDontBroadcast is set, event is not send to clients - virtual bool FireEvent( IGameEvent* event, bool bDontBroadcast = false ) = 0; - - // fires an event for the local client only, should be used only by client code - virtual bool FireEventClientSide( IGameEvent* event ) = 0; - - // create a new copy of this event, must be free later - virtual IGameEvent* DuplicateEvent( IGameEvent* event ) = 0; - - // if an event was created but not fired for some reason, it has to bee freed, same UnserializeEvent - virtual void FreeEvent( IGameEvent* event ) = 0; - - // write/read event to/from bitbuffer - virtual bool SerializeEvent( IGameEvent* event, int* buf ) = 0; - virtual IGameEvent* UnserializeEvent( void* buf ) = 0; // create new KeyValues, must be deleted -}; \ No newline at end of file diff --git a/tf2/IGameMovement.h b/tf2/IGameMovement.h deleted file mode 100644 index 26b5244..0000000 --- a/tf2/IGameMovement.h +++ /dev/null @@ -1,118 +0,0 @@ -#pragma once -#pragma once - -#include "vector.hpp" - -using CBaseEntity = uintptr_t; -class CUserCmd; - -typedef int EntityHandle_t, soundlevel_t; -class CGameTrace; - -typedef CGameTrace trace_t; - -#define MAX_CLIMB_SPEED 200.0 - -class CMoveData -{ -public: - bool m_bFirstRunOfFunctions : 1; - bool m_bGameCodeMovedPlayer : 1; - - EntityHandle_t m_nPlayerHandle; - - int m_nImpulseCommand; - vec3_t m_vecViewAngles; - vec3_t m_vecAbsViewAngles; - int m_nButtons; - int m_nOldButtons; - float m_flForwardMove; - float m_flSideMove; - float m_flUpMove; - - float m_flMaxSpeed; - float m_flClientMaxSpeed; - - vec3_t m_vecVelocity; - vec3_t m_vecAngles; - vec3_t m_vecOldAngles; - float m_outStepHeight; - vec3_t m_outWishVel; - vec3_t m_outJumpVel; - - vec3_t m_vecConstraintCenter; - float m_flConstraintRadius; - float m_flConstraintWidth; - float m_flConstraintSpeedFactor; - - vec3_t m_vecAbsOrigin; -}; - -class IGameMovement -{ -public: - virtual ~IGameMovement( void ) {} - virtual void ProcessMovement( CBaseEntity *pPlayer, CMoveData *pMove ) = 0; - virtual void StartTrackPredictionErrors( CBaseEntity *pPlayer ) = 0; - virtual void FinishTrackPredictionErrors( CBaseEntity *pPlayer ) = 0; - virtual void DiffPrint( char const *fmt, ... ) = 0; - virtual vec3_t GetPlayerMins( bool ducked ) const = 0; - virtual vec3_t GetPlayerMaxs( bool ducked ) const = 0; - virtual vec3_t GetPlayerViewOffset( bool ducked ) const = 0; -}; - -class IMoveHelper -{ -public: - virtual char const* GetName( EntityHandle_t handle ) const = 0; - virtual void ResetTouchList( void ) = 0; - virtual bool AddToTouched( const CGameTrace& tr, const vec3_t& impactvelocity ) = 0; - virtual void ProcessImpacts( void ) = 0; - virtual void Con_NPrintf( int idx, char const* fmt, ... ) = 0; - virtual void StartSound( const vec3_t& origin, int channel, char const* sample, float volume, soundlevel_t soundlevel, int fFlags, int pitch ) = 0; - virtual void StartSound( const vec3_t& origin, const char *soundname ) = 0; - virtual void PlaybackEventFull( int flags, int clientindex, unsigned short eventindex, float delay, vec3_t& origin, vec3_t& angles, float fparam1, float fparam2, int iparam1, int iparam2, int bparam1, int bparam2 ) = 0; - virtual bool PlayerFallingDamage( void ) = 0; - virtual void PlayerSetAnimation( int playerAnim ) = 0; - - virtual void *GetSurfaceProps( void ) = 0; - - virtual bool IsWorldEntity( const uintptr_t &handle ) = 0; - -protected: - virtual ~IMoveHelper( ) {} -}; - -class IPrediction -{ -public: - virtual ~IPrediction( void ) {}; - - virtual void Init( void ) = 0; - virtual void Shutdown( void ) = 0; - - // Run prediction - virtual void Update - ( - int startframe, // World update ( un-modded ) most recently received - bool validframe, // Is frame data valid - int incoming_acknowledged, // Last command acknowledged to have been run by server (un-modded) - int outgoing_command // Last command (most recent) sent to server (un-modded) - ) = 0; - - // We are about to get a network update from the server. We know the update #, so we can pull any - // data purely predicted on the client side and transfer it to the new from data state. - virtual void PreEntityPacketReceived( int commands_acknowledged, int current_world_update_packet ) = 0; - virtual void PostEntityPacketReceived( void ) = 0; - virtual void PostNetworkDataReceived( int commands_acknowledged ) = 0; - - virtual void OnReceivedUncompressedPacket( void ) = 0; - - // The engine needs to be able to access a few predicted values - virtual void GetViewOrigin( vec3_t& org ) = 0; - virtual void SetViewOrigin( vec3_t& org ) = 0; - virtual void GetViewAngles( vec3_t& ang ) = 0; - virtual void SetViewAngles( vec3_t& ang ) = 0; - virtual void GetLocalViewAngles( vec3_t& ang ) = 0; - virtual void SetLocalViewAngles( vec3_t& ang ) = 0; -}; \ No newline at end of file diff --git a/tf2/IInputSystem.h b/tf2/IInputSystem.h deleted file mode 100644 index 10f8168..0000000 --- a/tf2/IInputSystem.h +++ /dev/null @@ -1,163 +0,0 @@ -#pragma once -#include "VFunc.h" -#include "IAppSystem.h" -#include "ButtonCode_t.h" - -class IInputSystem : public IAppSystem -{ -public: - // Attach, detach input system from a particular window - // This window should be the root window for the application - // Only 1 window should be attached at any given time. - virtual void AttachToWindow( void* hWnd ) = 0; - virtual void DetachFromWindow( ) = 0; - - // Enables/disables input. PollInputState will not update current - // button/analog states when it is called if the system is disabled. - virtual void EnableInput( bool bEnable ) = 0; - - // Enables/disables the windows message pump. PollInputState will not - // Peek/Dispatch messages if this is disabled - virtual void EnableMessagePump( bool bEnable ) = 0; - - // Polls the current input state - virtual void PollInputState( ) = 0; - - // Gets the time of the last polling in ms - virtual int GetPollTick( ) const = 0; - - // Is a button down? "Buttons" are binary-state input devices (mouse buttons, keyboard keys) - virtual bool IsButtonDown( ButtonCode_t code ) const = 0; - - // Returns the tick at which the button was pressed and released - virtual int GetButtonPressedTick( ButtonCode_t code ) const = 0; - virtual int GetButtonReleasedTick( ButtonCode_t code ) const = 0; - - // Gets the value of an analog input device this frame - // Includes joysticks, mousewheel, mouse - virtual int GetAnalogValue( AnalogCode_t code ) const = 0; - - // Gets the change in a particular analog input device this frame - // Includes joysticks, mousewheel, mouse - virtual int GetAnalogDelta( AnalogCode_t code ) const = 0; - - // Returns the input events since the last poll - virtual int GetEventCount( ) const = 0; - virtual const InputEvent_t* GetEventData( ) const = 0; - -private: - //22 CInputSystem::MotionControllerActive(void)const - virtual void __pad22( ) = 0; - //23 CInputSystem::GetMotionControllerOrientation(void)const - virtual void __pad23( ) = 0; - //24 CInputSystem::GetMotionControllerPosX(void)const - virtual void __pad24( ) = 0; - //25 CInputSystem::GetMotionControllerPosY(void)const - virtual void __pad25( ) = 0; - //26 CInputSystem::GetMotionControllerDeviceStatus(void)const - virtual void __pad26( ) = 0; - //27 CInputSystem::GetMotionControllerDeviceStatusFlags(void)const - virtual void __pad27( ) = 0; - //28 CInputSystem::SetMotionControllerDeviceStatus(int) - virtual void __pad28( ) = 0; - //29 CInputSystem::SetMotionControllerCalibrationInvalid(void) - virtual void __pad29( ) = 0; - //30 CInputSystem::StepMotionControllerCalibration(void) - virtual void __pad30( ) = 0; - //31 CInputSystem::ResetMotionControllerScreenCalibration(void) - virtual void __pad31( ) = 0; - -public: - // Posts a user-defined event into the event queue; this is expected - // to be called in overridden wndprocs connected to the root panel. - virtual void PostUserEvent( const InputEvent_t &event ) = 0; - - // Returns the number of joysticks - virtual int GetJoystickCount( ) const = 0; - - // Enable/disable joystick, it has perf costs - virtual void EnableJoystickInput( int nJoystick, bool bEnable ) = 0; - - // Enable/disable diagonal joystick POV (simultaneous POV buttons down) - virtual void EnableJoystickDiagonalPOV( int nJoystick, bool bEnable ) = 0; - - // Sample the joystick and append events to the input queue - virtual void SampleDevices( ) = 0; - - // FIXME: Currently force-feedback is only supported on the Xbox 360 - virtual void SetRumble( float fLeftMotor, float fRightMotor, int userId = -1 ) = 0; - virtual void StopRumble( ) = 0; - - // Resets the input state - virtual void ResetInputState( ) = 0; - - // Convert back + forth between ButtonCode/AnalogCode + strings - virtual const char *ButtonCodeToString( ButtonCode_t code ) const = 0; - virtual const char *AnalogCodeToString( AnalogCode_t code ) const = 0; - virtual ButtonCode_t StringToButtonCode( const char *pString ) const = 0; - virtual AnalogCode_t StringToAnalogCode( const char *pString ) const = 0; - - // Sleeps until input happens. Pass a negative number to sleep infinitely - virtual void SleepUntilInput( int nMaxSleepTimeMS = -1 ) = 0; - - // Convert back + forth between virtual codes + button codes - // FIXME: This is a temporary piece of code - virtual ButtonCode_t VirtualKeyToButtonCode( int nVirtualKey ) const = 0; - virtual int ButtonCodeToVirtualKey( ButtonCode_t code ) const = 0; - virtual ButtonCode_t ScanCodeToButtonCode( int lParam ) const = 0; - - // How many times have we called PollInputState? - virtual int GetPollCount( ) const = 0; - - // Sets the cursor position - virtual void SetCursorPosition( int x, int y ) = 0; - - // Tells the input system to generate UI-related events, defined - // in inputsystem/inputenums.h (see IE_FirstUIEvent) - // We could have multiple clients that care about UI-related events - // so we refcount the clients with an Add/Remove strategy. If there - // are no interested clients, the UI events are not generated - virtual void AddUIEventListener( ) = 0; - virtual void RemoveUIEventListener( ) = 0; - - // Returns the currently attached window - virtual PlatWindow_t GetAttachedWindow( ) const = 0; - - // Creates a cursor using one of the well-known cursor icons - virtual InputCursorHandle_t GetStandardCursor( InputStandardCursor_t id ) = 0; - - // Loads a cursor defined in a file - virtual InputCursorHandle_t LoadCursorFromFile( const char *pFileName, const char *pPathID = NULL ) = 0; - - // Sets the cursor icon - virtual void SetCursorIcon( InputCursorHandle_t hCursor ) = 0; - - // Gets the cursor position - virtual void GetCursorPosition( int *pX, int *pY ) = 0; - - // Mouse capture - virtual void EnableMouseCapture( PlatWindow_t hWnd ) = 0; - virtual void DisableMouseCapture( ) = 0; - - virtual void SetMouseCursorVisible( bool bVisible ) = 0; - - virtual void DisableHardwareCursor( ) = 0; - virtual void EnableHardwareCursor( ) = 0; - virtual void ResetCursorIcon( ) = 0; - virtual bool GetRawMouseAccumulators( int& accumX, int& accumY ) = 0; - - /*64 CInputSystem::GetConnectedInputDevices(void) - 65 CInputSystem::IsInputDeviceConnected(InputDevice_t) - 66 CInputSystem::SetInputDeviceConnected(InputDevice_t,bool) - 67 CInputSystem::IsOnlySingleDeviceConnected(void) - 68 CInputSystem::GetCurrentInputDevice(void) - 69 CInputSystem::IsDeviceReadingInput(InputDevice_t)const - 70 CInputSystem::SetCurrentInputDevice(InputDevice_t) - 71 CInputSystem::ResetCurrentInputDevice(void) - 72 CInputSystem::SampleInputToFindCurrentDevice(bool) - 73 CInputSystem::IsSamplingForCurrentDevice(void) - 74 CInputSystem::IsSteamControllerActive(void)const - 75 CInputSystem::SetSteamControllerMode(char const*,void const*) - 76 CInputSystem::~CInputSystem() - 77 CInputSystem::~CInputSystem()*/ -}; \ No newline at end of file diff --git a/tf2/IMaterialSystem.hpp b/tf2/IMaterialSystem.hpp deleted file mode 100644 index a8a6a9e..0000000 --- a/tf2/IMaterialSystem.hpp +++ /dev/null @@ -1,222 +0,0 @@ -#pragma once -#include "util.hpp" -#include "ISurface.h" - -using MaterialHandle_t = unsigned short; - -enum MaterialVarFlags_t { - MATERIAL_VAR_DEBUG = 1 << 0, - MATERIAL_VAR_NO_DEBUG_OVERRIDE = 1 << 1, - MATERIAL_VAR_NO_DRAW = 1 << 2, - MATERIAL_VAR_USE_IN_FILLRATE_MODE = 1 << 3, - MATERIAL_VAR_VERTEXCOLOR = 1 << 4, - MATERIAL_VAR_VERTEXALPHA = 1 << 5, - MATERIAL_VAR_SELFILLUM = 1 << 6, - MATERIAL_VAR_ADDITIVE = 1 << 7, - MATERIAL_VAR_ALPHATEST = 1 << 8, - MATERIAL_VAR_MULTIPASS = 1 << 9, - MATERIAL_VAR_ZNEARER = 1 << 10, - MATERIAL_VAR_MODEL = 1 << 11, - MATERIAL_VAR_FLAT = 1 << 12, - MATERIAL_VAR_NOCULL = 1 << 13, - MATERIAL_VAR_NOFOG = 1 << 14, - MATERIAL_VAR_IGNOREZ = 1 << 15, - MATERIAL_VAR_DECAL = 1 << 16, - MATERIAL_VAR_ENVMAPSPHERE = 1 << 17, - MATERIAL_VAR_NOALPHAMOD = 1 << 18, - MATERIAL_VAR_ENVMAPCAMERASPACE = 1 << 19, - MATERIAL_VAR_BASEALPHAENVMAPMASK = 1 << 20, - MATERIAL_VAR_TRANSLUCENT = 1 << 21, - MATERIAL_VAR_NORMALMAPALPHAENVMAPMASK = 1 << 22, - MATERIAL_VAR_NEEDS_SOFTWARE_SKINNING = 1 << 23, - MATERIAL_VAR_OPAQUETEXTURE = 1 << 24, - MATERIAL_VAR_ENVMAPMODE = 1 << 25, - MATERIAL_VAR_SUPPRESS_DECALS = 1 << 26, - MATERIAL_VAR_HALFLAMBERT = 1 << 27, - MATERIAL_VAR_WIREFRAME = 1 << 28, -}; - -class ITexture { -public: - int GetActualWidth( ) { - return util::get_vfunc< 3, int >( this ); - } - - int GetActualHeight( ) { - return util::get_vfunc< 4, int >( this ); - } -}; - -struct MaterialVideoMode_t { - int m_width; - int m_height; - int m_format; - int m_hz; -}; - -struct IMaterialSystem_Config_t { - MaterialVideoMode_t m_vid_mode; - float m_monitor_gamma; - float m_monitor_max; - float m_monitor_min; - float m_monitor_exp; - bool m_gamma_enabled; - bool m_triple_buffer; - int m_aa_samples; - int m_force_anisotropic_level; - int m_skip_mip_levels; - int m_dx_level; - int m_flags; - bool m_edit_mode; - char m_proxy_test_mode; - bool m_compressed_textures; - bool m_filter_lightmaps; - bool m_filter_textures; - bool m_reverse_depth; - bool m_buffer_primitives; - bool m_draw_flat; - bool m_measure_fillrate; - bool m_visualize_fillrate; - bool m_no_transperacy; - bool m_software_lighting; - bool m_allow_cheats; - char m_show_mipmap; - bool m_low_res; - bool m_normal_mapping; - bool m_mipmap_textures; - char m_fullbright; - bool m_fast_nobumd; - bool m_supress_rendering; - bool m_drawgray; - bool m_show_specular; - bool m_show_diffuse; - int m_winsize_widthlimit; - int m_winsize_heightlimit; - int m_aa_quality; - bool m_shadow_depth_texture; - bool m_motion_blur; - bool m_flashlight; - bool m_paint_enabled; - char pad[ 0xC ]; -}; - -class IMaterial { - char pad[ 0x1C ]; -public: - int m_ref_count; - - auto GetName( ) { - return util::get_vfunc< 0, const char* >( this ); - } - - auto GetTextureGroupName( ) { - return util::get_vfunc< 1, const char* >( this ); - } - - void IncrementReferenceCount( ) { - return util::get_vfunc< 12, void >( this ); - } - - void DecrementReferenceCount( ) { - return util::get_vfunc< 13, void >( this ); - } - - void AlphaModulate( float alpha ) { - return util::get_vfunc< 27, void >( this, alpha ); - } - - void ColorModulate( float r, float g, float b ) { - return util::get_vfunc< 28, void >( this, r, g, b ); - } - - void SetMaterialVarFlag( MaterialVarFlags_t flag, bool on ) { - return util::get_vfunc< 29, void >( this, flag, on ); - } - - bool GetMaterialVarFlag( MaterialVarFlags_t flag ) { - return util::get_vfunc< 30, bool >( this, flag ); - } - - auto GetAlphaModulation( ) { - return util::get_vfunc< 44, float >( this ); - } - - void GetColorModulate( float* r, float* g, float* b ) { - return util::get_vfunc< 45, void >( this, r, g, b ); - } - - void Refresh( ) { - return util::get_vfunc< 37, void >( this ); - } -}; - -class IMaterialSystem -{ -public: - enum RenderTargetSizeMode_t { - RT_SIZE_NO_CHANGE = 0, // Only allowed for render targets that don't want a depth buffer - // (because if they have a depth buffer, the render target must be less than or equal to the size of the framebuffer). - RT_SIZE_DEFAULT = 1, // Don't play with the specified width and height other than making sure it fits in the framebuffer. - RT_SIZE_PICMIP = 2, // Apply picmip to the render target's width and height. - RT_SIZE_HDR = 3, // frame_buffer_width / 4 - RT_SIZE_FULL_FRAME_BUFFER = 4, // Same size as frame buffer, or next lower power of 2 if we can't do that. - RT_SIZE_OFFSCREEN = 5, // Target of specified size, don't mess with dimensions - RT_SIZE_FULL_FRAME_BUFFER_ROUNDED_UP = 6 // Same size as the frame buffer, rounded up if necessary for systems that can't do non-power of two textures. - }; - - enum MaterialRenderTargetDepth_t { - MATERIAL_RT_DEPTH_SHARED = 0x0, - MATERIAL_RT_DEPTH_SEPARATE = 0x1, - MATERIAL_RT_DEPTH_NONE = 0x2, - MATERIAL_RT_DEPTH_ONLY = 0x3, - }; - - ImageFormat GetBackBufferFormat( ) { - return util::get_vfunc< 36, ImageFormat >( this ); - } - - IMaterial* CreateMaterial( const char* pMaterialName, void* pVMTKeyValues ) { - return util::get_vfunc< 70, IMaterial* >( this, pMaterialName, pVMTKeyValues ); - } - - IMaterial* FindMaterial( const char* pMaterialName, const char* pTextureGroupName = "Model textures", bool complain = true, const char* pComplainPrefix = nullptr ) { - return util::get_vfunc< 84, IMaterial* >( this, pMaterialName, pTextureGroupName, complain, pComplainPrefix ); - } - - MaterialHandle_t FirstMaterial( ) { - return util::get_vfunc< 86, MaterialHandle_t >( this ); - } - - MaterialHandle_t NextMaterial( MaterialHandle_t h ) { - return util::get_vfunc< 87, MaterialHandle_t >( this, h ); - } - - MaterialHandle_t InvalidMaterial( ) { - return util::get_vfunc< 88, MaterialHandle_t >( this ); - } - - IMaterial* GetMaterial( MaterialHandle_t h ) { - return util::get_vfunc< 89, IMaterial* >( this, h ); - } - - void BeginRenderTargetAllocation( ) { - return util::get_vfunc< 94, void >( this ); - } - - void EndRenderTargetAllocation( ) { - return util::get_vfunc< 95, void >( this ); - } - - ITexture* CreateNamedRenderTargetTextureEx( const char* name, int w, int h, RenderTargetSizeMode_t sizeMode, - ImageFormat format, MaterialRenderTargetDepth_t depth ) - { - const int textureFlags = 0x4 | 0x8; //TEXTUREFLAGS_CLAMPS, TEXTUREFLAGS_CLAMPT - const int renderTargetFlags = 0x1; //CREATERENDERTARGETFLAGS_HDR - return util::get_vfunc< 97, ITexture* >( this, name, w, h, sizeMode, format, depth, textureFlags, renderTargetFlags ); - } - - /*void* GetRenderContext( ) { - typedef IMatRenderContext*( __thiscall* GetRenderContextFn )( void* ); - return CallVFunction( this, 115 )( this ); - }*/ -}; \ No newline at end of file diff --git a/tf2/IPanel.h b/tf2/IPanel.h deleted file mode 100644 index 5252642..0000000 --- a/tf2/IPanel.h +++ /dev/null @@ -1,13 +0,0 @@ -#pragma once - -class IPanel { -public: - const char* GetName( int iPanel ) { - return call_vfunc< const char*( __thiscall* )( void*, int ) >( this, 36 )( this, iPanel ); - } - - void SetMouseInputEnabled( unsigned int iPanel, bool state ) { - return call_vfunc< void( __thiscall* )( void*, unsigned int, bool ) >( this, 32 )( this, iPanel, state ); - } - -}; \ No newline at end of file diff --git a/tf2/IPlayerInfoManager.h b/tf2/IPlayerInfoManager.h deleted file mode 100644 index 13406b1..0000000 --- a/tf2/IPlayerInfoManager.h +++ /dev/null @@ -1,7 +0,0 @@ -#pragma once -#include "CGlobalVarsBase.h" -class IPlayerInfoManager { -public: - virtual void pad_000( ) = 0; - virtual CGlobalVarsBase* GetGlobalVars( ) = 0; -}; \ No newline at end of file diff --git a/tf2/ISurface.h b/tf2/ISurface.h deleted file mode 100644 index 3dbff15..0000000 --- a/tf2/ISurface.h +++ /dev/null @@ -1,223 +0,0 @@ -#pragma once -#include "VFunc.h" -#include "vector.hpp" -#include "color.hpp" - -enum FontDrawType_t { - FONT_DRAW_DEFAULT = 0, - FONT_DRAW_NONADDITIVE, - FONT_DRAW_ADDITIVE, - FONT_DRAW_TYPE_COUNT = 2, -}; - -enum FontFlags_t { - FONTFLAG_NONE, - FONTFLAG_ITALIC = 0x001, - FONTFLAG_UNDERLINE = 0x002, - FONTFLAG_STRIKEOUT = 0x004, - FONTFLAG_SYMBOL = 0x008, - FONTFLAG_ANTIALIAS = 0x010, - FONTFLAG_GAUSSIANBLUR = 0x020, - FONTFLAG_ROTARY = 0x040, - FONTFLAG_DROPSHADOW = 0x080, - FONTFLAG_ADDITIVE = 0x100, - FONTFLAG_OUTLINE = 0x200, - FONTFLAG_CUSTOM = 0x400, - FONTFLAG_BITMAP = 0x800, -}; - -enum ImageFormat { - IMAGE_FORMAT_UNKNOWN = -1, - IMAGE_FORMAT_RGBA8888 = 0, - IMAGE_FORMAT_ABGR8888, - IMAGE_FORMAT_RGB888, - IMAGE_FORMAT_BGR888, - IMAGE_FORMAT_RGB565, - IMAGE_FORMAT_I8, - IMAGE_FORMAT_IA88, - IMAGE_FORMAT_P8, - IMAGE_FORMAT_A8, - IMAGE_FORMAT_RGB888_BLUESCREEN, - IMAGE_FORMAT_BGR888_BLUESCREEN, - IMAGE_FORMAT_ARGB8888, - IMAGE_FORMAT_BGRA8888, - IMAGE_FORMAT_DXT1, - IMAGE_FORMAT_DXT3, - IMAGE_FORMAT_DXT5, - IMAGE_FORMAT_BGRX8888, - IMAGE_FORMAT_BGR565, - IMAGE_FORMAT_BGRX5551, - IMAGE_FORMAT_BGRA4444, - IMAGE_FORMAT_DXT1_ONEBITALPHA, - IMAGE_FORMAT_BGRA5551, - IMAGE_FORMAT_UV88, - IMAGE_FORMAT_UVWQ8888, - IMAGE_FORMAT_RGBA16161616F, - IMAGE_FORMAT_RGBA16161616, - IMAGE_FORMAT_UVLX8888, - IMAGE_FORMAT_R32F, // Single-channel 32-bit floating point - IMAGE_FORMAT_RGB323232F, - IMAGE_FORMAT_RGBA32323232F, - - // Depth-stencil texture formats for shadow depth mapping - IMAGE_FORMAT_NV_DST16, // - IMAGE_FORMAT_NV_DST24, // - IMAGE_FORMAT_NV_INTZ, // Vendor-specific depth-stencil texture - IMAGE_FORMAT_NV_RAWZ, // formats for shadow depth mapping - IMAGE_FORMAT_ATI_DST16, // - IMAGE_FORMAT_ATI_DST24, // - IMAGE_FORMAT_NV_NULL, // Dummy format which takes no video memory - - // Compressed normal map formats - IMAGE_FORMAT_ATI2N, // One-surface ATI2N / DXN format - IMAGE_FORMAT_ATI1N, // Two-surface ATI1N format - - NUM_IMAGE_FORMATS -}; - -struct vertex_t { - vertex_t( ) {} - - vertex_t( const vec2_t& pos, const vec2_t& coord = vec2_t( 0, 0 ) ) { - m_position = pos; - m_tex_coord = coord; - } - - void init( float x, float y, const vec2_t& coord = vec2_t( 0, 0 ) ) { - m_position = vec2_t( x, y ); - m_tex_coord = coord; - } - - vec2_t m_position; - vec2_t m_tex_coord; -}; - -using HFont = unsigned long; -using VPANEL = unsigned long; -class IntRect; -class IHTMLEvents; -class IHTML; -using HCursor = unsigned long; -using HTexture = unsigned long; -class CharRenderInfo; -class IVguiMatInfo; -class IImage; -class DrawTexturedRectParms_t; -class IHTMLChromeController; - -enum GradientType_t { - GRADIENT_HORIZONTAL = 0, - GRADIENT_VERTICAL = 1 -}; - -class ISurface { -public: - void DrawSetColor( clr_t clr ) { - return call_vfunc< void( __thiscall* )( void*, int , int , int, int ) >( this, 11 )( this, clr.r( ), clr.g( ), clr.b( ), clr.a( ) ); - } - - void DrawFilledRect( int x, int y, int w, int h ) { - return call_vfunc< void( __thiscall* )( void*, int, int, int, int ) >( this, 12 )( this, x, y, w, h ); - } - - void DrawOutlinedRect( int x, int y, int w, int h ) { - return call_vfunc< void( __thiscall* )( void*, int, int, int, int ) >( this, 14 )( this, x, y, w, h ); - } - - void DrawLine( int x0, int y0, int x1, int y1 ) { - return call_vfunc< void( __thiscall* )( void*, int, int, int, int ) >( this, 15 )( this, x0, y0, x1, y1 ); - } - - void DrawPolyLine( int* x, int* y, int n ) { - return call_vfunc< void( __thiscall* )( void*, int*, int*, int ) >( this, 16 )( this, x, y, n ); - } - - void DrawSetTextFont( unsigned long index ) { - return call_vfunc< void( __thiscall* )( void*, unsigned long ) >( this, 17 )( this, index ); - } - - void DrawSetTextColor( clr_t clr ) { - return call_vfunc< void( __thiscall* )( void*, int, int, int, int ) >( this, 19 )( this, clr.r( ), clr.g( ), clr.b( ), clr.a( ) ); - } - - void DrawSetTextPos( int x, int y ) { - return call_vfunc< void( __thiscall* )( void*, int, int ) >( this, 20 )( this, x, y ); - } - - void DrawPrintText( const wchar_t* text, int length, FontDrawType_t drawtype = FontDrawType_t::FONT_DRAW_DEFAULT ) { - return call_vfunc< void( __thiscall* )( void*, const wchar_t*, int, FontDrawType_t ) >( this, 22 )( this, text, length, drawtype ); - } - - void DrawSetTextureRGBA( int id, const unsigned char* rgba, int w, int h ) { - return call_vfunc< void( __thiscall* )( void*, int, const unsigned char*, int, int, int, bool ) >( this, 31 )( this, id, rgba, w, h, 0, true ); - } - - void DrawSetTexture( int id ) { - return call_vfunc< void( __thiscall* )( void*, int ) >( this, 32 )( this, id ); - } - - int CreateNewTextureID( bool procedural ) { - return call_vfunc< int( __thiscall* )( void*, bool ) >( this, 37 )( this, procedural ); - } - - void SetCursorAlwaysVis( bool vis ) { - return call_vfunc< void( __thiscall* )( void*, bool ) >( this, 52 )( this, vis ); - } - - unsigned long CreateFnt( ) { - return call_vfunc< unsigned long( __thiscall* )( void* ) >( this, 66 )( this ); - } - - void UnlockCursor( ) { - return call_vfunc< void( __thiscall* )( void* ) >( this, 61 )( this ); - } - - void LockCursor( ) { - return call_vfunc< void( __thiscall* )( void* ) >( this, 62 )( this ); - } - - void SetFontGlyphSet( unsigned long font, const char* windowsFontName, int tall, int weight, int blur, int scanlines, int flags, int nRangeMin = 0, int nRangeMax = 0 ) { - return call_vfunc< void( __thiscall* )( void*, unsigned long, const char*, int, int, int, int, int, int, int ) >( this, 67 )( this, font, windowsFontName, tall, weight, blur, scanlines, flags, nRangeMin, nRangeMax ); - } - - void GetTextSize( unsigned long font, const wchar_t* text, int& wide, int& tall ) { - return call_vfunc< void( __thiscall* )( void*, unsigned long, const wchar_t*, int&, int& ) >( this, 75 )( this, font, text, wide, tall ); - } - - void play_sound( const char* fileName ) { - return call_vfunc< void( __thiscall* )( void*, const char* ) >( this, 82 )( this, fileName ); - } - - void GetCursorPosition( int &x, int &y ) { - return call_vfunc< void( __thiscall* )( void*, int&, int& ) >( this, 96 )( this, x, y ); - } - - void DrawOutlinedCircle( int x, int y, int radius, int segments ) { - return call_vfunc< void( __thiscall* )( void*, int, int, int, int ) >( this, 99 )( this, x, y, radius, segments ); - } - - void DrawTexturedPolygon( int n, vertex_t* pVertice, bool bClipVertices = true ) { - return call_vfunc< void( __thiscall* )( void*, int, vertex_t*, bool ) >( this, 102 )( this, n, pVertice, bClipVertices ); - } - - void DrawGradient( int x, int y, int w, int h, clr_t first, clr_t second, GradientType_t type ) - { - clr_t present_draw_clr = { }; - - auto draw_filled_rect_gradient = [ & ]( bool reversed ) -> void { - call_vfunc< void( __thiscall* )( void*, int, int, int, int, unsigned, unsigned, bool ) >( this, 118 ) - ( this, x, y, w, h, reversed ? 255 : 0, reversed ? 0 : 255, type == GRADIENT_HORIZONTAL ); - }; - - DrawSetColor( clr_t::blend( first, second, 0.5f ) ); - DrawFilledRect( x, y, w, h ); - - DrawSetColor( first ); - present_draw_clr = first; - draw_filled_rect_gradient( true ); - - DrawSetColor( second ); - present_draw_clr = second; - draw_filled_rect_gradient( false ); - } -}; \ No newline at end of file diff --git a/tf2/IVDebugOverlay.h b/tf2/IVDebugOverlay.h deleted file mode 100644 index 664b356..0000000 --- a/tf2/IVDebugOverlay.h +++ /dev/null @@ -1,10 +0,0 @@ -#pragma once -#include "VFunc.h" - -class vec3_t; -class IVDebugOverlay { -public: - int ScreenPosition( const vec3_t& point, vec3_t& screen ) { - return call_vfunc< int( __thiscall* )( void*, const vec3_t&, vec3_t& ) >( this, 10 )( this, point, screen ); - } -}; \ No newline at end of file diff --git a/tf2/IVEngineClient.h b/tf2/IVEngineClient.h deleted file mode 100644 index a45e839..0000000 --- a/tf2/IVEngineClient.h +++ /dev/null @@ -1,192 +0,0 @@ -#pragma once -#include "VFunc.h" - -typedef float matrix3x4[ 3 ][ 4 ]; -typedef struct player_info_s { - char name[ 32 ]; - int userID; - char guid[ 33 ]; - unsigned long friendsID; - char friendsName[ 32 ]; - bool fakeplayer; - bool ishltv; - unsigned long customFiles[ 4 ]; - byte filesDownloaded; -} player_info_t; - -class INetChannelInfo -{ -public: - - enum - { - GENERIC = 0, // must be first and is default group - LOCALPLAYER, // bytes for local player entity update - OTHERPLAYERS, // bytes for other players update - ENTITIES, // all other entity bytes - SOUNDS, // game sounds - EVENTS, // event messages - USERMESSAGES, // user messages - ENTMESSAGES, // entity messages - VOICE, // voice data - STRINGTABLE, // a stringtable update - MOVE, // client move cmds - STRINGCMD, // string command - SIGNON, // various signondata - TOTAL, // must be last and is not a real group - }; - - virtual const char *GetName( void ) const = 0; // get channel name - virtual const char *GetAddress( void ) const = 0; // get channel IP address as string - virtual float GetTime( void ) const = 0; // current net time - virtual float GetTimeConnected( void ) const = 0; // get connection time in seconds - virtual int GetBufferSize( void ) const = 0; // netchannel packet history size - virtual int GetDataRate( void ) const = 0; // send data rate in byte/sec - - virtual bool IsLoopback( void ) const = 0; // true if loopback channel - virtual bool IsTimingOut( void ) const = 0; // true if timing out - virtual bool IsPlayback( void ) const = 0; // true if demo playback - - virtual float GetLatency( int flow ) const = 0; // current latency (RTT), more accurate but jittering - virtual float GetAvgLatency( int flow ) const = 0; // average packet latency in seconds - virtual float GetAvgLoss( int flow ) const = 0; // avg packet loss[0..1] - virtual float GetAvgChoke( int flow ) const = 0; // avg packet choke[0..1] - virtual float GetAvgData( int flow ) const = 0; // data flow in bytes/sec - virtual float GetAvgPackets( int flow ) const = 0; // avg packets/sec - virtual int GetTotalData( int flow ) const = 0; // total flow in/out in bytes - virtual int GetSequenceNr( int flow ) const = 0; // last send seq number - virtual bool IsValidPacket( int flow, int frame_number ) const = 0; // true if packet was not lost/dropped/chocked/flushed - virtual float GetPacketTime( int flow, int frame_number ) const = 0; // time when packet was send - virtual int GetPacketBytes( int flow, int frame_number, int group ) const = 0; // group size of this packet - virtual bool GetStreamProgress( int flow, int *received, int *total ) const = 0; // TCP progress if transmitting - virtual float GetTimeSinceLastReceived( void ) const = 0; // get time since last recieved packet in seconds - virtual float GetCommandInterpolationAmount( int flow, int frame_number ) const = 0; - virtual void GetPacketResponseLatency( int flow, int frame_number, int *pnLatencyMsecs, int *pnChoke ) const = 0; - virtual void GetRemoteFramerate( float *pflFrameTime, float *pflFrameTimeStdDeviation ) const = 0; - - virtual float GetTimeoutSeconds( ) const = 0; -}; - -class INetChannel { -public: - char pad_0000[ 20 ]; //0x0000 - bool m_bProcessingMessages; //0x0014 - bool m_bShouldDelete; //0x0015 - char pad_0016[ 2 ]; //0x0016 - int32_t m_nOutSequenceNr; //0x0018 last send outgoing sequence number - int32_t m_nInSequenceNr; //0x001C last received incoming sequnec number - int32_t m_nOutSequenceNrAck; //0x0020 last received acknowledge outgoing sequnce number - int32_t m_nOutReliableState; //0x0024 state of outgoing reliable data (0/1) flip flop used for loss detection - int32_t m_nInReliableState; //0x0028 state of incoming reliable data - int32_t m_nChokedPackets; //0x002C number of choked packets - char pad_0030[ 1044 ]; //0x0030 - - bool transmit( bool only_reliable ) { - return util::get_vfunc< 49, bool >( this, only_reliable ); - } -}; //Size: 0x0444 - -struct INetMessage { - virtual ~INetMessage( ); -}; - -template -class CNetMessagePB : public INetMessage, public T {}; - -class CCLCMsg_Move_ { -private: - char __PAD0[ 0x8 ]; -public: - int numBackupCommands; - int numNewCommands; -}; - -using CCLCMsg_Move_t = CNetMessagePB; - -class CClientState { -public: - char pad0[ 0x9C ]; - INetChannel* netchannel; - char pad1[ 0xD4 ]; - int32_t m_nDeltaTick; //0x174 - char pad2[ 0x4B34 ]; - float m_frameTime; - int32_t lastoutgoingcommand; - int32_t chokedcommands; - int32_t last_command_ack; -}; - -class CGlobalState { -public: - uintptr_t * m_manager; - CClientState *m_def_clientstate; - - __forceinline CClientState* get_client_state( ) { - return m_def_clientstate; - } -}; - -class IVEngineClient { -public: - void GetScreenSize( int& width, int& height ) { - return call_vfunc< void( __thiscall* )( void*, int&, int& ) >( this, 5 )( this, width, height ); - } - - void ClientCmd( const char* command ) { - return call_vfunc< void( __thiscall* )( void*, const char* ) >( this, 7 )( this, command ); - } - - bool GetPlayerInfo( int index, player_info_t* info ) { - return call_vfunc< bool( __thiscall* )( void*, int, player_info_t* ) >( this, 8 )( this, index, info ); - } - - int GetPlayerForUserID( int UserID ) { - using fn = int( __thiscall* )( void*, int ); - return util::get_vfunc< fn >( this, 9 )( this, UserID ); - } - - bool Cov_IsVisible( ) { - return call_vfunc< bool( __thiscall* )( void* ) >( this, 11 )( this ); - } - - int GetLocalPlayer( ) { - return call_vfunc< int( __thiscall* )( void* ) >( this, 12 )( this ); - } - - float Time( ) { - return call_vfunc< float( __thiscall* )( void* ) >( this, 14 )( this ); - } - - void GetViewAngles( vec3_t& angles ) { - return call_vfunc< void( __thiscall* )( void*, vec3_t& ) >( this, 19 )( this, angles ); - } - - void SetViewAngles( vec3_t& angles ) { - return call_vfunc< void( __thiscall* )( void*, vec3_t& ) >( this, 20 )( this, angles ); - } - - const matrix3x4& GetWorldToScreenMatrix( ) { - return call_vfunc< const matrix3x4&( __thiscall* )( void* ) >( this, 36 )( this ); - } - - int GetMaxClients( ) { - return call_vfunc< int( __thiscall* )( void* ) >( this, 21 )( this ); - } - - bool IsInGame( ) { - return call_vfunc< bool( __thiscall* )( void* ) >( this, 26 )( this ); - } - - bool IsConnected( ) { - return call_vfunc< bool( __thiscall* )( void* ) >( this, 27 )( this ); - } - - void ClientCmd_Unrestricted( const char* command ) { - return call_vfunc< void( __thiscall* )( void*, const char* ) >( this, 106 )( this, command ); - } - - INetChannelInfo* GetNetChannelInfo( ) { - using fn = INetChannelInfo * ( __thiscall* )( void* ); - return util::get_vfunc< fn >( this, 72 )( this ); - } -}; \ No newline at end of file diff --git a/tf2/IVModelInfo.h b/tf2/IVModelInfo.h deleted file mode 100644 index 08df897..0000000 --- a/tf2/IVModelInfo.h +++ /dev/null @@ -1,179 +0,0 @@ -#pragma once -#include "IVEngineClient.h" -#include "IClientEntityList.h" -class IMaterial; -struct mstudiobbox_t { - int bone; - int group; - vec3_t bbmin; - vec3_t bbmax; - int szhitboxnameindex; - int unused[8]; -}; - -enum OverrideType_t { - OVERRIDE_NORMAL = 0, - OVERRIDE_BUILD_SHADOWS, - OVERRIDE_DEPTH_WRITE, - OVERRIDE_SSAO_DEPTH_WRITE, -}; -struct DrawModelState_t; - -struct mstudiobone_t { - int sznameindex; - char* GetName( ) const { return reinterpret_cast< char* >( reinterpret_cast< uintptr_t >( this ) ) + sznameindex; } - int parent; - int bonecontroller[ 6 ]; - vec3_t pos; - float quat[ 4 ]; - vec3_t rot; - vec3_t posscale; - vec3_t rotscale; - matrix3x4 poseToBone; - float qAlignment[ 4 ]; - int flags; - int proctype; - int procindex; - mutable int physicsbone; - void* GetProcedure( ) const { return procindex == 0 ? nullptr : reinterpret_cast( reinterpret_cast( this ) + procindex ); }; - int surfacepropidx; - char* GetSurfaceProps( ) const { return reinterpret_cast( reinterpret_cast( this ) ) + surfacepropidx; } - int contents; - unsigned char pad[ 32 ]; -}; - -struct mstudiohitboxset_t { - int sznameindex; - inline char *const pszName(void) const { return ((char *)this) + sznameindex; } - int numhitboxes; - int hitboxindex; - mstudiobbox_t *pHitbox(int i) const { return (mstudiobbox_t *)(((BYTE *)this) + hitboxindex) + i; }; -}; - -struct studiohdr_t { - unsigned char pad00[12]; - char name[64]; - unsigned char pad01[80]; - int numbones; - int boneindex; - unsigned char pad02[12]; - int hitboxsetindex; - unsigned char pad03[228]; - - mstudiobone_t *GetBone( int i ) const { - return reinterpret_cast( uintptr_t( this ) + boneindex ) + i; - }; - - mstudiohitboxset_t *pHitboxSet(int i) const { - return (mstudiohitboxset_t *)(((unsigned char *)this) + hitboxsetindex) + i; - }; - - mstudiobbox_t *pHitbox(int i, int set) const { - const mstudiohitboxset_t *s = pHitboxSet(set); - if(!s) - return 0; - - return s->pHitbox(i); - }; - - int iHitboxCount(int set) const { - const mstudiohitboxset_t *s = pHitboxSet(set); - if(!s) - return 0; - - return s->numhitboxes; - }; -}; - -struct ModelRenderInfo_t { - vec3_t m_origin; - vec3_t m_angles; - char pad[ 0x4 ]; - void* m_renderable; - const model_t* m_model; - const matrix3x4* m_model2world; - const matrix3x4* m_light_offset; - const vec3_t* m_light_origin; - int m_flags; - int m_entity_index; - int m_skin; - int m_body; - int m_hitboxset; - uint16_t* m_instance; - - ModelRenderInfo_t( ) { - m_model2world = nullptr; - m_light_offset = nullptr; - m_light_origin = nullptr; - } -}; - -class IVModelInfo { -public: - int GetModelIndex( const char* name ) { - return call_vfunc< int( __thiscall* )( void*, const char* ) >( this, 2 )( this, name ); - } - - const char* GetModelName( const void* model ) { - return call_vfunc< const char*( __thiscall* )( void*, const void* ) >( this, 3 )( this, model ); - } - - studiohdr_t* GetStudioModel( const void* model ) { - return call_vfunc< studiohdr_t*( __thiscall* )( void*, const void* ) >( this, 28 )( this, model ); - } - - model_t* FindOrLoadModel( const char* name ) { - using fn = model_t * ( __thiscall* )( void*, const char* ); - return util::get_vfunc< fn >( this, 43 )( this, name ); - } -}; - -class IVModelRender { -public: - void ForcedMaterialOverride( IMaterial* newMaterial, OverrideType_t nOverrideType = OVERRIDE_NORMAL, int unk = 0 ) { - using fn = void( __thiscall* )( void*, IMaterial*, OverrideType_t, int ); - return util::get_vfunc< fn >( this, 1 )( this, newMaterial, nOverrideType, unk ); - } - - void DrawModelExecute( void* matctx, const DrawModelState_t& state, const ModelRenderInfo_t& pInfo, matrix3x4* pCustomBoneToWorld ) { - using fn = void( __thiscall* )( void*, void*, const DrawModelState_t&, const ModelRenderInfo_t&, matrix3x4* ); - util::get_vfunc< fn >( this, 19 )( this, matctx, state, pInfo, pCustomBoneToWorld ); - } -}; - - -class INetworkStringTable { -public: - - virtual ~INetworkStringTable( void ) {}; - - // Table Info - virtual const char *GetTableName( void ) const = 0; - virtual int GetTableId( void ) const = 0; - virtual int GetNumStrings( void ) const = 0; - virtual int GetMaxStrings( void ) const = 0; - virtual int GetEntryBits( void ) const = 0; - - // Networking - virtual void SetTick( int tick ) = 0; - virtual bool ChangedSinceTick( int tick ) const = 0; - - // Accessors (length -1 means don't change user data if string already exits) - virtual int AddString( bool bIsServer, const char *value, int length = -1, const void *userdata = 0 ) = 0; - - virtual const char *GetString( int stringNumber ) = 0; - virtual void SetStringUserData( int stringNumber, int length, const void *userdata ) = 0; - virtual const void *GetStringUserData( int stringNumber, int *length ) = 0; - virtual int FindStringIndex( char const *string ) = 0; // returns INVALID_STRING_INDEX if not found - - // Callbacks - virtual void SetStringChangedCallback( void *object, void* changeFunc ) = 0; -}; - -class CStringTable { -public: - INetworkStringTable * FindTable( const char* table ) { - using fn = INetworkStringTable * ( __thiscall* )( void*, const char* ); - return util::get_vfunc< fn >( this, 3 )( this, table ); - } -}; \ No newline at end of file diff --git a/tf2/IVRenderView.h b/tf2/IVRenderView.h deleted file mode 100644 index b85b82d..0000000 --- a/tf2/IVRenderView.h +++ /dev/null @@ -1,185 +0,0 @@ -#pragma once -#include "util.hpp" - -class Beam_t; -class C_Beam; -class c_base_player; -class ITraceFilter; - - -class IVRenderView { -public: - void SetBlend( float blend ) { - return util::get_vfunc< 4, void >( this, blend ); - } - - float GetBlend( ) { - return util::get_vfunc< 5, float >( this ); - } - - void SetColorModulation( float const* blend ) { - return util::get_vfunc< 6, void >( this, blend ); - } - - void GetColorModulation( float* blend ) { - return util::get_vfunc< 7, void >( this, blend ); - } -}; - -enum beam_types { - beam_normal = 0, - beam_disk = 2, - beam_cylinder, - beam_follow, - beam_ring, - beam_spline, - beam_ring_point, - beam_laser, - beam_tesla, -}; - -enum beam_flags { - FBEAM_STARTENTITY = 0x00000001, - FBEAM_ENDENTITY = 0x00000002, - FBEAM_FADEIN = 0x00000004, - FBEAM_FADEOUT = 0x00000008, - FBEAM_SINENOISE = 0x00000010, - FBEAM_SOLID = 0x00000020, - FBEAM_SHADEIN = 0x00000040, - FBEAM_SHADEOUT = 0x00000080, - FBEAM_ONLYNOISEONCE = 0x00000100, // Only calculate our noise once - FBEAM_NOTILE = 0x00000200, - FBEAM_USE_HITBOXES = 0x00000400, // Attachment indices represent hitbox indices instead when this is set. - FBEAM_STARTVISIBLE = 0x00000800, // Has this client actually seen this beam's start entity yet? - FBEAM_ENDVISIBLE = 0x00001000, // Has this client actually seen this beam's end entity yet? - FBEAM_ISACTIVE = 0x00002000, - FBEAM_FOREVER = 0x00004000, - FBEAM_HALOBEAM = 0x00008000, // When drawing a beam with a halo, don't ignore the segments and endwidth - FBEAM_REVERSED = 0x00010000, - NUM_BEAM_FLAGS = 17 // KEEP THIS UPDATED! -}; - -struct BeamInfo_t { - beam_types m_nType; - - // Entities - IClientEntity* m_pStartEnt; - int m_nStartAttachment; - IClientEntity* m_pEndEnt; - int m_nEndAttachment; - - // Points - vec3_t m_vecStart; - vec3_t m_vecEnd; - - int m_nModelIndex; - const char *m_pszModelName; - - int m_nHaloIndex; - const char *m_pszHaloName; - float m_flHaloScale; - - float m_flLife; - float m_flWidth; - float m_flEndWidth; - float m_flFadeLength; - float m_flAmplitude; - - float m_flBrightness; - float m_flSpeed; - - int m_nStartFrame; - float m_flFrameRate; - - float m_flRed; - float m_flGreen; - float m_flBlue; - - bool m_bRenderable; - - int m_nSegments; - - int m_nFlags; - - // Rings - vec3_t m_vecCenter; - float m_flStartRadius; - float m_flEndRadius; - - BeamInfo_t( ) - { - m_nType = beam_normal; - m_nSegments = -1; - m_pszModelName = NULL; - m_pszHaloName = NULL; - m_nModelIndex = -1; - m_nHaloIndex = -1; - m_bRenderable = true; - m_nFlags = 0; - } -}; - -class IViewRenderBeams -{ -public: - // Construction -public: - IViewRenderBeams( void ); - virtual ~IViewRenderBeams( void ); - - // Implement IViewRenderBeams -public: - virtual void InitBeams( void ); - virtual void ShutdownBeams( void ); - virtual void ClearBeams( void ); - - // Updates the state of the temp ent beams - virtual void UpdateTempEntBeams( ); - - virtual void DrawBeam( Beam_t *pbeam ); - virtual void DrawBeam( C_Beam* pbeam, ITraceFilter*pEntityBeamTraceFilter = NULL ); - - virtual void KillDeadBeams( IClientEntity *pDeadEntity ); - - virtual void CreateBeamEnts( int startEnt, int endEnt, int modelIndex, int haloIndex, float haloScale, - float life, float width, float endWidth, float fadeLength, float amplitude, - float brightness, float speed, int startFrame, - float framerate, float r, float g, float b, int type = -1 ); - virtual Beam_t *CreateBeamEnts( BeamInfo_t &beamInfo ); - - virtual void CreateBeamEntPoint( int nStartEntity, const vec3_t *pStart, int nEndEntity, const vec3_t* pEnd, - int modelIndex, int haloIndex, float haloScale, - float life, float width, float endWidth, float fadeLength, float amplitude, - float brightness, float speed, int startFrame, - float framerate, float r, float g, float b ); - virtual Beam_t *CreateBeamEntPoint( BeamInfo_t &beamInfo ); - - virtual void CreateBeamPoints( vec3_t& start, vec3_t& end, int modelIndex, int haloIndex, float haloScale, - float life, float width, float endWidth, float fadeLength, float amplitude, - float brightness, float speed, int startFrame, - float framerate, float r, float g, float b ); - virtual Beam_t *CreateBeamPoints( BeamInfo_t &beamInfo ); - - virtual void CreateBeamRing( int startEnt, int endEnt, int modelIndex, int haloIndex, float haloScale, - float life, float width, float endWidth, float fadeLength, float amplitude, - float brightness, float speed, int startFrame, - float framerate, float r, float g, float b, int flags ); - virtual Beam_t *CreateBeamRing( BeamInfo_t &beamInfo ); - - virtual void CreateBeamRingPoint( const vec3_t& center, float start_radius, float end_radius, int modelIndex, int haloIndex, float haloScale, - float life, float width, float m_nEndWidth, float m_nFadeLength, float amplitude, - float brightness, float speed, int startFrame, - float framerate, float r, float g, float b, int flags ); - virtual Beam_t *CreateBeamRingPoint( BeamInfo_t &beamInfo ); - - virtual void CreateBeamCirclePoints( int type, vec3_t& start, vec3_t& end, - int modelIndex, int haloIndex, float haloScale, float life, float width, - float endWidth, float fadeLength, float amplitude, float brightness, float speed, - int startFrame, float framerate, float r, float g, float b ); - virtual Beam_t *CreateBeamCirclePoints( BeamInfo_t &beamInfo ); - - virtual void CreateBeamFollow( int startEnt, int modelIndex, int haloIndex, float haloScale, - float life, float width, float endWidth, float fadeLength, float r, float g, float b, - float brightness ); - virtual Beam_t *CreateBeamFollow( BeamInfo_t &beamInfo ); -}; \ No newline at end of file diff --git a/tf2/KeyValues.cpp b/tf2/KeyValues.cpp deleted file mode 100644 index 16ccf6e..0000000 --- a/tf2/KeyValues.cpp +++ /dev/null @@ -1,62 +0,0 @@ -#include "KeyValues.h" -#include "pattern.hpp" -#include "interfaces.h" - -void* KeyValues::key_values_ptr; - -void IKeyValuesSystem::FreeKeyValuesMemory( void* memory ) { - return util::get_vfunc< 2, void >( this, memory ); -} - -int IKeyValuesSystem::GetSymbolForString( const char* str, bool create ) { - static auto offset = pattern::first_code_match( GetModuleHandleA( xors( "client.dll" ) ), xors( "FF 15 ? ? ? ? 83 C4 08 89 06 8B C6" ) ); - using fn = int( __thiscall* )( void*, const char*, bool ); - - int symbol = ( ( fn )( offset ) )( this, str, create ); - return symbol; -} - -const char* IKeyValuesSystem::GetStringForSymbol( int symbol ) { - static auto offset = pattern::first_code_match( GetModuleHandleA( xors( "client.dll" ) ), xors( "55 8B EC 8B 55 08 83 FA FF" ) ); - using fn = const char*( __thiscall* )( void*, int ); - - auto result = ( ( fn )( offset ) )( this, symbol ); - printf( "%d: %d\n", symbol, *( int* )( &result ) ); - - return result; -} - -//honestly keyvalues can suck my fucking cock while i force feeds that fucking whores ass rats to live in its cum infested shithole - - -KeyValues::KeyValues( const char* name ) { - static std::string fun_pattern = "E8 ? ? ? ? 80 7D 84 00"; - static uintptr_t function_offset = pattern::first_code_match( cl.m_chl.dll( ), fun_pattern ) + 0x13C; - static auto function = reinterpret_cast< void( __thiscall* )( void*, const char* ) >( function_offset ); - if( function ) function( this, name ); -} - -bool KeyValues::LoadFromBuffer( const char* resource_name, const char* buffer, void* file_system, const char* path_id ) { - static std::string fun_pattern = "55 8B EC 83 E4 F8 83 EC 34 53 8B 5D 0C 89 4C 24 04"; - static auto function = pattern::first_code_match< bool( __thiscall* )( void*, const char*, const char*, void*, const char*, void* ) >( cl.m_chl.dll( ), fun_pattern ); - if( function ) return function( this, resource_name, buffer, file_system, path_id, 0 ); - return false; -} - -void* KeyValues::operator new( size_t alloc_size ) { - if( !KeyValues::key_values_ptr ) { - static auto get_key_values = reinterpret_cast< void*( __cdecl* )( ) >( GetProcAddress( GetModuleHandleA( "vstdlib.dll" ), "KeyValuesSystem" ) ); - KeyValues::key_values_ptr = get_key_values( ); - } - - return call_vfunc< void*( __thiscall* )( void*, size_t ) >( KeyValues::key_values_ptr, 1 )( KeyValues::key_values_ptr, 32 ); -} - -void KeyValues::operator delete( void* mem ) { - if( !KeyValues::key_values_ptr ) { - static auto get_key_values = reinterpret_cast< void*( __cdecl* )( ) >( GetProcAddress( GetModuleHandleA( "vstdlib.dll" ), "KeyValuesSystem" ) ); - KeyValues::key_values_ptr = get_key_values( ); - } - - call_vfunc< void( __thiscall* )( void*, void* ) >( KeyValues::key_values_ptr, 2 )( KeyValues::key_values_ptr, mem ); -} diff --git a/tf2/KeyValues.h b/tf2/KeyValues.h deleted file mode 100644 index 1d8ed41..0000000 --- a/tf2/KeyValues.h +++ /dev/null @@ -1,46 +0,0 @@ -#pragma once -#include "util.hpp" - -class IKeyValuesSystem { -public: - void FreeKeyValuesMemory( void* memory ); - int GetSymbolForString( const char* string, bool create ); - const char* GetStringForSymbol( int symbol ); -}; - -class KeyValues -{ -public: - KeyValues( const char *setName ); - //~KeyValues( ); - - bool LoadFromBuffer( char const *resourceName, const char *pBuffer, void* pFileSystem = nullptr, const char *pPathID = nullptr ); - - const char* get_string( const char* name, const char* value ); - - int m_iKeyName; - - char *m_sValue; - wchar_t *m_wsValue; - - // we don't delete these - union { - int m_iValue; - float m_flValue; - void *m_pValue; - unsigned char m_Color[ 4 ]; - }; - - void* operator new( size_t alloc ); - void operator delete( void* mem ); - - char m_iDataType; - char m_bHasEscapeSequences; - char m_bEvaluateConditionals; - static void* key_values_ptr; - KeyValues* FindKey( const char* key_name ); - - KeyValues *m_pPeer; // pointer to next key in list - KeyValues *m_pSub; // pointer to Start of a new sub key list - KeyValues *m_pChain;// Search here if it's not in our list -}; \ No newline at end of file diff --git a/tf2/README.md b/tf2/README.md deleted file mode 100644 index fa73fb9..0000000 --- a/tf2/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# tf2 - -jukka = bester diff --git a/tf2/ScreenSpaceEffects.h b/tf2/ScreenSpaceEffects.h deleted file mode 100644 index ec0b6e8..0000000 --- a/tf2/ScreenSpaceEffects.h +++ /dev/null @@ -1,50 +0,0 @@ -#pragma once -class KeyValues; - -class IScreenSpaceEffect { -public: - - virtual void Init( ) = 0; - virtual void Shutdown( ) = 0; - - virtual void SetParameters( KeyValues *params ) = 0; - - virtual void Render( int x, int y, int w, int h ) = 0; - - virtual void Enable( bool bEnable ) = 0; - virtual bool IsEnabled( ) = 0; -}; - -class IScreenSpaceEffectManager { -public: - - virtual void InitScreenSpaceEffects( ) = 0; - virtual void ShutdownScreenSpaceEffects( ) = 0; - - virtual IScreenSpaceEffect *GetScreenSpaceEffect( const char *pEffectName ) = 0; - - virtual void SetScreenSpaceEffectParams( const char *pEffectName, KeyValues *params ) = 0; - virtual void SetScreenSpaceEffectParams( IScreenSpaceEffect *pEffect, KeyValues *params ) = 0; - - virtual void EnableScreenSpaceEffect( const char *pEffectName ) = 0; - virtual void EnableScreenSpaceEffect( IScreenSpaceEffect *pEffect ) = 0; - - virtual void DisableScreenSpaceEffect( const char *pEffectName ) = 0; - virtual void DisableScreenSpaceEffect( IScreenSpaceEffect *pEffect ) = 0; - - virtual void DisableAllScreenSpaceEffects( ) = 0; - - virtual void RenderEffects( int x, int y, int w, int h ) = 0; -}; - -class CScreenSpaceEffectRegistration { -public: - CScreenSpaceEffectRegistration( const char *pName, IScreenSpaceEffect *pEffect ); - - const char *m_pEffectName; - IScreenSpaceEffect *m_pEffect; - - CScreenSpaceEffectRegistration *m_pNext; - - static CScreenSpaceEffectRegistration *s_pHead; -}; \ No newline at end of file diff --git a/tf2/Source.cpp b/tf2/Source.cpp deleted file mode 100644 index 3bd44af..0000000 --- a/tf2/Source.cpp +++ /dev/null @@ -1,42 +0,0 @@ -#pragma warning (disable:4018) - -#include -#include - -#include "console.hpp" -#include "interfaces.h" -#include "search.h" -#include "hooks.h" -#include -#include "base_cheat.h" - -HMODULE g_dll; - -void main_thread( HMODULE module ) { - - cl.initialize( ); - - - - while ( !( GetAsyncKeyState( VK_END ) & 0x8000 ) ) { - std::this_thread::sleep_for( std::chrono::milliseconds( 100 ) ); - } - -} - -bool __stdcall DllMain( - _In_ HINSTANCE hinstDLL, - _In_ DWORD fdwReason, - _In_ LPVOID lpvReserved ) { - if ( fdwReason == DLL_PROCESS_ATTACH /*&& ( uintptr_t )( lpvReserved ) == 20*/ ) { //nigga suck who dick? - DisableThreadLibraryCalls( hinstDLL ); - g_dll = hinstDLL; - // coca cola coca cola yayo bought me everything - - //no i did not dummy - - CreateThread( nullptr, 0, reinterpret_cast< LPTHREAD_START_ROUTINE >( main_thread ), hinstDLL, 0, nullptr ); - } - - return true; -} \ No newline at end of file diff --git a/tf2/UtlMem.h b/tf2/UtlMem.h deleted file mode 100644 index df4574f..0000000 --- a/tf2/UtlMem.h +++ /dev/null @@ -1,320 +0,0 @@ -#pragma once - -typedef intptr_t intp; -inline int UtlMemory_CalcNewAllocationCount( int nAllocationCount, int nGrowSize, int nNewSize, int nBytesItem ) -{ - if( nGrowSize ) - nAllocationCount = ( ( 1 + ( ( nNewSize - 1 ) / nGrowSize ) ) * nGrowSize ); - else - { - if( !nAllocationCount ) - nAllocationCount = ( 31 + nBytesItem ) / nBytesItem; - - while( nAllocationCount < nNewSize ) - nAllocationCount *= 2; - } - - return nAllocationCount; -} - -template< class T, class I = int > -class CUtlMemory -{ -public: - T & operator[]( I i ) - { - return m_pMemory[ i ]; - } - - explicit operator bool( ) const noexcept { - return !!( m_pMemory ); - } - - T *Base( ) - { - return m_pMemory; - } - - int NumAllocated( ) const - { - return m_nAllocationCount; - } - - void Grow( int num = 1 ) - { - if( IsExternallyAllocated( ) ) - return; - - int nAllocationRequested = m_nAllocationCount + num; - int nNewAllocationCount = UtlMemory_CalcNewAllocationCount( m_nAllocationCount, m_nGrowSize, nAllocationRequested, sizeof( T ) ); - - if( ( int )( I )nNewAllocationCount < nAllocationRequested ) - { - if( ( int )( I )nNewAllocationCount == 0 && ( int )( I )( nNewAllocationCount - 1 ) >= nAllocationRequested ) - --nNewAllocationCount; - else - { - if( ( int )( I )nAllocationRequested != nAllocationRequested ) - return; - - while( ( int )( I )nNewAllocationCount < nAllocationRequested ) - nNewAllocationCount = ( nNewAllocationCount + nAllocationRequested ) / 2; - } - } - - m_nAllocationCount = nNewAllocationCount; - - if( m_pMemory ) - m_pMemory = ( T * )realloc( m_pMemory, m_nAllocationCount * sizeof( T ) ); - else - m_pMemory = ( T * )malloc( m_nAllocationCount * sizeof( T ) ); - } - - bool IsExternallyAllocated( ) const - { - return m_nGrowSize < 0; - } - -protected: - T * m_pMemory; - int m_nAllocationCount; - int m_nGrowSize; -}; - -template -inline T *Construct( T *pMemory ) -{ - return ::new( pMemory ) T; -} - -template -inline T *CopyConstruct( T *pMemory, T const& src ) -{ - return( new( pMemory ) T( src ) ); -} - -template -inline void Destruct( T *pMemory ) -{ - pMemory->~T( ); -} - -template< class T > -class CUtlFixedMemory -{ -public: - // constructor, destructor - CUtlFixedMemory( int nGrowSize = 0, int nInitSize = 0 ); - ~CUtlFixedMemory( ); - - // Set the size by which the memory grows - void Init( int nGrowSize = 0, int nInitSize = 0 ); - - // here to match CUtlMemory, but only used by ResetDbgInfo, so it can just return NULL - T* Base( ) { return NULL; } - const T* Base( ) const { return NULL; } - -protected: - struct BlockHeader_t; - -public: - class Iterator_t - { - public: - Iterator_t( BlockHeader_t *p, int i ) : m_pBlockHeader( p ), m_nIndex( i ) {} - BlockHeader_t *m_pBlockHeader; - intp m_nIndex; - - bool operator==( const Iterator_t it ) const { return m_pBlockHeader == it.m_pBlockHeader && m_nIndex == it.m_nIndex; } - bool operator!=( const Iterator_t it ) const { return m_pBlockHeader != it.m_pBlockHeader || m_nIndex != it.m_nIndex; } - }; - Iterator_t First( ) const { return m_pBlocks ? Iterator_t( m_pBlocks, 0 ) : InvalidIterator( ); } - Iterator_t Next( const Iterator_t &it ) const - { - Assert( IsValidIterator( it ) ); - if( !IsValidIterator( it ) ) - return InvalidIterator( ); - - BlockHeader_t *pHeader = it.m_pBlockHeader; - if( it.m_nIndex + 1 < pHeader->m_nBlockSize ) - return Iterator_t( pHeader, it.m_nIndex + 1 ); - - return pHeader->m_pNext ? Iterator_t( pHeader->m_pNext, 0 ) : InvalidIterator( ); - } - intp GetIndex( const Iterator_t &it ) const - { - Assert( IsValidIterator( it ) ); - if( !IsValidIterator( it ) ) - return InvalidIndex( ); - - return ( intp )( HeaderToBlock( it.m_pBlockHeader ) + it.m_nIndex ); - } - bool IsIdxAfter( intp i, const Iterator_t &it ) const - { - Assert( IsValidIterator( it ) ); - if( !IsValidIterator( it ) ) - return false; - - if( IsInBlock( i, it.m_pBlockHeader ) ) - return i > GetIndex( it ); - - for( BlockHeader_t *pbh = it.m_pBlockHeader->m_pNext; pbh; pbh = pbh->m_pNext ) - { - if( IsInBlock( i, pbh ) ) - return true; - } - return false; - } - bool IsValidIterator( const Iterator_t &it ) const { return it.m_pBlockHeader && it.m_nIndex >= 0 && it.m_nIndex < it.m_pBlockHeader->m_nBlockSize; } - Iterator_t InvalidIterator( ) const { return Iterator_t( NULL, INVALID_INDEX ); } - - // element access - T& operator[]( intp i ); - const T& operator[]( intp i ) const; - T& Element( intp i ); - const T& Element( intp i ) const; - - // Can we use this index? - bool IsIdxValid( intp i ) const; - - // Specify the invalid ('null') index that we'll only return on failure - static const intp INVALID_INDEX = 0; // For use with COMPILE_TIME_ASSERT - static intp InvalidIndex( ) { return INVALID_INDEX; } - - // Size - int NumAllocated( ) const; - int Count( ) const { return NumAllocated( ); } - - // Grows memory by max(num,growsize), and returns the allocation index/ptr - void Grow( int num = 1 ); - - // Makes sure we've got at least this much memory - void EnsureCapacity( int num ); - - // Memory deallocation - void Purge( ); - -protected: - // Fast swap - WARNING: Swap invalidates all ptr-based indices!!! - void Swap( CUtlFixedMemory< T > &mem ); - - bool IsInBlock( intp i, BlockHeader_t *pBlockHeader ) const - { - T *p = ( T* )i; - const T *p0 = HeaderToBlock( pBlockHeader ); - return p >= p0 && p < p0 + pBlockHeader->m_nBlockSize; - } - - struct BlockHeader_t - { - BlockHeader_t *m_pNext; - intp m_nBlockSize; - }; - - const T *HeaderToBlock( const BlockHeader_t *pHeader ) const { return ( T* )( pHeader + 1 ); } - const BlockHeader_t *BlockToHeader( const T *pBlock ) const { return ( BlockHeader_t* )( pBlock )-1; } - - BlockHeader_t* m_pBlocks; - int m_nAllocationCount; - int m_nGrowSize; -}; - -template< class T, class A = CUtlMemory > -class CUtlVector -{ - typedef A CAllocator; - - typedef T *iterator; - typedef const T *const_iterator; -public: - T & operator[]( int i ) - { - return m_Memory[ i ]; - } - - explicit operator bool( ) const noexcept { - return !!( m_Memory ); - } - - T& Element( int i ) - { - return m_Memory[ i ]; - } - - T* Base( ) - { - return m_Memory.Base( ); - } - - int Count( ) const - { - return m_Size; - } - - void RemoveAll( ) - { - for( int i = m_Size; --i >= 0; ) - Destruct( &Element( i ) ); - - m_Size = 0; - } - - int AddToTail( const T& src ) - { - return InsertBefore( m_Size, src ); - } - - int AddToTail( ) - { - return InsertBefore( m_Size ); - } - - int InsertBefore( int elem, const T& src ) - { - Growvec3_t( ); - ShiftElementsRight( elem ); - CopyConstruct( &Element( elem ), src ); - return elem; - } - - int InsertBefore( int elem ) - { - Growvec3_t( ); - ShiftElementsRight( elem ); - Construct( &Element( elem ) ); - - return elem; - } - - iterator begin( ) { return Base( ); } - const_iterator begin( ) const { return Base( ); } - iterator end( ) { return Base( ) + Count( ); } - const_iterator end( ) const { return Base( ) + Count( ); } - -protected: - void Growvec3_t( int num = 1 ) - { - if( m_Size + num > m_Memory.NumAllocated( ) ) - m_Memory.Grow( m_Size + num - m_Memory.NumAllocated( ) ); - - m_Size += num; - ResetDbgInfo( ); - } - - void ShiftElementsRight( int elem, int num = 1 ) - { - int numToMove = m_Size - elem - num; - if( ( numToMove > 0 ) && ( num > 0 ) ) - memmove( &Element( elem + num ), &Element( elem ), numToMove * sizeof( T ) ); - } - - CAllocator m_Memory; - int m_Size; - - T *m_pElements; - - inline void ResetDbgInfo( ) - { - m_pElements = Base( ); - } -}; \ No newline at end of file diff --git a/tf2/VFunc.h b/tf2/VFunc.h deleted file mode 100644 index f5e09af..0000000 --- a/tf2/VFunc.h +++ /dev/null @@ -1,12 +0,0 @@ -#pragma once -#include -#include - -template < typename Fn > __forceinline Fn call_vfunc( void* classbase, int index ) { - if ( !classbase ) return Fn{ }; - return ( Fn )( ( uintptr_t* )*( uintptr_t** )classbase )[ index ]; -} - -template < typename T > __forceinline T get_ebp( ) { - __asm mov eax, ebp -} \ No newline at end of file diff --git a/tf2/aim.cpp b/tf2/aim.cpp deleted file mode 100644 index 15c5e16..0000000 --- a/tf2/aim.cpp +++ /dev/null @@ -1,321 +0,0 @@ -#include "interfaces.h" -#include "input_system.hpp" -#include "ctx.hpp" -#include "aim.h" -#include "settings.h" -#include "math.h" - -namespace features -{ - int c_legitbot::get_aim_target( float fov ) { - float best_fov = fov ? fov : g_settings.legit.active->m_fov; - int target{ -1 }; - vec3_t aim_angle{ }; - vec3_t cur_angle{ }; - vec3_t local_pos{ }; - vec3_t aim_pos{ }; - - cl.m_engine( )->GetViewAngles( cur_angle ); - local_pos = g_ctx.m_local->get_eye_pos( ); - - for( int i{ 1 }; i <= cl.m_globals->maxclients; ++i ) { - auto entity = cl.m_entlist( )->get_client_entity< c_base_player >( i ); - - if( !entity ) continue; - if( entity == g_ctx.m_local ) continue; - if( !entity->is_valid( ) ) continue; - int team = entity->get_team( ); - if( team == g_ctx.m_local->get_team( ) - && !g_settings.legit.friendlies( ) ) { - continue; - } - - bool visible = entity->is_visible( g_settings.legit.active->m_bone ); - if( !visible && g_settings.legit.backtracking_target( ) ) { - auto record = m_lagcomp.find_best_record( i ); - if( record ) { - visible = util::trace_ray( local_pos, record->m_position, - g_ctx.m_local->ce( ), entity->ce( ) ); - } - } - - if( !visible ) { - continue; - } - - aim_angle = math::vector_angles( local_pos, entity->get_hitbox_position( g_settings.legit.active->m_bone ) ); - aim_angle.clamp( ); - - float fov = ( cur_angle - aim_angle ).clamp( ).length2d( ); - if( fov < best_fov ) { - best_fov = fov; - target = i; - } - } - - return target; - } - - void c_legitbot::assist( c_base_player* target, float* x, float* y ) { - vec3_t aim_ang; - vec3_t move_ang; - vec3_t view_ang; - vec3_t enemy_pos; - vec3_t local_pos; - vec3_t view_delta; - vec3_t delta; - vec2_t pixels; - - local_pos = g_ctx.m_local->get_eye_pos( ); - enemy_pos = target->get_hitbox_position( g_settings.legit.active->m_bone ); - - aim_ang = math::vector_angles( local_pos, enemy_pos ); - - move_ang = pixels_to_angle( vec2_t( *x, *y ) ); - cl.m_engine( )->GetViewAngles( view_ang ); - - view_delta = ( aim_ang - view_ang ).clamp( ); - - move_ang *= g_settings.legit.active->m_assist_strength; - float delta_y = std::abs( move_ang.y ); - float delta_x = std::abs( move_ang.x ); - - delta.x = std::clamp( view_delta.x, -delta_x, delta_x ); - delta.y = std::clamp( view_delta.y, -delta_y, delta_y ); - - pixels = angle_to_pixels( delta ); - *x += pixels.x; *y += pixels.y; - } - - - - void c_legitbot::triggerbot( user_cmd_t* cmd ) { - static float time_at = 0.f; - - if( !g_settings.legit.triggerbot( ) ) - return; - - if( !g_input.is_key_pressed( ( VirtualKeys_t )g_settings.legit.trigger_key( ) ) && !time_at ) // sometimes people will let go of their triggerbot key too quickly and will cause them to not shoot. - return; - - vec3_t viewangles{ }; - vec3_t forward{ }; - cl.m_engine( )->GetViewAngles( viewangles ); - - auto wep = g_ctx.m_local->get_active_weapon( ); - if( !wep ) return; - if( wep->is_non_aim( ) ) return; - - - const float length = wep->get_distance( ); - const float current_time = TICKS_TO_TIME( cl.m_globals->tickcount ); - - if( time_at && abs( current_time - time_at ) > 0.3f ) { - time_at = 0.f; // delta too big - } - - if( length > 1.0f ) { - if( !time_at ) { - - forward = math::angle_vectors( viewangles ); - forward *= length; - - vec3_t src = g_ctx.m_local->get_eye_pos( ); - vec3_t dst = src + forward; - - CTraceFilter filter{ }; - CGameTrace tr{ }; - Ray_t ray{ }; - - filter.pSkip = g_ctx.m_local; - ray.Init( src, dst ); - - cl.m_trace( )->trace_ray( ray, MASK_SHOT, &filter, &tr ); - - if( tr.m_pEnt ) { - auto ent = tr.m_pEnt->as< c_base_player >( ); - if( ent->is_valid( ) ) { - if( ent->get_team( ) != g_ctx.m_local->get_team( ) || g_settings.legit.friendlies ) { - time_at = current_time; - } - } - } - } - - if( time_at ) { - if( ( current_time - time_at ) >= g_settings.legit.trigger_delay( ) ) { - cmd->m_buttons |= IN_ATTACK; - time_at = 0.f; - } - } - } - } - - void c_legitbot::sample_angle_data( const vec3_t& cur_angles ) { - auto time = cl.m_globals->curtime; - - if( !m_aiming ) { - m_angle_samples.push_front( { cur_angles, time } ); - } - - while( m_angle_samples.size( ) > g_settings.legit.sample_size( ) ) { - m_angle_samples.pop_back( ); - } - } - - float c_legitbot::get_avg_delta( ) { - if( m_angle_samples.empty( ) ) - return 0.f; - - float avg_delta{ }; - - for( auto& it : m_angle_samples ) { - static vec3_t last_angle = it.m_viewangles; - - //doing this implements nonsticky aswell - //once you already are at the target - //after lets say a flick - //it will reduce the aim speed - //making it not "stick" to the bone - //as we dont store records when aiming - float time_delta = cl.m_globals->curtime - it.m_time; - float delta_diff = m_deltatime / ( time_delta * 2.f ); - - vec3_t angle_delta = ( last_angle - it.m_viewangles ).clamp( ); - float delta_length = angle_delta.length( ) * delta_diff; - - avg_delta += delta_length; - last_angle = it.m_viewangles; - } - - //scale the delta down - return avg_delta / float( g_settings.legit.sample_size( ) ); - } - - vec2_t c_legitbot::angle_to_pixels( const vec3_t& angle ) { - static auto m_yaw = cl.m_cvar( )->FindVar( xors( "m_yaw" ) ); - static auto m_pitch = cl.m_cvar( )->FindVar( xors( "m_pitch" ) ); - - float x = angle.x / m_pitch->get_float( ); - float y = angle.y / m_yaw->get_float( ); - - return vec2_t( -y, x ); - } - - vec3_t c_legitbot::pixels_to_angle( const vec2_t& pixel ) { - static auto m_yaw = cl.m_cvar( )->FindVar( xors( "m_yaw" ) ); - static auto m_pitch = cl.m_cvar( )->FindVar( xors( "m_pitch" ) ); - - float x = pixel.x * m_pitch->get_float( ); - float y = pixel.y * m_yaw->get_float( ); - - return vec3_t( -y, x, 0.f ).clamp( ); - } - - bool c_legitbot::update_settings( ) { - if( !g_ctx.run_frame( ) ) return false; - - auto weapon = g_ctx.m_local->get_active_weapon( ); - if( !weapon ) return false; - - if( weapon->is_non_aim( ) ) { - return false; - } - - if( weapon->is_primary( ) ) { - g_settings.legit.active = &g_settings.legit.primary; - } - else if( weapon->is_secondary( ) ) { - g_settings.legit.active = &g_settings.legit.secondary; - } - else if( weapon->is_third( ) ) { - g_settings.legit.active = &g_settings.legit.melee; - } - - - return true; - } - - void c_legitbot::aim_at_target( c_base_player* target, float* x, float* y ) { - vec3_t aim_ang; - vec3_t cur_ang; - vec3_t delta; - vec2_t pixels; - vec2_t mouse; - - cl.m_engine( )->GetViewAngles( cur_ang ); - - if( g_settings.legit.backtracking( ) && m_lagcomp.find_best_record( target->ce( )->index( ) ) ) { - aim_ang = math::vector_angles( g_ctx.m_local->get_eye_pos( ), - m_lagcomp.get_backtracked_position( target->ce( )->index( ) ) ).clamp( ); - } - else { - aim_ang = math::vector_angles( g_ctx.m_local->get_eye_pos( ), - target->get_hitbox_position( g_settings.legit.active->m_bone ) ).clamp( ); - } - - - delta = ( aim_ang - cur_ang ).clamp( ); - float delta_length = delta.length( ); - - if( delta_length ) { - float final_time = delta_length / ( g_settings.legit.active->m_speed( ) / 100.f ); - m_curtime += m_deltatime; - - if( m_curtime > final_time ) { - m_curtime = final_time; - } - - float aim_progress = m_curtime / final_time; - delta *= aim_progress; - aim_ang = delta; - - pixels = angle_to_pixels( delta ); - *x += pixels.x; - *y += pixels.y; - } - } - - void c_legitbot::aimbot( float* x, float* y ) { - if( !g_settings.legit.enabled( ) ) return; - if( !update_settings( ) ) return; - - m_aiming = false; - static float old_time = cl.m_globals->curtime; - float time = cl.m_globals->curtime; - - m_deltatime = time - old_time; - if( g_settings.legit.dynamic_smoothing( ) ) { - float avg_delta = get_avg_delta( ) * g_settings.legit.smooth_factor( ); - if( avg_delta > m_deltatime ) { - m_deltatime = avg_delta; - } - } - - old_time = time; - - bool in_attack = false; - if( g_settings.legit.activation_type == 0 ) - in_attack = true; - if( g_settings.legit.activation_type == 1 - && g_input.is_key_pressed( ( VirtualKeys_t )g_settings.legit.key( ) ) ) { - in_attack = true; - } - - int target_index = get_aim_target( ); - auto target = cl.m_entlist( )->get_client_entity< c_base_player >( target_index ); - - if( target_index != -1 ) { - if( in_attack ) { - m_aiming = true; - aim_at_target( target, x, y ); - } - if( g_settings.legit.assist ) { - assist( target, x, y ); - } - } - else { - m_curtime = 0; - } - } -} \ No newline at end of file diff --git a/tf2/aim.h b/tf2/aim.h deleted file mode 100644 index 82e4943..0000000 --- a/tf2/aim.h +++ /dev/null @@ -1,75 +0,0 @@ -#pragma once -#include -#include - -#include "sdk.h" - -namespace features -{ - class c_legitbot { - public: - void operator()( float* x, float* y ) { - aimbot( x, y ); - } - - //call once per tick - void sample_angle_data( const vec3_t& angle ); - void triggerbot( user_cmd_t* cmd ); - - private: - struct aim_record_t { - vec3_t m_viewangles; - float m_time; - }; - - struct lag_record_t { - int m_tickcount{ }; - vec3_t m_position{ }; - matrix3x4 m_matrix[ 128 ]{ }; - - bool is_valid( ); - }; - class c_lagcomp { - public: - friend class c_legitbot; - using lag_deque_t = std::deque< lag_record_t >; - - lag_record_t* find_best_record( int ent_index ); - vec3_t get_backtracked_position( int ent_index ); - auto& get_records( int ent_index ) { - return m_data[ ent_index ]; - } - - void store( ); - void operator()( user_cmd_t* cmd ); - - private: - bool backtrack_entity( int ent_index ); - bool can_backtrack_entity( int ent_index ); - void store_player( int ent_index ); - - lag_deque_t m_data[ 65 ]; - user_cmd_t* m_cmd; - }; - - vec2_t angle_to_pixels( const vec3_t& angle ); - vec3_t pixels_to_angle( const vec2_t& pixel ); - void aimbot( float* x, float* y ); - void assist( c_base_player* player, float* x, float* y ); - void aim_at_target( c_base_player*, float*, float* ); - - bool update_settings( ); - float get_avg_delta( ); - int get_aim_target( float fov = 0.f ); - - private: - float m_deltatime{ }; - float m_curtime{ }; - bool m_aiming{ }; - - std::deque< aim_record_t > m_angle_samples; - - public: - c_lagcomp m_lagcomp; - }; -} \ No newline at end of file diff --git a/tf2/aim_lagcomp.cpp b/tf2/aim_lagcomp.cpp deleted file mode 100644 index e3b5486..0000000 --- a/tf2/aim_lagcomp.cpp +++ /dev/null @@ -1,150 +0,0 @@ -#include "aim.h" -#include "interfaces.h" -#include "ctx.hpp" -#include "settings.h" -#include "math.h" -#include "base_cheat.h" -#include "input_system.hpp" -#include "d3d.hpp" - -namespace features -{ - bool c_legitbot::lag_record_t::is_valid( ) { - return util::is_tick_valid( m_tickcount ); - } - - void c_legitbot::c_lagcomp::store_player( int ent_index ) { - auto ent = cl.m_entlist( )->get_client_entity< c_base_player >( ent_index ); - vec3_t pos = ent->get_hitbox_position( 0 ); - int tickcount = TIME_TO_TICKS( ent->m_flSimulationTime( ) ); - - lag_record_t new_record; - if( ent->ce( )->setup_bones( new_record.m_matrix, 128, 0x100, 0.f ) ) { - new_record.m_position = pos; - new_record.m_tickcount = tickcount; - - m_data[ ent_index ].push_front( new_record ); - } - - while( !m_data[ ent_index ].empty( ) && - ( m_data[ ent_index ].size( ) > TIME_TO_TICKS( 1.0f ) ) ) { - m_data[ ent_index ].pop_back( ); - } - } - - bool c_legitbot::c_lagcomp::can_backtrack_entity( int ent_index ) { - if( m_data[ ent_index ].empty( ) ) { - return false; - } - - for( auto& it : m_data[ ent_index ] ) { - if( it.is_valid( ) ) return true; - } - - return false; - } - - c_legitbot::lag_record_t* c_legitbot::c_lagcomp::find_best_record( int ent_index ) { - c_legitbot::lag_record_t* best_record = nullptr; - float best_fov{ g_settings.legit.backtracking_fov( ) }; - vec3_t cur_angle; - vec3_t aim_angle; - vec3_t aim_pos; - vec3_t cur_pos; - int cur_tick; - - if( m_data[ ent_index ].empty( ) ) { - return nullptr; - } - - cl.m_engine( )->GetViewAngles( cur_angle ); - cur_pos = g_ctx.m_local->get_eye_pos( ); - cur_tick = cl.m_globals->tickcount; - - for( auto& it : m_data[ ent_index ] ) { - int delta = std::abs( cur_tick - it.m_tickcount ); - - auto nci = cl.m_engine( )->GetNetChannelInfo( ); - if( nci ) { - float max_latency = g_settings.legit.backtracking_time + nci->GetLatency( 0 ); - if( delta > TIME_TO_TICKS( max_latency ) ) - continue; - } - - - if( !it.is_valid( ) ) - continue; - - aim_pos = it.m_position; - aim_angle = math::vector_angles( cur_pos, aim_pos ).clamp( ); - - float fov = ( cur_angle - aim_angle ).clamp( ).length2d( ); - if( fov < best_fov ) { - best_fov = fov; - best_record = ⁢ - } - } - - return best_record; - } - - vec3_t c_legitbot::c_lagcomp::get_backtracked_position( int ent_index ) { - if( !m_data[ ent_index ].size( ) ) return vec3_t( ); - auto lag_record = find_best_record( ent_index ); - - vec3_t last_position{ }; - for( auto& it : util::reverse_iterator( m_data[ ent_index ] ) ) { - if( it.is_valid( ) ) last_position = it.m_position; break; - } - - return lag_record ? lag_record->m_position : last_position; - } - - void c_legitbot::c_lagcomp::store( ) { - for( int i = 1; i < 65; ++i ) { - auto ent = cl.m_entlist( )->get_client_entity< c_base_player >( i ); - - if( ent && ent->is_valid( ) && ent != g_ctx.m_local ) { - store_player( i ); - } - else { - m_data[ i ].clear( ); - } - } - } - - bool c_legitbot::c_lagcomp::backtrack_entity( int ent_index ) { - if( !m_cmd ) return false; - - if( !can_backtrack_entity( ent_index ) ) return false; - - auto best_record = find_best_record( ent_index ); - - if( best_record ) { - m_cmd->m_tick_count = best_record->m_tickcount; - return true; - } - - return false; - } - - void c_legitbot::c_lagcomp::operator()( user_cmd_t* cmd ) { - if( !g_settings.legit.enabled( ) || !g_settings.legit.backtracking( ) ) - return; - - m_cmd = cmd; - store( ); - - auto target = g_cheat.aim.get_aim_target( g_settings.legit.backtracking_fov( ) ); - bool active = false; - - if( g_settings.legit.activation_type( ) == 0 ) - active = true; - if( g_input.is_key_pressed( ( VirtualKeys_t )g_settings.legit.key( ) ) ) - active = true; - - if( active && target != -1 ) { - backtrack_entity( target ); - } - } -} \ No newline at end of file diff --git a/tf2/base_cheat.h b/tf2/base_cheat.h deleted file mode 100644 index 832386c..0000000 --- a/tf2/base_cheat.h +++ /dev/null @@ -1,22 +0,0 @@ -#pragma once -#include "aim.h" -#include "movement.h" -#include "prediction.h" -#include "visuals.hpp" -#include "chams.h" -#include "identity.h" -#include "extra.h" -namespace tf2 { - class c_base_cheat { - public: - features::c_legitbot aim; - features::c_movement movement; - features::c_prediction prediction; - features::c_visuals visuals; - features::c_chams chams; - features::c_identity identity; - features::c_extra extra; - }; -} - -static tf2::c_base_cheat g_cheat; \ No newline at end of file diff --git a/tf2/chams.cpp b/tf2/chams.cpp deleted file mode 100644 index fc5c060..0000000 --- a/tf2/chams.cpp +++ /dev/null @@ -1,321 +0,0 @@ -#include "chams.h" -#include "interfaces.h" -#include "d3d.hpp" -#include "ctx.hpp" -#include "hooks.h" -#include "settings.h" - -static auto chams_mat = xors_raw( ( - R"("VertexLitGeneric" -{ - "$basetexture" "vgui/white" - "$model" "1" - "$envmap" "env_cubemap" - "$envmaptint" "[.3 .3 .3]" - "$envmapcontrast" ".4" - "$envmapsaturation" "1.0" - "$flat" "0" - "$nocull" "1" - "$halflambert" "1" - "$nofog" "1" - "$ignorez" "0" - "$znearer" "0" - "$wireframe" "0" - "$phong" "1" - "$phongexponent" "255.0" - "$normalmapalphaenvmask" "1" - "$phongboost" "6.0" - "$phongfresnelranges" "[0 0.5 1]" - "$BasemapAlphaPhongMask" "1" -})" -) ); - -static auto chams_mat_shine = xors_raw( ( - R"("VertexLitGeneric" -{ - "$basetexture" "vgui/white" - "$envmap" "env_cubemap" - "$envmaptint" "[.3 .3 .3]" - "$reflectivity" "[1.0 1.0 1.0]" - "$envmapcontrast" ".4" - "$envmapsaturation" "1.0" - "$model" "1" - "$flat" "0" - "$nocull" "1" - "$selfillum" "1" - "$halflambert" "1" - "$nofog" "1" - "$ignorez" "0" - "$znearer" "0" - "$wireframe" "0" -})" -) ); - -static auto chams_mat_flat = xors_raw( ( - R"("UnlitGeneric" -{ - "$basetexture" "vgui/white" - "$model" "1" - "$flat" "1" - "$nocull" "1" - "$selfillum" "1" - "$halflambert" "1" - "$nofog" "1" - "$ignorez" "0" - "$znearer" "0" - "$wireframe" "0" -})" -) ); - -namespace features -{ - void c_materials::make_cham_buffer( char* buf, int len, int type ) { - switch( type ) { - case 1: - sprintf_s( buf, len - 1, chams_mat_flat.decrypt( ) ); - break; - case 2: - sprintf_s( buf, len - 1, chams_mat_shine.decrypt( ) ); - break; - default: - sprintf_s( buf, len - 1, chams_mat.decrypt( ) ); - } - } - - void c_material::init( const char* name, const char* buf ) { - m_keyvalues = new KeyValues( name ); - m_keyvalues->LoadFromBuffer( name, buf ); - - // CreateMaterial already increments ref counter - m_mat = cl.m_mat_system( )->CreateMaterial( name, m_keyvalues ); - } - - void c_material::destroy( ) { - if( m_mat ) { - m_mat->DecrementReferenceCount( ); - m_mat = nullptr; - } - - if( m_keyvalues ) { - delete m_keyvalues; - m_keyvalues = nullptr; - } - } - - void c_materials::force_material( IMaterial* mat, fclr_t clr ) { - if( !mat ) return; - - float col[ ] = { clr.r( ), clr.g( ), clr.b( ) }; - cl.m_render_view( )->SetBlend( clr.a( ) ); - cl.m_render_view( )->SetColorModulation( col ); - - cl.m_model_render( )->ForcedMaterialOverride( mat ); - } - - void c_materials::initialize_materials( ) { - char buffer[ 1024 ]; - - make_cham_buffer( buffer, sizeof( buffer ), 0 ); - m_chams.init( xors( "chamsmat" ), buffer ); - memset( buffer, 0, 1024 ); - - make_cham_buffer( buffer, sizeof( buffer ), 1 ); - m_chams_flat.init( xors( "chamsmat_flat" ), buffer ); - memset( buffer, 0, 1024 ); - m_initialized = true; - } - - void c_materials::destroy_materials( ) { - m_initialized = false; - - m_chams.destroy( ); - m_chams_flat.destroy( ); - } - - void c_materials::update_materials( ) { - if( !m_initialized ) return; - if( m_chams.m_mat->m_ref_count <= 0 ) return; - - static float last_reflectivity{ }; - static float last_shine{ }; - static KeyValues* reflectivity; - static KeyValues* shine; - - if( !reflectivity ) { - for( auto it = m_chams.m_keyvalues->m_pSub; !!it; it = it->m_pPeer ) { - if( it->m_iDataType != 1 ) continue; - if( strstr( it->m_sValue, xors( "[.3 .3 .3]" ) ) ) { - reflectivity = it; - } - } - } - - if( !shine ) { - for( auto it = m_chams.m_keyvalues->m_pSub; !!it; it = it->m_pPeer ) { - if( it->m_flValue == 6.0f ) - shine = it; - } - } - - if( reflectivity ) { - if( last_reflectivity != g_settings.visuals.chams.reflectivity( ) ) { - char buf[ 32 ]; - sprintf_s< 32 >( buf, xors( "[%1.1f %1.1f %1.1f]" ), - g_settings.visuals.chams.reflectivity( ), - g_settings.visuals.chams.reflectivity( ), - g_settings.visuals.chams.reflectivity( ) ); - - strcpy( reflectivity->m_sValue, buf ); - m_chams.m_mat->Refresh( ); - } - last_reflectivity = g_settings.visuals.chams.reflectivity( ); - } - - if( shine ) { - if( last_shine != g_settings.visuals.chams.shine( ) ) { - shine->m_flValue = g_settings.visuals.chams.shine( ) * 100.f; - m_chams.m_mat->Refresh( ); - } - last_shine = g_settings.visuals.chams.shine( ); - } - } - - void c_chams::d3d_render_chams( c_base_player* ent, int type, int v_index, uint32_t min_index, uint32_t num_vert, uint32_t start_index, uint32_t prim_count ) { - static auto d3d_draw = cl.m_d3d->get_old_function< decltype( &hooks::d3d::draw ) >( 82 ); - - int team = ent->m_iTeamNum( ); - clr_t visible_col = team == g_ctx.m_local->m_iTeamNum( ) ? g_settings.visuals.chams.color_visible_friendly( ) : g_settings.visuals.chams.color_visible_enemy( ); - clr_t hidden_col = team == g_ctx.m_local->m_iTeamNum( ) ? g_settings.visuals.chams.color_hidden_friendly( ) : g_settings.visuals.chams.color_hidden_enemy( ); - - if( team == g_ctx.m_local->m_iTeamNum( ) && !g_settings.visuals.chams.friendlies ) - return; - - fclr_t fcol_vis = visible_col.to_fclr( ); - float value_vis[ 4 ] = { fcol_vis.r( ), fcol_vis.g( ), fcol_vis.b( ), fcol_vis.a( ) }; - - fclr_t fcol_hid = hidden_col.to_fclr( ); - float value_hid[ 4 ] = { fcol_hid.r( ), fcol_hid.g( ), fcol_hid.b( ), fcol_hid.a( ) }; - - float def[ 4 ] = { 1.f, 1.f, 1.f, 1.f }; - - IDirect3DBaseTexture9* prev_texture; - IDirect3DSurface9* prev_surface; - ulong_t z_enable; - - g_d3d.get_device( )->GetTexture( 0, &prev_texture ); - g_d3d.get_device( )->GetRenderTarget( 0, &prev_surface ); - g_d3d.get_device( )->GetRenderState( D3DRS_ZENABLE, &z_enable ); - - auto hr = g_d3d.get_device( )->SetRenderTarget( 0, g_d3d.m_surface ); - - //printf( "hr: %08x\n", hr ); - - if( g_settings.visuals.chams.ignore_z ) { - g_d3d.get_device( )->SetRenderState( D3DRS_ZENABLE, false ); - g_d3d.get_device( )->SetPixelShaderConstantF( 0, value_hid, 1 ); - g_d3d.get_device( )->SetPixelShaderConstantF( 1, value_hid, 1 ); - //g_d3d.get_device( )->SetTexture( 0, nullptr ); - d3d_draw( g_d3d.get_device( ), ( D3DPRIMITIVETYPE )type, v_index, min_index, num_vert, start_index, prim_count ); - } - - g_d3d.get_device( )->SetRenderState( D3DRS_ZENABLE, z_enable ); - g_d3d.get_device( )->SetPixelShaderConstantF( 0, value_hid, 1 ); - g_d3d.get_device( )->SetPixelShaderConstantF( 1, value_vis, 1 ); - //g_d3d.get_device( )->SetTexture( 0, nullptr ); - - d3d_draw( g_d3d.get_device( ), ( D3DPRIMITIVETYPE )type, v_index, min_index, num_vert, start_index, prim_count ); - - g_d3d.get_device( )->SetPixelShaderConstantF( 0, def, 1 ); - g_d3d.get_device( )->SetPixelShaderConstantF( 1, def, 1 ); - g_d3d.get_device( )->SetRenderTarget( 0, prev_surface ); - g_d3d.get_device( )->SetRenderState( D3DRS_ZENABLE, z_enable ); - - g_d3d.get_device( )->SetTexture( 0, prev_texture ); - - if( prev_texture ) - prev_texture->Release( ); - - if( prev_surface ) - prev_surface->Release( ); - } - - void c_chams::d3d_render_textures( ) { - if( !g_d3d.m_sil_txt ) - return; - - IDirect3DSurface9* backbuffer; - D3DSURFACE_DESC desc; - - g_d3d.get_device( )->GetRenderTarget( 0, &backbuffer ); - backbuffer->GetDesc( &desc ); - //backbuffer->Release( ); - - struct tex_vertex { - float x, y, z, r, h, w; - }; - - tex_vertex v[ ] = { - { 0.f, 0.f, 0.f, 1.0f, 0.f, 0.f }, - { ( float )desc.Width, 0.f, 0.f, 1.0f, 1.0f, 0.f }, - { 0.f, ( float )desc.Height, 0.f, 1.0f, 0.0f, 1.0f }, - { ( float )desc.Width, ( float )desc.Height, 0.f, 1.0f, 1.0f, 1.0f } - }; - - void* p; - - g_d3d.m_buffer->Lock( 0, 0, &p, 0 ); - memcpy( p, v, sizeof( v ) ); - g_d3d.m_buffer->Unlock( ); - - void* pixel_shader; - void* texture; - void* stream_src; - uint32_t stride; - uint32_t offset; - ulong_t fvf; - ulong_t dest_blend; - ulong_t alpha_blend; - - g_d3d.get_device( )->GetPixelShader( ( IDirect3DPixelShader9** )&pixel_shader ); - g_d3d.get_device( )->GetTexture( 0, ( IDirect3DBaseTexture9** )&texture ); - g_d3d.get_device( )->GetStreamSource( 0, ( IDirect3DVertexBuffer9** )&stream_src, &offset, &stride ); - g_d3d.get_device( )->GetFVF( &fvf ); - g_d3d.get_device( )->GetRenderState( D3DRS_DESTBLEND, &dest_blend ); - g_d3d.get_device( )->GetRenderState( D3DRS_ALPHABLENDENABLE, &alpha_blend ); - - g_d3d.get_device( )->SetRenderTarget( 0, g_d3d.m_surface ); - g_d3d.get_device( )->SetFVF( D3DFVF_XYZRHW | D3DFVF_TEX1 ); - g_d3d.get_device( )->SetPixelShader( nullptr ); - g_d3d.get_device( )->SetTexture( 0, g_d3d.m_sil_txt ); - g_d3d.get_device( )->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA ); - g_d3d.get_device( )->SetRenderState( D3DRS_ALPHABLENDENABLE, true ); - - g_d3d.get_device( )->SetStreamSource( 0, g_d3d.m_buffer, 0, sizeof( tex_vertex ) ); - g_d3d.get_device( )->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2 ); - - //D3DXSaveSurfaceToFileA( "backbuffer_1.bmp", D3DXIFF_BMP, backbuffer, 0, 0 ); - //D3DXSaveSurfaceToFileA( "backbuffer_2.bmp", D3DXIFF_BMP, g_d3d.m_surface, 0, 0 ); - - - D3DRECT bar_rect{ }; - D3DCOLOR col{ }; - - bar_rect.x1 = 0; - bar_rect.y1 = 0; - bar_rect.x2 = desc.Width; - bar_rect.y2 = desc.Height; - - g_d3d.get_device( )->SetPixelShader( ( IDirect3DPixelShader9* )pixel_shader ); - g_d3d.get_device( )->SetTexture( 0, ( IDirect3DTexture9* )texture ); - g_d3d.get_device( )->SetRenderState( D3DRS_DESTBLEND, dest_blend ); - g_d3d.get_device( )->SetRenderState( D3DRS_ALPHABLENDENABLE, alpha_blend ); - g_d3d.get_device( )->SetStreamSource( 0, ( IDirect3DVertexBuffer9* )stream_src, offset, stride ); - g_d3d.get_device( )->SetFVF( fvf ); - - //g_d3d.get_device( )->Clear( 1, &bar_rect, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, col, 0, 0 ); - g_d3d.get_device( )->SetRenderTarget( 0, backbuffer ); - backbuffer->Release( ); - - - } -} \ No newline at end of file diff --git a/tf2/chams.h b/tf2/chams.h deleted file mode 100644 index 4fdc74b..0000000 --- a/tf2/chams.h +++ /dev/null @@ -1,49 +0,0 @@ -#pragma once - -#include "sdk.h" - -namespace features -{ - enum ChamBufferType_t { - TYPE_NORMAL, - TYPE_FLAT, - TYPE_SHINE - }; - - class c_material { - public: - c_material( ) = default; - - void init( const char* mat, const char* buf ); - void destroy( ); - - operator IMaterial*( ) { - return m_mat; - } - - public: - IMaterial * m_mat; - KeyValues* m_keyvalues; - }; - - class c_materials { - public: - c_material m_chams{ }; - c_material m_chams_flat{ }; - - void make_cham_buffer( char* buf, int len, int type ); //type, 0 = normal, 1 = flat, 2 = shine - public: - void initialize_materials( ); - void destroy_materials( ); - void force_material( IMaterial* material, fclr_t color ); - void update_materials( ); - bool m_initialized{ }; - }; - - class c_chams { - public: - c_materials m_materials; - void d3d_render_textures( ); - void d3d_render_chams( c_base_player* ent, int type, int v_index, uint32_t min_index, uint32_t num_vert, uint32_t start_index, uint32_t prim_count ); - }; -} \ No newline at end of file diff --git a/tf2/checksum_crc.cpp b/tf2/checksum_crc.cpp deleted file mode 100644 index a2ac9e8..0000000 --- a/tf2/checksum_crc.cpp +++ /dev/null @@ -1,169 +0,0 @@ -//========= Copyright Valve Corporation, All rights reserved. ============// -// -// Purpose: Generic CRC functions -// -//=============================================================================// - - -#include "checksum_crc.h" - -#define CRC32_INIT_VALUE 0xFFFFFFFFUL -#define CRC32_XOR_VALUE 0xFFFFFFFFUL - -#define NUM_BYTES 256 -static const CRC32_t pulCRCTable[ NUM_BYTES ] = -{ - 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, - 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, - 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, - 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, - 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, - 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, - 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, - 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, - 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, - 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, - 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, - 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, - 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, - 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, - 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, - 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, - 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, - 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, - 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, - 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, - 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, - 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, - 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, - 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, - 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, - 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, - 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, - 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, - 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, - 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, - 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, - 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, - 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, - 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, - 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, - 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, - 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, - 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, - 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, - 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, - 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, - 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, - 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, - 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, - 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, - 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, - 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, - 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, - 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, - 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, - 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, - 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, - 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, - 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, - 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, - 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, - 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, - 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, - 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, - 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, - 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, - 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, - 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, - 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d -}; - -void CRC32_Init( CRC32_t *pulCRC ) { - *pulCRC = CRC32_INIT_VALUE; -} - -void CRC32_Final( CRC32_t *pulCRC ) { - *pulCRC ^= CRC32_XOR_VALUE; -} - -CRC32_t CRC32_GetTableEntry( unsigned int slot ) { - return pulCRCTable[ ( unsigned char )slot ]; -} - -void CRC32_ProcessBuffer( CRC32_t *pulCRC, const void *pBuffer, int nBuffer ) { - CRC32_t ulCrc = *pulCRC; - unsigned char *pb = ( unsigned char * )pBuffer; - unsigned int nFront; - int nMain; - -JustAfew: - - switch( nBuffer ) { - case 7: - ulCrc = pulCRCTable[ *pb++ ^ ( unsigned char )ulCrc ] ^ ( ulCrc >> 8 ); - - case 6: - ulCrc = pulCRCTable[ *pb++ ^ ( unsigned char )ulCrc ] ^ ( ulCrc >> 8 ); - - case 5: - ulCrc = pulCRCTable[ *pb++ ^ ( unsigned char )ulCrc ] ^ ( ulCrc >> 8 ); - - case 4: - ulCrc ^= *( CRC32_t * )pb; - ulCrc = pulCRCTable[ ( unsigned char )ulCrc ] ^ ( ulCrc >> 8 ); - ulCrc = pulCRCTable[ ( unsigned char )ulCrc ] ^ ( ulCrc >> 8 ); - ulCrc = pulCRCTable[ ( unsigned char )ulCrc ] ^ ( ulCrc >> 8 ); - ulCrc = pulCRCTable[ ( unsigned char )ulCrc ] ^ ( ulCrc >> 8 ); - *pulCRC = ulCrc; - return; - - case 3: - ulCrc = pulCRCTable[ *pb++ ^ ( unsigned char )ulCrc ] ^ ( ulCrc >> 8 ); - - case 2: - ulCrc = pulCRCTable[ *pb++ ^ ( unsigned char )ulCrc ] ^ ( ulCrc >> 8 ); - - case 1: - ulCrc = pulCRCTable[ *pb++ ^ ( unsigned char )ulCrc ] ^ ( ulCrc >> 8 ); - - case 0: - *pulCRC = ulCrc; - return; - } - - // We may need to do some alignment work up front, and at the end, so that - // the main loop is aligned and only has to worry about 8 byte at a time. - // - // The low-order two bits of pb and nBuffer in total control the - // upfront work. - // - nFront = ( ( unsigned int )pb ) & 3; - nBuffer -= nFront; - switch( nFront ) { - case 3: - ulCrc = pulCRCTable[ *pb++ ^ ( unsigned char )ulCrc ] ^ ( ulCrc >> 8 ); - case 2: - ulCrc = pulCRCTable[ *pb++ ^ ( unsigned char )ulCrc ] ^ ( ulCrc >> 8 ); - case 1: - ulCrc = pulCRCTable[ *pb++ ^ ( unsigned char )ulCrc ] ^ ( ulCrc >> 8 ); - } - - nMain = nBuffer >> 3; - while( nMain-- ) { - ulCrc ^= *( CRC32_t * )pb; - ulCrc = pulCRCTable[ ( unsigned char )ulCrc ] ^ ( ulCrc >> 8 ); - ulCrc = pulCRCTable[ ( unsigned char )ulCrc ] ^ ( ulCrc >> 8 ); - ulCrc = pulCRCTable[ ( unsigned char )ulCrc ] ^ ( ulCrc >> 8 ); - ulCrc = pulCRCTable[ ( unsigned char )ulCrc ] ^ ( ulCrc >> 8 ); - ulCrc ^= *( CRC32_t * )( pb + 4 ); - ulCrc = pulCRCTable[ ( unsigned char )ulCrc ] ^ ( ulCrc >> 8 ); - ulCrc = pulCRCTable[ ( unsigned char )ulCrc ] ^ ( ulCrc >> 8 ); - ulCrc = pulCRCTable[ ( unsigned char )ulCrc ] ^ ( ulCrc >> 8 ); - ulCrc = pulCRCTable[ ( unsigned char )ulCrc ] ^ ( ulCrc >> 8 ); - pb += 8; - } - - nBuffer &= 7; - goto JustAfew; -} diff --git a/tf2/checksum_crc.h b/tf2/checksum_crc.h deleted file mode 100644 index d95b4c5..0000000 --- a/tf2/checksum_crc.h +++ /dev/null @@ -1,30 +0,0 @@ -//========= Copyright Valve Corporation, All rights reserved. ============// -// -// Purpose: Generic CRC functions -// -// $NoKeywords: $ -//=============================================================================// -#ifndef CHECKSUM_CRC_H -#define CHECKSUM_CRC_H -#ifdef _WIN32 -#pragma once -#endif - -typedef unsigned int CRC32_t; - -void CRC32_Init( CRC32_t *pulCRC ); -void CRC32_ProcessBuffer( CRC32_t *pulCRC, const void *p, int len ); -void CRC32_Final( CRC32_t *pulCRC ); -CRC32_t CRC32_GetTableEntry( unsigned int slot ); - -inline CRC32_t CRC32_ProcessSingleBuffer( const void *p, int len ) { - CRC32_t crc; - - CRC32_Init( &crc ); - CRC32_ProcessBuffer( &crc, p, len ); - CRC32_Final( &crc ); - - return crc; -} - -#endif // CHECKSUM_CRC_H diff --git a/tf2/chl_createmove.cpp b/tf2/chl_createmove.cpp deleted file mode 100644 index 581ed25..0000000 --- a/tf2/chl_createmove.cpp +++ /dev/null @@ -1,93 +0,0 @@ -#include - -#include "hooks.h" -#include "mem.hpp" -#include "interfaces.h" -#include "ctx.hpp" -#include "input_system.hpp" -#include "math.h" -#include "settings.h" -#include "base_cheat.h" - -//YEA FUCK USING THIS EVEN THOUGH I HAVE IT RIGHT HERE - -//YEA VIVA LA REVOLUTION - -void __declspec( naked ) __stdcall hooks::hl_create_move_gate( int sequence_number, float input_sample_time, bool active ) { - __asm { - push ebp - mov ebp, esp - push ebx //push ebx (sendpacket) to the top of the stack - push esp //push the stack (with sendpacket on top) - push active - push input_sample_time - push sequence_number - call hl_create_move - pop ebx - pop ebp - ret 0xc - } -} - -void __fastcall hooks::hl_create_move( void* ecx_, void* edx_, int sequence_number, float input_sameple_frametime, bool active, byte& sendpacket ) { - static auto create_move_o = cl.m_chl->get_old_function< void( __fastcall* )( void*, void*, int, float, bool ) >( 21 ); - - user_cmd_t* ucmd = &cl.m_hl_input->m_pCommands[ sequence_number % MULTIPLAYER_BACKUP ]; - if( !ucmd ) - return; - - verified_cmd_t* verified_cmd = &cl.m_hl_input->m_pVerifiedCommands[ sequence_number % MULTIPLAYER_BACKUP ]; - if( !verified_cmd ) - return; - - // when switching to non automatic weapons, it will sometimes not shoot when aimbotting so we reset attack flag - bool is_switching_weapon = false; - if( cl.m_hl_input->m_hSelectedWeapon != -1 ) { - is_switching_weapon = true; - } - - cl.m_hl_input->CreateMove( sequence_number, input_sameple_frametime, active ); - //hl_create_move_o( ecx_, edx_, sequence_number, input_sample_time, active ); - - if( !ucmd->m_tick_count || !ucmd->m_cmd_nr ) - return; - - // FIX ME NAVE - // ok love - - byte* send_packet = &sendpacket; - - g_ctx.create_snapshot( ucmd ); - // soon g_cheat.m_identity( ); - - if( g_ctx.run_frame( ) && g_ctx.m_local->is_alive( ) ) { - static int last_frame = cl.m_globals->framecount; - if( last_frame != cl.m_globals->framecount ) - g_ctx.m_has_fired_this_frame = false; - - last_frame = cl.m_globals->framecount; - - g_cheat.aim.sample_angle_data( ucmd->m_viewangles ); - g_cheat.prediction.run_prediction( ucmd ); - g_cheat.movement.update( ucmd ); - - g_cheat.aim.m_lagcomp( ucmd ); - g_cheat.aim.triggerbot( ucmd ); - - } - - - if( is_switching_weapon ) { - ucmd->m_buttons &= ~IN_ATTACK; - } - - //m_bIsValveDS - if( *( bool* )( c_base_player::get_game_rules( ) + 0x75 ) ) - g_settings.menu.anti_untrusted = true; - - ucmd->clamp( g_settings.menu.anti_untrusted ); - - // crc stuff works, no double steps coming from this - verified_cmd->m_cmd = *ucmd; - verified_cmd->m_crc = ucmd->get_check_sum( ); -} \ No newline at end of file diff --git a/tf2/clientmode_createmove.cpp b/tf2/clientmode_createmove.cpp deleted file mode 100644 index f86471e..0000000 --- a/tf2/clientmode_createmove.cpp +++ /dev/null @@ -1,53 +0,0 @@ -#include "hooks.h" -#include "interfaces.h" -#include "search.h" -#include "base_cheat.h" -#include -#include "mem.hpp" -#define get_baseptr( ) ( ( uintptr_t )( _AddressOfReturnAddress( ) ) - sizeof( uintptr_t ) ) -bool __fastcall hooks::create_move( void *ecx_, void *edx_, float input_sample_time, user_cmd_t *ucmd ) { - static auto create_move_o = cl.m_clientmode->get_old_function< decltype( hooks::create_move )* >( 21 ); - - if( cl.m_panic || !ucmd->m_cmd_nr || !ucmd->m_tick_count ) { - return create_move_o( ecx_, edx_, input_sample_time, ucmd ); - } - - // call from CInput::CreateMove, mimic what the engine does. - cl.m_engine( )->SetViewAngles( ucmd->m_viewangles ); - - // random_seed isn't generated in ClientMode::CreateMove yet (since CInput::CreateMove handles that), we must generate it ourselves. - ucmd->m_random_seed = math::md5_pseudorandom( ucmd->m_cmd_nr ) & 0x7fffffff; - - //get sendpacket off the stack - stack_t stack( get_baseptr( ) ); - byte *send_packet = stack.next( ).local< byte* >( 0x1C ); - - g_ctx.create_snapshot( ucmd ); - - cl.m_engine( )->SetViewAngles( ucmd->m_viewangles ); - g_ctx.calculate_tickbase( ); - - //bool* send_packet = ***get_ebp< bool**** >( ) - 0x1; - - if( g_ctx.run_frame( ) && g_ctx.m_local->is_alive( ) ) { - static int last_frame = cl.m_globals->framecount; - if( last_frame != cl.m_globals->framecount ) - g_ctx.m_has_fired_this_frame = false; - - last_frame = cl.m_globals->framecount; - - g_cheat.aim.sample_angle_data( ucmd->m_viewangles ); - //g_cheat.prediction.run_prediction( ucmd ); - g_cheat.movement.update( ucmd ); - - g_cheat.aim.m_lagcomp( ucmd ); - g_cheat.aim.triggerbot( ucmd ); - - - - } - - - ucmd->clamp( ); - return false; -} \ No newline at end of file diff --git a/tf2/color.hpp b/tf2/color.hpp deleted file mode 100644 index 5ea9454..0000000 --- a/tf2/color.hpp +++ /dev/null @@ -1,278 +0,0 @@ -#pragma once -#include -#include - -//this is a fucking mess - -class fclr_t { - float R, G, B, A; -public: - fclr_t( ) : R( 0 ), G( 0 ), B( 0 ), A( 0 ) { } - - fclr_t( float r, float g, float b, float a ) : R( r ), G( g ), B( b ), A( a ) { } - - fclr_t( float r, float g, float b ) : R( r ), G( g ), B( b ), A( 255 ) { } - - float& r( ) { return R; } - float& g( ) { return G; } - float& b( ) { return B; } - float& a( ) { return A; } - - fclr_t& operator =( fclr_t& c ) { - R = c.r( ); - G = c.g( ); - B = c.b( ); - A = c.a( ); - return *this; - } - - fclr_t operator+( const fclr_t& v ) const { - return fclr_t( R + v.R, G + v.G, B + v.B, A + v.A ); - } - - explicit operator bool( ) const noexcept { - return ( R > 0 || G > 0 || B > 0 || A > 0 ); - } - - bool operator==( fclr_t& c ) const { - return ( R == c.r( ) && G == c.g( ) && B == c.b( ) ); - } -}; - -class clr_t { - uint8_t R, G, B, A; -public: - clr_t( ) : R( 0 ), G( 0 ), B( 0 ), A( 0 ) { } - - clr_t( uint8_t r, uint8_t g, uint8_t b, uint8_t a ) : R( r ), G( g ), B( b ), A( a ) { } - - clr_t( uint8_t r, uint8_t g, uint8_t b ) : R( r ), G( g ), B( b ), A( 255 ) { } - - uint8_t& r( ) { return R; } - uint8_t& g( ) { return G; } - uint8_t& b( ) { return B; } - uint8_t& a( ) { return A; } - - clr_t& operator =( clr_t& c ) { - R = c.r( ); - G = c.g( ); - B = c.b( ); - A = c.a( ); - return *this; - } - - clr_t operator+( const clr_t& v ) const { - return clr_t( R + v.R, G + v.G, B + v.B, A + v.A ); - } - - clr_t operator*( float f ) { - return clr_t( uint8_t( R * f ), uint8_t( G * f ), uint8_t( B * f ), A ); - } - - explicit operator bool( ) const noexcept { - return ( R > 0 || G > 0 || B > 0 || A > 0 ); - } - - float brightness( ) { - typedef struct { - float h, s, v; - } hsv; - hsv out; - - float min = static_cast( R < G ? R : G ); - min = static_cast( min < B ? min : B ); - - float max = static_cast( R > G ? R : G ); - max = static_cast( max > B ? max : B ); - - out.v = max; - float delta = max - min; - if( delta < 0.0010f ) { - out.s = 0.f; - out.h = 0.f; - return out.h; - } - if( max > 0.0f ) { - out.s = delta / max; - } - else { - out.s = 0.0f; - out.h = NAN; - return out.h; - } - if( R >= max ) - out.h = static_cast( G - B ) / delta; - else if( G >= max ) - out.h = 2.0f + static_cast( B - R ) / delta; - else - out.h = 4.0f + static_cast( R - G ) / delta; - - out.h *= 60.0f; - out.h /= 360.f; - - if( out.h < 0.0f ) - out.h += 360.0f; - - return out.v; - } - - float saturation( ) { - typedef struct { - float h, s, v; - } hsv; - hsv out; - - float min = static_cast( R < G ? R : G ); - min = static_cast( min < B ? min : B ); - - float max = static_cast( R > G ? R : G ); - max = static_cast( max > B ? max : B ); - - out.v = max; - float delta = max - min; - if( delta < 0.0010f ) { - out.s = 0.f; - out.h = 0.f; - return out.h; - } - if( max > 0.0f ) { - out.s = delta / max; - } - else { - out.s = 0.0f; - out.h = NAN; - return out.h; - } - if( R >= max ) - out.h = static_cast( G - B ) / delta; - else if( G >= max ) - out.h = 2.0f + static_cast( B - R ) / delta; - else - out.h = 4.0f + static_cast( R - G ) / delta; - - out.h *= 60.0f; - out.h /= 360.f; - - if( out.h < 0.0f ) - out.h += 360.0f; - - return out.s; - } - - static clr_t from_hsb( float hue, float saturation, float brightness ) { - float h = hue == 1.0f ? 0 : hue * 6.0f; - float f = h - ( int )h; - float p = brightness * ( 1.0f - saturation ); - float q = brightness * ( 1.0f - saturation * f ); - float t = brightness * ( 1.0f - ( saturation * ( 1.0f - f ) ) ); - - if( h < 1 ) { - return clr_t( - ( unsigned char )( brightness * 255 ), - ( unsigned char )( t * 255 ), - ( unsigned char )( p * 255 ) - ); - } - else if( h < 2 ) { - return clr_t( - ( unsigned char )( q * 255 ), - ( unsigned char )( brightness * 255 ), - ( unsigned char )( p * 255 ) - ); - } - else if( h < 3 ) { - return clr_t( - ( unsigned char )( p * 255 ), - ( unsigned char )( brightness * 255 ), - ( unsigned char )( t * 255 ) - ); - } - else if( h < 4 ) { - return clr_t( - ( unsigned char )( p * 255 ), - ( unsigned char )( q * 255 ), - ( unsigned char )( brightness * 255 ) - ); - } - else if( h < 5 ) { - return clr_t( - ( unsigned char )( t * 255 ), - ( unsigned char )( p * 255 ), - ( unsigned char )( brightness * 255 ) - ); - } - else { - return clr_t( - ( unsigned char )( brightness * 255 ), - ( unsigned char )( p * 255 ), - ( unsigned char )( q * 255 ) - ); - } - } - - static clr_t blend( clr_t first, clr_t second, float t ) { - return clr_t( - first.r( ) + static_cast< int >( t * ( second.r( ) - first.r( ) ) ), - first.g( ) + static_cast< int >( t * ( second.g( ) - first.g( ) ) ), - first.b( ) + static_cast< int >( t * ( second.b( ) - first.b( ) ) ), - first.a( ) + static_cast< int >( t * ( second.a( ) - first.a( ) ) ) - ); - } - - float hue( ) { - typedef struct { - float h, s, v; - } hsv; - hsv out; - float min, max, delta; - - min = static_cast< float >( R < G ? R : G ); - min = static_cast< float >( min < B ? min : B ); - - max = static_cast< float >( R > G ? R : G ); - max = static_cast< float >( max > B ? max : B ); - - out.v = max; - delta = max - min; - if( delta < 0.0010f ) { - out.s = 0.f; - out.h = 0.f; - return out.h; - } - if( max > 0.0f ) { - out.s = ( delta / max ); - } - else { - out.s = 0.0f; - out.h = ( float )NAN; - return out.h; - } - if( R >= max ) - out.h = static_cast< float >( G - B ) / delta; - else - if( G >= max ) - out.h = 2.0f + static_cast< float >( B - R ) / delta; - else - out.h = 4.0f + static_cast< float >( R - G ) / delta; - - out.h *= 60.0f; - out.h /= 360.f; - - if( out.h < 0.0f ) - out.h += 360.0f; - - return out.h; - } - - fclr_t to_fclr( ) { - return fclr_t{ R / 255.f, G / 255.f, B / 255.f, A / 255.f }; - } - - operator fclr_t( ) { - return this->to_fclr( ); - } - - bool operator==( clr_t& c ) const { - return ( R == c.r( ) && G == c.g( ) && B == c.b( ) ); - } -}; \ No newline at end of file diff --git a/tf2/con_alias.hpp b/tf2/con_alias.hpp deleted file mode 100644 index c943c24..0000000 --- a/tf2/con_alias.hpp +++ /dev/null @@ -1,60 +0,0 @@ -#pragma once - -#include -#include "simple_settings.h" - -template< typename var_type = bool > -class con_alias : public ISetting { -public: - con_alias( hash_t hash, con_var< var_type >* var ) : - m_var( var ), - m_value( var_type{ } ), - m_name( hash ), - m_is_var( true ) { }; - - con_alias( hash_t hash ) : - m_name( hash ), - m_value( 0 ), - m_var( nullptr ), - m_is_var( false ) { }; - - con_alias( hash_t hash, var_type&& rhs ) : - m_name( hash ), - m_value( rhs ), - m_var( nullptr ), - m_is_var( false ) { }; - - virtual std::string get_string( ) override { - if( m_is_var ) - return m_var->get_string( ); - else - return std::to_string( m_value ); - } - - virtual void set_value( int value ) override { - set_value_internal( value ); - } - - virtual void set_value( float value ) override { - set_value_internal( value ); - } - - virtual void set_value( ulong_t value ) override { - set_value_internal( value ); - } - -private: - template < typename t > - void set_value_internal( t&& val ) { - if( m_is_var ) - m_var->set( val ); - else - m_value = ( var_type )( val ); - } - -private: - bool m_is_var; - hash_t m_name; - var_type m_value; - con_var< var_type >* m_var; -}; \ No newline at end of file diff --git a/tf2/con_fn.hpp b/tf2/con_fn.hpp deleted file mode 100644 index 3c06e9b..0000000 --- a/tf2/con_fn.hpp +++ /dev/null @@ -1,172 +0,0 @@ -#pragma once -#include - -#include "simple_settings.h" - -//KEEP THIS UP TO DATE!! -enum ConFnVarType_t { - TYPE_NULL = 0, - TYPE_FLOAT = 'F', - TYPE_STRING = 'S', - TYPE_INTEGER = 'D', - TYPE_HEX = 'X' -}; - -class con_fn_base { -public: - virtual bool execute( const char* str ) = 0; - virtual const char* get_syntax( ) = 0; - virtual hash_t get_hash( ) = 0; -}; - -class con_fn : public con_fn_base { -public: - con_fn( hash_t hash, std::function< void __cdecl( const char*, const char* ) > function, const char* syntax ) { - m_hash = hash; - m_function = function; - strcpy_s< 64 >( m_syntax, syntax ); - for( size_t i{ }; i < strlen( m_syntax ); ++i ) { - if( m_syntax[ i ] == '%' ) { - m_args++; - } - } - } - - static ConFnVarType_t get_var_type( size_t arg, const char* syntax ) { - size_t cur_arg = 0; - for( size_t i{ }; i < strlen( syntax ); ++i ) { - if( syntax[ i ] == '%' ) { - if( cur_arg++ == arg ) { - return ( ConFnVarType_t )( syntax[ i + 1 ] ); - } - } - } - - return TYPE_NULL; - } - - template < typename t > - static t get_arg( const char* str, size_t arg_index, const char* syntax ) { - auto arg_type = get_var_type( arg_index, syntax ); - - size_t cur_arg = 0; - for( size_t i{ }; i < strlen( str ); ++i ) { - if( str[ i ] == ' ' ) { - if( cur_arg++ == arg_index ) { - size_t start = i + 1; - size_t end = strlen( str ); - for( size_t i2 = start; i2 < strlen( str ); ++i2 ) { - if( str[ i2 ] == ' ' ) { - end = i2; - break; - } - } - - std::string str( str + start, end - start ); - - char* end_ptr = ( char* )str.c_str( ) + end; - if constexpr( std::is_integral_v< t > ) { - auto radix = get_var_type( arg_index, syntax ) == TYPE_HEX ? 16 : 10; - return std::strtol( str.c_str( ), &end_ptr, radix ); - } - - if constexpr( std::is_floating_point_v< t > ) { - return std::strtof( str.c_str( ), &end_ptr ); - } - - return ( t )str.c_str( ); - } - } - } - - return t{ }; - } - - virtual const char* get_syntax( ) override { - return m_syntax; - } - - virtual hash_t get_hash( ) override { - return m_hash; - } - - ConFnVarType_t get_var_type( size_t arg ) { - size_t cur_arg = 0; - for( size_t i{ }; i < strlen( m_syntax ); ++i ) { - if( m_syntax[ i ] == '%' ) { - if( cur_arg++ == arg ) { - return ( ConFnVarType_t )( m_syntax[ i + 1 ] ); - } - } - } - - return TYPE_NULL; - } - - //returns false on failed execution - virtual bool execute( const char* str ) override { - size_t arg_count{ }; - for( size_t i{ }; i < strlen( str ); ++i ) { - if( str[ i ] == ' ' ) { - arg_count++; - } - } - - if( arg_count != m_args ) { - return false; - } - - std::string pass_str( " " ); - - size_t cur_arg = 0; - for( size_t i{ }; i < strlen( str ); ++i ) { - if( str[ i ] == ' ' ) { - size_t end = strlen( str ); - for( size_t i2 = i + 2; i2 < strlen( str ); ++i2 ) { - if( str[ i2 ] == ' ' ) { - end = i2; - } - } - - char* end_ptr = ( char* )( str + i + end ); - switch( get_var_type( cur_arg ) ) { - case TYPE_FLOAT: { - pass_str += std::to_string( strtof( str + i, &end_ptr ) ); - break; - } - case TYPE_INTEGER: { - pass_str += std::to_string( strtol( str + i, &end_ptr, 10 ) ); - break; - } - case TYPE_HEX: { - char buf[ 10 ]; - sprintf_s< 10 >( buf, "%08x", strtol( str + i, &end_ptr, 16 ) ); - pass_str += buf; - break; - } - case TYPE_STRING: { - std::string add_str( str + i, end - i ); - pass_str += add_str; - break; - } - default: - return false; - } - - if( end != strlen( str ) ) { - pass_str += ' '; - } - ++cur_arg; - } - } - - m_function( pass_str.c_str( ), m_syntax ); - return true; - } - -private: - hash_t m_hash{ }; - size_t m_args{ }; - char m_syntax[ 64 ]{ }; - std::function< void( __cdecl )( const char*, const char* ) > m_function{ }; -}; \ No newline at end of file diff --git a/tf2/conditions.h b/tf2/conditions.h deleted file mode 100644 index 331ad6d..0000000 --- a/tf2/conditions.h +++ /dev/null @@ -1,106 +0,0 @@ -#pragma once - -enum MoveType_t { - MOVETYPE_NONE = 0, - MOVETYPE_ISOMETRIC, - MOVETYPE_WALK, - MOVETYPE_STEP, - MOVETYPE_FLY, - MOVETYPE_FLYGRAVITY, - MOVETYPE_VPHYSICS, - MOVETYPE_PUSH, - MOVETYPE_NOCLIP, - MOVETYPE_LADDER, - MOVETYPE_OBSERVER, - MOVETYPE_CUSTOM, - - MOVETYPE_LAST = MOVETYPE_CUSTOM, - - MOVETYPE_MAX_BITS = 4, -}; - -enum TFConditions_t { - TFCond_Slowed = ( 1 << 0 ), - TFCond_Zoomed = ( 1 << 1 ), - TFCond_Disguising = ( 1 << 2 ), - TFCond_Disguised = ( 1 << 3 ), - TFCond_Cloaked = ( 1 << 4 ), - TFCond_Ubercharged = ( 1 << 5 ), - TFCond_TeleportedGlow = ( 1 << 6 ), - TFCond_Taunting = ( 1 << 7 ), - TFCond_UberchargeFading = ( 1 << 8 ), - TFCond_CloakFlicker = ( 1 << 9 ), - TFCond_Teleporting = ( 1 << 10 ), - TFCond_Kritzkrieged = ( 1 << 11 ), - TFCond_TmpDamageBonus = ( 1 << 12 ), - TFCond_DeadRingered = ( 1 << 13 ), - TFCond_Bonked = ( 1 << 14 ), - TFCond_Stunned = ( 1 << 15 ), - TFCond_Buffed = ( 1 << 16 ), - TFCond_Charging = ( 1 << 17 ), - TFCond_DemoBuff = ( 1 << 18 ), - TFCond_CritCola = ( 1 << 19 ), - TFCond_InHealRadius = ( 1 << 20 ), - TFCond_Healing = ( 1 << 21 ), - TFCond_OnFire = ( 1 << 22 ), - TFCond_Overhealed = ( 1 << 23 ), - TFCond_Jarated = ( 1 << 24 ), - TFCond_Bleeding = ( 1 << 25 ), - TFCond_DefenseBuffed = ( 1 << 26 ), - TFCond_Milked = ( 1 << 27 ), - TFCond_MegaHeal = ( 1 << 28 ), - TFCond_RegenBuffed = ( 1 << 29 ), - TFCond_MarkedForDeath = ( 1 << 30 ), - TFCond_NoHealingDamageBuff = ( 1 << 31 ), - - TFCondEx_SpeedBuffAlly = ( 1 << 0 ), - TFCondEx_HalloweenCritCandy = ( 1 << 1 ), - TFCondEx_CritCanteen = ( 1 << 2 ), - TFCondEx_CritDemoCharge = ( 1 << 3 ), - TFCondEx_CritHype = ( 1 << 4 ), - TFCondEx_CritOnFirstBlood = ( 1 << 5 ), - TFCondEx_CritOnWin = ( 1 << 6 ), - TFCondEx_CritOnFlagCapture = ( 1 << 7 ), - TFCondEx_CritOnKill = ( 1 << 8 ), - TFCondEx_RestrictToMelee = ( 1 << 9 ), - TFCondEx_DefenseBuffNoCritBlock = ( 1 << 10 ), - TFCondEx_Reprogrammed = ( 1 << 11 ), - TFCondEx_PyroCrits = ( 1 << 12 ), - TFCondEx_PyroHeal = ( 1 << 13 ), - TFCondEx_FocusBuff = ( 1 << 14 ), - TFCondEx_DisguisedRemoved = ( 1 << 15 ), - TFCondEx_MarkedForDeathSilent = ( 1 << 16 ), - TFCondEx_DisguisedAsDispenser = ( 1 << 17 ), - TFCondEx_Sapped = ( 1 << 18 ), - TFCondEx_UberchargedHidden = ( 1 << 19 ), - TFCondEx_UberchargedCanteen = ( 1 << 20 ), - TFCondEx_HalloweenBombHead = ( 1 << 21 ), - TFCondEx_HalloweenThriller = ( 1 << 22 ), - TFCondEx_BulletCharge = ( 1 << 26 ), - TFCondEx_ExplosiveCharge = ( 1 << 27 ), - TFCondEx_FireCharge = ( 1 << 28 ), - TFCondEx_BulletResistance = ( 1 << 29 ), - TFCondEx_ExplosiveResistance = ( 1 << 30 ), - TFCondEx_FireResistance = ( 1 << 31 ), - - TFCondEx2_Stealthed = ( 1 << 0 ), - TFCondEx2_MedigunDebuff = ( 1 << 1 ), - TFCondEx2_StealthedUserBuffFade = ( 1 << 2 ), - TFCondEx2_BulletImmune = ( 1 << 3 ), - TFCondEx2_BlastImmune = ( 1 << 4 ), - TFCondEx2_FireImmune = ( 1 << 5 ), - TFCondEx2_PreventDeath = ( 1 << 6 ), - TFCondEx2_MVMBotRadiowave = ( 1 << 7 ), - TFCondEx2_HalloweenSpeedBoost = ( 1 << 8 ), - TFCondEx2_HalloweenQuickHeal = ( 1 << 9 ), - TFCondEx2_HalloweenGiant = ( 1 << 10 ), - TFCondEx2_HalloweenTiny = ( 1 << 11 ), - TFCondEx2_HalloweenInHell = ( 1 << 12 ), - TFCondEx2_HalloweenGhostMode = ( 1 << 13 ), - TFCondEx2_Parachute = ( 1 << 16 ), - TFCondEx2_BlastJumping = ( 1 << 17 ), - - TFCond_MiniCrits = ( TFCond_Buffed | TFCond_CritCola ), - TFCond_IgnoreStates = ( TFCond_Ubercharged | TFCond_Bonked ), - TFCondEx_IgnoreStates = ( TFCondEx_PyroHeal ) -}; \ No newline at end of file diff --git a/tf2/console.cpp b/tf2/console.cpp deleted file mode 100644 index 121c57a..0000000 --- a/tf2/console.cpp +++ /dev/null @@ -1,324 +0,0 @@ -#include "console.hpp" -#include "interfaces.h" -#include "settings.h" -#include "d3d.hpp" -#include "ui_draw.h" - -std::shared_ptr< console > g_con = std::make_shared< console >( ); - - -void console::draw_text( int x, int y, bool greyed, const char* fmt, ... ) { - va_list args; - char buf[ 512 ]; - - __crt_va_start( args, fmt ); - vsprintf_s< 512 >( buf, fmt, args ); - __crt_va_end( args ); - - g_d3d.draw_text< ALIGN_LEFT >( d3d::fonts.f_con, greyed ? clr_t( 160, 160, 160 ) : clr_t( 255, 255, 255 ), x, y, D3DFONTFLAG_DROPSHADOW, "%s", buf ); - //g_d3d.draw_text< ALIGN_LEFT >( d3d::fonts.f_con, greyed ? clr_t( 160, 160, 160 ) : clr_t( 255, 255, 255 ), x, y, D3DFONTFLAG_DROPSHADOW, buf ); -} - -void console::draw_text( int x, int y, const char* fmt, ... ) { - va_list args; - char buf[ 512 ]; - - __crt_va_start( args, fmt ); - vsprintf_s< 512 >( buf, fmt, args ); - __crt_va_end( args ); - - g_d3d.draw_text< ALIGN_LEFT >( d3d::fonts.f_con, clr_t( 255, 255, 255 ), x, y, D3DFONTFLAG_DROPSHADOW, buf ); -} - -void console::draw_rect( int x, int y, int w, int h, clr_t col ) { - g_d3d.draw_filled_rect( col, x, y, w, h ); -} - -void console::register_alias( std::shared_ptr< ISetting >& alias ) { - m_aliases.push_back( alias ); -} - -void console::capture_command( ) { - float current_time = GetTickCount( ) * 0.001f; - size_t length = strlen( m_cur_cmd ); - - for( size_t i{ }; i < 0xfe; ++i ) { - if( m_input->is_key_pressed( i ) ) { - float delta_time = current_time - m_last_key_input[ i ]; - if( fabs( delta_time ) > 0.2f ) { - if( i == KEYS_BACK ) { - m_cur_cmd[ length - 1 ] = 0; - m_last_key_input[ i ] = current_time; - continue; - } - - m_key_states[ i ] = 0xf0; - wchar_t pressed_char; - const auto scan = MapVirtualKeyA( i, 2 ); - auto ret = ToAscii( i, scan, ( BYTE* )m_key_states, ( LPWORD )&pressed_char, 1 ); - - if( ret == 1 ) { - if( length < 200 ) { - m_cur_cmd[ length ] = ( char )( pressed_char ); - m_cur_cmd[ length + 1 ] = 0; - } - } - m_last_key_input[ i ] = current_time; - } - } - else { - m_last_key_input[ i ] = 0.f; - m_key_states[ i ] = 0; - } - } -} - -ISetting* console::find_var( hash_t var ) { - for( auto& it : data::holder_.get_nodes( ) ) { - auto setting = static_cast< ISetting* >( it ); - if( var == setting->get_hash( ) ) { - return setting; - } - } - - return nullptr; -} - -ISetting* console::find_alias( hash_t alias ) { - for( auto& it : m_aliases ) { - if( it->get_hash( ) == alias ) - return it.get( ); - } - - return nullptr; -} - -con_fn_base* console::find_fn( hash_t name ) { - for( auto& it : m_functions ) { - if( it->get_hash( ) == name ) { - return it; - } - } - - return nullptr; -} - -std::string console::impl_alias_str( std::string str ) { - for( size_t i{ }; i < str.length( ); ++i ) { - if( str[ i ] == ' ' && str[ i + 1 ] != ' ' ) { - size_t end = 0; - for( size_t i2{ i + 1 }; i2 < str.length( ); ++i ) { - if( str[ i2 ] == ' ' ) - end = i2; - } - - if( end ) { - std::string alias_str( str.c_str( ) + i, end - i ); - auto alias = find_alias( hash::fnv1a( alias_str ) ); - if( alias ) { - str.replace( alias_str.begin( ), alias_str.end( ), alias->get_string( ) ); - } - else { - g_con->log( xors( "couldnt find alias %s" ), alias_str.c_str( ) ); - } - } - } - } - - return str; -} - -void console::execute_command( const char* cmd ) { - if( !cmd[ 0 ] ) return; - std::string first_param( cmd, strlen( cmd ) ); - - size_t end{ }; - bool one_arg = true; - for( size_t i{ }; i < strlen( cmd ); ++i ) { - if( cmd[ i ] == ' ' ) { - first_param.resize( i ); - end = i; - one_arg = false; - break; - } - } - - if( one_arg ) { - first_param.resize( first_param.length( ) - 1 ); - } - - //find a command to execute - auto fn = find_fn( hash::fnv1a( first_param ) ); - if( fn ) { - //std::string alias_cmd = impl_alias_str( cmd ); - - if( !fn->execute( cmd ) ) { - log( xors( "invalid syntax" ) ); - } - return; - } - - //command not found, we're managing vars - if( !one_arg ) { - std::string second_param = ( cmd + end + 1 ); - bool is_floating_point = second_param.find( '.' ) != std::string::npos; - auto var = find_var( hash::fnv1a( first_param ) ); - - if( var ) { - auto setting_cast = static_cast< con_var< void* >* >( var ); - if( !setting_cast->is_integral( ) && !setting_cast->is_floating_point( ) ) { - auto value = std::strtol( second_param.c_str( ), 0, 16 ); - printf( xors( "value: %08x\n" ), value ); - var->set( value ); - } - - if( is_floating_point ) { - float value = std::strtof( second_param.c_str( ), 0 ); - var->set( value ); - } - else { - int value = std::strtol( second_param.c_str( ), 0, 10 ); - var->set( value ); - } - log( xors( "%s %s\n" ), first_param.c_str( ), second_param.c_str( ) ); - return; - } - } - - - log( xors( "unknown command: %s" ), first_param.c_str( ) ); -} - -void console::input( ) { - static int drag_x, drag_y; - int cursor_x, cursor_y; - int x = m_x, y = m_y; - bool clicked = m_input->is_key_pressed( KEYS_MOUSE1 ); - static bool is_hovered{ }; - m_input->get_cursor_pos( cursor_x, cursor_y ); - - auto is_top_hovered = [ &x, &y, - &cursor_x, &cursor_y ]( ) { - return cursor_x > x && cursor_x < x + WIDTH - && cursor_y > y && cursor_y < y + TOP_HEIGHT; - }; - - auto is_window_hovered = [ &x, &y, - &cursor_x, &cursor_y ]( ) { - return cursor_x > x && cursor_x < x + WIDTH - && cursor_y > y && cursor_y < y + HEIGHT; - }; - - auto is_bottom_hovered = [ &x, &y, - &cursor_x, &cursor_y ]( ) { - return cursor_x > x && cursor_x < x + WIDTH - && cursor_y > y + HEIGHT - TOP_HEIGHT - && cursor_y < y + HEIGHT; - }; - - if( clicked ) { - //m_consuming_input = is_window_hovered( ); - } - - if( !clicked && is_top_hovered( ) ) { - drag_x = cursor_x - m_x; - drag_y = cursor_y - m_y; - } - - if( clicked && is_hovered ) { - is_hovered = true; - m_x = cursor_x - drag_x; - m_y = cursor_y - drag_y; - } - else { - is_hovered = is_top_hovered( ); - } - - if( clicked ) { - m_active = is_bottom_hovered( ); - } - - if( m_active ) { - capture_command( ); - - static bool was_held{ }; - if( m_input->is_key_pressed( KEYS_RETURN ) ) { - if( !was_held ) { - execute_command( m_cur_cmd ); - m_cur_cmd[ 0 ] = 0; - } - was_held = true; - } - else was_held = false; - } -} - -void console::draw( ) { - if( !m_open ) { - m_consuming_input = false; - m_active = false; - return; - } - - static clr_t col = clr_t( 31, 31, 31, 255 ); - - input( ); - - RECT prev_rect{ }; - RECT new_rect{ m_x - 1, m_y - 1, - m_x + WIDTH + 1, m_y + HEIGHT + 1 }; - g_d3d.get_device( )->GetScissorRect( &prev_rect ); - - g_d3d.get_device( )->SetScissorRect( &new_rect ); - - draw_rect( m_x - 1, m_y - 1, WIDTH + 2, HEIGHT + 2, ui::ui_get_accent_col( ) ); - draw_rect( m_x, m_y, WIDTH, HEIGHT, col ); - draw_rect( m_x + 1, m_y, WIDTH - 2, TOP_HEIGHT, clr_t( 41, 41, 41 ) ); - - draw_rect( m_x + 1, m_y + HEIGHT - TOP_HEIGHT, WIDTH - 2, TOP_HEIGHT, clr_t( 41, 41, 41 ) ); - if( m_active ) { - draw_rect( m_x + 2, m_y + HEIGHT - TOP_HEIGHT + 1, WIDTH - 4, TOP_HEIGHT - 2, clr_t( 31, 31, 31 ) ); - auto fn = find_fn( hash::fnv1a( m_cur_cmd ) ); - if( fn ) { - std::string fn_str = m_cur_cmd; - fn_str += ' '; - fn_str += fn->get_syntax( ); - - draw_text( m_x + 2, m_y + HEIGHT - TOP_HEIGHT / 2 - 3, true, "%s", fn_str.c_str( ) ); - } - - else { - auto var = find_var( hash::fnv1a( m_cur_cmd ) ); - if( var ) { - std::string var_str = m_cur_cmd; - var_str += ' '; - - var_str += var->get_string( ); - - draw_text( m_x + 2, m_y + HEIGHT - TOP_HEIGHT / 2 - 3, true, var_str.c_str( ) ); - } - } - } - - std::string cur_cmd_str = m_cur_cmd; - if( m_active ) { - cur_cmd_str += '_'; - } - draw_text( m_x + 2, m_y + HEIGHT - TOP_HEIGHT / 2 - 3, cur_cmd_str.c_str( ) ); - draw_text( m_x + 3, m_y + TOP_HEIGHT / 2 - 3, xors( "console" ) ); - - int cur_y = m_y + HEIGHT - TOP_HEIGHT; - for( int i = m_logs.size( ) - 1; i >= 0; --i ) { - constexpr int LINE_HEIGHT = 14; - auto& log = m_logs.at( i ); - - if( cur_y - LINE_HEIGHT < m_y + TOP_HEIGHT ) { - m_logs.erase( m_logs.begin( ) + i ); - continue; - } - - draw_text( m_x + 2, cur_y -= LINE_HEIGHT, log.m_msg ); - } - - g_d3d.get_device( )->SetScissorRect( &prev_rect ); -} \ No newline at end of file diff --git a/tf2/console.hpp b/tf2/console.hpp deleted file mode 100644 index a16ad0f..0000000 --- a/tf2/console.hpp +++ /dev/null @@ -1,125 +0,0 @@ -#pragma once -#include -#include -#include -#include - -#include "con_fn.hpp" -#include "con_alias.hpp" -#include "input_system.hpp" -#include "math.h" - -#pragma warning(disable: 4996) - -class console { -public: - console( ) { - m_input = std::make_shared< util::c_input_manager >( ); - } - - static constexpr size_t TOP_HEIGHT = 22; - static constexpr size_t WIDTH = 400; - static constexpr size_t HEIGHT = 450; - - bool m_consuming_input{ }; - bool m_active{ }; - bool m_open{ }; - - struct con_log { - float m_time; - char m_msg[ 128 ]; - }; - - void draw_text( int x, int y, bool greyed, const char* msg, ... ); - void draw_text( int x, int y, const char* msg, ... ); - void draw_rect( int x, int y, int w, int h, clr_t col ); - void register_fn( con_fn_base* fn ) { m_functions.push_back( fn ); } - - void input( ); - void draw( ); - - auto& get_input( ) { - return m_input; - } - - void log( const char* fmt, ... ) { - va_list args; - char buf[ 128 ]; - - __crt_va_start( args, fmt ); - vsprintf_s< 128 >( buf, fmt, args ); - __crt_va_end( args ); - - con_log log; - log.m_time = ( float )GetTickCount( ) * 0.001f; - memcpy( log.m_msg, buf, 128 ); - - print( "%s\n", buf ); - - m_logs.push_back( log ); - } - - void print( const char* fmt, ... ) { - va_list args; - va_start( args, fmt ); - vprintf_s( fmt, args ); - va_end( args ); - } - - void create( ) { -#ifdef _DEBUG - AllocConsole( ); - freopen( xors( "CONOUT$" ), "w", stdout ); - const char* hack_names[ ] = { - xors( "dunk hack" ), - xors( "dweeb dumpster" ), - xors( "nova killER" ), - xors( "moms credit card" ), - xors( "dad hook" ), - xors( "retard remover" ), - xors( "slam hook" ), - xors( "swoosh" ), - xors( "retard remover" ), - xors( "shotgun hack" ), - }; - - SetConsoleTitleA( hack_names[ math::random_number( 0, 9 ) ] ); -#endif - game_console_print = reinterpret_cast< msg_t >( GetProcAddress( GetModuleHandleA( "tier0.dll" ), "Msg" ) ); - } - - void destroy( ) { -#ifdef _DEBUG - FreeConsole( ); - fclose( stdout ); -#endif - } - - std::vector< con_log > m_logs; - std::vector< con_fn_base* > m_functions; - std::vector< std::shared_ptr< ISetting > > m_aliases; - - void register_alias( std::shared_ptr< ISetting >& alias ); - - using msg_t = void( __cdecl* )( const char*, ... ); - msg_t game_console_print; - -private: - ISetting * find_var( hash_t name ); - ISetting* find_alias( hash_t name ); - - std::string impl_alias_str( std::string str ); - - con_fn_base* find_fn( hash_t name ); - void capture_command( ); - void execute_command( const char* cmd ); - - int m_x{ 100 }, m_y{ 100 }; - - char m_cur_cmd[ 200 ]{ }; - uint8_t m_key_states[ 256 ]{ }; - float m_last_key_input[ 256 ]{ }; - std::shared_ptr< util::c_input_manager > m_input; -}; - -extern std::shared_ptr< console > g_con; \ No newline at end of file diff --git a/tf2/console_log.hpp b/tf2/console_log.hpp deleted file mode 100644 index 4659ea1..0000000 --- a/tf2/console_log.hpp +++ /dev/null @@ -1,34 +0,0 @@ -#pragma once - -#include -#include -#pragma warning(disable: 4996) - -class console { -public: - void create( ) { - AllocConsole( ); - freopen( "CONOUT$", "w", stdout ); - SetConsoleTitleA( "tf2internal" ); - - game_console_print = reinterpret_cast< decltype( game_console_print ) >( GetProcAddress( GetModuleHandleA( "tier0.dll" ), "Msg" ) ); - } - - void destroy( ) { - FreeConsole( ); - fclose( stdout ); - } - - __forceinline void log_function( const char* msg ) { - printf( "%s: %s", __FUNCTION__, msg ); - } - - using msg_t = void( __cdecl* )( const char*, ... ); - msg_t game_console_print; - - - static console *con( ) { - static console g_singleton_; - return &g_singleton_; - } -}; \ No newline at end of file diff --git a/tf2/ctx.cpp b/tf2/ctx.cpp deleted file mode 100644 index 37e192f..0000000 --- a/tf2/ctx.cpp +++ /dev/null @@ -1,97 +0,0 @@ -#include "ctx.hpp" -#include "console.hpp" -#include "hooks.h" -#include "base_cheat.h" - -context::c_context g_ctx; - -NAMESPACE_REGION( context ) - -bool c_context::run_frame( ) { - m_local = cl.m_entlist( )->get_client_entity< c_base_player >( - cl.m_engine( )->GetLocalPlayer( ) ); - - return !!m_local; -} - - -//predicted servertime of player, use this for breaking lby etc -float c_context::pred_time( ) { - calculate_tickbase( ); - - return m_tickbase * cl.m_globals->interval_per_tick; -} - -//calculate tickbase depending on whether last ucmd was predicted -bool c_context::calculate_tickbase( ) { - if( !m_local ) { - return false; - } - - //get current tickbase - auto player_tickbase = m_local->get_tick_base( ); - - //disabled due to our engine pred being shit - m_tickbase = player_tickbase; - return true; - - if( m_snapshot.empty( ) ) { - m_tickbase = player_tickbase; - return false; - } - - //if cmd wasnt predicted increment tickbase - auto snap_cmd = &m_snapshot.front( ); - if( !snap_cmd->m_predicted ) { - if( !m_tickbase ) { - m_tickbase = player_tickbase; - } - - m_tickbase++; - snap_cmd->m_predicted = true; - } - else { - m_tickbase = player_tickbase; - } - - return true; -} - -bool c_context::precache_model( const char* model ) { - - auto cache_table = cl.m_string_table( )->FindTable( "modelprecache" ); - - if( !cache_table ) - return true; - - cl.m_modelinfo( )->FindOrLoadModel( model ); - - int string_index = cache_table->AddString( false, model ); - - if( string_index == -1 ) - return false; - - return true; -} - -//save snapshots of usercommands -bool c_context::create_snapshot( user_cmd_t* ucmd ) { - user_cmd_t ucmd_copy; - - while( m_snapshot.size( ) >= 64 ) { - m_snapshot.pop_back( ); - } - - if( !ucmd ) { - return false; - } - - memcpy( &ucmd_copy, - ucmd, - sizeof( ucmd_copy ) ); - - m_snapshot.push_front( ucmd_copy ); - return true; -} - -END_REGION \ No newline at end of file diff --git a/tf2/ctx.hpp b/tf2/ctx.hpp deleted file mode 100644 index 8243a19..0000000 --- a/tf2/ctx.hpp +++ /dev/null @@ -1,68 +0,0 @@ -#pragma once -#include - -#include "util.hpp" -#include "sdk.h" -NAMESPACE_REGION( context ) - -struct shot_data_t { - vec3_t m_local_pos; - vec3_t m_angle; - vec3_t m_enemy_pos; - int m_enemy_index; - int m_resolver_shots; - bool m_resolver_state; - bool m_missed{ true }; - struct { - vec3_t min; - vec3_t max; - float radius; - } m_hitbox; - int m_hitgroup; -}; - -//replacement to the old global:: namespace -class c_context { -public: - //run localplayer check, pointer, is valid etc - bool run_frame( ); - float pred_time( ); - - bool create_snapshot( user_cmd_t* ); - //calculate accurate tickbase - bool calculate_tickbase( ); - - user_cmd_t* get_last_cmd( ) { - return m_snapshot.empty( ) ? nullptr : &m_snapshot.front( ); - } - - bool precache_model( const char* model ); - -public: - c_base_player * m_local{ }; - int m_stage{ }; - //accurate tickbase - int m_tickbase{ }; - - bool m_drawing_postscreenspace{ }; - bool m_drawing_screneend{ }; - - bool m_has_fired_this_frame{ }; - - vec3_t m_thirdperson_angle{ }; - vec3_t m_last_origin{ }; - - float m_fov{ 90.f }; - -public: - - int m_last_shot_ack; - int m_last_shot; - std::array< shot_data_t, 128 > m_shot_data; -private: - std::deque< user_cmd_t > m_snapshot; -}; - -END_REGION - -extern context::c_context g_ctx; \ No newline at end of file diff --git a/tf2/d3d.cpp b/tf2/d3d.cpp deleted file mode 100644 index a35f613..0000000 --- a/tf2/d3d.cpp +++ /dev/null @@ -1,367 +0,0 @@ -#include "d3d.hpp" -#include "interfaces.h" -#include "math.h" -#include "d3d_sprite.hpp" - -d3d::c_renderer g_d3d; -d3d::d3d_fonts_t d3d::fonts; - - -//theres shit still left to add like drawrect etc but thats really simple -//this is the base and it works so thats ok -//love -// - nave - -// note - dex; probably better idea to batch all calls up into one DrawPrimitive / DrawIndexedPrimitive call each (if you want to have index buffers too) -// DrawPrimitiveUP for each object will slow stuff down eventually -// dont know much about DrawIndexedPrimitive myself but msdn suggests to use strips over anything else - -namespace d3d -{ - void d3d_fonts_t::release( ) { - if( f_12 ) f_12->Release( ); - if( f_esp_small ) f_esp_small->Release( ); - if( f_16 ) f_16->Release( ); - if( f_18 ) f_18->Release( ); - if( f_menu ) f_menu->Release( ); - if( f_con ) f_con->Release( ); - - f_12 = f_esp_small = f_16 = f_18 = f_menu = f_con = nullptr; - } - - void d3d_fonts_t::create( IDirect3DDevice9* device ) { - auto create_font = [ & ]( ID3DXFont** font, const char* font_name, int width, int size, int weight ) { - //auto wide_str = util::ascii_to_unicode( std::string( font_name ) ); - - auto code = D3DXCreateFontA( device, size, width, weight, 0, false, DEFAULT_CHARSET, - OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH, font_name, font ); - - if( code < 0 ) throw xors( "fuck d3d" ); - }; - - create_font( &f_12, xors( "Verdana" ), 0, 12, 0 ); //change this idc - create_font( &f_esp_small, xors( "Tahoma" ), 0, 11, 500 ); - create_font( &f_16, xors( "Verdana" ), 0, 16, 0 ); - create_font( &f_18, xors( "Verdana" ), 0, 18, 900 ); - create_font( &f_menu, xors( "Tahoma" ), 0, 12, 300 ); - create_font( &f_con, xors( "Consolas" ), 6, 12, 300 ); - } - - - c_renderer::c_renderer( IDirect3DDevice9* device ) : m_device( device ) { - create_objects( ); - } - - bool c_renderer::run_frame( IDirect3DDevice9* device ) { - if( cl.m_panic ) { - return false; - } - - if( !m_device ) { - m_device = device; - create_objects( ); - return false; - } - - return true; - } - - c_renderer::~c_renderer( ) { - if( !m_device ) - return; - - invalidate_objects( ); - } - - void c_renderer::on_device_lost( ) { - if( !m_device ) - return; - - invalidate_objects( ); - } - - void c_renderer::on_device_reset( ) { - if( !m_device ) - return; - - create_objects( ); - } - - void c_renderer::invalidate_objects( ) { - if( m_block ) m_block->Release( ); - fonts.release( ); - //m_buffer->Release( ); - //m_sil_txt->Release( ); - //m_surface->Release( ); - } - - void c_renderer::create_objects( ) { - D3DVIEWPORT9 viewport; - - if( !m_device ) return; - - if( m_device->GetViewport( &viewport ) < 0 ) { - return; - } - - if( m_device->CreateStateBlock( D3DSBT_ALL, &m_block ) < 0 ) { - return; - } - - if( !m_block ) { - return; - } - - // get display size. - m_width = viewport.Width; - m_height = viewport.Height; - - fonts.create( m_device ); - - /*IDirect3DSurface9* backbuffer; - D3DSURFACE_DESC desc; - - m_device->GetRenderTarget( 0, &backbuffer ); - backbuffer->GetDesc( &desc ); - backbuffer->Release( ); - - m_device->CreateTexture( desc.Width, desc.Height, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &m_sil_txt, 0 ); - m_sil_txt->GetSurfaceLevel( 0, &m_surface ); - - m_device->CreateVertexBuffer( 4 * 24, 0, D3DFVF_XYZRHW | D3DFVF_TEX1, D3DPOOL_MANAGED, &m_buffer, nullptr );*/ - } - - void c_renderer::begin( ) { - if( !m_device ) return; - - D3DVIEWPORT9 vp{ 0, 0, m_width, m_height, 0.f, 1.f }; - - m_device->SetViewport( &vp ); - - //m_sil_txt->GetSurfaceLevel( 0, &m_surface ); - - // set vertex stream declaration. - m_device->SetVertexShader( nullptr ); - m_device->SetPixelShader( nullptr ); - m_device->SetFVF( D3DFVF_XYZRHW | D3DFVF_DIFFUSE ); - m_block->Capture( ); - - m_device->SetRenderState( D3DRS_LIGHTING, false ); - m_device->SetRenderState( D3DRS_FOGENABLE, false ); - m_device->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE ); - m_device->SetRenderState( D3DRS_FILLMODE, D3DFILL_SOLID ); - - m_device->SetRenderState( D3DRS_ZENABLE, D3DZB_FALSE ); - m_device->SetRenderState( D3DRS_SCISSORTESTENABLE, true ); - m_device->SetRenderState( D3DRS_ZWRITEENABLE, false ); - m_device->SetRenderState( D3DRS_STENCILENABLE, false ); - - m_device->SetRenderState( D3DRS_MULTISAMPLEANTIALIAS, false ); - m_device->SetRenderState( D3DRS_ANTIALIASEDLINEENABLE, true ); - - m_device->SetRenderState( D3DRS_ALPHABLENDENABLE, true ); - m_device->SetRenderState( D3DRS_ALPHATESTENABLE, false ); - m_device->SetRenderState( D3DRS_SEPARATEALPHABLENDENABLE, true ); - - //m_device->SetTexture( 0, nullptr ); - //m_device->SetTexture( 1, nullptr ); - //m_device->SetTexture( 2, nullptr ); - //m_device->SetTexture( 3, nullptr ); - m_device->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE ); - m_device->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE ); - m_device->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE ); - m_device->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_MODULATE ); - m_device->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE ); - m_device->SetTextureStageState( 0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE ); - m_device->SetTextureStageState( 0, D3DTSS_TEXCOORDINDEX, 0 ); - m_device->SetTextureStageState( 0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_DISABLE ); - m_device->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_DISABLE ); - m_device->SetTextureStageState( 1, D3DTSS_ALPHAOP, D3DTOP_DISABLE ); - - m_device->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA ); - m_device->SetRenderState( D3DRS_SRCBLENDALPHA, D3DBLEND_INVDESTALPHA ); - m_device->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA ); - m_device->SetRenderState( D3DRS_DESTBLENDALPHA, D3DBLEND_ONE ); - m_device->SetRenderState( D3DRS_BLENDOP, D3DBLENDOP_ADD ); - - m_device->SetRenderState( D3DRS_SRGBWRITEENABLE, false ); - m_device->SetRenderState( D3DRS_COLORWRITEENABLE, 0xffffffff ); - /* commented out until further notice */ - //m_device->SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR ); - //m_device->SetSamplerState( 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR ); - // todo - dex; if we use textures, need to set those rendering states too - } - - void c_renderer::end( ) { - m_device->SetTexture( 0, nullptr ); - //m_device->SetTexture( 1, nullptr ); - //m_device->SetTexture( 2, nullptr ); - //m_device->SetTexture( 3, nullptr ); - m_block->Apply( ); - //m_block->Release( ); - } - - void c_renderer::draw_line( clr_t color, int x0, int y0, int x1, int y1 ) { - d3d_vertex_t v[ 2 ] = { - d3d_vertex_t( float( x0 ), float( y0 ), 1.0f, color ), //because fuck you thats why - d3d_vertex_t( float( x1 ), float( y1 ), 1.0f, color ) - }; //edit: do we wanna use z for shit? i mean we could for like menu stuff - //so it renders above other stuff - - m_device->DrawPrimitiveUP( D3DPT_LINELIST, 1, v, VERTEX_SIZE ); - } - - void c_renderer::draw_rect( clr_t color, int x, int y, int w, int h ) { - d3d_vertex_t v[ 5 ] = { - d3d_vertex_t( float( x ), float( y ), 1.0f, color ), - d3d_vertex_t( float( x + w ), float( y ), 1.0f, color ), - d3d_vertex_t( float( x + w ), float( y + h ), 1.0f, color ), - d3d_vertex_t( float( x ), float( y + h ), 1.0f, color ), - d3d_vertex_t( float( x ), float( y ), 1.0f, color ) - }; - - m_device->DrawPrimitiveUP( D3DPT_LINESTRIP, 4, v, VERTEX_SIZE ); - } - - void c_renderer::draw_filled_rect( clr_t color, int x, int y, int w, int h ) { - d3d_vertex_t v[ 6 ] = { - d3d_vertex_t( float( x + w ), float( y ), 1.0f, color ), - d3d_vertex_t( float( x ), float( y + h ), 1.0f, color ), - d3d_vertex_t( float( x + w ), float( y + h ), 1.0f, color ), - d3d_vertex_t( float( x ), float( y ), 1.0f, color ), - d3d_vertex_t( float( x ), float( y + h ), 1.0f, color ), - d3d_vertex_t( float( x + w ), float( y ), 1.0f, color ) - }; - - m_device->DrawPrimitiveUP( D3DPT_TRIANGLELIST, 2, v, VERTEX_SIZE ); - } - - void c_renderer::draw_gradient( clr_t start, clr_t end, int x, int y, int w, int h, GradientType_t type ) { - d3d_vertex_t v[ 4 ]; - - switch( type ) { - case GRADIENT_VERTICAL: - v[ 0 ] = { float( x ), float( y ), 1.0f, start }; - v[ 1 ] = { float( x + w ), float( y ), 1.0f, start }; - v[ 2 ] = { float( x ), float( y + h ), 1.0f, end }; - v[ 3 ] = { float( x + w ), float( y + h ), 1.0f, end }; - break; - case GRADIENT_HORIZONTAL: - v[ 0 ] = { float( x ), float( y ), 1.0f, start }; - v[ 1 ] = { float( x + w ), float( y ), 1.0f, end }; - v[ 2 ] = { float( x ), float( y + h ), 1.0f, start }; - v[ 3 ] = { float( x + w ), float( y + h ), 1.0f, end }; - break; - } - - //m_device->SetRenderState( D3DRS_MULTISAMPLEANTIALIAS, true ); - m_device->DrawPrimitiveUP( D3DPT_TRIANGLESTRIP, 2, &v, VERTEX_SIZE ); - //m_device->SetRenderState( D3DRS_MULTISAMPLEANTIALIAS, false ); - } - - void c_renderer::draw_circle( clr_t color, int x, int y, int r, int res ) { - constexpr float PI = 3.1415926f; - const float step = PI * 2.0f / float( res ); - - int point_x = x + r, - point_y = y - r, - point_x_o{ }, - point_y_o{ }; - - m_device->SetRenderState( D3DRS_MULTISAMPLEANTIALIAS, true ); - for( int i{ }; i <= res; i++ ) { - float theta = float( i ) * step; - - point_x = x + ( int )( r * cos( theta ) ); - point_y = y - ( int )( r * sin( theta ) ); - if( i ) draw_line( color, point_x, point_y, point_x_o, point_y_o ); - point_x_o = point_x; - point_y_o = point_y; - } - m_device->SetRenderState( D3DRS_MULTISAMPLEANTIALIAS, false ); - } - - void c_renderer::draw_filled_circle( clr_t color, int x, int y, int r, int res ) { - d3d_vertex_t* v = ( d3d_vertex_t* )_alloca( VERTEX_SIZE * res ); - const float step = M_PI * 2.0f / res; - - for( size_t i{ }; i < res; ++i ) { - float theta = i * step; - float x_off = r * cos( theta ); - float y_off = r * sin( theta ); - - v[ i ] = { float( x + x_off ), float( y + y_off ), 1.0f, color }; - } - - m_device->SetRenderState( D3DRS_MULTISAMPLEANTIALIAS, true ); - m_device->DrawPrimitiveUP( D3DPT_TRIANGLESTRIP, res, v, VERTEX_SIZE ); - m_device->SetRenderState( D3DRS_MULTISAMPLEANTIALIAS, false ); - } - - void c_renderer::draw_text( ID3DXFont* font, clr_t color, - int x, int y, FontAlign_t align, long font_flags, const char* msg ) { - if( !msg ) return; - if( !font ) return; - - auto d3d_black = D3DCOLOR_RGBA( 0, 0, 0, color.a( ) ); - auto d3d_color = D3DCOLOR_RGBA( color.r( ), color.g( ), color.b( ), color.a( ) ); - auto buf = msg; - - if( align == ALIGN_CENTER ) x -= get_text_width( font, font_flags, msg ) / 2; - if( align == ALIGN_RIGHT ) x -= get_text_width( font, font_flags, msg ); - RECT rect{ x, y, 1000, 100 }; - - ulong_t flags = DT_NOCLIP | DT_LEFT | DT_TOP; - - if( font_flags & D3DFONTFLAG_DROPSHADOW ) { - RECT r{ rect }; - r.left++; - r.top++; - font->DrawTextA( 0, buf, -1, &r, flags, d3d_black ); - } - - if( font_flags & D3DFONTFLAG_OUTLINE ) { - for( int i = -1; i < 2; i++ ) { - if( !i ) continue; - RECT r{ rect }; - r.left += i; - r.top += i; - font->DrawTextA( 0, buf, -1, &r, flags, d3d_black ); - } - } - - font->DrawTextA( 0, buf, -1, &rect, flags, d3d_color ); - } - - int c_renderer::get_text_width( ID3DXFont* font, long flags, const char* msg, ... ) { - char* buffer = ( char* )_alloca( 2048 ); - va_list list{ }; - - memset( buffer, 0, 2048 ); - - __crt_va_start( list, msg ); - vsprintf_s( buffer, 2048, msg, list ); - __crt_va_end( list ); - - RECT temp{ }; - font->DrawTextA( 0, buffer, -1, &temp, DT_CALCRECT, 0x0 ); - - return ( temp.right - temp.left ); - } - - int c_renderer::get_text_height( ID3DXFont* font, long flags, const char* msg, ... ) { - char* buffer = ( char* )_alloca( 2048 ); - va_list list{ }; - - memset( buffer, 0, 2048 ); - - __crt_va_start( list, msg ); - vsprintf_s( buffer, 2048, msg, list ); - __crt_va_end( list ); - - RECT temp{ }; - font->DrawTextA( 0, buffer, -1, &temp, DT_CALCRECT, 0x0 ); - - return ( temp.bottom - temp.top ); - } -} diff --git a/tf2/d3d.hpp b/tf2/d3d.hpp deleted file mode 100644 index a927ee3..0000000 --- a/tf2/d3d.hpp +++ /dev/null @@ -1,126 +0,0 @@ -#ifndef D3D_HEADER //stackoverflow my niggas -#define D3D_HEADER - -#include -#include - -#pragma comment(lib, "d3d9.lib") -#pragma comment(lib, "d3dx9.lib") -#pragma warning(disable : 4838) - -#include -#include - -#include -#pragma comment(lib, "dwmapi.lib") - -#include "util.hpp" -#include "color.hpp" -#include "renderer.hpp" - -enum D3DFontFlags_t { - D3DFONTFLAG_OUTLINE = 0x10, - D3DFONTFLAG_DROPSHADOW = 0x100, -}; - -enum GradientType_t; - -namespace features { class c_chams; } - -//suck my dick -namespace d3d -{ - struct d3d_vertex_t { - d3d_vertex_t( float x, float y, float z, clr_t color ) : - m_x( x ), m_y( y ), m_z( z ), - m_clr( D3DCOLOR_RGBA( color.r( ), color.g( ), color.b( ), color.a( ) ) ) { }; - - d3d_vertex_t( ) : m_x( 0.f ), m_y( 0.f ), m_z( 0.f ), - m_clr( 0 ) { }; - - float m_x; - float m_y; - float m_z; - float m_rhw = 0.f; - D3DCOLOR m_clr; - }; - - constexpr size_t VERTEX_SIZE = sizeof( d3d_vertex_t ); - - struct d3d_fonts_t { - void release( ); - void create( IDirect3DDevice9* device ); - - ID3DXFont* f_12; - ID3DXFont* f_esp_small; - ID3DXFont* f_16; - ID3DXFont* f_18; - ID3DXFont* f_menu; - ID3DXFont* f_con; - }; - - class c_renderer { - private: - friend class features::c_chams; - - IDirect3DDevice9* m_device; - IDirect3DStateBlock9* m_block; - IDirect3DTexture9* m_chams; - IDirect3DTexture9* m_sil_txt; - IDirect3DVertexBuffer9* m_buffer; - IDirect3DSurface9* m_surface; - public: - ulong_t m_width; - ulong_t m_height; - - c_renderer( ) { }; - c_renderer( IDirect3DDevice9* device ); - ~c_renderer( ); - - void on_device_lost( ); - void on_device_reset( ); - auto get_device( ) { - return m_device; - } - - bool run_frame( IDirect3DDevice9* device ); - void begin( ); - void end( ); - - void draw_line( clr_t color, int x0, int y0, int x1, int y1 ); - void draw_rect( clr_t color, int x, int y, int w, int h ); - void draw_filled_rect( clr_t color, int x, int y, int w, int h ); - void draw_circle( clr_t color, int x, int y, int r, int steps = 48 ); - void draw_filled_circle( clr_t color, int x, int y, int r, int steps = 48 ); - void draw_gradient( clr_t start, clr_t end, int x, int y, int w, int h, GradientType_t type ); - - void draw_text( ID3DXFont* font, clr_t color, int x, int y, FontAlign_t align, long font_flags, const char* msg ); - - template < FontAlign_t align = ALIGN_CENTER > - void draw_text( ID3DXFont* font, clr_t color, int x, int y, long font_flags, const char* msg, ... ) { - char* buffer = ( char* )_alloca( 2048 ); - va_list list{ }; - - memset( buffer, 0, 2048 ); - - __crt_va_start( list, msg ); - vsprintf_s( buffer, 2048, msg, list ); - __crt_va_end( list ); - - draw_text( font, color, x, y, align, font_flags, buffer ); - } - - int get_text_width( ID3DXFont* font, long font_flags, const char* msg, ... ); - int get_text_height( ID3DXFont* font, long font_flags, const char* msg, ... ); - - private: - void invalidate_objects( ); - void create_objects( ); - }; - - extern d3d::d3d_fonts_t fonts; -} - -extern d3d::c_renderer g_d3d; - -#endif \ No newline at end of file diff --git a/tf2/d3d_sprite.cpp b/tf2/d3d_sprite.cpp deleted file mode 100644 index 37bbde1..0000000 --- a/tf2/d3d_sprite.cpp +++ /dev/null @@ -1,12 +0,0 @@ -#include "d3d_sprite.hpp" - -std::vector< d3d::c_sprite* > d3d::sprites; - -namespace icons -{ - d3d::c_sprite sprite_legit; - d3d::c_sprite sprite_rage; - d3d::c_sprite sprite_visuals; - d3d::c_sprite sprite_misc; - d3d::c_sprite sprite_config; -} \ No newline at end of file diff --git a/tf2/d3d_sprite.hpp b/tf2/d3d_sprite.hpp deleted file mode 100644 index 0d26f4c..0000000 --- a/tf2/d3d_sprite.hpp +++ /dev/null @@ -1,159 +0,0 @@ -#pragma once -#include "d3d.hpp" -#include "console.hpp" - - -namespace d3d -{ - class c_sprite; - - extern std::vector< c_sprite* > sprites; - - class c_sprite { - public: - size_t m_width{ }; - size_t m_height{ }; - - IDirect3DDevice9* m_device{ }; - ID3DXSprite* m_sprite{ }; - IDirect3DTexture9* m_texture{ }; - const byte* m_image{ }; - size_t m_image_size{ }; - - - public: - c_sprite::c_sprite( ) { - sprites.push_back( this ); - } - - c_sprite::~c_sprite( ) { - on_reset( ); - } - - void init( IDirect3DDevice9* device, const byte* file, size_t img_size, size_t width, size_t height ) { - m_width = width; - m_height = height; - - m_device = device; - m_image = file; - m_image_size = img_size; - } - - void begin( IDirect3DDevice9* device ) { - m_device = device; - - if( !m_device ) { - return; - } - - if( !m_sprite ) - D3DXCreateSprite( m_device, &m_sprite ); - - if( !m_texture ) { - auto hr = D3DXCreateTextureFromFileInMemoryEx( - m_device, m_image, m_image_size, - m_width, m_height, D3DX_DEFAULT, 0, D3DFMT_A8B8G8R8, - D3DPOOL_MANAGED, D3DX_DEFAULT, D3DX_DEFAULT, 0, - 0, 0, &m_texture ); - } - - if( m_sprite ) - m_sprite->Begin( D3DXSPRITE_DONOTMODIFY_RENDERSTATE ); - } - - void end( ) { - if( !m_device || !m_sprite || !m_texture ) return; - m_sprite->End( ); - } - - void on_reset( ) { - if( m_sprite && m_device && m_texture ) { - m_sprite->OnLostDevice( ); - m_texture->Release( ); - m_texture = nullptr; - } - } - - void on_reset_end( ) { - if( m_sprite && m_device ) - m_sprite->OnResetDevice( ); - } - - void draw( int x, int y, clr_t color ) { - if( !m_device || !m_texture || !m_sprite ) { - return; - } - - const float scale = 0.8f; - - ulong_t - fill_mode, - adaptive_tess, - dest_blend, - cull, - stencil, - vertex_blend, - alpha_test; - - m_device->GetRenderState( D3DRENDERSTATETYPE::D3DRS_FILLMODE, &fill_mode ); - m_device->GetRenderState( D3DRENDERSTATETYPE::D3DRS_ENABLEADAPTIVETESSELLATION, &adaptive_tess ); - m_device->GetRenderState( D3DRENDERSTATETYPE::D3DRS_DESTBLEND, &dest_blend ); - m_device->GetRenderState( D3DRENDERSTATETYPE::D3DRS_CULLMODE, &cull ); - m_device->GetRenderState( D3DRENDERSTATETYPE::D3DRS_STENCILENABLE, &stencil ); - m_device->GetRenderState( D3DRENDERSTATETYPE::D3DRS_VERTEXBLEND, &vertex_blend ); - m_device->GetRenderState( D3DRENDERSTATETYPE::D3DRS_ALPHATESTENABLE, &alpha_test ); - - ulong_t mag_filter; - ulong_t min_filter; - m_device->GetSamplerState( 0, D3DSAMPLERSTATETYPE::D3DSAMP_MAGFILTER, &mag_filter ); - m_device->GetSamplerState( 0, D3DSAMPLERSTATETYPE::D3DSAMP_MINFILTER, &min_filter ); - - m_device->SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_ANISOTROPIC ); - m_device->SetSamplerState( 0, D3DSAMP_MAGFILTER, D3DTEXF_ANISOTROPIC ); - - m_device->SetRenderState( D3DRENDERSTATETYPE::D3DRS_FILLMODE, D3DFILL_SOLID ); - m_device->SetRenderState( D3DRENDERSTATETYPE::D3DRS_ENABLEADAPTIVETESSELLATION, false ); - m_device->SetRenderState( D3DRENDERSTATETYPE::D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA ); - m_device->SetRenderState( D3DRENDERSTATETYPE::D3DRS_CULLMODE, D3DCULL_NONE ); - m_device->SetRenderState( D3DRENDERSTATETYPE::D3DRS_STENCILENABLE, false ); - m_device->SetRenderState( D3DRENDERSTATETYPE::D3DRS_VERTEXBLEND, false ); - m_device->SetRenderState( D3DRENDERSTATETYPE::D3DRS_ALPHATESTENABLE, D3DLINECAPS_ALPHACMP ); - m_device->SetRenderState( D3DRENDERSTATETYPE::D3DRS_MULTISAMPLEANTIALIAS, D3DMULTISAMPLE_4_SAMPLES ); - - - ulong_t hr; - D3DXVECTOR2 center = D3DXVECTOR2( ( m_width * scale ) * 0.5f, ( m_height * scale ) * 0.5f ); - D3DXVECTOR2 trans = D3DXVECTOR2( x - center.x, y - center.y ); - D3DXMATRIX matrix; - D3DXVECTOR2 scale_vec( scale, scale ); - D3DXMatrixTransformation2D( &matrix, 0, 0.f, &scale_vec, ¢er, 0.f, &trans ); - - hr = m_sprite->SetTransform( &matrix ); - - auto d3dcolor = D3DCOLOR_RGBA( color.r( ), - color.g( ), color.b( ), color.a( ) ); - hr = m_sprite->Draw( m_texture, 0, 0, 0, d3dcolor ); - - m_device->SetRenderState( D3DRENDERSTATETYPE::D3DRS_MULTISAMPLEANTIALIAS, false ); - m_device->SetRenderState( D3DRENDERSTATETYPE::D3DRS_FILLMODE, fill_mode ); - m_device->SetRenderState( D3DRENDERSTATETYPE::D3DRS_ENABLEADAPTIVETESSELLATION, adaptive_tess ); - m_device->SetRenderState( D3DRENDERSTATETYPE::D3DRS_DESTBLEND, dest_blend ); - m_device->SetRenderState( D3DRENDERSTATETYPE::D3DRS_CULLMODE, cull ); - m_device->SetRenderState( D3DRENDERSTATETYPE::D3DRS_STENCILENABLE, stencil ); - m_device->SetRenderState( D3DRENDERSTATETYPE::D3DRS_VERTEXBLEND, vertex_blend ); - m_device->SetRenderState( D3DRENDERSTATETYPE::D3DRS_ALPHATESTENABLE, alpha_test ); - - m_device->SetSamplerState( 0, D3DSAMPLERSTATETYPE::D3DSAMP_MAGFILTER, mag_filter ); - //m_device->SetSamplerState( 0, D3DSAMPLERSTATETYPE::D3DSAMP_MINFILTER, min_filter ); - } - }; -} - -namespace icons -{ - extern d3d::c_sprite sprite_legit; - extern d3d::c_sprite sprite_rage; - extern d3d::c_sprite sprite_visuals; - extern d3d::c_sprite sprite_misc; - extern d3d::c_sprite sprite_config; -} \ No newline at end of file diff --git a/tf2/directx.cpp b/tf2/directx.cpp deleted file mode 100644 index db2d62f..0000000 --- a/tf2/directx.cpp +++ /dev/null @@ -1,233 +0,0 @@ -#include - -#include "settings.h" -#include "hooks.h" -#include "ui.h" -#include "base_cheat.h" -#include "ctx.hpp" -#include "mem.hpp" - -//this shit prolly barely working rn like a toddler trying to walk but hes actually mentally slow and 25 - -using namespace d3d; - -float ui::get_tf2_frametime( ) { - return cl.m_frametime; -} - -void on_d3d( IDirect3DDevice9* device ) { - constexpr float step = 1.0f / 2.f; - constexpr float fade_step = 1.0f / 7.f; - static float anim_time{ }; - static bool flip{ }; - static int anim_progress{ }; - - static bool sprites_init{ }; - if( !sprites_init ) { - ui::setup_sprites( device ); - sprites_init = true; - } - - if( g_settings.misc.hide_from_obs ) - g_cheat.visuals( ); - - if( g_settings.menu.open ) { - if( anim_time >= 0.95f ) { - flip = true; - } - if( anim_time <= 0.05f ) { - flip = false; - } - - if( flip ) - anim_time -= fade_step * ui::ui_get_frametime( ); - else - anim_time += fade_step * ui::ui_get_frametime( ); - - anim_time = std::clamp( anim_time, 0.f, 1.0f ); - - ui::set_animtime( anim_time ); - - anim_progress += ui::ui_get_frametime( ) * step * 255; - anim_progress = std::clamp( anim_progress, 0, 50 ); - g_d3d.draw_filled_rect( clr_t( 0, 0, 0, anim_progress ), - 0, 0, g_d3d.m_width, g_d3d.m_height ); - - ui::render( ); - } - else { - anim_progress = 0; - } -} - -long __stdcall hooks::d3d::draw( IDirect3DDevice9* device, D3DPRIMITIVETYPE type, int v_index, uint32_t min_index, uint32_t num_vert, uint32_t start_index, uint32_t prim_count ) { - static auto draw_o = cl.m_d3d->get_old_function< decltype( &hooks::d3d::draw ) >( 82 ); - - static auto ret_addr = pattern::first_code_match( GetModuleHandleA( xors( "studiorender.dll" ) ), xors( "EB 1F FF 75 F0" ), -8 ); - - std::function< void*( void** ) > find_ent; - find_ent = [ & ]( void** ebp ) -> void* { - if( !ebp ) - return nullptr; - - void** next = *( void*** )( ebp ); - if( ( uintptr_t )( ebp[ 1 ] ) == ret_addr ) - return next[ 4 ]; - - return find_ent( next ); - }; - - c_base_player* ent = ( c_base_player* )( find_ent( ( void** )( get_baseptr( ) ) ) ); - if( g_ctx.m_local && !!ent && ent->m_iHealth( ) > 0 && ent->m_iTeamNum( ) > 1 && g_settings.visuals.chams.enabled( ) && g_settings.misc.hide_from_obs ) { - //g_cheat.chams.d3d_render_chams( ent, type, v_index, min_index, num_vert, start_index, prim_count ); - return true; - } - - auto result = draw_o( device, type, v_index, min_index, num_vert, start_index, prim_count ); - return result; -} - -long __stdcall hooks::d3d::end_scene( IDirect3DDevice9* device ) { - static auto end_scene_o = cl.m_d3d->get_old_function< decltype( &hooks::d3d::end_scene ) >( 42 ); - if( cl.m_panic ) return end_scene_o( device ); - - static uintptr_t return_address = 0; - static uintptr_t gameoverlay_return_address = 0; - - if( !return_address ) { - return_address = ( uintptr_t )( _ReturnAddress( ) ); - } - - if( !gameoverlay_return_address ) { - MEMORY_BASIC_INFORMATION info; - VirtualQuery( _ReturnAddress( ), &info, sizeof( MEMORY_BASIC_INFORMATION ) ); - - char mod[ MAX_PATH ]; - GetModuleFileNameA( ( HMODULE )info.AllocationBase, mod, MAX_PATH ); - - if( strstr( mod, xors( "gameoverlay" ) ) ) - gameoverlay_return_address = ( uintptr_t )( _ReturnAddress( ) ); - } - - if( return_address != ( uintptr_t )( _ReturnAddress( ) ) && !g_settings.misc.hide_from_obs ) - return end_scene_o( device ); - - if( gameoverlay_return_address != ( uintptr_t )( _ReturnAddress( ) ) && g_settings.misc.hide_from_obs ) - return end_scene_o( device ); - - if( !cl.m_panic && g_d3d.run_frame( device ) ) { - for( auto& it : ::d3d::sprites ) - it->begin( device ); - g_d3d.begin( ); - - //if( g_settings.misc.hide_from_obs ) - //g_cheat.m_chams.d3d_render_textures( ); - - on_d3d( device ); - - std::chrono::high_resolution_clock timer; - static auto last = timer.now( ); - auto now = timer.now( ); - - std::chrono::duration< double > delta = now - last; - last = timer.now( ); - - cl.m_frametime = delta.count( ); - - if( !g_con->m_logs.empty( ) && g_settings.menu.logs_enable ) { - auto& logs = g_con->m_logs; - float time = ( float )GetTickCount( ) * 0.001f; - - auto data = logs.data( ); - - int cur_pos = 2; - for( int i = logs.size( ) - 1; i >= 0; --i ) { - if( cur_pos > g_d3d.m_height - 200 ) { - cur_pos -= 8; - break; - } - - float delta = time - data[ i ].m_time; - if( delta >= 5.0f ) { - break; - } - - clr_t col( 255, 255, 255 ); - if( delta > 4.f ) col.a( ) *= ( 6.f - delta ); - - g_d3d.draw_text< ALIGN_RIGHT >( fonts.f_con, col, g_d3d.m_width - 5, cur_pos, D3DFONTFLAG_DROPSHADOW, data[ i ].m_msg ); - cur_pos += 10; - } - } - - if( g_settings.menu.open || g_con->m_open ) { - ui::ui_draw_cursor( ); - } - - for( auto& it : ::d3d::sprites ) - it->end( ); - g_d3d.end( ); - } - - return end_scene_o( device ); -} - -long __stdcall hooks::d3d::present( IDirect3DDevice9* device, RECT* source, RECT* dest, HWND wnd_override, RGNDATA* reg ) { - static auto present_o = cl.m_d3d->get_old_function< decltype( &hooks::d3d::present ) >( 17 ); - - static uintptr_t return_address = 0; - if( !return_address ) { - return_address = ( uintptr_t )( _ReturnAddress( ) ); - } - - if( return_address && return_address != ( uintptr_t )( _ReturnAddress( ) ) ) - return present_o( device, source, dest, wnd_override, reg ); - - if( g_d3d.run_frame( device ) ) { - g_d3d.begin( ); - if( g_settings.misc.watermark ) { - static std::string str( xors( "moneybot | " ) ); - static bool transform = false; - if( !transform ) { - str += __DATE__; - str += ", "; - str += __TIME__; - - std::transform( str.begin( ), str.end( ), str.begin( ), - [ ]( char c ) { return ::tolower( c ); } ); - transform = true; - } - - g_d3d.draw_text< ALIGN_RIGHT >( ::d3d::fonts.f_menu, - ui::ui_get_text_col( ), g_d3d.m_width - 10, 8, - D3DFONTFLAG_DROPSHADOW, str.c_str( ) ); - } - - g_con->draw( ); - if( ( g_settings.menu.open || g_con->m_open ) && !g_settings.misc.hide_from_obs ) { - ui::ui_draw_cursor( ); - } - g_d3d.end( ); - } - - return present_o( device, source, dest, wnd_override, reg ); -} - -long __stdcall hooks::d3d::reset( IDirect3DDevice9* device, D3DPRESENT_PARAMETERS* params ) { - static auto reset_o = cl.m_d3d->get_old_function< decltype( &hooks::d3d::reset ) >( 16 ); - if( cl.m_panic ) { - return reset_o( device, params ); - } - - for( auto& sprite : ::d3d::sprites ) - sprite->on_reset( ); - - g_d3d.on_device_lost( ); - long result = reset_o( device, params ); - g_d3d.on_device_reset( ); - - for( auto& sprite : ::d3d::sprites ) - sprite->on_reset_end( ); - - return result; -} \ No newline at end of file diff --git a/tf2/do_post_screen_space_effects.cpp b/tf2/do_post_screen_space_effects.cpp deleted file mode 100644 index 401b05e..0000000 --- a/tf2/do_post_screen_space_effects.cpp +++ /dev/null @@ -1,16 +0,0 @@ -#include "hooks.h" -#include "base_cheat.h" -#include "ctx.hpp" -//whore? -bool __fastcall hooks::do_post_screen_space_effects( void* ecx_, void* edx_, CViewSetup* setup ) { - static auto old_fn = cl.m_clientmode->get_old_function< decltype( &do_post_screen_space_effects ) >( 39 ); - - g_ctx.m_drawing_postscreenspace = true; - if( cl.m_engine( )->IsInGame( ) && g_ctx.m_local ) { - } - - bool ret = old_fn( ecx_, 0, setup ); - g_ctx.m_drawing_postscreenspace = false; - - return ret; -} \ No newline at end of file diff --git a/tf2/draw_model_execute.cpp b/tf2/draw_model_execute.cpp deleted file mode 100644 index 1191a90..0000000 --- a/tf2/draw_model_execute.cpp +++ /dev/null @@ -1,125 +0,0 @@ -#include "hooks.h" -#include "base_cheat.h" -#include "ctx.hpp" -#include "util.hpp" -#include "settings.h" -//this is so ugly dont even look at it - -//gets called once per frame for every entity -void __fastcall hooks::draw_model_execute( IVModelInfo* ecx_, void* edx_, void* render_ctx, const DrawModelState_t& state, const ModelRenderInfo_t& info, matrix3x4* bone_to_world ) { - static auto dme_o = cl.m_model_render->get_old_function< decltype( &hooks::draw_model_execute ) >( 19 ); - - if( cl.m_panic || g_ctx.m_drawing_postscreenspace || g_settings.misc.hide_from_obs ) - return dme_o( ecx_, edx_, render_ctx, state, info, bone_to_world ); - - bool draw = true; - IMaterial* mat = g_settings.visuals.chams.flat( ) ? g_cheat.chams.m_materials.m_chams_flat : g_cheat.chams.m_materials.m_chams; - auto model_name = cl.m_modelinfo( )->GetModelName( info.m_model ); - auto local_index = cl.m_engine( )->GetLocalPlayer( ); - int local_team = 0; - if( g_ctx.m_local ) - local_team = g_ctx.m_local->m_iTeamNum( ); - int team = 0; - bool is_player = false; - - if( strstr( model_name, xors( "models/player" ) ) && info.m_entity_index == local_index ) { - if( g_settings.misc.thirdperson( ) && g_ctx.m_local && g_ctx.m_local->is_valid( ) - && g_ctx.m_local->m_bIsScoped( ) ) { - float clr[ ] = { 1.0f, 1.0f, 1.0f }; - cl.m_render_view( )->SetColorModulation( clr ); - cl.m_render_view( )->SetBlend( 0.5f ); - return dme_o( ecx_, edx_, render_ctx, state, info, bone_to_world ); - } - } - - if( strstr( model_name, xors( "models/player" ) ) && info.m_entity_index ) { - auto player = cl.m_entlist( )->get_client_entity< c_base_player >( info.m_entity_index ); - - if( player && player->is_valid( ) ) { - is_player = true; - team = player->m_iTeamNum( ); - - if( g_settings.visuals.chams.enabled ) { - if( g_settings.visuals.chams.ignore_z && !g_ctx.m_drawing_screneend && ( team != local_team || g_settings.visuals.chams.friendlies( ) ) ) - draw = false; - else if( !g_settings.visuals.chams.ignore_z && ( team != local_team || g_settings.visuals.chams.friendlies( ) ) ) { - fclr_t clr = team != local_team ? g_settings.visuals.chams.color_visible_enemy( ) : g_settings.visuals.chams.color_visible_friendly( ); - - mat->SetMaterialVarFlag( MATERIAL_VAR_IGNOREZ, false ); - g_cheat.chams.m_materials.force_material( mat, clr ); - dme_o( ecx_, 0, render_ctx, state, info, bone_to_world ); - cl.m_model_render( )->ForcedMaterialOverride( nullptr ); - cl.m_render_view( )->SetBlend( 1.0f ); - draw = false; - } - } - - } - } - - if( g_settings.misc.transparent_vm && strstr( model_name, xors( "weapon" ) ) ) { - if( strstr( model_name, xors( "arms" ) ) ) { - cl.m_render_view( )->SetBlend( 0.6f ); - } - } - - if( is_player ) { - - if( g_settings.legit.backtracking_visualize( ) && ( team != local_team || g_settings.legit.friendlies( ) ) ) { - auto ent = cl.m_entlist( )->get_client_entity< c_base_player >( info.m_entity_index ); - auto record = g_cheat.aim.m_lagcomp.find_best_record( info.m_entity_index ); - { //idk - auto records = g_cheat.aim.m_lagcomp.get_records( info.m_entity_index ); - if( records.size( ) ) { - for( auto& it : util::reverse_iterator( records ) ) { - if( it.is_valid( ) ) { - record = ⁢ - break; - } - } - } - } - - if( record && record->is_valid( ) && record->m_position.dist_to( ent->get_hitbox_position( 0 ) ) > 5.f ) { - fclr_t clr_hid = team != local_team ? g_settings.visuals.chams.color_hidden_enemy( ).to_fclr( ) : g_settings.visuals.chams.color_hidden_friendly( ).to_fclr( ); - - float backup_modulation[ 3 ]{ }; - bool backup_ignorez = false; - float backup_blend = 1.0f; - - backup_blend = cl.m_render_view( )->GetBlend( ); - cl.m_render_view( )->GetColorModulation( backup_modulation ); - - //BIG ROFL - if( backup_modulation[ 0 ] == clr_hid.r( ) && backup_modulation[ 1 ] == clr_hid.g( ) && backup_modulation[ 2 ] == clr_hid.b( ) - && backup_blend == clr_hid.a( ) ) { - backup_ignorez = true; - } - - if( !backup_ignorez ) { - auto flat_mat = g_cheat.chams.m_materials.m_chams_flat.m_mat; - flat_mat->SetMaterialVarFlag( MATERIAL_VAR_IGNOREZ, g_settings.visuals.chams.ignore_z && g_settings.visuals.chams.enabled ); - g_cheat.chams.m_materials.force_material( g_cheat.chams.m_materials.m_chams_flat, g_settings.legit.backtracking_col( ) ); - dme_o( ecx_, edx_, render_ctx, state, info, record->m_matrix ); - flat_mat->SetMaterialVarFlag( MATERIAL_VAR_IGNOREZ, false ); - } - - cl.m_render_view( )->SetBlend( backup_blend ); - cl.m_render_view( )->SetColorModulation( backup_modulation ); - cl.m_model_render( )->ForcedMaterialOverride( g_settings.visuals.chams.enabled( ) && - ( team != local_team || g_settings.visuals.chams.friendlies( ) ) ? mat : nullptr ); - - if( draw ) { - dme_o( ecx_, edx_, render_ctx, state, info, bone_to_world ); - draw = false; - } - } - } - } - - if( draw ) { - dme_o( ecx_, 0, render_ctx, state, info, bone_to_world ); - } - - cl.m_model_render( )->ForcedMaterialOverride( nullptr ); -} \ No newline at end of file diff --git a/tf2/dt_common.h b/tf2/dt_common.h deleted file mode 100644 index 7f86418..0000000 --- a/tf2/dt_common.h +++ /dev/null @@ -1,127 +0,0 @@ -#pragma once - -#define MAX_DATATABLES 1024 // must be a power of 2. -#define MAX_DATATABLE_PROPS 4096 -#define MAX_ARRAY_ELEMENTS 2048 // a network array should have more that 1024 elements - -#define HIGH_DEFAULT -121121.121121f - -#define BITS_FULLRES -1 // Use the full resolution of the type being encoded. -#define BITS_WORLDCOORD -2 // Encode as a world coordinate. - -#define DT_MAX_STRING_BITS 9 -#define DT_MAX_STRING_BUFFERSIZE (1 << DT_MAX_STRING_BITS) // Maximum length of a string that can be sent. - -#define STRINGBUFSIZE(className, varName) sizeof(((className*)0)->varName) - -// Gets the size of a variable in a class. -#define PROPSIZEOF(className, varName) sizeof(((className*)0)->varName) - -// SendProp::m_Flags. -enum SPROP_FLAGS -{ - SPROP_UNSIGNED = (1<<0), // Unsigned integer data. - SPROP_COORD = (1<<1), // If this is set, the float/vector is treated like a world coordinate. - // Note that the bit count is ignored in this case. - SPROP_NOSCALE = (1<<2), // For floating point, don't scale into range, just take value as is. - SPROP_ROUNDDOWN = (1<<3), // For floating point, limit high value to range minus one bit unit - SPROP_ROUNDUP = (1<<4), // For floating point, limit low value to range minus one bit unit - SPROP_NORMAL = (1<<5), // If this is set, the vector is treated like a normal (only valid for vectors), - SPROP_EXCLUDE = (1<<6), // This is an exclude prop (not excludED, but it points at another prop to be excluded),. - SPROP_XYZE = (1<<7), // Use XYZ/Exponent encoding for vectors. - SPROP_INSIDEARRAY = (1<<8), // This tells us that the property is inside an array, so it shouldn't be put into the - // flattened property list. Its array will point at it when it needs to. - SPROP_PROXY_ALWAYS_YES = (1<<9), // Set for datatable props using one of the default datatable proxies like - // SendProxy_DataTableToDataTable that always send the data to all clients. - SPROP_CHANGES_OFTEN = (1<<10), // this is an often changed field, moved to head of sendtable so it gets a small index - SPROP_IS_A_VECTOR_ELEM = (1<<11), // Set automatically if SPROP_VECTORELEM is used. - SPROP_COLLAPSIBLE = (1<<12), // Set automatically if it's a datatable with an offset of 0 that doesn't change the pointer - // (ie: for all automatically-chained base classes),. - // In this case, it can get rid of this SendPropDataTable altogether and spare the - // trouble of walking the hierarchy more than necessary. - SPROP_COORD_MP = (1<<13), // Like SPROP_COORD, but special handling for multiplayer games - SPROP_COORD_MP_LOWPRECISION = (1<<14), // Like SPROP_COORD, but special handling for multiplayer games where the fractional component only gets a 3 bits instead of 5 - SPROP_COORD_MP_INTEGRAL = (1<<15), // SPROP_COORD_MP, but coordinates are rounded to integral boundaries - - // This is server side only, it's used to mark properties whose SendProxy_* functions encode against gpGlobals->tickcount (the only ones that currently do this are - // m_flAnimTime and m_flSimulationTime. MODs shouldn't need to mess with this probably - SPROP_ENCODED_AGAINST_TICKCOUNT = (1<<16), -}; - -#define SPROP_NUMFLAGBITS_NETWORKED 16 - -#define SPROP_NUMFLAGBITS 17 - -// Used by the SendProp and RecvProp functions to disable debug checks on type sizes. -#define SIZEOF_IGNORE -1 - -// Use this to extern send and receive datatables, and reference them. -#define EXTERN_SEND_TABLE(tableName) namespace tableName {extern SendTable g_SendTable;} -#define EXTERN_RECV_TABLE(tableName) namespace tableName {extern RecvTable g_RecvTable;} - -#define REFERENCE_SEND_TABLE(tableName) tableName::g_SendTable -#define REFERENCE_RECV_TABLE(tableName) tableName::g_RecvTable - -class SendProp; - -typedef enum -{ - DPT_Int = 0, - DPT_Float, - DPT_Vector, - DPT_VectorXY, - DPT_String, - DPT_Array, // An array of the base types (can't be of datatables). - DPT_DataTable, - DPT_NUMSendPropTypes -} SendPropType; - -/* -class DVariant -{ -public: - union - { - float m_Float; - long m_Int; - char* m_pString; - void* m_pData; // For DataTables. - float m_Vector[3]; - }; - - SendPropType m_Type; - - DVariant() { m_Type = DPT_Float; } - - DVariant(float val) - { - m_Type = DPT_Float; - m_Float = val; - } -}; -*/ - -struct DVariant { - union { - float m_Float; - long m_Int; - char* m_pString; - void* m_pData; - float m_Vector[3]; - __int64 m_Int64; - }; - - int m_Type; -}; - -// This can be used to set the # of bits used to transmit a number between 0 and nMaxElements-1. -inline int NumBitsForCount(int nMaxElements) -{ - int nBits = 0; - while(nMaxElements > 0) - { - ++nBits; - nMaxElements >>= 1; - } - return nBits; -} diff --git a/tf2/dt_recv.h b/tf2/dt_recv.h deleted file mode 100644 index 47f945b..0000000 --- a/tf2/dt_recv.h +++ /dev/null @@ -1,479 +0,0 @@ -#pragma once - -#include "dt_common.h" - -#define ADDRESSPROXY_NONE -1 - -class RecvTable; -class RecvProp; - -/* -// This is passed into RecvProxy functions. -class CRecvProxyData -{ -public: - const RecvProp* m_pRecvProp; // The property it's receiving. - DVariant m_Value; // The value given to you to store. - int m_iElement; // Which array element you're getting. - int m_ObjectID; // The object being referred to. -}; -*/ - -struct CRecvProxyData { - const RecvProp* m_pRecvProp; - DVariant m_Value; - int m_iElement; - int m_ObjectID; -}; - -//----------------------------------------------------------------------------- -// pStruct = the base structure of the datatable this variable is in (like C_BaseEntity) -// pOut = the variable that this this proxy represents (like C_BaseEntity::m_SomeValue). -// -// Convert the network-standard-type value in m_Value into your own format in pStruct/pOut. -//----------------------------------------------------------------------------- -typedef void (*RecvVarProxyFn)(const CRecvProxyData* pData, void* pStruct, void* pOut); - -// ------------------------------------------------------------------------ // -// ArrayLengthRecvProxies are optionally used to get the length of the -// incoming array when it changes. -// ------------------------------------------------------------------------ // -typedef void (*ArrayLengthRecvProxyFn)(void* pStruct, int objectID, int currentArrayLength); - -// NOTE: DataTable receive proxies work differently than the other proxies. -// pData points at the object + the recv table's offset. -// pOut should be set to the location of the object to unpack the data table into. -// If the parent object just contains the child object, the default proxy just does *pOut = pData. -// If the parent object points at the child object, you need to dereference the pointer here. -// NOTE: don't ever return null from a DataTable receive proxy function. Bad things will happen. -typedef void (*DataTableRecvVarProxyFn)(const RecvProp* pProp, void** pOut, void* pData, int objectID); - -// This is used to fork over the standard proxy functions to the engine so it can -// make some optimizations. -class CStandardRecvProxies -{ -public: - CStandardRecvProxies(); - - RecvVarProxyFn m_Int32ToInt8; - RecvVarProxyFn m_Int32ToInt16; - RecvVarProxyFn m_Int32ToInt32; - RecvVarProxyFn m_FloatToFloat; - RecvVarProxyFn m_VectorTovec3_t; -}; - -extern CStandardRecvProxies g_StandardRecvProxies; - -class CRecvDecoder; - -class RecvProp -{ - // This info comes from the receive data table. -public: - RecvProp(); - - void InitArray(int nElements, int elementStride); - - int GetNumElements() const; - void SetNumElements(int nElements); - - int GetElementStride() const; - void SetElementStride(int stride); - - int GetFlags() const; - - const char* GetName() const; - SendPropType GetType() const; - - RecvTable* GetDataTable() const; - void SetDataTable(RecvTable* pTable); - - RecvVarProxyFn GetProxyFn() const; - void SetProxyFn(RecvVarProxyFn fn); - - DataTableRecvVarProxyFn GetDataTableProxyFn() const; - void SetDataTableProxyFn(DataTableRecvVarProxyFn fn); - - int GetOffset() const; - void SetOffset(int o); - - // Arrays only. - RecvProp* GetArrayProp() const; - void SetArrayProp(RecvProp* pProp); - - // Arrays only. - void SetArrayLengthProxy(ArrayLengthRecvProxyFn proxy); - ArrayLengthRecvProxyFn GetArrayLengthProxy() const; - - bool IsInsideArray() const; - void SetInsideArray(); - - // Some property types bind more data to the prop in here. - const void* GetExtraData() const; - void SetExtraData(const void* pData); - - // If it's one of the numbered "000", "001", etc properties in an array, then - // these can be used to get its array property name for debugging. - const char* GetParentArrayPropName(); - void SetParentArrayPropName(const char* pArrayPropName); - -public: - const char* m_pVarName; - SendPropType m_RecvType; - int m_Flags; - int m_StringBufferSize; - - bool m_bInsideArray; // Set to true by the engine if this property sits inside an array. - - // Extra data that certain special property types bind to the property here. - const void* m_pExtraData; - - // If this is an array (DPT_Array). - RecvProp* m_pArrayProp; - ArrayLengthRecvProxyFn m_ArrayLengthProxy; - - RecvVarProxyFn m_ProxyFn; - DataTableRecvVarProxyFn m_DataTableProxyFn; // For RDT_DataTable. - - RecvTable* m_pDataTable; // For RDT_DataTable. - int m_Offset; - - int m_ElementStride; - int m_nElements; - - // If it's one of the numbered "000", "001", etc properties in an array, then - // these can be used to get its array property name for debugging. - const char* m_pParentArrayPropName; -}; - -class RecvTable -{ -public: - using PropType = RecvProp; - - RecvTable(); - RecvTable(RecvProp* pProps, int nProps, const char* pNetTableName); - ~RecvTable(); - - void Construct(RecvProp* pProps, int nProps, const char* pNetTableName); - - int GetNumProps(); - RecvProp* GetProp(int i); - - const char* GetName(); - - // Used by the engine while initializing array props. - void SetInitialized(bool bInitialized); - bool IsInitialized() const; - - // Used by the engine. - void SetInMainList(bool bInList); - bool IsInMainList() const; - -public: - // Properties described in a table. - RecvProp* m_pProps; - int m_nProps; - - // The decoder. NOTE: this covers each RecvTable AND all its children (ie: its children - // will have their own decoders that include props for all their children). - CRecvDecoder* m_pDecoder; - - const char* m_pNetTableName; // The name matched between client and server. - -private: - bool m_bInitialized; - bool m_bInMainList; -}; - -inline int RecvTable::GetNumProps() -{ - return m_nProps; -} - -inline RecvProp* RecvTable::GetProp(int i) -{ - // Assert( i >= 0 && i < m_nProps ); - return &m_pProps[i]; -} - -inline const char* RecvTable::GetName() -{ - return m_pNetTableName; -} - -inline void RecvTable::SetInitialized(bool bInitialized) -{ - m_bInitialized = bInitialized; -} - -inline bool RecvTable::IsInitialized() const -{ - return m_bInitialized; -} - -inline void RecvTable::SetInMainList(bool bInList) -{ - m_bInMainList = bInList; -} - -inline bool RecvTable::IsInMainList() const -{ - return m_bInMainList; -} - -#define RECVINFO(varName) #varName, offsetof(currentRecvDTClass, varName), sizeof(((currentRecvDTClass*)0)->varName) -#define RECVINFO_NAME(varName, remoteVarName) #remoteVarName, offsetof(currentRecvDTClass, varName), sizeof(((currentRecvDTClass*)0)->varName) -#define RECVINFO_STRING(varName) #varName, offsetof(currentRecvDTClass, varName), STRINGBUFSIZE(currentRecvDTClass, varName) -#define RECVINFO_BASECLASS(tableName) RecvPropDataTable("this", 0, 0, &REFERENCE_RECV_TABLE(tableName)) -#define RECVINFO_ARRAY(varName) #varName, offsetof(currentRecvDTClass, varName), sizeof(((currentRecvDTClass*)0)->varName[0]), sizeof(((currentRecvDTClass*)0)->varName)/sizeof(((currentRecvDTClass*)0)->varName[0]) - -// Just specify the name and offset. Used for strings and data tables. -#define RECVINFO_NOSIZE(varName) #varName, offsetof(currentRecvDTClass, varName) -#define RECVINFO_DT(varName) RECVINFO_NOSIZE(varName) -#define RECVINFO_DTNAME(varName,remoteVarName) #remoteVarName, offsetof(currentRecvDTClass, varName) - -void RecvProxy_FloatToFloat(const CRecvProxyData* pData, void* pStruct, void* pOut); -void RecvProxy_VectorToVector(const CRecvProxyData* pData, void* pStruct, void* pOut); -void RecvProxy_QuaternionToQuaternion(const CRecvProxyData* pData, void* pStruct, void* pOut); -void RecvProxy_Int32ToInt8(const CRecvProxyData* pData, void* pStruct, void* pOut); -void RecvProxy_Int32ToInt16(const CRecvProxyData* pData, void* pStruct, void* pOut); -void RecvProxy_StringToString(const CRecvProxyData* pData, void* pStruct, void* pOut); -void RecvProxy_Int32ToInt32(const CRecvProxyData* pData, void* pStruct, void* pOut); - -// StaticDataTable does *pOut = pData. -void DataTableRecvProxy_StaticDataTable(const RecvProp* pProp, void** pOut, void* pData, int objectID); - -// PointerDataTable does *pOut = *((void**)pData) (ie: pData is a pointer to the object to decode into). -void DataTableRecvProxy_PointerDataTable(const RecvProp* pProp, void** pOut, void* pData, int objectID); - -RecvProp RecvPropFloat( - const char* pVarName, - int offset, - int sizeofVar = SIZEOF_IGNORE, // Handled by RECVINFO macro, but set to SIZEOF_IGNORE if you don't want to bother. - int flags = 0, - RecvVarProxyFn varProxy = RecvProxy_FloatToFloat -); - -RecvProp RecvPropVector( - const char* pVarName, - int offset, - int sizeofVar = SIZEOF_IGNORE, // Handled by RECVINFO macro, but set to SIZEOF_IGNORE if you don't want to bother. - int flags = 0, - RecvVarProxyFn varProxy = RecvProxy_VectorToVector -); - -// This is here so the RecvTable can look more like the SendTable. -#define RecvPropQAngles RecvPropVector - -RecvProp RecvPropInt( - const char* pVarName, - int offset, - int sizeofVar = SIZEOF_IGNORE, // Handled by RECVINFO macro, but set to SIZEOF_IGNORE if you don't want to bother. - int flags = 0, - RecvVarProxyFn varProxy = 0 -); - -RecvProp RecvPropString( - const char* pVarName, - int offset, - int bufferSize, - int flags = 0, - RecvVarProxyFn varProxy = RecvProxy_StringToString -); - -RecvProp RecvPropDataTable( - const char* pVarName, - int offset, - int flags, - RecvTable* pTable, - DataTableRecvVarProxyFn varProxy = DataTableRecvProxy_StaticDataTable -); - -RecvProp RecvPropArray3( - const char* pVarName, - int offset, - int sizeofVar, - int elements, - RecvProp pArrayProp, - DataTableRecvVarProxyFn varProxy = DataTableRecvProxy_StaticDataTable -); - -// Use the macro to let it automatically generate a table name. You shouldn't -// ever need to reference the table name. If you want to exclude this array, then -// reference the name of the variable in varTemplate. -RecvProp InternalRecvPropArray( - const int elementCount, - const int elementStride, - const char* pName, - ArrayLengthRecvProxyFn proxy -); - -// -// Use this if you want to completely manage the way the array data is stored. -// You'll need to provide a proxy inside varTemplate that looks for 'iElement' -// to figure out where to store the specified element. -// -#define RecvPropVirtualArray( arrayLengthProxy, maxArrayLength, varTemplate, propertyName ) \ - varTemplate, \ - InternalRecvPropArray( \ - maxArrayLength, \ - 0, \ - #propertyName, \ - arrayLengthProxy \ - ) - -// Use this and pass the array name and it will figure out the count and stride automatically. -#define RecvPropVariableLengthArray( arrayLengthProxy, varTemplate, arrayName ) \ - varTemplate, \ - InternalRecvPropArray( \ - sizeof(((currentRecvDTClass*)0)->arrayName) / PROPSIZEOF(currentRecvDTClass, arrayName[0]), \ - PROPSIZEOF(currentRecvDTClass, arrayName[0]), \ - #arrayName, \ - arrayLengthProxy \ - ) - -// Use this and pass the array name and it will figure out the count and stride automatically. -#define RecvPropArray( varTemplate, arrayName ) \ - RecvPropVariableLengthArray( 0, varTemplate, arrayName ) - -// Use this one to specify the element count and stride manually. -#define RecvPropArray2( arrayLengthProxy, varTemplate, elementCount, elementStride, arrayName ) \ - varTemplate, \ - InternalRecvPropArray( elementCount, elementStride, #arrayName, arrayLengthProxy ) - -// ---------------------------------------------------------------------------------------- // -// Inlines. -// ---------------------------------------------------------------------------------------- // - -inline void RecvProp::InitArray(int nElements, int elementStride) -{ - m_RecvType = DPT_Array; - m_nElements = nElements; - m_ElementStride = elementStride; -} - -inline int RecvProp::GetNumElements() const -{ - return m_nElements; -} - -inline void RecvProp::SetNumElements(int nElements) -{ - m_nElements = nElements; -} - -inline int RecvProp::GetElementStride() const -{ - return m_ElementStride; -} - -inline void RecvProp::SetElementStride(int stride) -{ - m_ElementStride = stride; -} - -inline int RecvProp::GetFlags() const -{ - return m_Flags; -} - -inline const char* RecvProp::GetName() const -{ - return m_pVarName; -} - -inline SendPropType RecvProp::GetType() const -{ - return m_RecvType; -} - -inline RecvTable* RecvProp::GetDataTable() const -{ - return m_pDataTable; -} - -inline void RecvProp::SetDataTable(RecvTable* pTable) -{ - m_pDataTable = pTable; -} - -inline RecvVarProxyFn RecvProp::GetProxyFn() const -{ - return m_ProxyFn; -} - -inline void RecvProp::SetProxyFn(RecvVarProxyFn fn) -{ - m_ProxyFn = fn; -} - -inline DataTableRecvVarProxyFn RecvProp::GetDataTableProxyFn() const -{ - return m_DataTableProxyFn; -} - -inline void RecvProp::SetDataTableProxyFn(DataTableRecvVarProxyFn fn) -{ - m_DataTableProxyFn = fn; -} - -inline int RecvProp::GetOffset() const -{ - return m_Offset; -} - -inline void RecvProp::SetOffset(int o) -{ - m_Offset = o; -} - -inline RecvProp* RecvProp::GetArrayProp() const -{ - return m_pArrayProp; -} - -inline void RecvProp::SetArrayProp(RecvProp* pProp) -{ - m_pArrayProp = pProp; -} - -inline void RecvProp::SetArrayLengthProxy(ArrayLengthRecvProxyFn proxy) -{ - m_ArrayLengthProxy = proxy; -} - -inline ArrayLengthRecvProxyFn RecvProp::GetArrayLengthProxy() const -{ - return m_ArrayLengthProxy; -} - -inline bool RecvProp::IsInsideArray() const -{ - return m_bInsideArray; -} - -inline void RecvProp::SetInsideArray() -{ - m_bInsideArray = true; -} - -inline const void* RecvProp::GetExtraData() const -{ - return m_pExtraData; -} - -inline void RecvProp::SetExtraData(const void* pData) -{ - m_pExtraData = pData; -} - -inline const char* RecvProp::GetParentArrayPropName() -{ - return m_pParentArrayPropName; -} - -inline void RecvProp::SetParentArrayPropName(const char* pArrayPropName) -{ - m_pParentArrayPropName = pArrayPropName; -} diff --git a/tf2/emit_sound.cpp b/tf2/emit_sound.cpp deleted file mode 100644 index b311b84..0000000 --- a/tf2/emit_sound.cpp +++ /dev/null @@ -1,25 +0,0 @@ -#include "base_cheat.h" -#include "hooks.h" -#include "settings.h" - -//eenie meenie miney moe i kepy this in here incase i wanted to ever do something with it i could fix it to match tf2's emitsound but yknow what? i prolly wont watadearhiugaer sorry i spilt water on my desk and smashed my face into the keyboard - -void __fastcall hooks::emit_sound( void* ecx_, void* edx_, void* filter, int ent, int channel, const char* sound, uint32_t hash, - const char* sample, float volume, float attenuation, int seed, int flags, int pitch, const vec3_t* origin, - const vec3_t* direction, vec3_t* origins, bool update_pos, float sound_time, int speaker_entry ) { - static auto emit_sound_o = cl.m_engine_sound->get_old_function< decltype( &hooks::emit_sound ) >( 5 ); - - if( !cl.m_panic && origin ) { - auto entity = cl.m_entlist( )->get_client_entity< c_base_player >( ent ); - if( entity && entity->is_player( ) && entity->ce( )->is_dormant( ) && - ent >= 0 && ent <= 64 ) - g_cheat.visuals.update_position( ent, *origin ); - } - - if( strstr( sample, xors( "weapon" ) ) && g_settings.misc.no_sound ) - volume = 0.f; - - emit_sound_o( ecx_, 0, filter, ent, channel, sound, hash, sample, - volume, attenuation, seed, flags, pitch, origin, direction, - origins, update_pos, sound_time, speaker_entry ); -} \ No newline at end of file diff --git a/tf2/extra.cpp b/tf2/extra.cpp deleted file mode 100644 index 894c957..0000000 --- a/tf2/extra.cpp +++ /dev/null @@ -1,91 +0,0 @@ -#include "base_cheat.h" -#include "ctx.hpp" -#include "input_system.hpp" -#include "math.h" -#include "hooks.h" -#include "interfaces.h" -#undef min -#include "extra.h" -#include "settings.h" - -namespace features -{ - //crash too lazy to fix rn will do , who wants to fly out of their body and become their own guardian angel anyway? - void c_extra::thirdperson( ) { - if( !g_ctx.m_local ) - return; - - static bool enabled = false; - static bool toggle = true; - static bool key_held = false; - - - if( g_input.is_key_pressed( ( VirtualKeys_t )g_settings.misc.thirdperson_key( ) ) ) { - if( !key_held ) { - toggle ^= 1; - } - key_held = true; - } - else { - key_held = false; - } - - if( !g_settings.misc.thirdperson || !toggle ) { - if( enabled ) { - cl.m_hl_input->m_fCameraInThirdPerson = false; - enabled = false; - } - - return; - } - - vec3_t viewangles{ }; - if( g_ctx.m_local->is_alive( ) ) { - cl.m_engine( )->GetViewAngles( viewangles ); - cl.m_hl_input->m_fCameraInThirdPerson = true; - cl.m_hl_input->m_vecCameraOffset = vec3_t( viewangles.x, viewangles.y, 150.0f ); - - float cam_hull_offset{ 16.f }; - - vec3_t cam_hull_min( -cam_hull_offset, -cam_hull_offset, -cam_hull_offset ); - vec3_t cam_hull_max( cam_hull_offset, cam_hull_offset, cam_hull_offset ); - vec3_t cam_forward, origin = g_ctx.m_local->get_eye_pos( ); - - cam_forward = math::angle_vectors( vec3_t( viewangles.x, viewangles.y, 0.f ) ); - - CTraceFilterWorldAndPropsOnly filter; - Ray_t ray; - CGameTrace tr; - - ray.Init( origin, origin - ( cam_forward * 150.f ), cam_hull_min, cam_hull_max ); - - cl.m_trace( )->trace_ray( ray, MASK_SOLID & ~CONTENTS_MONSTER, &filter, &tr ); - cl.m_hl_input->m_vecCameraOffset.z = 150.f * tr.fraction; - - enabled = true; - } - else if( cl.m_entlist( )->get_entity_from_handle< c_base_player >( g_ctx.m_local->m_hObserverTarget( ) ) ) { - cl.m_hl_input->m_fCameraInThirdPerson = false; - g_ctx.m_local->m_iObserverMode( ) = 5; - } - } - - //hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh - void c_extra::float_ragdolls( ) { - for( int i{ }; i < cl.m_entlist( )->get_highest_entity_index( ); ++i ) { - auto ent = cl.m_entlist( )->get_client_entity< IClientEntity >( i ); - if( !ent ) continue; - - auto client_class = ent->get_client_class( ); - if( !client_class ) continue; - - int class_id = client_class->m_class_id; - if( class_id != CTFRagdoll ) - return; - - ent->as< c_base_player >( )->m_vecRagdollVelocity( ) *= -1; - } - } - - -} \ No newline at end of file diff --git a/tf2/extra.h b/tf2/extra.h deleted file mode 100644 index d25131c..0000000 --- a/tf2/extra.h +++ /dev/null @@ -1,21 +0,0 @@ -#pragma once -#include -#include -#include "IVEngineClient.h" -#include "vector.hpp" -#include "IClientMode.h" -namespace features -{ - class c_extra { - - public: - void thirdperson( ); - - void float_ragdolls( ); - - void disable_post_processing( ); - - private: - - }; -} \ No newline at end of file diff --git a/tf2/factory.cpp b/tf2/factory.cpp deleted file mode 100644 index f8dfd42..0000000 --- a/tf2/factory.cpp +++ /dev/null @@ -1,110 +0,0 @@ -#include "factory.h" -#ifndef IFACE_DLLMAIN -#include "fnv.hpp" - -#include - -NAMESPACE_REGION( tf2 ) -NAMESPACE_REGION( interfaces ) - -//iterate all exports inside of a module and find createinterface -uintptr_t c_interface_manager::find_createinterface( void* module_ ) { - IMAGE_DOS_HEADER* dos_header; - IMAGE_NT_HEADERS* nt_headers; - uintptr_t export_address; - IMAGE_EXPORT_DIRECTORY* export_dir; - const char* export_name; - uintptr_t* names; - uintptr_t* funcs; - uint16_t* ords; - uint32_t export_hash; - - dos_header = reinterpret_cast< decltype( dos_header ) >( uintptr_t( module_ ) ); - nt_headers = reinterpret_cast< decltype( nt_headers ) >( uintptr_t( module_ ) + dos_header->e_lfanew ); - - //find addresses of functions from nt headers - export_address = nt_headers->OptionalHeader.DataDirectory[ 0 ].VirtualAddress; - export_dir = reinterpret_cast< decltype( export_dir ) >( uintptr_t( module_ ) + export_address ); - - if( !export_dir->NumberOfFunctions ) - return uintptr_t{ }; - - names = reinterpret_cast< uintptr_t* >( uintptr_t( module_ ) + export_dir->AddressOfNames ); - funcs = reinterpret_cast< uintptr_t* >( uintptr_t( module_ ) + export_dir->AddressOfFunctions ); - - ords = reinterpret_cast< uint16_t* >( uintptr_t( module_ ) + export_dir->AddressOfNameOrdinals ); - - if( names && funcs && ords ) { - //iterate the exports - for( size_t i{ }; i < export_dir->NumberOfNames; ++i ) { - export_name = reinterpret_cast< const char* >( uintptr_t( module_ ) + names[ i ] ); - export_hash = hash::fnv1a( export_name ); - - if( export_hash == fnv( "CreateInterface" ) ) { - return uintptr_t( module_ ) + funcs[ ords[ i ] ]; - } - } - } - - return uintptr_t{ }; -} - -c_interface_manager::c_interface_manager( ) { - auto teb = reinterpret_cast< PTEB >( __readfsdword( uintptr_t( &static_cast< NT_TIB* >( nullptr )->Self ) ) ); - auto peb = teb->ProcessEnvironmentBlock; - - auto root = &peb->Ldr->InMemoryOrderModuleList; - //iterate module list - for( auto entry = root->Flink->Flink->Flink->Flink; entry != root; entry = entry->Flink ) { - PLDR_DATA_TABLE_ENTRY data_table; - HMODULE module_base; - uintptr_t create_interface_export; - uintptr_t create_interface_; - uintptr_t* list_iterator_ptr; - interface_iterator_t* list_iterator; - - data_table = reinterpret_cast< PLDR_DATA_TABLE_ENTRY >( entry ); - module_base = reinterpret_cast< HMODULE >( data_table->Reserved2[ 0 ] ); - create_interface_export = find_createinterface( module_base ); - - if( !create_interface_export || !is_createinterface_export( create_interface_export ) ) { - continue; - } - - //find the createinterface function - create_interface_ = follow_createinterface_export( create_interface_export ); - if( !is_createinterface_fn( create_interface_ ) ) { - continue; - } - - //find the list iterator - list_iterator_ptr = find_list_ptr( create_interface_ ); - - //iterate the interface list - for( list_iterator = reinterpret_cast< interface_iterator_t* >( - list_iterator_ptr ); - !!list_iterator; - list_iterator = list_iterator->m_next - ) { - std::string name( list_iterator->m_name ); - std::string module_name( util::unicode_to_ascii( - std::wstring( data_table->FullDllName.Buffer, data_table->FullDllName.Length ) ) ); - - uintptr_t ptr = static_cast< uintptr_t( *)( ) >( list_iterator->m_create_fn )( ); - - size_t version = [ & ]( ) { - std::string ret( name ); - ret.erase( std::remove_if( ret.begin( ), ret.end( ), - [ & ]( int i ) { return !::isdigit( i ); } - ), ret.end( ) ); - return atoi( ret.c_str( ) ); - }( ); - - m_interfaces.emplace_back( interface_data_t{ name, module_name, version, ptr } ); - } - } -} - -END_REGION -END_REGION -#endif \ No newline at end of file diff --git a/tf2/factory.h b/tf2/factory.h deleted file mode 100644 index d1e8027..0000000 --- a/tf2/factory.h +++ /dev/null @@ -1,155 +0,0 @@ -#pragma once -#include -#include -#include -#include -#include "vmt.h" -#include "util.hpp" -#include "x86.hpp" -#include "console.hpp" -#include "strings.hpp" -//IFACE_DLLMAIN - interfaces are passed through dllmain and below code doesnt need to be ran -#ifndef _DEBUG -#define IFACE_DLLMAIN -#endif - -#ifdef IFACE_DLLMAIN -#include "iface_dllmain_impl.hpp" -#else - -NAMESPACE_REGION( tf2 ) - -namespace interfaces -{ - struct interface_iterator_t { - void* m_create_fn; - char* m_name; - - interface_iterator_t* m_next; - }; - - inline auto follow_createinterface_export( uintptr_t export_ ) { - /* - .text:006F5F00 CreateInterface proc near - .text:006F5F00 push ebp - .text:006F5F01 mov ebp, esp - .text:006F5F03 pop ebp - .text:006F5F04 jmp sub_6F5E90 - */ - uintptr_t jmp = export_ + 0x4; - uintptr_t jmp_target = jmp + *( uintptr_t* )( jmp + 0x1 ) + 0x5; - - return jmp_target; - } - - inline auto find_list_ptr( uintptr_t createinterface ) { - /* - .text:006F5E90 push ebp - .text:006F5E91 mov ebp, esp - .text:006F5E93 push esi - .text:006F5E94 mov esi, dword_2EEFDE4 - .text:006F5E9A push edi - */ - auto iterator_ptr = **( uintptr_t*** )( createinterface + 0x6 ); - - return iterator_ptr; - } - - inline bool is_createinterface_export( uintptr_t export_ ) { - return *( uint8_t* )( export_ ) == x86::encode_push_reg( x86::reg::ebp ) - && *( uint8_t* )( export_ + 4 ) == 0xe9 - && *( uint8_t* )( export_ + 9 ) == 0xcc - && *( uint8_t* )( export_ + 10 ) == 0xcc; - } - - inline bool is_createinterface_fn( uintptr_t fn_ ) { - return *( uint8_t* )( fn_ ) == x86::encode_push_reg( x86::reg::ebp ) - && *( uint8_t* )( fn_ + 4 ) == 0x8b - && *( uint8_t* )( fn_ + 10 ) == x86::encode_push_reg( x86::reg::edi ); - } - - class c_interface_manager { - public: - struct interface_data_t { - std::string m_name; - std::string m_module; - size_t m_version; - uintptr_t m_ptr; - - template < typename t > __forceinline t get( ) { - return reinterpret_cast< t >( m_ptr ); - } - }; - - c_interface_manager( ); - - //iterate the interface list to find our desired version - template < typename t = void* > - t find_interface( const std::string& module_, std::string name ) { - //avoid finding interfaces with matching names - if( !::isdigit( name[ name.length( ) - 1 ] ) ) - name += "0"; - - for( auto& it : m_interfaces ) { - if( !it.m_module.compare( module_ ) - && !it.m_name.compare( name ) ) { - g_con->print( xors( "%s version %u found in %s at 0x%08x\n" ), - name.c_str( ), - it.m_version, - it.m_module.c_str( ), - it.m_ptr ); - - return it.get< t >( ); - } - } - - g_con->print( xors( "%s not found\n" ), name.c_str( ) ); - - return t{ }; - } - - template < typename t = void* > - t find_interface( std::string name ) { - //avoid finding interfaces with matching names - if( !::isdigit( name[ name.length( ) - 1 ] ) ) - name += '0'; - - for( auto& it : m_interfaces ) { - if( strstr( it.m_name.c_str( ), name.c_str( ) ) ) { - g_con->print( xors( "%s version %u found in %s at 0x%08x\n" ), - name.c_str( ), - it.m_version, - it.m_module.c_str( ), - it.m_ptr ); - - return it.get< t >( ); - } - } - - g_con->print( xors( "%s not found\n" ), name.c_str( ) ); - - return t{ }; - } - - void dump_interface_list( ) { - for( auto& it : m_interfaces ) { - g_con->print( xors( "%s version %u in %s at 0x%08x\n" ), - it.m_name.c_str( ), - it.m_version, - it.m_module.c_str( ), - it.m_ptr ); - } - } - - private: - uintptr_t find_createinterface( void* module_ ); - - std::vector< interface_data_t > m_interfaces; - }; -} - -END_REGION -#endif - -extern HMODULE g_dll; -extern tf2::interfaces::c_interface_manager g_factory; \ No newline at end of file diff --git a/tf2/factory.hpp b/tf2/factory.hpp deleted file mode 100644 index 4615c34..0000000 --- a/tf2/factory.hpp +++ /dev/null @@ -1,190 +0,0 @@ -#pragma once - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace tf2 -{ - namespace interfaces - { - // this interface linked list iteration code is tf2 specific ! - // in the future i will write it game/engine version independent - // using a disassembly engine - - struct regs { - void *( *m_CreateFn )( ); - const char *m_pName; - regs *m_pNext; - }; - - static inline bool is_create_fn( uintptr_t m_createfn ) { - return( *( uint8_t * )( m_createfn ) == 0xB8 - && *( uint8_t * )( m_createfn + 5 ) == 0xC3 ); - } - - static inline bool is_createinterface_fn( uintptr_t m_createfn ) { - return( *( uint8_t * )( m_createfn + 4 ) == 0xE9 - && *( uint8_t * )( m_createfn + 9 ) == 0xCC ); - } - - static inline uintptr_t follow_createinterface_export( uintptr_t export_ ) { - if ( *( uint8_t * )( export_ + 4 ) != 0xE9 ) return 0; - - return( export_ + 4 + *( uintptr_t * )( export_ + 5 ) + 5 ); - } - - static inline regs *reg_from_createinterface( uintptr_t ci ) { - if ( *( short * )( ci + 4 ) != 0x358B ) return nullptr; - - return( **( regs *** )( ci + 6 ) ); - } - - static inline uintptr_t interface_from_reg( regs *reg ) { - uintptr_t reg_func = *( uintptr_t * )reg; - - if ( is_create_fn( reg_func ) ) { - return( *( uintptr_t * )( reg_func + 1 ) ); - } - - return( 0 ); - } - - - class interface_manager { - public: - struct interface_data { - public: - std::string name; - std::string module; - int version; - void *ptr; - - template< typename T > inline T get( ) { return reinterpret_cast< T >( ptr ); } - - interface_data( std::string name_T, std::string module_T, void *ptr_T, int version_T = 0 ) - : name( name_T ), module( module_T ), ptr( ptr_T ), version( version_T ) {} - }; - - interface_manager() { - auto root = &get_peb( )->Ldr->InMemoryOrderModuleList; - - for ( auto entry = root->Flink->Flink->Flink->Flink; entry != root; entry = entry->Flink ) { - auto data_table = reinterpret_cast< PLDR_DATA_TABLE_ENTRY >( entry ); - auto module_base = reinterpret_cast< HMODULE >( data_table->Reserved2[ 0 ] ); - auto export_ = reinterpret_cast< uintptr_t >( ::GetProcAddress( module_base, "CreateInterface" ) ); - - if ( !export_ || !interfaces::is_createinterface_fn( export_ ) ) { - continue; - } - - auto CreateInterface = interfaces::follow_createinterface_export( export_ ); - - if ( !CreateInterface ) { - continue; - } - - auto regs = interfaces::reg_from_createinterface( CreateInterface ); - - while ( regs ) { - std::string name( regs->m_pName ), temp_version( name ); - - name.erase( std::remove_if( name.begin( ), name.end( ), &isdigit ), name.end( ) ); - - temp_version.erase( - std::remove_if( temp_version.begin( ), temp_version.end( ), - [ ]( int i ) { return !isdigit( i ); } - ), temp_version.end( ) - ); - - unsigned int version{ }; - std::stringstream( temp_version ) >> version; - - sorted_list.push_back( interface_data( name, unicode_to_string( data_table->FullDllName ), reinterpret_cast< void * >( interfaces::interface_from_reg( regs ) ), version ) ); - - regs = regs->m_pNext; - } - } - - std::sort( sorted_list.begin( ), sorted_list.end( ), [ ]( const interface_data &lhs, const interface_data &rhs ) { - return( lhs.version > rhs.version ); - } ); - } - public: - template< typename T = void * > T create( std::string name ) { - std::vector< interface_data >::iterator it = std::find_if( sorted_list.begin( ), sorted_list.end( ), [ & ]( const interface_data &data ) { - return ( !data.name.compare( name ) ); - } ); - - if ( it == sorted_list.end( ) || !it->ptr ) { - return T{ }; - } - - printf( "%s\n -> 0x%X\n -> module: %s \n", name.c_str( ), reinterpret_cast< uintptr_t >( it->ptr ), it->module.c_str( ) ); - - return( ( T )( it->ptr ) ); - } - - template< typename T = void* > T create( std::string name, std::string module ) { - std::vector< interface_data >::iterator it = std::find_if( sorted_list.begin( ), sorted_list.end( ), [ & ]( const interface_data &data ) { - return ( !data.name.compare( name ) && data.module.find( module ) != std::string::npos ); - } ); - - - if ( it == sorted_list.end( ) || !it->ptr ) { - return T{ }; - } - - //#ifdef DEBUG_PRINT - printf( "%s\n -> 0x%x\n -> module: %s \n", name.c_str( ), reinterpret_cast< uintptr_t >( it->ptr ), it->module.c_str( ) ); - //#endif - - return( static_cast< T >( it->ptr ) ); - } - - template< typename T = void * > T create_from_hash( uint32_t hash ) { - std::vector< interface_data >::iterator it = std::find_if( sorted_list.begin( ), sorted_list.end( ), [ & ]( const interface_data &data ) - { - return ( !data.name.compare( name ) ); - } ); - - if ( it == sorted_list.end( ) || !it->ptr ) { - return T{ }; - } - - return( ( T )( it->ptr ) ); - } - protected: - static inline PTEB get_teb( ) { -#if defined( _M_X64 ) - auto teb = reinterpret_cast< PTEB >( __readgsqword( reinterpret_cast< uintptr_t >( &static_cast< NT_TIB * >( nullptr )->Self ) ) ); -#else - auto teb = reinterpret_cast< PTEB >( __readfsdword( reinterpret_cast< uintptr_t >( &static_cast< NT_TIB * >( nullptr )->Self ) ) ); -#endif - - - return teb; - } - - static inline PPEB get_peb( ) { - return( get_teb( )->ProcessEnvironmentBlock ); - } - - static inline std::string unicode_to_string( UNICODE_STRING wide ) { - std::wstring wide_str( wide.Buffer, wide.Length ); - return std::string( wide_str.begin( ), wide_str.end( ) ); - } - - std::vector< interface_data > sorted_list{ }; - }; - }; -} \ No newline at end of file diff --git a/tf2/fnv.hpp b/tf2/fnv.hpp deleted file mode 100644 index a3f2dc9..0000000 --- a/tf2/fnv.hpp +++ /dev/null @@ -1,64 +0,0 @@ -#pragma once - -#pragma warning( disable : 4307 ) // '*': integral constant overflow -#pragma warning( disable : 4244 ) // possible loss of data - -#include -#include - -using hash_t = unsigned int; - -// used for compile-time FNV-1a 32bit hashes. -#define fnv( str ) \ - [&]() { \ - constexpr hash_t out = hash::fnv1a( str ); \ - \ - return out; \ - }() - -// used for compile-time FNV-1a 32bit hashes when above macro cant be used for constexpr variables. -#define fnv_const( str ) Hash::fnv1a_32( str ) - -namespace hash // FNV-1a ( Fowler-Noll-Vo hash ). -{ - // FNV-1a constants. - enum : hash_t { - FNV1A_PRIME = 0x1000193, - FNV1A_BASIS = 0x811C9DC5 - }; - - // compile-time strlen. - __forceinline constexpr size_t ct_strlen( const char *str ) { - size_t out = 1; - - for( ; str[ out ] != '\0'; ++out ); - - return out; - } - - // hash data. - __forceinline constexpr hash_t fnv1a( const uint8_t *data, const size_t len ) { - hash_t out = FNV1A_BASIS; - - for( size_t i = 0; i < len; ++i ) - out = ( out ^ data[ i ] ) * FNV1A_PRIME; - - return out; - } - - // hash c-style string. - __forceinline constexpr hash_t fnv1a( const char *str ) { - hash_t out = FNV1A_BASIS; - size_t len = ct_strlen( str ); - - for( size_t i = 0; i < len; ++i ) - out = ( out ^ str[ i ] ) * FNV1A_PRIME; - - return out; - } - - // hash C++-style string ( runtime only ). - __forceinline hash_t fnv1a( const std::string &str ) { - return fnv1a( ( uint8_t* )str.c_str( ), str.length( ) ); - } -} \ No newline at end of file diff --git a/tf2/framestagenotify.cpp b/tf2/framestagenotify.cpp deleted file mode 100644 index 87e91d9..0000000 --- a/tf2/framestagenotify.cpp +++ /dev/null @@ -1,41 +0,0 @@ -#include "hooks.h" -#include "interfaces.h" -#include "base_cheat.h" - -void __fastcall hooks::frame_stage_notify( void* ecx_, void* edx_, frame_stages_t stage ) { - static auto fsn_o = cl.m_chl->get_old_function< decltype( hooks::frame_stage_notify )* >( 35 ); //35 - - g_ctx.m_stage = stage; - - if ( cl.m_panic ) { - return fsn_o( ecx_, edx_, stage ); - } - - switch( stage ) { - case FRAME_NET_UPDATE_START: - g_ctx.run_frame( ); - fsn_o( ecx_, 0, stage ); - - return; - - case FRAME_NET_UPDATE_POSTDATAUPDATE_START: - g_cheat.extra.float_ragdolls( ); - //g_cheat.m_skins( ); - g_cheat.visuals.update_glow( ); - fsn_o( ecx_, 0, stage ); - - return; - - case FRAME_RENDER_START: - //g_cheat.extra.disable_post_processing( ); - util::disable_pvs( ); - break; - - case FRAME_RENDER_END: - fsn_o( ecx_, 0, stage ); - //g_cheat.chams.m_materials.update_materials( ); - return; - } - - return fsn_o( ecx_, edx_, stage ); -} diff --git a/tf2/get_viewmodel_fov.cpp b/tf2/get_viewmodel_fov.cpp deleted file mode 100644 index 96c4a1e..0000000 --- a/tf2/get_viewmodel_fov.cpp +++ /dev/null @@ -1,8 +0,0 @@ -#include "hooks.h" -#include "settings.h" - -float __fastcall hooks::get_viewmodel_fov( void* ecx, void* edx ) { - static auto get_viewmodel_fov_o = cl.m_clientmode->get_old_function< decltype( &hooks::get_viewmodel_fov ) >( 32 ); - - return get_viewmodel_fov_o( ecx, nullptr ) + float( g_settings.misc.viewmodel_fov ); -} diff --git a/tf2/graphics.cpp b/tf2/graphics.cpp deleted file mode 100644 index 9670bf9..0000000 --- a/tf2/graphics.cpp +++ /dev/null @@ -1,107 +0,0 @@ -#include "graphics.h" - -tf2::c_fonts fonts; -tf2::c_graphics graphics; - -namespace tf2 -{ - void c_graphics::draw_line( int x, int y, int x1, int y1, clr_t clr ) { - cl.m_surface( )->DrawSetColor( clr ); - cl.m_surface( )->DrawLine( x, y, x1, y1 ); - } - - void c_graphics::draw_string( HFont font, int x, int y, clr_t clr, alignment f_alignment, std::string msg ) { - std::wstring a( msg.begin( ), msg.end( ) ); - const wchar_t* wbuf = a.c_str( ); - - int w, h; get_text_size( font, msg, w, h ); - - if ( f_alignment == alignment::right ) x -= w; - - if ( f_alignment == alignment::center ) x -= w / 2; - - cl.m_surface( )->DrawSetTextFont( font ); - cl.m_surface( )->DrawSetTextColor( clr ); - cl.m_surface( )->DrawSetTextPos( x, y - h / 2 ); - cl.m_surface( )->DrawPrintText( ( wchar_t* )wbuf, wcslen( wbuf ) ); - } - - void c_graphics::draw_string( HFont font, int x, int y, clr_t clr, alignment f_alignment, std::wstring msg ) { - int w, h; get_text_size( font, msg, w, h ); - - if ( f_alignment == alignment::right ) x -= w; - - if ( f_alignment == alignment::center ) x -= w / 2; - - cl.m_surface( )->DrawSetTextFont( font ); - cl.m_surface( )->DrawSetTextColor( clr ); - cl.m_surface( )->DrawSetTextPos( x, y - h / 2 ); - cl.m_surface( )->DrawPrintText( ( wchar_t* )msg.c_str( ), wcslen( msg.c_str( ) ) ); - } - - void c_graphics::draw_rect( int x, int y, int w, int h, clr_t clr ) { - cl.m_surface( )->DrawSetColor( clr ); - cl.m_surface( )->DrawFilledRect( x, y, x + w, y + h ); - } - - void c_graphics::draw_rect_outlined( int x, int y, int w, int h, clr_t clr ) { - cl.m_surface( )->DrawSetColor( clr ); - cl.m_surface( )->DrawOutlinedRect( x, y, x + w, y + h ); - } - - void c_graphics::draw_circle_outlined( int x, int y, int r, clr_t clr ) { - cl.m_surface( )->DrawSetColor( clr ); - cl.m_surface( )->DrawOutlinedCircle( x, y, r, 48 ); - } - - void c_graphics::get_text_size( HFont font, std::string text, int& w, int& h ) { - std::wstring a( text.begin( ), text.end( ) ); - const wchar_t* wstr = a.c_str( ); - - cl.m_surface( )->GetTextSize( font, wstr, w, h ); - } - - void c_graphics::get_text_size( HFont font, std::wstring text, int& w, int& h ) { - const wchar_t* wstr = text.c_str( ); - - cl.m_surface( )->GetTextSize( font, wstr, w, h ); - } - - void c_graphics::draw_polygon( int count, vertex_t* vertexs, clr_t clr_t ) { - static int texture = cl.m_surface( )->CreateNewTextureID( true ); - if ( !texture ) texture = cl.m_surface( )->CreateNewTextureID( true ); - - byte buffer[ 4 ] = { 255, 255, 255, 255 }; - - cl.m_surface( )->DrawSetTextureRGBA( texture, buffer, 1, 1 ); - cl.m_surface( )->DrawSetColor( clr_t ); - cl.m_surface( )->DrawSetTexture( texture ); - - cl.m_surface( )->DrawTexturedPolygon( count, vertexs ); - } - - void c_graphics::draw_filled_circle( int x, int y, int r, clr_t clr_t ) { - static vertex_t shape[ 24 ]; - static float step = M_PI * 2.0f / 24; - - for ( int i{ }; i < 24; i++ ) { - float theta = i * step; - float x1 = x + r * cos( theta ); - float y1 = y + r * sin( theta ); - shape[ i ].init( x1, y1 ); - } - draw_polygon( 24, shape, clr_t ); - } - - vec2_t c_graphics::world_to_screen( vec3_t world_pos ) { - vec3_t tmp; cl.m_overlay( )->ScreenPosition( world_pos, tmp ); - const matrix3x4& w2s_matrix = cl.m_engine( )->GetWorldToScreenMatrix( ); - float w = w2s_matrix[ 3 ][ 3 ]; - for ( int i{ }; i < 3; i++ ) { - w += w2s_matrix[ 3 ][ i ] * world_pos[ i ]; - } - if ( w < 0.001f ) return{ 10000.f, 10000.f }; - - return{ tmp.x, tmp.y }; - } -} \ No newline at end of file diff --git a/tf2/graphics.h b/tf2/graphics.h deleted file mode 100644 index c9c2ef7..0000000 --- a/tf2/graphics.h +++ /dev/null @@ -1,80 +0,0 @@ -#pragma once -#include "color.hpp" -#include "interfaces.h" -#include "math.h" -typedef unsigned long HFont; - -enum alignment { - left, - right, - center -}; - -enum alignment_vertical { - top, - bottom -}; - -enum fontflag : long { - none, - italic = 0x001, - underline = 0x002, - strikeout = 0x004, - symbol = 0x008, - antialias = 0x010, - blur = 0x020, - rotary = 0x040, - dropshadow = 0x080, - additive = 0x100, - outline = 0x200, - custom = 0x400, - bitmap = 0x800, -}; - -namespace tf2 -{ - class c_fonts { - public: - c_fonts( ) { - } - - void init( ) { - f_12 = cl.m_surface( )->CreateFnt( ); - f_14 = cl.m_surface( )->CreateFnt( ); - f_16 = cl.m_surface( )->CreateFnt( ); - f_18 = cl.m_surface( )->CreateFnt( ); - f_esp = cl.m_surface( )->CreateFnt( ); - - cl.m_surface( )->SetFontGlyphSet( f_12, "Tahoma", 12, 300, 0, 0, fontflag::outline ); - cl.m_surface( )->SetFontGlyphSet( f_14, "Tahoma", 14, 300, 0, 0, fontflag::outline ); - cl.m_surface( )->SetFontGlyphSet( f_16, "Tahoma", 16, 300, 0, 0, fontflag::outline ); - cl.m_surface( )->SetFontGlyphSet( f_18, "Tahoma", 18, 300, 0, 0, fontflag::outline ); - cl.m_surface( )->SetFontGlyphSet( f_esp, "Verdana", 13, 550, 0, 0, fontflag::dropshadow ); - } - - HFont f_12; - HFont f_14; - HFont f_16; - HFont f_18; - - HFont f_esp; - }; - - class c_graphics { - public: - void draw_line( int x, int y, int x1, int y1, clr_t clr ); - void draw_string( HFont font, int x, int y, clr_t clr, alignment f_alignment, std::string msg ); - void draw_string( HFont font, int x, int y, clr_t clr, alignment f_alignment, std::wstring msg ); - void draw_rect( int x, int y, int w, int h, clr_t clr ); - void draw_rect_outlined( int x, int y, int w, int h, clr_t clr ); - void draw_circle_outlined( int x, int y, int r, clr_t clr ); - void get_text_size( HFont font, std::string text, int& w, int& h ); - void get_text_size( HFont font, std::wstring text, int& w, int& h ); - void draw_polygon( int count, vertex_t* vertexs, clr_t clr_t ); - void draw_filled_circle( int x, int y, int r, clr_t clr_t ); - vec2_t world_to_screen( vec3_t world_pos ); - }; -} - -extern tf2::c_graphics graphics; -extern tf2::c_fonts fonts; \ No newline at end of file diff --git a/tf2/hooks.cpp b/tf2/hooks.cpp deleted file mode 100644 index 0472c6e..0000000 --- a/tf2/hooks.cpp +++ /dev/null @@ -1,41 +0,0 @@ -#include "hooks.h" -#include "interfaces.h" -#include "netvars.h" - - -bool hooks::commit( tf2::client* instance ) { - while( !( instance->m_hwnd = FindWindowA( xors( "Valve001" ), 0 ) ) ) - Sleep( 100 ); - - window_procedure_o = reinterpret_cast< decltype( window_procedure_o ) >( - SetWindowLongA( instance->m_hwnd, GWLP_WNDPROC, - ( long )window_procedure ) - ); - - instance->m_clientmode->hook( 20, &hooks::override_mouse_input );//n - instance->m_clientmode->hook( 32, &hooks::get_viewmodel_fov );//n - instance->m_clientmode->hook( 39, &hooks::do_post_screen_space_effects ); //n - instance->m_clientmode->hook( 16, &hooks::override_view ); //n - instance->m_clientmode->hook( 21, &hooks::create_move ); //y - instance->m_chl->hook( 35, &hooks::frame_stage_notify ); //y - instance->m_chl->hook( 3, &hooks::shut_down ); //n - - //honestly fuck chams and keyvalues they can lick my mothers toes - - //instance->m_model_render->hook( 19, &hooks::draw_model_execute ); //n - //instance->m_render_view->hook( 9, &hooks::scene_end ); //n - - - instance->m_movement->hook( 1, &hooks::process_movement ); //y - instance->m_d3d->hook( 42, &hooks::d3d::end_scene ); //y - instance->m_d3d->hook( 16, &hooks::d3d::reset );//y - instance->m_d3d->hook( 17, &hooks::d3d::present );//y - instance->m_panel->hook( 41, &hooks::paint_traverse ); //y - - instance->m_vgui->hook( 13, &hooks::paint ); //y - - instance->m_surface->hook( 116, &hooks::on_screen_size_changed ); //n - //instance->m_engine_sound->hook( 5, &hooks::emit_sound ); //n - - return true; -} diff --git a/tf2/hooks.h b/tf2/hooks.h deleted file mode 100644 index c34d71f..0000000 --- a/tf2/hooks.h +++ /dev/null @@ -1,50 +0,0 @@ -#pragma once -#include - -#include "util.hpp" -#include "d3d.hpp" -#include "interfaces.h" -#include "netvar_proxy.hpp" - -namespace hooks -{ - //hook like the hooker that u are - - void __fastcall paint( void* ecx_, void* edx_, int mode ); - long __stdcall window_procedure( HWND, uint32_t, uint32_t, long ); - extern decltype( &window_procedure ) window_procedure_o; - void __fastcall process_movement( void*, void*, c_base_player*, CMoveData* ); - void __fastcall paint_traverse( void*, void*, unsigned int, bool, bool ); - bool __fastcall create_move( void*, void*, float, user_cmd_t* ); - void __stdcall hl_create_move_gate( int sequence_number, float input_sample_time, bool active ); - void __fastcall hl_create_move( void*, void*, int, float, bool, byte& ); - void __fastcall frame_stage_notify( void*, void*, frame_stages_t ); - void __fastcall override_mouse_input( void*, void*, float*, float* ); - void __fastcall draw_model_execute( IVModelInfo*, void*, void*, const DrawModelState_t&, const ModelRenderInfo_t&, matrix3x4* ); - void __fastcall scene_end( void*, void* ); - float __fastcall get_viewmodel_fov( void*, void* ); - void __fastcall override_view( void* ecx_, void* edx_, CViewSetup* setup ); - void __fastcall emit_sound( void* ecx_, void* edx_, void* filter, int ent, int channel, const char* sound, uint32_t hash, - const char* sample, float volume, float attenuation, int seed, int flags, int pitch, const vec3_t* origin, - const vec3_t* direction, vec3_t* origins, bool update_pos, float sound_time, int speaker_entry ); - void __fastcall shut_down( void* ecx_, void* edx_ ); - - bool __fastcall is_connected( void* ecx_, void* edx_ ); - - bool __fastcall in_prediction( void* ecx_, void* edx_ ); - int __fastcall send_datagram( INetChannel* channel, void* edx, void* datagram ); - bool __fastcall do_post_screen_space_effects( void* ecx_, void* edx_, CViewSetup* setup ); - void __fastcall on_screen_size_changed( void* ecx_, void* edx_, int old_h, int old_w ); - - - - //do we wanna only run menu in d3d or visuals too? - namespace d3d { - long __stdcall end_scene( IDirect3DDevice9* ); - long __stdcall reset( IDirect3DDevice9*, D3DPRESENT_PARAMETERS* ); - long __stdcall present( IDirect3DDevice9*, RECT*, RECT*, HWND, RGNDATA* ); - long __stdcall draw( IDirect3DDevice9*, D3DPRIMITIVETYPE, int, uint32_t, uint32_t, uint32_t, uint32_t ); - } - - extern bool commit( tf2::client* ); -} \ No newline at end of file diff --git a/tf2/icons.hpp b/tf2/icons.hpp deleted file mode 100644 index bffd94e..0000000 --- a/tf2/icons.hpp +++ /dev/null @@ -1,5 +0,0 @@ -#include "icons/legit.hpp" -#include "icons/rage.hpp" -#include "icons/visuals.hpp" -#include "icons/misc.hpp" -#include "icons/config.hpp" \ No newline at end of file diff --git a/tf2/icons/config.hpp b/tf2/icons/config.hpp deleted file mode 100644 index e47c75b..0000000 --- a/tf2/icons/config.hpp +++ /dev/null @@ -1,1297 +0,0 @@ -/* E:\Users\admin\Desktop\stuff\icons\config.png (1/26/2018 4:19:12 AM) - StartOffset: 00000000, EndOffset: 00003C3C, Length: 00003C3D */ - -namespace icons { -static const size_t config_size = 15421; -namespace raw { -static const unsigned char config_raw[15421] = { - 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00, 0x00, 0x0D, - 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x42, - 0x08, 0x06, 0x00, 0x00, 0x00, 0xE3, 0x54, 0x00, 0xE8, 0x00, 0x00, 0x00, - 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0B, 0x13, 0x00, 0x00, 0x0B, - 0x13, 0x01, 0x00, 0x9A, 0x9C, 0x18, 0x00, 0x00, 0x39, 0xEC, 0x69, 0x54, - 0x58, 0x74, 0x58, 0x4D, 0x4C, 0x3A, 0x63, 0x6F, 0x6D, 0x2E, 0x61, 0x64, - 0x6F, 0x62, 0x65, 0x2E, 0x78, 0x6D, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3C, 0x3F, 0x78, 0x70, 0x61, 0x63, 0x6B, 0x65, 0x74, 0x20, 0x62, 0x65, - 0x67, 0x69, 0x6E, 0x3D, 0x22, 0xEF, 0xBB, 0xBF, 0x22, 0x20, 0x69, 0x64, - 0x3D, 0x22, 0x57, 0x35, 0x4D, 0x30, 0x4D, 0x70, 0x43, 0x65, 0x68, 0x69, - 0x48, 0x7A, 0x72, 0x65, 0x53, 0x7A, 0x4E, 0x54, 0x63, 0x7A, 0x6B, 0x63, - 0x39, 0x64, 0x22, 0x3F, 0x3E, 0x0A, 0x3C, 0x78, 0x3A, 0x78, 0x6D, 0x70, - 0x6D, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6D, 0x6C, 0x6E, 0x73, 0x3A, 0x78, - 0x3D, 0x22, 0x61, 0x64, 0x6F, 0x62, 0x65, 0x3A, 0x6E, 0x73, 0x3A, 0x6D, - 0x65, 0x74, 0x61, 0x2F, 0x22, 0x20, 0x78, 0x3A, 0x78, 0x6D, 0x70, 0x74, - 0x6B, 0x3D, 0x22, 0x41, 0x64, 0x6F, 0x62, 0x65, 0x20, 0x58, 0x4D, 0x50, - 0x20, 0x43, 0x6F, 0x72, 0x65, 0x20, 0x35, 0x2E, 0x36, 0x2D, 0x63, 0x31, - 0x33, 0x38, 0x20, 0x37, 0x39, 0x2E, 0x31, 0x35, 0x39, 0x38, 0x32, 0x34, - 0x2C, 0x20, 0x32, 0x30, 0x31, 0x36, 0x2F, 0x30, 0x39, 0x2F, 0x31, 0x34, - 0x2D, 0x30, 0x31, 0x3A, 0x30, 0x39, 0x3A, 0x30, 0x31, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x3C, - 0x72, 0x64, 0x66, 0x3A, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6D, 0x6C, 0x6E, - 0x73, 0x3A, 0x72, 0x64, 0x66, 0x3D, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3A, - 0x2F, 0x2F, 0x77, 0x77, 0x77, 0x2E, 0x77, 0x33, 0x2E, 0x6F, 0x72, 0x67, - 0x2F, 0x31, 0x39, 0x39, 0x39, 0x2F, 0x30, 0x32, 0x2F, 0x32, 0x32, 0x2D, - 0x72, 0x64, 0x66, 0x2D, 0x73, 0x79, 0x6E, 0x74, 0x61, 0x78, 0x2D, 0x6E, - 0x73, 0x23, 0x22, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, - 0x72, 0x64, 0x66, 0x3A, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6F, 0x6E, 0x20, 0x72, 0x64, 0x66, 0x3A, 0x61, 0x62, 0x6F, 0x75, - 0x74, 0x3D, 0x22, 0x22, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6D, 0x6C, 0x6E, 0x73, 0x3A, 0x78, - 0x6D, 0x70, 0x3D, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x6E, - 0x73, 0x2E, 0x61, 0x64, 0x6F, 0x62, 0x65, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, - 0x78, 0x61, 0x70, 0x2F, 0x31, 0x2E, 0x30, 0x2F, 0x22, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6D, - 0x6C, 0x6E, 0x73, 0x3A, 0x78, 0x6D, 0x70, 0x4D, 0x4D, 0x3D, 0x22, 0x68, - 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x6E, 0x73, 0x2E, 0x61, 0x64, 0x6F, - 0x62, 0x65, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x78, 0x61, 0x70, 0x2F, 0x31, - 0x2E, 0x30, 0x2F, 0x6D, 0x6D, 0x2F, 0x22, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6D, 0x6C, 0x6E, - 0x73, 0x3A, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3D, 0x22, 0x68, 0x74, 0x74, - 0x70, 0x3A, 0x2F, 0x2F, 0x6E, 0x73, 0x2E, 0x61, 0x64, 0x6F, 0x62, 0x65, - 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x78, 0x61, 0x70, 0x2F, 0x31, 0x2E, 0x30, - 0x2F, 0x73, 0x54, 0x79, 0x70, 0x65, 0x2F, 0x52, 0x65, 0x73, 0x6F, 0x75, - 0x72, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6E, 0x74, 0x23, 0x22, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, - 0x6D, 0x6C, 0x6E, 0x73, 0x3A, 0x64, 0x63, 0x3D, 0x22, 0x68, 0x74, 0x74, - 0x70, 0x3A, 0x2F, 0x2F, 0x70, 0x75, 0x72, 0x6C, 0x2E, 0x6F, 0x72, 0x67, - 0x2F, 0x64, 0x63, 0x2F, 0x65, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x73, - 0x2F, 0x31, 0x2E, 0x31, 0x2F, 0x22, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6D, 0x6C, 0x6E, 0x73, - 0x3A, 0x70, 0x68, 0x6F, 0x74, 0x6F, 0x73, 0x68, 0x6F, 0x70, 0x3D, 0x22, - 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x6E, 0x73, 0x2E, 0x61, 0x64, - 0x6F, 0x62, 0x65, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x70, 0x68, 0x6F, 0x74, - 0x6F, 0x73, 0x68, 0x6F, 0x70, 0x2F, 0x31, 0x2E, 0x30, 0x2F, 0x22, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x78, 0x6D, 0x6C, 0x6E, 0x73, 0x3A, 0x74, 0x69, 0x66, 0x66, 0x3D, 0x22, - 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x6E, 0x73, 0x2E, 0x61, 0x64, - 0x6F, 0x62, 0x65, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x74, 0x69, 0x66, 0x66, - 0x2F, 0x31, 0x2E, 0x30, 0x2F, 0x22, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6D, 0x6C, 0x6E, 0x73, - 0x3A, 0x65, 0x78, 0x69, 0x66, 0x3D, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3A, - 0x2F, 0x2F, 0x6E, 0x73, 0x2E, 0x61, 0x64, 0x6F, 0x62, 0x65, 0x2E, 0x63, - 0x6F, 0x6D, 0x2F, 0x65, 0x78, 0x69, 0x66, 0x2F, 0x31, 0x2E, 0x30, 0x2F, - 0x22, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3C, 0x78, 0x6D, 0x70, 0x3A, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6F, 0x72, - 0x54, 0x6F, 0x6F, 0x6C, 0x3E, 0x41, 0x64, 0x6F, 0x62, 0x65, 0x20, 0x50, - 0x68, 0x6F, 0x74, 0x6F, 0x73, 0x68, 0x6F, 0x70, 0x20, 0x43, 0x43, 0x20, - 0x32, 0x30, 0x31, 0x37, 0x20, 0x28, 0x57, 0x69, 0x6E, 0x64, 0x6F, 0x77, - 0x73, 0x29, 0x3C, 0x2F, 0x78, 0x6D, 0x70, 0x3A, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x6F, 0x72, 0x54, 0x6F, 0x6F, 0x6C, 0x3E, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x78, 0x6D, 0x70, 0x3A, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x65, 0x3E, 0x32, 0x30, - 0x31, 0x38, 0x2D, 0x30, 0x31, 0x2D, 0x32, 0x36, 0x54, 0x31, 0x31, 0x3A, - 0x31, 0x39, 0x3A, 0x30, 0x39, 0x2B, 0x30, 0x38, 0x3A, 0x30, 0x30, 0x3C, - 0x2F, 0x78, 0x6D, 0x70, 0x3A, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, - 0x61, 0x74, 0x65, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3C, 0x78, 0x6D, 0x70, 0x3A, 0x4D, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x44, 0x61, 0x74, 0x65, 0x3E, 0x32, 0x30, 0x31, 0x38, - 0x2D, 0x30, 0x31, 0x2D, 0x32, 0x36, 0x54, 0x31, 0x31, 0x3A, 0x31, 0x39, - 0x3A, 0x30, 0x39, 0x2B, 0x30, 0x38, 0x3A, 0x30, 0x30, 0x3C, 0x2F, 0x78, - 0x6D, 0x70, 0x3A, 0x4D, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x44, - 0x61, 0x74, 0x65, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3C, 0x78, 0x6D, 0x70, 0x3A, 0x4D, 0x6F, 0x64, 0x69, 0x66, - 0x79, 0x44, 0x61, 0x74, 0x65, 0x3E, 0x32, 0x30, 0x31, 0x38, 0x2D, 0x30, - 0x31, 0x2D, 0x32, 0x36, 0x54, 0x31, 0x31, 0x3A, 0x31, 0x39, 0x3A, 0x30, - 0x39, 0x2B, 0x30, 0x38, 0x3A, 0x30, 0x30, 0x3C, 0x2F, 0x78, 0x6D, 0x70, - 0x3A, 0x4D, 0x6F, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3E, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x78, - 0x6D, 0x70, 0x4D, 0x4D, 0x3A, 0x49, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x63, - 0x65, 0x49, 0x44, 0x3E, 0x78, 0x6D, 0x70, 0x2E, 0x69, 0x69, 0x64, 0x3A, - 0x34, 0x30, 0x32, 0x65, 0x31, 0x36, 0x64, 0x39, 0x2D, 0x37, 0x38, 0x63, - 0x30, 0x2D, 0x61, 0x32, 0x34, 0x33, 0x2D, 0x39, 0x63, 0x63, 0x62, 0x2D, - 0x37, 0x32, 0x66, 0x30, 0x65, 0x38, 0x35, 0x36, 0x33, 0x65, 0x62, 0x33, - 0x3C, 0x2F, 0x78, 0x6D, 0x70, 0x4D, 0x4D, 0x3A, 0x49, 0x6E, 0x73, 0x74, - 0x61, 0x6E, 0x63, 0x65, 0x49, 0x44, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x78, 0x6D, 0x70, 0x4D, 0x4D, 0x3A, - 0x44, 0x6F, 0x63, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x49, 0x44, 0x3E, 0x61, - 0x64, 0x6F, 0x62, 0x65, 0x3A, 0x64, 0x6F, 0x63, 0x69, 0x64, 0x3A, 0x70, - 0x68, 0x6F, 0x74, 0x6F, 0x73, 0x68, 0x6F, 0x70, 0x3A, 0x61, 0x63, 0x34, - 0x61, 0x35, 0x32, 0x38, 0x31, 0x2D, 0x30, 0x32, 0x34, 0x37, 0x2D, 0x31, - 0x31, 0x65, 0x38, 0x2D, 0x61, 0x33, 0x38, 0x37, 0x2D, 0x38, 0x65, 0x34, - 0x32, 0x36, 0x32, 0x63, 0x35, 0x34, 0x30, 0x63, 0x32, 0x3C, 0x2F, 0x78, - 0x6D, 0x70, 0x4D, 0x4D, 0x3A, 0x44, 0x6F, 0x63, 0x75, 0x6D, 0x65, 0x6E, - 0x74, 0x49, 0x44, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3C, 0x78, 0x6D, 0x70, 0x4D, 0x4D, 0x3A, 0x4F, 0x72, 0x69, - 0x67, 0x69, 0x6E, 0x61, 0x6C, 0x44, 0x6F, 0x63, 0x75, 0x6D, 0x65, 0x6E, - 0x74, 0x49, 0x44, 0x3E, 0x78, 0x6D, 0x70, 0x2E, 0x64, 0x69, 0x64, 0x3A, - 0x61, 0x30, 0x31, 0x35, 0x36, 0x63, 0x64, 0x31, 0x2D, 0x34, 0x62, 0x37, - 0x62, 0x2D, 0x36, 0x31, 0x34, 0x37, 0x2D, 0x62, 0x33, 0x31, 0x64, 0x2D, - 0x35, 0x36, 0x63, 0x33, 0x63, 0x36, 0x64, 0x31, 0x34, 0x38, 0x66, 0x32, - 0x3C, 0x2F, 0x78, 0x6D, 0x70, 0x4D, 0x4D, 0x3A, 0x4F, 0x72, 0x69, 0x67, - 0x69, 0x6E, 0x61, 0x6C, 0x44, 0x6F, 0x63, 0x75, 0x6D, 0x65, 0x6E, 0x74, - 0x49, 0x44, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x3C, 0x78, 0x6D, 0x70, 0x4D, 0x4D, 0x3A, 0x48, 0x69, 0x73, 0x74, - 0x6F, 0x72, 0x79, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x72, 0x64, 0x66, 0x3A, 0x53, 0x65, - 0x71, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x72, 0x64, 0x66, 0x3A, 0x6C, - 0x69, 0x20, 0x72, 0x64, 0x66, 0x3A, 0x70, 0x61, 0x72, 0x73, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x3D, 0x22, 0x52, 0x65, 0x73, 0x6F, 0x75, 0x72, 0x63, - 0x65, 0x22, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x73, - 0x74, 0x45, 0x76, 0x74, 0x3A, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x3E, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x3C, 0x2F, 0x73, 0x74, 0x45, - 0x76, 0x74, 0x3A, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, - 0x69, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x63, 0x65, 0x49, 0x44, 0x3E, 0x78, - 0x6D, 0x70, 0x2E, 0x69, 0x69, 0x64, 0x3A, 0x61, 0x30, 0x31, 0x35, 0x36, - 0x63, 0x64, 0x31, 0x2D, 0x34, 0x62, 0x37, 0x62, 0x2D, 0x36, 0x31, 0x34, - 0x37, 0x2D, 0x62, 0x33, 0x31, 0x64, 0x2D, 0x35, 0x36, 0x63, 0x33, 0x63, - 0x36, 0x64, 0x31, 0x34, 0x38, 0x66, 0x32, 0x3C, 0x2F, 0x73, 0x74, 0x45, - 0x76, 0x74, 0x3A, 0x69, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x63, 0x65, 0x49, - 0x44, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x73, 0x74, - 0x45, 0x76, 0x74, 0x3A, 0x77, 0x68, 0x65, 0x6E, 0x3E, 0x32, 0x30, 0x31, - 0x38, 0x2D, 0x30, 0x31, 0x2D, 0x32, 0x36, 0x54, 0x31, 0x31, 0x3A, 0x31, - 0x39, 0x3A, 0x30, 0x39, 0x2B, 0x30, 0x38, 0x3A, 0x30, 0x30, 0x3C, 0x2F, - 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, 0x77, 0x68, 0x65, 0x6E, 0x3E, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x73, 0x74, 0x45, 0x76, 0x74, - 0x3A, 0x73, 0x6F, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x41, 0x67, 0x65, - 0x6E, 0x74, 0x3E, 0x41, 0x64, 0x6F, 0x62, 0x65, 0x20, 0x50, 0x68, 0x6F, - 0x74, 0x6F, 0x73, 0x68, 0x6F, 0x70, 0x20, 0x43, 0x43, 0x20, 0x32, 0x30, - 0x31, 0x37, 0x20, 0x28, 0x57, 0x69, 0x6E, 0x64, 0x6F, 0x77, 0x73, 0x29, - 0x3C, 0x2F, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, 0x73, 0x6F, 0x66, 0x74, - 0x77, 0x61, 0x72, 0x65, 0x41, 0x67, 0x65, 0x6E, 0x74, 0x3E, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3C, 0x2F, 0x72, 0x64, 0x66, 0x3A, 0x6C, 0x69, 0x3E, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3C, 0x72, 0x64, 0x66, 0x3A, 0x6C, 0x69, 0x20, 0x72, - 0x64, 0x66, 0x3A, 0x70, 0x61, 0x72, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, - 0x3D, 0x22, 0x52, 0x65, 0x73, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x22, 0x3E, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x73, 0x74, 0x45, 0x76, - 0x74, 0x3A, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x73, 0x61, 0x76, - 0x65, 0x64, 0x3C, 0x2F, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, 0x61, 0x63, - 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3C, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, 0x69, 0x6E, 0x73, 0x74, 0x61, - 0x6E, 0x63, 0x65, 0x49, 0x44, 0x3E, 0x78, 0x6D, 0x70, 0x2E, 0x69, 0x69, - 0x64, 0x3A, 0x34, 0x30, 0x32, 0x65, 0x31, 0x36, 0x64, 0x39, 0x2D, 0x37, - 0x38, 0x63, 0x30, 0x2D, 0x61, 0x32, 0x34, 0x33, 0x2D, 0x39, 0x63, 0x63, - 0x62, 0x2D, 0x37, 0x32, 0x66, 0x30, 0x65, 0x38, 0x35, 0x36, 0x33, 0x65, - 0x62, 0x33, 0x3C, 0x2F, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, 0x69, 0x6E, - 0x73, 0x74, 0x61, 0x6E, 0x63, 0x65, 0x49, 0x44, 0x3E, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x3C, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, 0x77, - 0x68, 0x65, 0x6E, 0x3E, 0x32, 0x30, 0x31, 0x38, 0x2D, 0x30, 0x31, 0x2D, - 0x32, 0x36, 0x54, 0x31, 0x31, 0x3A, 0x31, 0x39, 0x3A, 0x30, 0x39, 0x2B, - 0x30, 0x38, 0x3A, 0x30, 0x30, 0x3C, 0x2F, 0x73, 0x74, 0x45, 0x76, 0x74, - 0x3A, 0x77, 0x68, 0x65, 0x6E, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x3C, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, 0x73, 0x6F, 0x66, 0x74, - 0x77, 0x61, 0x72, 0x65, 0x41, 0x67, 0x65, 0x6E, 0x74, 0x3E, 0x41, 0x64, - 0x6F, 0x62, 0x65, 0x20, 0x50, 0x68, 0x6F, 0x74, 0x6F, 0x73, 0x68, 0x6F, - 0x70, 0x20, 0x43, 0x43, 0x20, 0x32, 0x30, 0x31, 0x37, 0x20, 0x28, 0x57, - 0x69, 0x6E, 0x64, 0x6F, 0x77, 0x73, 0x29, 0x3C, 0x2F, 0x73, 0x74, 0x45, - 0x76, 0x74, 0x3A, 0x73, 0x6F, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x41, - 0x67, 0x65, 0x6E, 0x74, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3C, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, 0x63, 0x68, 0x61, 0x6E, 0x67, - 0x65, 0x64, 0x3E, 0x2F, 0x3C, 0x2F, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, - 0x63, 0x68, 0x61, 0x6E, 0x67, 0x65, 0x64, 0x3E, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3C, 0x2F, 0x72, 0x64, 0x66, 0x3A, 0x6C, 0x69, 0x3E, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x2F, - 0x72, 0x64, 0x66, 0x3A, 0x53, 0x65, 0x71, 0x3E, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x2F, 0x78, 0x6D, 0x70, 0x4D, - 0x4D, 0x3A, 0x48, 0x69, 0x73, 0x74, 0x6F, 0x72, 0x79, 0x3E, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x64, 0x63, 0x3A, - 0x66, 0x6F, 0x72, 0x6D, 0x61, 0x74, 0x3E, 0x69, 0x6D, 0x61, 0x67, 0x65, - 0x2F, 0x70, 0x6E, 0x67, 0x3C, 0x2F, 0x64, 0x63, 0x3A, 0x66, 0x6F, 0x72, - 0x6D, 0x61, 0x74, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3C, 0x70, 0x68, 0x6F, 0x74, 0x6F, 0x73, 0x68, 0x6F, 0x70, - 0x3A, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x4D, 0x6F, 0x64, 0x65, 0x3E, 0x33, - 0x3C, 0x2F, 0x70, 0x68, 0x6F, 0x74, 0x6F, 0x73, 0x68, 0x6F, 0x70, 0x3A, - 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x4D, 0x6F, 0x64, 0x65, 0x3E, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x74, 0x69, 0x66, - 0x66, 0x3A, 0x4F, 0x72, 0x69, 0x65, 0x6E, 0x74, 0x61, 0x74, 0x69, 0x6F, - 0x6E, 0x3E, 0x31, 0x3C, 0x2F, 0x74, 0x69, 0x66, 0x66, 0x3A, 0x4F, 0x72, - 0x69, 0x65, 0x6E, 0x74, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x74, 0x69, 0x66, - 0x66, 0x3A, 0x58, 0x52, 0x65, 0x73, 0x6F, 0x6C, 0x75, 0x74, 0x69, 0x6F, - 0x6E, 0x3E, 0x37, 0x32, 0x30, 0x30, 0x30, 0x30, 0x2F, 0x31, 0x30, 0x30, - 0x30, 0x30, 0x3C, 0x2F, 0x74, 0x69, 0x66, 0x66, 0x3A, 0x58, 0x52, 0x65, - 0x73, 0x6F, 0x6C, 0x75, 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x74, 0x69, 0x66, 0x66, - 0x3A, 0x59, 0x52, 0x65, 0x73, 0x6F, 0x6C, 0x75, 0x74, 0x69, 0x6F, 0x6E, - 0x3E, 0x37, 0x32, 0x30, 0x30, 0x30, 0x30, 0x2F, 0x31, 0x30, 0x30, 0x30, - 0x30, 0x3C, 0x2F, 0x74, 0x69, 0x66, 0x66, 0x3A, 0x59, 0x52, 0x65, 0x73, - 0x6F, 0x6C, 0x75, 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x74, 0x69, 0x66, 0x66, 0x3A, - 0x52, 0x65, 0x73, 0x6F, 0x6C, 0x75, 0x74, 0x69, 0x6F, 0x6E, 0x55, 0x6E, - 0x69, 0x74, 0x3E, 0x32, 0x3C, 0x2F, 0x74, 0x69, 0x66, 0x66, 0x3A, 0x52, - 0x65, 0x73, 0x6F, 0x6C, 0x75, 0x74, 0x69, 0x6F, 0x6E, 0x55, 0x6E, 0x69, - 0x74, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3C, 0x65, 0x78, 0x69, 0x66, 0x3A, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x53, - 0x70, 0x61, 0x63, 0x65, 0x3E, 0x36, 0x35, 0x35, 0x33, 0x35, 0x3C, 0x2F, - 0x65, 0x78, 0x69, 0x66, 0x3A, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x53, 0x70, - 0x61, 0x63, 0x65, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3C, 0x65, 0x78, 0x69, 0x66, 0x3A, 0x50, 0x69, 0x78, 0x65, - 0x6C, 0x58, 0x44, 0x69, 0x6D, 0x65, 0x6E, 0x73, 0x69, 0x6F, 0x6E, 0x3E, - 0x36, 0x36, 0x3C, 0x2F, 0x65, 0x78, 0x69, 0x66, 0x3A, 0x50, 0x69, 0x78, - 0x65, 0x6C, 0x58, 0x44, 0x69, 0x6D, 0x65, 0x6E, 0x73, 0x69, 0x6F, 0x6E, - 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, - 0x65, 0x78, 0x69, 0x66, 0x3A, 0x50, 0x69, 0x78, 0x65, 0x6C, 0x59, 0x44, - 0x69, 0x6D, 0x65, 0x6E, 0x73, 0x69, 0x6F, 0x6E, 0x3E, 0x36, 0x36, 0x3C, - 0x2F, 0x65, 0x78, 0x69, 0x66, 0x3A, 0x50, 0x69, 0x78, 0x65, 0x6C, 0x59, - 0x44, 0x69, 0x6D, 0x65, 0x6E, 0x73, 0x69, 0x6F, 0x6E, 0x3E, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x2F, 0x72, 0x64, 0x66, 0x3A, 0x44, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x0A, - 0x20, 0x20, 0x20, 0x3C, 0x2F, 0x72, 0x64, 0x66, 0x3A, 0x52, 0x44, 0x46, - 0x3E, 0x0A, 0x3C, 0x2F, 0x78, 0x3A, 0x78, 0x6D, 0x70, 0x6D, 0x65, 0x74, - 0x61, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x3C, 0x3F, 0x78, 0x70, 0x61, 0x63, 0x6B, 0x65, 0x74, - 0x20, 0x65, 0x6E, 0x64, 0x3D, 0x22, 0x77, 0x22, 0x3F, 0x3E, 0x8F, 0x3F, - 0x33, 0x69, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, 0x52, 0x4D, 0x00, 0x00, - 0x7A, 0x25, 0x00, 0x00, 0x80, 0x83, 0x00, 0x00, 0xF9, 0xFF, 0x00, 0x00, - 0x80, 0xE9, 0x00, 0x00, 0x75, 0x30, 0x00, 0x00, 0xEA, 0x60, 0x00, 0x00, - 0x3A, 0x98, 0x00, 0x00, 0x17, 0x6F, 0x92, 0x5F, 0xC5, 0x46, 0x00, 0x00, - 0x01, 0xCB, 0x49, 0x44, 0x41, 0x54, 0x78, 0xDA, 0xEC, 0xD9, 0x3F, 0x4A, - 0x03, 0x41, 0x14, 0xC7, 0xF1, 0xEF, 0xC6, 0x44, 0x08, 0x98, 0x28, 0x2A, - 0xA6, 0xB1, 0xB1, 0x13, 0x8B, 0x94, 0xA2, 0x17, 0xB0, 0x14, 0x2C, 0xBC, - 0x82, 0xB5, 0x8D, 0x37, 0xB0, 0x14, 0x53, 0xD8, 0x08, 0xE2, 0x01, 0xB4, - 0x50, 0x04, 0x2F, 0x60, 0x23, 0x01, 0x0B, 0x49, 0x29, 0xD6, 0x16, 0xDA, - 0x28, 0x0A, 0x2A, 0x89, 0x1A, 0x8B, 0xAC, 0x10, 0x06, 0x12, 0x77, 0xB3, - 0x33, 0xC9, 0xCE, 0xF2, 0x7B, 0xB0, 0x84, 0xB7, 0xB0, 0x84, 0xF9, 0xEC, - 0xCC, 0x9B, 0x3F, 0x1B, 0xB4, 0xDB, 0x6D, 0x14, 0x90, 0x13, 0x81, 0x20, - 0x04, 0x21, 0x08, 0x41, 0x08, 0x42, 0x10, 0x82, 0x10, 0x84, 0x20, 0x04, - 0x21, 0x08, 0x41, 0x08, 0x42, 0x10, 0xC3, 0x8A, 0x7C, 0x82, 0x67, 0xA7, - 0x80, 0x95, 0xF0, 0xB7, 0x57, 0x3C, 0x00, 0x75, 0xA0, 0x95, 0x45, 0x88, - 0x6D, 0xA0, 0x36, 0xC0, 0x73, 0xF3, 0x21, 0x4C, 0x2A, 0x23, 0x88, 0x79, - 0x42, 0x75, 0x0A, 0x6C, 0x26, 0xF8, 0xBF, 0x45, 0xE0, 0x2E, 0x0B, 0x10, - 0x36, 0xCE, 0xF5, 0x02, 0xDF, 0x8B, 0xE5, 0xB1, 0x91, 0xDF, 0x84, 0x8D, - 0xEA, 0x77, 0xE5, 0x80, 0x17, 0xE3, 0xB9, 0x1A, 0x50, 0x70, 0x78, 0x8D, - 0xB9, 0xEE, 0x11, 0x8F, 0xC0, 0xDC, 0x80, 0x6F, 0x76, 0x54, 0x27, 0xC4, - 0x5B, 0xC0, 0x91, 0x6D, 0x88, 0x67, 0x63, 0x86, 0xF0, 0x01, 0x02, 0xE0, - 0x09, 0xA8, 0x68, 0x1D, 0xD1, 0xE9, 0xC5, 0x7B, 0x69, 0xE9, 0x11, 0xB3, - 0x43, 0x6C, 0xF8, 0x04, 0x70, 0x01, 0x54, 0xE3, 0x14, 0xE9, 0x61, 0x41, - 0x8C, 0x22, 0xCE, 0x80, 0x8D, 0xAE, 0xBC, 0x00, 0x7C, 0xB9, 0x58, 0x59, - 0x36, 0x80, 0xE9, 0x94, 0x22, 0xB4, 0x80, 0xB2, 0x71, 0x6F, 0x01, 0xB8, - 0x77, 0x01, 0x51, 0xF5, 0xAC, 0x56, 0x94, 0x6C, 0x15, 0xCB, 0x62, 0x06, - 0x8A, 0xA6, 0x95, 0x1A, 0xE1, 0xFB, 0xD7, 0xE2, 0xBE, 0xD3, 0x68, 0x54, - 0x88, 0x22, 0xF0, 0x6E, 0xDC, 0x3B, 0x04, 0x4E, 0x80, 0x66, 0x0A, 0x1B, - 0x5D, 0x01, 0x76, 0x81, 0xA5, 0xA8, 0x33, 0x47, 0xD4, 0x1A, 0xB1, 0xEF, - 0xC3, 0x7E, 0xC1, 0x88, 0xF3, 0x70, 0x1A, 0x5D, 0xB7, 0xB9, 0xB2, 0x6C, - 0x18, 0xC5, 0x31, 0xF0, 0x64, 0x38, 0x94, 0x80, 0xD7, 0xAE, 0x7C, 0xBC, - 0xD7, 0xD9, 0x48, 0xD4, 0x62, 0x99, 0xF7, 0xB4, 0x2E, 0x7C, 0xBA, 0xD8, - 0x7D, 0x66, 0x3A, 0x04, 0x21, 0x08, 0x41, 0x08, 0x42, 0x10, 0x16, 0x21, - 0x3E, 0x3C, 0x6D, 0xDF, 0xA4, 0x91, 0xFF, 0x24, 0x85, 0xB8, 0x34, 0xF2, - 0xB2, 0x27, 0x10, 0xD7, 0x46, 0xFE, 0xED, 0x62, 0xD3, 0xB5, 0x03, 0x1C, - 0xF4, 0x53, 0x1E, 0x71, 0x4F, 0xB8, 0x8A, 0xB3, 0xD7, 0x88, 0x03, 0xF1, - 0x46, 0xE7, 0x18, 0xCC, 0xD7, 0x58, 0xA6, 0xF3, 0x09, 0x22, 0x31, 0xC4, - 0xDF, 0x18, 0x0B, 0x3C, 0x44, 0xA8, 0x03, 0xAB, 0x36, 0x67, 0x8D, 0x1C, - 0x70, 0xEB, 0x19, 0xC2, 0xDA, 0x7F, 0x08, 0x83, 0xF4, 0x08, 0x73, 0xBC, - 0xCD, 0xA4, 0xB4, 0xF1, 0x4D, 0x63, 0xD7, 0x89, 0x4B, 0x08, 0x2D, 0xA8, - 0x04, 0x21, 0x08, 0x41, 0x08, 0x42, 0x10, 0x82, 0x10, 0x84, 0x42, 0x10, - 0x82, 0x10, 0x84, 0x20, 0x04, 0x21, 0x08, 0x41, 0x08, 0x42, 0x10, 0x82, - 0xB0, 0x16, 0xBF, 0x03, 0x00, 0xF4, 0xAF, 0x63, 0xB0, 0x6A, 0xED, 0xB9, - 0x23, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4E, 0x44, 0xAE, 0x42, 0x60, - 0x82 -}; -} -static const unsigned char* config_icon = raw::config_raw; -} \ No newline at end of file diff --git a/tf2/icons/legit.hpp b/tf2/icons/legit.hpp deleted file mode 100644 index 8e5523e..0000000 --- a/tf2/icons/legit.hpp +++ /dev/null @@ -1,1316 +0,0 @@ -/* E:\Users\admin\Desktop\stuff\icons\legit.png (1/26/2018 4:18:16 AM) - StartOffset: 00000000, EndOffset: 00003D23, Length: 00003D24 */ - -namespace icons { -static const size_t legit_size = 15652; -namespace raw { -static const unsigned char legit_raw[15652] = { - 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00, 0x00, 0x0D, - 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x42, - 0x08, 0x06, 0x00, 0x00, 0x00, 0xE3, 0x54, 0x00, 0xE8, 0x00, 0x00, 0x00, - 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0B, 0x13, 0x00, 0x00, 0x0B, - 0x13, 0x01, 0x00, 0x9A, 0x9C, 0x18, 0x00, 0x00, 0x39, 0xEC, 0x69, 0x54, - 0x58, 0x74, 0x58, 0x4D, 0x4C, 0x3A, 0x63, 0x6F, 0x6D, 0x2E, 0x61, 0x64, - 0x6F, 0x62, 0x65, 0x2E, 0x78, 0x6D, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3C, 0x3F, 0x78, 0x70, 0x61, 0x63, 0x6B, 0x65, 0x74, 0x20, 0x62, 0x65, - 0x67, 0x69, 0x6E, 0x3D, 0x22, 0xEF, 0xBB, 0xBF, 0x22, 0x20, 0x69, 0x64, - 0x3D, 0x22, 0x57, 0x35, 0x4D, 0x30, 0x4D, 0x70, 0x43, 0x65, 0x68, 0x69, - 0x48, 0x7A, 0x72, 0x65, 0x53, 0x7A, 0x4E, 0x54, 0x63, 0x7A, 0x6B, 0x63, - 0x39, 0x64, 0x22, 0x3F, 0x3E, 0x0A, 0x3C, 0x78, 0x3A, 0x78, 0x6D, 0x70, - 0x6D, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6D, 0x6C, 0x6E, 0x73, 0x3A, 0x78, - 0x3D, 0x22, 0x61, 0x64, 0x6F, 0x62, 0x65, 0x3A, 0x6E, 0x73, 0x3A, 0x6D, - 0x65, 0x74, 0x61, 0x2F, 0x22, 0x20, 0x78, 0x3A, 0x78, 0x6D, 0x70, 0x74, - 0x6B, 0x3D, 0x22, 0x41, 0x64, 0x6F, 0x62, 0x65, 0x20, 0x58, 0x4D, 0x50, - 0x20, 0x43, 0x6F, 0x72, 0x65, 0x20, 0x35, 0x2E, 0x36, 0x2D, 0x63, 0x31, - 0x33, 0x38, 0x20, 0x37, 0x39, 0x2E, 0x31, 0x35, 0x39, 0x38, 0x32, 0x34, - 0x2C, 0x20, 0x32, 0x30, 0x31, 0x36, 0x2F, 0x30, 0x39, 0x2F, 0x31, 0x34, - 0x2D, 0x30, 0x31, 0x3A, 0x30, 0x39, 0x3A, 0x30, 0x31, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x3C, - 0x72, 0x64, 0x66, 0x3A, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6D, 0x6C, 0x6E, - 0x73, 0x3A, 0x72, 0x64, 0x66, 0x3D, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3A, - 0x2F, 0x2F, 0x77, 0x77, 0x77, 0x2E, 0x77, 0x33, 0x2E, 0x6F, 0x72, 0x67, - 0x2F, 0x31, 0x39, 0x39, 0x39, 0x2F, 0x30, 0x32, 0x2F, 0x32, 0x32, 0x2D, - 0x72, 0x64, 0x66, 0x2D, 0x73, 0x79, 0x6E, 0x74, 0x61, 0x78, 0x2D, 0x6E, - 0x73, 0x23, 0x22, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, - 0x72, 0x64, 0x66, 0x3A, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6F, 0x6E, 0x20, 0x72, 0x64, 0x66, 0x3A, 0x61, 0x62, 0x6F, 0x75, - 0x74, 0x3D, 0x22, 0x22, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6D, 0x6C, 0x6E, 0x73, 0x3A, 0x78, - 0x6D, 0x70, 0x3D, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x6E, - 0x73, 0x2E, 0x61, 0x64, 0x6F, 0x62, 0x65, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, - 0x78, 0x61, 0x70, 0x2F, 0x31, 0x2E, 0x30, 0x2F, 0x22, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6D, - 0x6C, 0x6E, 0x73, 0x3A, 0x78, 0x6D, 0x70, 0x4D, 0x4D, 0x3D, 0x22, 0x68, - 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x6E, 0x73, 0x2E, 0x61, 0x64, 0x6F, - 0x62, 0x65, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x78, 0x61, 0x70, 0x2F, 0x31, - 0x2E, 0x30, 0x2F, 0x6D, 0x6D, 0x2F, 0x22, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6D, 0x6C, 0x6E, - 0x73, 0x3A, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3D, 0x22, 0x68, 0x74, 0x74, - 0x70, 0x3A, 0x2F, 0x2F, 0x6E, 0x73, 0x2E, 0x61, 0x64, 0x6F, 0x62, 0x65, - 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x78, 0x61, 0x70, 0x2F, 0x31, 0x2E, 0x30, - 0x2F, 0x73, 0x54, 0x79, 0x70, 0x65, 0x2F, 0x52, 0x65, 0x73, 0x6F, 0x75, - 0x72, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6E, 0x74, 0x23, 0x22, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, - 0x6D, 0x6C, 0x6E, 0x73, 0x3A, 0x64, 0x63, 0x3D, 0x22, 0x68, 0x74, 0x74, - 0x70, 0x3A, 0x2F, 0x2F, 0x70, 0x75, 0x72, 0x6C, 0x2E, 0x6F, 0x72, 0x67, - 0x2F, 0x64, 0x63, 0x2F, 0x65, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x73, - 0x2F, 0x31, 0x2E, 0x31, 0x2F, 0x22, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6D, 0x6C, 0x6E, 0x73, - 0x3A, 0x70, 0x68, 0x6F, 0x74, 0x6F, 0x73, 0x68, 0x6F, 0x70, 0x3D, 0x22, - 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x6E, 0x73, 0x2E, 0x61, 0x64, - 0x6F, 0x62, 0x65, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x70, 0x68, 0x6F, 0x74, - 0x6F, 0x73, 0x68, 0x6F, 0x70, 0x2F, 0x31, 0x2E, 0x30, 0x2F, 0x22, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x78, 0x6D, 0x6C, 0x6E, 0x73, 0x3A, 0x74, 0x69, 0x66, 0x66, 0x3D, 0x22, - 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x6E, 0x73, 0x2E, 0x61, 0x64, - 0x6F, 0x62, 0x65, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x74, 0x69, 0x66, 0x66, - 0x2F, 0x31, 0x2E, 0x30, 0x2F, 0x22, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6D, 0x6C, 0x6E, 0x73, - 0x3A, 0x65, 0x78, 0x69, 0x66, 0x3D, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3A, - 0x2F, 0x2F, 0x6E, 0x73, 0x2E, 0x61, 0x64, 0x6F, 0x62, 0x65, 0x2E, 0x63, - 0x6F, 0x6D, 0x2F, 0x65, 0x78, 0x69, 0x66, 0x2F, 0x31, 0x2E, 0x30, 0x2F, - 0x22, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3C, 0x78, 0x6D, 0x70, 0x3A, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6F, 0x72, - 0x54, 0x6F, 0x6F, 0x6C, 0x3E, 0x41, 0x64, 0x6F, 0x62, 0x65, 0x20, 0x50, - 0x68, 0x6F, 0x74, 0x6F, 0x73, 0x68, 0x6F, 0x70, 0x20, 0x43, 0x43, 0x20, - 0x32, 0x30, 0x31, 0x37, 0x20, 0x28, 0x57, 0x69, 0x6E, 0x64, 0x6F, 0x77, - 0x73, 0x29, 0x3C, 0x2F, 0x78, 0x6D, 0x70, 0x3A, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x6F, 0x72, 0x54, 0x6F, 0x6F, 0x6C, 0x3E, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x78, 0x6D, 0x70, 0x3A, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x65, 0x3E, 0x32, 0x30, - 0x31, 0x38, 0x2D, 0x30, 0x31, 0x2D, 0x32, 0x36, 0x54, 0x31, 0x31, 0x3A, - 0x31, 0x38, 0x3A, 0x31, 0x34, 0x2B, 0x30, 0x38, 0x3A, 0x30, 0x30, 0x3C, - 0x2F, 0x78, 0x6D, 0x70, 0x3A, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, - 0x61, 0x74, 0x65, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3C, 0x78, 0x6D, 0x70, 0x3A, 0x4D, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x44, 0x61, 0x74, 0x65, 0x3E, 0x32, 0x30, 0x31, 0x38, - 0x2D, 0x30, 0x31, 0x2D, 0x32, 0x36, 0x54, 0x31, 0x31, 0x3A, 0x31, 0x38, - 0x3A, 0x31, 0x34, 0x2B, 0x30, 0x38, 0x3A, 0x30, 0x30, 0x3C, 0x2F, 0x78, - 0x6D, 0x70, 0x3A, 0x4D, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x44, - 0x61, 0x74, 0x65, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3C, 0x78, 0x6D, 0x70, 0x3A, 0x4D, 0x6F, 0x64, 0x69, 0x66, - 0x79, 0x44, 0x61, 0x74, 0x65, 0x3E, 0x32, 0x30, 0x31, 0x38, 0x2D, 0x30, - 0x31, 0x2D, 0x32, 0x36, 0x54, 0x31, 0x31, 0x3A, 0x31, 0x38, 0x3A, 0x31, - 0x34, 0x2B, 0x30, 0x38, 0x3A, 0x30, 0x30, 0x3C, 0x2F, 0x78, 0x6D, 0x70, - 0x3A, 0x4D, 0x6F, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3E, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x78, - 0x6D, 0x70, 0x4D, 0x4D, 0x3A, 0x49, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x63, - 0x65, 0x49, 0x44, 0x3E, 0x78, 0x6D, 0x70, 0x2E, 0x69, 0x69, 0x64, 0x3A, - 0x65, 0x39, 0x33, 0x64, 0x37, 0x33, 0x38, 0x37, 0x2D, 0x31, 0x30, 0x36, - 0x39, 0x2D, 0x35, 0x64, 0x34, 0x32, 0x2D, 0x38, 0x66, 0x38, 0x63, 0x2D, - 0x63, 0x33, 0x34, 0x33, 0x37, 0x39, 0x35, 0x36, 0x35, 0x65, 0x30, 0x63, - 0x3C, 0x2F, 0x78, 0x6D, 0x70, 0x4D, 0x4D, 0x3A, 0x49, 0x6E, 0x73, 0x74, - 0x61, 0x6E, 0x63, 0x65, 0x49, 0x44, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x78, 0x6D, 0x70, 0x4D, 0x4D, 0x3A, - 0x44, 0x6F, 0x63, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x49, 0x44, 0x3E, 0x61, - 0x64, 0x6F, 0x62, 0x65, 0x3A, 0x64, 0x6F, 0x63, 0x69, 0x64, 0x3A, 0x70, - 0x68, 0x6F, 0x74, 0x6F, 0x73, 0x68, 0x6F, 0x70, 0x3A, 0x38, 0x62, 0x66, - 0x62, 0x37, 0x35, 0x37, 0x35, 0x2D, 0x30, 0x32, 0x34, 0x37, 0x2D, 0x31, - 0x31, 0x65, 0x38, 0x2D, 0x61, 0x33, 0x38, 0x37, 0x2D, 0x38, 0x65, 0x34, - 0x32, 0x36, 0x32, 0x63, 0x35, 0x34, 0x30, 0x63, 0x32, 0x3C, 0x2F, 0x78, - 0x6D, 0x70, 0x4D, 0x4D, 0x3A, 0x44, 0x6F, 0x63, 0x75, 0x6D, 0x65, 0x6E, - 0x74, 0x49, 0x44, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3C, 0x78, 0x6D, 0x70, 0x4D, 0x4D, 0x3A, 0x4F, 0x72, 0x69, - 0x67, 0x69, 0x6E, 0x61, 0x6C, 0x44, 0x6F, 0x63, 0x75, 0x6D, 0x65, 0x6E, - 0x74, 0x49, 0x44, 0x3E, 0x78, 0x6D, 0x70, 0x2E, 0x64, 0x69, 0x64, 0x3A, - 0x32, 0x35, 0x33, 0x61, 0x62, 0x33, 0x39, 0x61, 0x2D, 0x33, 0x37, 0x31, - 0x31, 0x2D, 0x35, 0x64, 0x34, 0x64, 0x2D, 0x62, 0x63, 0x33, 0x38, 0x2D, - 0x62, 0x36, 0x66, 0x30, 0x34, 0x36, 0x62, 0x62, 0x30, 0x31, 0x66, 0x34, - 0x3C, 0x2F, 0x78, 0x6D, 0x70, 0x4D, 0x4D, 0x3A, 0x4F, 0x72, 0x69, 0x67, - 0x69, 0x6E, 0x61, 0x6C, 0x44, 0x6F, 0x63, 0x75, 0x6D, 0x65, 0x6E, 0x74, - 0x49, 0x44, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x3C, 0x78, 0x6D, 0x70, 0x4D, 0x4D, 0x3A, 0x48, 0x69, 0x73, 0x74, - 0x6F, 0x72, 0x79, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x72, 0x64, 0x66, 0x3A, 0x53, 0x65, - 0x71, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x72, 0x64, 0x66, 0x3A, 0x6C, - 0x69, 0x20, 0x72, 0x64, 0x66, 0x3A, 0x70, 0x61, 0x72, 0x73, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x3D, 0x22, 0x52, 0x65, 0x73, 0x6F, 0x75, 0x72, 0x63, - 0x65, 0x22, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x73, - 0x74, 0x45, 0x76, 0x74, 0x3A, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x3E, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x3C, 0x2F, 0x73, 0x74, 0x45, - 0x76, 0x74, 0x3A, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, - 0x69, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x63, 0x65, 0x49, 0x44, 0x3E, 0x78, - 0x6D, 0x70, 0x2E, 0x69, 0x69, 0x64, 0x3A, 0x32, 0x35, 0x33, 0x61, 0x62, - 0x33, 0x39, 0x61, 0x2D, 0x33, 0x37, 0x31, 0x31, 0x2D, 0x35, 0x64, 0x34, - 0x64, 0x2D, 0x62, 0x63, 0x33, 0x38, 0x2D, 0x62, 0x36, 0x66, 0x30, 0x34, - 0x36, 0x62, 0x62, 0x30, 0x31, 0x66, 0x34, 0x3C, 0x2F, 0x73, 0x74, 0x45, - 0x76, 0x74, 0x3A, 0x69, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x63, 0x65, 0x49, - 0x44, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x73, 0x74, - 0x45, 0x76, 0x74, 0x3A, 0x77, 0x68, 0x65, 0x6E, 0x3E, 0x32, 0x30, 0x31, - 0x38, 0x2D, 0x30, 0x31, 0x2D, 0x32, 0x36, 0x54, 0x31, 0x31, 0x3A, 0x31, - 0x38, 0x3A, 0x31, 0x34, 0x2B, 0x30, 0x38, 0x3A, 0x30, 0x30, 0x3C, 0x2F, - 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, 0x77, 0x68, 0x65, 0x6E, 0x3E, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x73, 0x74, 0x45, 0x76, 0x74, - 0x3A, 0x73, 0x6F, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x41, 0x67, 0x65, - 0x6E, 0x74, 0x3E, 0x41, 0x64, 0x6F, 0x62, 0x65, 0x20, 0x50, 0x68, 0x6F, - 0x74, 0x6F, 0x73, 0x68, 0x6F, 0x70, 0x20, 0x43, 0x43, 0x20, 0x32, 0x30, - 0x31, 0x37, 0x20, 0x28, 0x57, 0x69, 0x6E, 0x64, 0x6F, 0x77, 0x73, 0x29, - 0x3C, 0x2F, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, 0x73, 0x6F, 0x66, 0x74, - 0x77, 0x61, 0x72, 0x65, 0x41, 0x67, 0x65, 0x6E, 0x74, 0x3E, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3C, 0x2F, 0x72, 0x64, 0x66, 0x3A, 0x6C, 0x69, 0x3E, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3C, 0x72, 0x64, 0x66, 0x3A, 0x6C, 0x69, 0x20, 0x72, - 0x64, 0x66, 0x3A, 0x70, 0x61, 0x72, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, - 0x3D, 0x22, 0x52, 0x65, 0x73, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x22, 0x3E, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x73, 0x74, 0x45, 0x76, - 0x74, 0x3A, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x73, 0x61, 0x76, - 0x65, 0x64, 0x3C, 0x2F, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, 0x61, 0x63, - 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3C, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, 0x69, 0x6E, 0x73, 0x74, 0x61, - 0x6E, 0x63, 0x65, 0x49, 0x44, 0x3E, 0x78, 0x6D, 0x70, 0x2E, 0x69, 0x69, - 0x64, 0x3A, 0x65, 0x39, 0x33, 0x64, 0x37, 0x33, 0x38, 0x37, 0x2D, 0x31, - 0x30, 0x36, 0x39, 0x2D, 0x35, 0x64, 0x34, 0x32, 0x2D, 0x38, 0x66, 0x38, - 0x63, 0x2D, 0x63, 0x33, 0x34, 0x33, 0x37, 0x39, 0x35, 0x36, 0x35, 0x65, - 0x30, 0x63, 0x3C, 0x2F, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, 0x69, 0x6E, - 0x73, 0x74, 0x61, 0x6E, 0x63, 0x65, 0x49, 0x44, 0x3E, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x3C, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, 0x77, - 0x68, 0x65, 0x6E, 0x3E, 0x32, 0x30, 0x31, 0x38, 0x2D, 0x30, 0x31, 0x2D, - 0x32, 0x36, 0x54, 0x31, 0x31, 0x3A, 0x31, 0x38, 0x3A, 0x31, 0x34, 0x2B, - 0x30, 0x38, 0x3A, 0x30, 0x30, 0x3C, 0x2F, 0x73, 0x74, 0x45, 0x76, 0x74, - 0x3A, 0x77, 0x68, 0x65, 0x6E, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x3C, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, 0x73, 0x6F, 0x66, 0x74, - 0x77, 0x61, 0x72, 0x65, 0x41, 0x67, 0x65, 0x6E, 0x74, 0x3E, 0x41, 0x64, - 0x6F, 0x62, 0x65, 0x20, 0x50, 0x68, 0x6F, 0x74, 0x6F, 0x73, 0x68, 0x6F, - 0x70, 0x20, 0x43, 0x43, 0x20, 0x32, 0x30, 0x31, 0x37, 0x20, 0x28, 0x57, - 0x69, 0x6E, 0x64, 0x6F, 0x77, 0x73, 0x29, 0x3C, 0x2F, 0x73, 0x74, 0x45, - 0x76, 0x74, 0x3A, 0x73, 0x6F, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x41, - 0x67, 0x65, 0x6E, 0x74, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3C, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, 0x63, 0x68, 0x61, 0x6E, 0x67, - 0x65, 0x64, 0x3E, 0x2F, 0x3C, 0x2F, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, - 0x63, 0x68, 0x61, 0x6E, 0x67, 0x65, 0x64, 0x3E, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3C, 0x2F, 0x72, 0x64, 0x66, 0x3A, 0x6C, 0x69, 0x3E, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x2F, - 0x72, 0x64, 0x66, 0x3A, 0x53, 0x65, 0x71, 0x3E, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x2F, 0x78, 0x6D, 0x70, 0x4D, - 0x4D, 0x3A, 0x48, 0x69, 0x73, 0x74, 0x6F, 0x72, 0x79, 0x3E, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x64, 0x63, 0x3A, - 0x66, 0x6F, 0x72, 0x6D, 0x61, 0x74, 0x3E, 0x69, 0x6D, 0x61, 0x67, 0x65, - 0x2F, 0x70, 0x6E, 0x67, 0x3C, 0x2F, 0x64, 0x63, 0x3A, 0x66, 0x6F, 0x72, - 0x6D, 0x61, 0x74, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3C, 0x70, 0x68, 0x6F, 0x74, 0x6F, 0x73, 0x68, 0x6F, 0x70, - 0x3A, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x4D, 0x6F, 0x64, 0x65, 0x3E, 0x33, - 0x3C, 0x2F, 0x70, 0x68, 0x6F, 0x74, 0x6F, 0x73, 0x68, 0x6F, 0x70, 0x3A, - 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x4D, 0x6F, 0x64, 0x65, 0x3E, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x74, 0x69, 0x66, - 0x66, 0x3A, 0x4F, 0x72, 0x69, 0x65, 0x6E, 0x74, 0x61, 0x74, 0x69, 0x6F, - 0x6E, 0x3E, 0x31, 0x3C, 0x2F, 0x74, 0x69, 0x66, 0x66, 0x3A, 0x4F, 0x72, - 0x69, 0x65, 0x6E, 0x74, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x74, 0x69, 0x66, - 0x66, 0x3A, 0x58, 0x52, 0x65, 0x73, 0x6F, 0x6C, 0x75, 0x74, 0x69, 0x6F, - 0x6E, 0x3E, 0x37, 0x32, 0x30, 0x30, 0x30, 0x30, 0x2F, 0x31, 0x30, 0x30, - 0x30, 0x30, 0x3C, 0x2F, 0x74, 0x69, 0x66, 0x66, 0x3A, 0x58, 0x52, 0x65, - 0x73, 0x6F, 0x6C, 0x75, 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x74, 0x69, 0x66, 0x66, - 0x3A, 0x59, 0x52, 0x65, 0x73, 0x6F, 0x6C, 0x75, 0x74, 0x69, 0x6F, 0x6E, - 0x3E, 0x37, 0x32, 0x30, 0x30, 0x30, 0x30, 0x2F, 0x31, 0x30, 0x30, 0x30, - 0x30, 0x3C, 0x2F, 0x74, 0x69, 0x66, 0x66, 0x3A, 0x59, 0x52, 0x65, 0x73, - 0x6F, 0x6C, 0x75, 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x74, 0x69, 0x66, 0x66, 0x3A, - 0x52, 0x65, 0x73, 0x6F, 0x6C, 0x75, 0x74, 0x69, 0x6F, 0x6E, 0x55, 0x6E, - 0x69, 0x74, 0x3E, 0x32, 0x3C, 0x2F, 0x74, 0x69, 0x66, 0x66, 0x3A, 0x52, - 0x65, 0x73, 0x6F, 0x6C, 0x75, 0x74, 0x69, 0x6F, 0x6E, 0x55, 0x6E, 0x69, - 0x74, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3C, 0x65, 0x78, 0x69, 0x66, 0x3A, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x53, - 0x70, 0x61, 0x63, 0x65, 0x3E, 0x36, 0x35, 0x35, 0x33, 0x35, 0x3C, 0x2F, - 0x65, 0x78, 0x69, 0x66, 0x3A, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x53, 0x70, - 0x61, 0x63, 0x65, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3C, 0x65, 0x78, 0x69, 0x66, 0x3A, 0x50, 0x69, 0x78, 0x65, - 0x6C, 0x58, 0x44, 0x69, 0x6D, 0x65, 0x6E, 0x73, 0x69, 0x6F, 0x6E, 0x3E, - 0x36, 0x36, 0x3C, 0x2F, 0x65, 0x78, 0x69, 0x66, 0x3A, 0x50, 0x69, 0x78, - 0x65, 0x6C, 0x58, 0x44, 0x69, 0x6D, 0x65, 0x6E, 0x73, 0x69, 0x6F, 0x6E, - 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, - 0x65, 0x78, 0x69, 0x66, 0x3A, 0x50, 0x69, 0x78, 0x65, 0x6C, 0x59, 0x44, - 0x69, 0x6D, 0x65, 0x6E, 0x73, 0x69, 0x6F, 0x6E, 0x3E, 0x36, 0x36, 0x3C, - 0x2F, 0x65, 0x78, 0x69, 0x66, 0x3A, 0x50, 0x69, 0x78, 0x65, 0x6C, 0x59, - 0x44, 0x69, 0x6D, 0x65, 0x6E, 0x73, 0x69, 0x6F, 0x6E, 0x3E, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x2F, 0x72, 0x64, 0x66, 0x3A, 0x44, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x0A, - 0x20, 0x20, 0x20, 0x3C, 0x2F, 0x72, 0x64, 0x66, 0x3A, 0x52, 0x44, 0x46, - 0x3E, 0x0A, 0x3C, 0x2F, 0x78, 0x3A, 0x78, 0x6D, 0x70, 0x6D, 0x65, 0x74, - 0x61, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x3C, 0x3F, 0x78, 0x70, 0x61, 0x63, 0x6B, 0x65, 0x74, - 0x20, 0x65, 0x6E, 0x64, 0x3D, 0x22, 0x77, 0x22, 0x3F, 0x3E, 0x56, 0x82, - 0xD6, 0xC2, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, 0x52, 0x4D, 0x00, 0x00, - 0x7A, 0x25, 0x00, 0x00, 0x80, 0x83, 0x00, 0x00, 0xF9, 0xFF, 0x00, 0x00, - 0x80, 0xE9, 0x00, 0x00, 0x75, 0x30, 0x00, 0x00, 0xEA, 0x60, 0x00, 0x00, - 0x3A, 0x98, 0x00, 0x00, 0x17, 0x6F, 0x92, 0x5F, 0xC5, 0x46, 0x00, 0x00, - 0x02, 0xB2, 0x49, 0x44, 0x41, 0x54, 0x78, 0xDA, 0xEC, 0x9B, 0x3D, 0x68, - 0x14, 0x41, 0x14, 0x80, 0xBF, 0x4D, 0x2E, 0xE4, 0x40, 0x51, 0x8C, 0x10, - 0x83, 0x0A, 0x11, 0xB4, 0x51, 0x2C, 0x44, 0xAB, 0xA4, 0x31, 0x9D, 0xD8, - 0x89, 0x60, 0x61, 0x44, 0xC4, 0x46, 0x6B, 0x8B, 0x34, 0x22, 0xD8, 0x88, - 0x82, 0x60, 0x2F, 0xDA, 0x58, 0x18, 0x41, 0x2C, 0x44, 0x84, 0x80, 0x9D, - 0x29, 0x4C, 0xA9, 0x85, 0x28, 0x41, 0x2D, 0xD4, 0xA8, 0x10, 0x11, 0x7F, - 0x88, 0x62, 0x40, 0x93, 0xB5, 0xB8, 0x39, 0x0C, 0xC3, 0xDB, 0xDC, 0xCE, - 0xDE, 0xEC, 0xEE, 0x8C, 0xBE, 0x07, 0x03, 0xB7, 0x6F, 0x6F, 0x96, 0xD9, - 0x6F, 0xDF, 0x7B, 0xF3, 0xDE, 0xDB, 0xBB, 0x24, 0x4D, 0x53, 0x54, 0xA0, - 0x47, 0x11, 0x28, 0x08, 0x05, 0xA1, 0x20, 0x14, 0x84, 0x82, 0x50, 0x10, - 0x0A, 0x42, 0x41, 0x28, 0x08, 0x05, 0xA1, 0x20, 0x14, 0x84, 0x82, 0x50, - 0x10, 0xFF, 0x1B, 0x88, 0x8B, 0xC0, 0x1D, 0x20, 0xA9, 0x6B, 0x01, 0x8D, - 0x00, 0x20, 0xFC, 0x04, 0x9A, 0xE6, 0xF3, 0x72, 0x5D, 0x30, 0x92, 0x00, - 0x3A, 0x54, 0xF6, 0x02, 0x12, 0x8D, 0x11, 0x91, 0xC7, 0x88, 0x8D, 0xC0, - 0x4B, 0xF3, 0x64, 0x8B, 0x0C, 0xC9, 0x42, 0x8A, 0x8C, 0x2B, 0x75, 0xB9, - 0xC6, 0x0E, 0x03, 0x20, 0x34, 0x79, 0x03, 0x6C, 0xAB, 0xCA, 0x22, 0xDE, - 0x07, 0x0A, 0x01, 0x60, 0xD8, 0x58, 0xC8, 0x48, 0xD9, 0x20, 0x52, 0x60, - 0x73, 0x04, 0x6E, 0x3F, 0x03, 0x5C, 0x2E, 0x0B, 0xC4, 0x6A, 0x7E, 0xF4, - 0xC8, 0x98, 0x64, 0x52, 0xE1, 0x68, 0x00, 0x47, 0x80, 0xC5, 0x8C, 0x35, - 0x4D, 0x00, 0x67, 0x7C, 0xC7, 0x88, 0x4F, 0x26, 0x30, 0xDA, 0x72, 0x09, - 0x38, 0x1B, 0x80, 0x05, 0x34, 0x0C, 0x90, 0x5E, 0xE1, 0xDC, 0x16, 0xE0, - 0x83, 0x0F, 0x10, 0x7B, 0x80, 0x27, 0x82, 0x7E, 0x1D, 0xB0, 0x10, 0x98, - 0x4B, 0x4C, 0x02, 0xE3, 0xD2, 0xBD, 0xFA, 0x70, 0x0D, 0x09, 0xC2, 0x5A, - 0x4F, 0x10, 0x3A, 0x6D, 0xA7, 0xAE, 0x72, 0x0C, 0x98, 0x16, 0xF4, 0xE7, - 0xBB, 0xB5, 0x88, 0x5D, 0xC0, 0x33, 0x4B, 0x77, 0x1C, 0xB8, 0x19, 0x78, - 0x66, 0x99, 0xBA, 0x58, 0x45, 0x1E, 0x10, 0x0B, 0xE6, 0xE9, 0x97, 0x95, - 0x06, 0x97, 0x05, 0x62, 0x2B, 0x30, 0x67, 0xE9, 0x06, 0x80, 0x2F, 0x45, - 0x5D, 0xC3, 0x86, 0x70, 0x2E, 0x92, 0xAC, 0xF9, 0x5D, 0x46, 0xFC, 0x28, - 0x6C, 0x11, 0xA9, 0x00, 0x2F, 0xCD, 0x28, 0xA5, 0xF7, 0x16, 0x58, 0xF0, - 0x01, 0xEB, 0xF8, 0x81, 0xE3, 0xFC, 0x5F, 0x66, 0x9B, 0x9C, 0x15, 0xCE, - 0x3D, 0x05, 0x76, 0xAF, 0x38, 0xFE, 0x0D, 0xF4, 0x15, 0x01, 0xB1, 0x01, - 0xF8, 0x9C, 0xC3, 0x74, 0x43, 0xF8, 0x91, 0xC5, 0x29, 0xE0, 0xBA, 0xA5, - 0x3B, 0x01, 0xDC, 0xC8, 0xE3, 0x7A, 0x9D, 0x5C, 0xA3, 0x19, 0x51, 0x01, - 0x79, 0x55, 0xD0, 0xBD, 0xF0, 0x95, 0x59, 0x2E, 0x45, 0x04, 0xE2, 0xBE, - 0xA0, 0x1B, 0xF4, 0x59, 0x7D, 0xE6, 0x89, 0xEA, 0x6B, 0x80, 0xD7, 0xC6, - 0x95, 0x5C, 0xA5, 0xB7, 0x4B, 0xF8, 0xCB, 0x26, 0x08, 0x9E, 0x14, 0xCE, - 0x3D, 0x04, 0xF6, 0x5B, 0xF7, 0xD2, 0xE3, 0x0B, 0xC4, 0x21, 0xE0, 0x5E, - 0x04, 0xDB, 0xA7, 0x74, 0xED, 0xC7, 0xC0, 0xBE, 0xA2, 0x20, 0xA4, 0x3E, - 0x62, 0x0C, 0x79, 0x44, 0x93, 0x56, 0x3F, 0x74, 0xA5, 0xEC, 0xCC, 0xD8, - 0x5D, 0x72, 0xE5, 0x11, 0x47, 0x05, 0xDD, 0xF6, 0x08, 0x62, 0xC6, 0x57, - 0x41, 0x37, 0xDB, 0x4D, 0xAD, 0x71, 0x5B, 0xD0, 0xBD, 0x0A, 0x1C, 0xC2, - 0x38, 0xD0, 0x6F, 0xE9, 0xA6, 0x7D, 0x54, 0x9F, 0x13, 0x19, 0x4D, 0x0E, - 0x1F, 0x66, 0x3C, 0x60, 0x25, 0x39, 0xF3, 0x5D, 0x5E, 0x6F, 0xC4, 0x34, - 0x65, 0x9C, 0xD6, 0xEA, 0xD2, 0x8F, 0xC8, 0xFA, 0xE2, 0x30, 0xF0, 0x36, - 0x10, 0x4B, 0x98, 0x02, 0x0E, 0x0A, 0xFA, 0xC3, 0xC0, 0x5D, 0x1F, 0x65, - 0x38, 0x59, 0xA9, 0x29, 0xAD, 0x66, 0xE9, 0x12, 0x30, 0x56, 0x63, 0x43, - 0x66, 0xD2, 0x3C, 0x28, 0x09, 0xC2, 0xF3, 0x4E, 0x10, 0x5C, 0x2D, 0xA2, - 0x9D, 0x2F, 0x7C, 0x8F, 0x28, 0xC9, 0x9A, 0x07, 0x86, 0x7C, 0x64, 0x96, - 0xB6, 0xFC, 0x58, 0xC5, 0x32, 0x42, 0x93, 0x5B, 0x79, 0x21, 0x14, 0x01, - 0xD1, 0xAE, 0xE0, 0x12, 0xE0, 0x5A, 0xC0, 0x10, 0x36, 0xD1, 0xEA, 0x54, - 0x51, 0x26, 0x88, 0xB6, 0x9C, 0x36, 0x40, 0x2E, 0x04, 0x72, 0xF3, 0xDF, - 0xF8, 0xDB, 0x45, 0xFF, 0xE8, 0x3A, 0xD9, 0xF7, 0x4B, 0xE0, 0x7E, 0x93, - 0x6C, 0xAD, 0x77, 0x98, 0x63, 0x6F, 0x75, 0xA3, 0x0E, 0x73, 0xE7, 0x32, - 0x1A, 0x30, 0xD4, 0x0D, 0x22, 0xB4, 0x5A, 0xA3, 0x12, 0xD7, 0xF8, 0xA7, - 0x24, 0x04, 0x10, 0x7D, 0xB4, 0x1A, 0xAA, 0x8B, 0xC8, 0x2F, 0x90, 0x2A, - 0x91, 0x44, 0xFF, 0xCA, 0xA4, 0xAE, 0xA1, 0x20, 0x14, 0x84, 0x82, 0x50, - 0x10, 0x0A, 0x42, 0x41, 0x28, 0x08, 0x05, 0xA1, 0x20, 0x14, 0x84, 0x82, - 0x50, 0x10, 0x0A, 0xA2, 0x2A, 0xF9, 0x33, 0x00, 0x85, 0x3D, 0xBB, 0x66, - 0xA5, 0x18, 0xA1, 0xED, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4E, 0x44, - 0xAE, 0x42, 0x60, 0x82 -}; -} -static const unsigned char* legit_icon = raw::legit_raw; -} \ No newline at end of file diff --git a/tf2/icons/misc.hpp b/tf2/icons/misc.hpp deleted file mode 100644 index d15e736..0000000 --- a/tf2/icons/misc.hpp +++ /dev/null @@ -1,1313 +0,0 @@ -/* E:\Users\admin\Desktop\stuff\icons\misc.png (1/26/2018 4:19:00 AM) - StartOffset: 00000000, EndOffset: 00003CFF, Length: 00003D00 */ - -namespace icons { -static const size_t misc_size = 15616; -namespace raw { -static const unsigned char misc_raw[15616] = { - 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00, 0x00, 0x0D, - 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x42, - 0x08, 0x06, 0x00, 0x00, 0x00, 0xE3, 0x54, 0x00, 0xE8, 0x00, 0x00, 0x00, - 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0B, 0x13, 0x00, 0x00, 0x0B, - 0x13, 0x01, 0x00, 0x9A, 0x9C, 0x18, 0x00, 0x00, 0x39, 0xEC, 0x69, 0x54, - 0x58, 0x74, 0x58, 0x4D, 0x4C, 0x3A, 0x63, 0x6F, 0x6D, 0x2E, 0x61, 0x64, - 0x6F, 0x62, 0x65, 0x2E, 0x78, 0x6D, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3C, 0x3F, 0x78, 0x70, 0x61, 0x63, 0x6B, 0x65, 0x74, 0x20, 0x62, 0x65, - 0x67, 0x69, 0x6E, 0x3D, 0x22, 0xEF, 0xBB, 0xBF, 0x22, 0x20, 0x69, 0x64, - 0x3D, 0x22, 0x57, 0x35, 0x4D, 0x30, 0x4D, 0x70, 0x43, 0x65, 0x68, 0x69, - 0x48, 0x7A, 0x72, 0x65, 0x53, 0x7A, 0x4E, 0x54, 0x63, 0x7A, 0x6B, 0x63, - 0x39, 0x64, 0x22, 0x3F, 0x3E, 0x0A, 0x3C, 0x78, 0x3A, 0x78, 0x6D, 0x70, - 0x6D, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6D, 0x6C, 0x6E, 0x73, 0x3A, 0x78, - 0x3D, 0x22, 0x61, 0x64, 0x6F, 0x62, 0x65, 0x3A, 0x6E, 0x73, 0x3A, 0x6D, - 0x65, 0x74, 0x61, 0x2F, 0x22, 0x20, 0x78, 0x3A, 0x78, 0x6D, 0x70, 0x74, - 0x6B, 0x3D, 0x22, 0x41, 0x64, 0x6F, 0x62, 0x65, 0x20, 0x58, 0x4D, 0x50, - 0x20, 0x43, 0x6F, 0x72, 0x65, 0x20, 0x35, 0x2E, 0x36, 0x2D, 0x63, 0x31, - 0x33, 0x38, 0x20, 0x37, 0x39, 0x2E, 0x31, 0x35, 0x39, 0x38, 0x32, 0x34, - 0x2C, 0x20, 0x32, 0x30, 0x31, 0x36, 0x2F, 0x30, 0x39, 0x2F, 0x31, 0x34, - 0x2D, 0x30, 0x31, 0x3A, 0x30, 0x39, 0x3A, 0x30, 0x31, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x3C, - 0x72, 0x64, 0x66, 0x3A, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6D, 0x6C, 0x6E, - 0x73, 0x3A, 0x72, 0x64, 0x66, 0x3D, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3A, - 0x2F, 0x2F, 0x77, 0x77, 0x77, 0x2E, 0x77, 0x33, 0x2E, 0x6F, 0x72, 0x67, - 0x2F, 0x31, 0x39, 0x39, 0x39, 0x2F, 0x30, 0x32, 0x2F, 0x32, 0x32, 0x2D, - 0x72, 0x64, 0x66, 0x2D, 0x73, 0x79, 0x6E, 0x74, 0x61, 0x78, 0x2D, 0x6E, - 0x73, 0x23, 0x22, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, - 0x72, 0x64, 0x66, 0x3A, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6F, 0x6E, 0x20, 0x72, 0x64, 0x66, 0x3A, 0x61, 0x62, 0x6F, 0x75, - 0x74, 0x3D, 0x22, 0x22, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6D, 0x6C, 0x6E, 0x73, 0x3A, 0x78, - 0x6D, 0x70, 0x3D, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x6E, - 0x73, 0x2E, 0x61, 0x64, 0x6F, 0x62, 0x65, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, - 0x78, 0x61, 0x70, 0x2F, 0x31, 0x2E, 0x30, 0x2F, 0x22, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6D, - 0x6C, 0x6E, 0x73, 0x3A, 0x78, 0x6D, 0x70, 0x4D, 0x4D, 0x3D, 0x22, 0x68, - 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x6E, 0x73, 0x2E, 0x61, 0x64, 0x6F, - 0x62, 0x65, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x78, 0x61, 0x70, 0x2F, 0x31, - 0x2E, 0x30, 0x2F, 0x6D, 0x6D, 0x2F, 0x22, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6D, 0x6C, 0x6E, - 0x73, 0x3A, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3D, 0x22, 0x68, 0x74, 0x74, - 0x70, 0x3A, 0x2F, 0x2F, 0x6E, 0x73, 0x2E, 0x61, 0x64, 0x6F, 0x62, 0x65, - 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x78, 0x61, 0x70, 0x2F, 0x31, 0x2E, 0x30, - 0x2F, 0x73, 0x54, 0x79, 0x70, 0x65, 0x2F, 0x52, 0x65, 0x73, 0x6F, 0x75, - 0x72, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6E, 0x74, 0x23, 0x22, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, - 0x6D, 0x6C, 0x6E, 0x73, 0x3A, 0x64, 0x63, 0x3D, 0x22, 0x68, 0x74, 0x74, - 0x70, 0x3A, 0x2F, 0x2F, 0x70, 0x75, 0x72, 0x6C, 0x2E, 0x6F, 0x72, 0x67, - 0x2F, 0x64, 0x63, 0x2F, 0x65, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x73, - 0x2F, 0x31, 0x2E, 0x31, 0x2F, 0x22, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6D, 0x6C, 0x6E, 0x73, - 0x3A, 0x70, 0x68, 0x6F, 0x74, 0x6F, 0x73, 0x68, 0x6F, 0x70, 0x3D, 0x22, - 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x6E, 0x73, 0x2E, 0x61, 0x64, - 0x6F, 0x62, 0x65, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x70, 0x68, 0x6F, 0x74, - 0x6F, 0x73, 0x68, 0x6F, 0x70, 0x2F, 0x31, 0x2E, 0x30, 0x2F, 0x22, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x78, 0x6D, 0x6C, 0x6E, 0x73, 0x3A, 0x74, 0x69, 0x66, 0x66, 0x3D, 0x22, - 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x6E, 0x73, 0x2E, 0x61, 0x64, - 0x6F, 0x62, 0x65, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x74, 0x69, 0x66, 0x66, - 0x2F, 0x31, 0x2E, 0x30, 0x2F, 0x22, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6D, 0x6C, 0x6E, 0x73, - 0x3A, 0x65, 0x78, 0x69, 0x66, 0x3D, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3A, - 0x2F, 0x2F, 0x6E, 0x73, 0x2E, 0x61, 0x64, 0x6F, 0x62, 0x65, 0x2E, 0x63, - 0x6F, 0x6D, 0x2F, 0x65, 0x78, 0x69, 0x66, 0x2F, 0x31, 0x2E, 0x30, 0x2F, - 0x22, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3C, 0x78, 0x6D, 0x70, 0x3A, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6F, 0x72, - 0x54, 0x6F, 0x6F, 0x6C, 0x3E, 0x41, 0x64, 0x6F, 0x62, 0x65, 0x20, 0x50, - 0x68, 0x6F, 0x74, 0x6F, 0x73, 0x68, 0x6F, 0x70, 0x20, 0x43, 0x43, 0x20, - 0x32, 0x30, 0x31, 0x37, 0x20, 0x28, 0x57, 0x69, 0x6E, 0x64, 0x6F, 0x77, - 0x73, 0x29, 0x3C, 0x2F, 0x78, 0x6D, 0x70, 0x3A, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x6F, 0x72, 0x54, 0x6F, 0x6F, 0x6C, 0x3E, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x78, 0x6D, 0x70, 0x3A, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x65, 0x3E, 0x32, 0x30, - 0x31, 0x38, 0x2D, 0x30, 0x31, 0x2D, 0x32, 0x36, 0x54, 0x31, 0x31, 0x3A, - 0x31, 0x38, 0x3A, 0x35, 0x37, 0x2B, 0x30, 0x38, 0x3A, 0x30, 0x30, 0x3C, - 0x2F, 0x78, 0x6D, 0x70, 0x3A, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, - 0x61, 0x74, 0x65, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3C, 0x78, 0x6D, 0x70, 0x3A, 0x4D, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x44, 0x61, 0x74, 0x65, 0x3E, 0x32, 0x30, 0x31, 0x38, - 0x2D, 0x30, 0x31, 0x2D, 0x32, 0x36, 0x54, 0x31, 0x31, 0x3A, 0x31, 0x38, - 0x3A, 0x35, 0x37, 0x2B, 0x30, 0x38, 0x3A, 0x30, 0x30, 0x3C, 0x2F, 0x78, - 0x6D, 0x70, 0x3A, 0x4D, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x44, - 0x61, 0x74, 0x65, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3C, 0x78, 0x6D, 0x70, 0x3A, 0x4D, 0x6F, 0x64, 0x69, 0x66, - 0x79, 0x44, 0x61, 0x74, 0x65, 0x3E, 0x32, 0x30, 0x31, 0x38, 0x2D, 0x30, - 0x31, 0x2D, 0x32, 0x36, 0x54, 0x31, 0x31, 0x3A, 0x31, 0x38, 0x3A, 0x35, - 0x37, 0x2B, 0x30, 0x38, 0x3A, 0x30, 0x30, 0x3C, 0x2F, 0x78, 0x6D, 0x70, - 0x3A, 0x4D, 0x6F, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3E, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x78, - 0x6D, 0x70, 0x4D, 0x4D, 0x3A, 0x49, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x63, - 0x65, 0x49, 0x44, 0x3E, 0x78, 0x6D, 0x70, 0x2E, 0x69, 0x69, 0x64, 0x3A, - 0x63, 0x36, 0x30, 0x66, 0x62, 0x37, 0x34, 0x35, 0x2D, 0x30, 0x38, 0x61, - 0x63, 0x2D, 0x35, 0x64, 0x34, 0x38, 0x2D, 0x38, 0x65, 0x39, 0x33, 0x2D, - 0x39, 0x65, 0x62, 0x38, 0x39, 0x65, 0x31, 0x32, 0x30, 0x63, 0x64, 0x35, - 0x3C, 0x2F, 0x78, 0x6D, 0x70, 0x4D, 0x4D, 0x3A, 0x49, 0x6E, 0x73, 0x74, - 0x61, 0x6E, 0x63, 0x65, 0x49, 0x44, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x78, 0x6D, 0x70, 0x4D, 0x4D, 0x3A, - 0x44, 0x6F, 0x63, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x49, 0x44, 0x3E, 0x61, - 0x64, 0x6F, 0x62, 0x65, 0x3A, 0x64, 0x6F, 0x63, 0x69, 0x64, 0x3A, 0x70, - 0x68, 0x6F, 0x74, 0x6F, 0x73, 0x68, 0x6F, 0x70, 0x3A, 0x39, 0x61, 0x63, - 0x30, 0x38, 0x39, 0x32, 0x64, 0x2D, 0x30, 0x32, 0x34, 0x37, 0x2D, 0x31, - 0x31, 0x65, 0x38, 0x2D, 0x61, 0x33, 0x38, 0x37, 0x2D, 0x38, 0x65, 0x34, - 0x32, 0x36, 0x32, 0x63, 0x35, 0x34, 0x30, 0x63, 0x32, 0x3C, 0x2F, 0x78, - 0x6D, 0x70, 0x4D, 0x4D, 0x3A, 0x44, 0x6F, 0x63, 0x75, 0x6D, 0x65, 0x6E, - 0x74, 0x49, 0x44, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3C, 0x78, 0x6D, 0x70, 0x4D, 0x4D, 0x3A, 0x4F, 0x72, 0x69, - 0x67, 0x69, 0x6E, 0x61, 0x6C, 0x44, 0x6F, 0x63, 0x75, 0x6D, 0x65, 0x6E, - 0x74, 0x49, 0x44, 0x3E, 0x78, 0x6D, 0x70, 0x2E, 0x64, 0x69, 0x64, 0x3A, - 0x38, 0x30, 0x61, 0x38, 0x30, 0x31, 0x39, 0x38, 0x2D, 0x30, 0x62, 0x66, - 0x32, 0x2D, 0x37, 0x64, 0x34, 0x62, 0x2D, 0x39, 0x65, 0x32, 0x36, 0x2D, - 0x62, 0x66, 0x39, 0x36, 0x37, 0x34, 0x36, 0x39, 0x63, 0x65, 0x34, 0x66, - 0x3C, 0x2F, 0x78, 0x6D, 0x70, 0x4D, 0x4D, 0x3A, 0x4F, 0x72, 0x69, 0x67, - 0x69, 0x6E, 0x61, 0x6C, 0x44, 0x6F, 0x63, 0x75, 0x6D, 0x65, 0x6E, 0x74, - 0x49, 0x44, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x3C, 0x78, 0x6D, 0x70, 0x4D, 0x4D, 0x3A, 0x48, 0x69, 0x73, 0x74, - 0x6F, 0x72, 0x79, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x72, 0x64, 0x66, 0x3A, 0x53, 0x65, - 0x71, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x72, 0x64, 0x66, 0x3A, 0x6C, - 0x69, 0x20, 0x72, 0x64, 0x66, 0x3A, 0x70, 0x61, 0x72, 0x73, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x3D, 0x22, 0x52, 0x65, 0x73, 0x6F, 0x75, 0x72, 0x63, - 0x65, 0x22, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x73, - 0x74, 0x45, 0x76, 0x74, 0x3A, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x3E, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x3C, 0x2F, 0x73, 0x74, 0x45, - 0x76, 0x74, 0x3A, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, - 0x69, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x63, 0x65, 0x49, 0x44, 0x3E, 0x78, - 0x6D, 0x70, 0x2E, 0x69, 0x69, 0x64, 0x3A, 0x38, 0x30, 0x61, 0x38, 0x30, - 0x31, 0x39, 0x38, 0x2D, 0x30, 0x62, 0x66, 0x32, 0x2D, 0x37, 0x64, 0x34, - 0x62, 0x2D, 0x39, 0x65, 0x32, 0x36, 0x2D, 0x62, 0x66, 0x39, 0x36, 0x37, - 0x34, 0x36, 0x39, 0x63, 0x65, 0x34, 0x66, 0x3C, 0x2F, 0x73, 0x74, 0x45, - 0x76, 0x74, 0x3A, 0x69, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x63, 0x65, 0x49, - 0x44, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x73, 0x74, - 0x45, 0x76, 0x74, 0x3A, 0x77, 0x68, 0x65, 0x6E, 0x3E, 0x32, 0x30, 0x31, - 0x38, 0x2D, 0x30, 0x31, 0x2D, 0x32, 0x36, 0x54, 0x31, 0x31, 0x3A, 0x31, - 0x38, 0x3A, 0x35, 0x37, 0x2B, 0x30, 0x38, 0x3A, 0x30, 0x30, 0x3C, 0x2F, - 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, 0x77, 0x68, 0x65, 0x6E, 0x3E, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x73, 0x74, 0x45, 0x76, 0x74, - 0x3A, 0x73, 0x6F, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x41, 0x67, 0x65, - 0x6E, 0x74, 0x3E, 0x41, 0x64, 0x6F, 0x62, 0x65, 0x20, 0x50, 0x68, 0x6F, - 0x74, 0x6F, 0x73, 0x68, 0x6F, 0x70, 0x20, 0x43, 0x43, 0x20, 0x32, 0x30, - 0x31, 0x37, 0x20, 0x28, 0x57, 0x69, 0x6E, 0x64, 0x6F, 0x77, 0x73, 0x29, - 0x3C, 0x2F, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, 0x73, 0x6F, 0x66, 0x74, - 0x77, 0x61, 0x72, 0x65, 0x41, 0x67, 0x65, 0x6E, 0x74, 0x3E, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3C, 0x2F, 0x72, 0x64, 0x66, 0x3A, 0x6C, 0x69, 0x3E, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3C, 0x72, 0x64, 0x66, 0x3A, 0x6C, 0x69, 0x20, 0x72, - 0x64, 0x66, 0x3A, 0x70, 0x61, 0x72, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, - 0x3D, 0x22, 0x52, 0x65, 0x73, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x22, 0x3E, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x73, 0x74, 0x45, 0x76, - 0x74, 0x3A, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x73, 0x61, 0x76, - 0x65, 0x64, 0x3C, 0x2F, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, 0x61, 0x63, - 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3C, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, 0x69, 0x6E, 0x73, 0x74, 0x61, - 0x6E, 0x63, 0x65, 0x49, 0x44, 0x3E, 0x78, 0x6D, 0x70, 0x2E, 0x69, 0x69, - 0x64, 0x3A, 0x63, 0x36, 0x30, 0x66, 0x62, 0x37, 0x34, 0x35, 0x2D, 0x30, - 0x38, 0x61, 0x63, 0x2D, 0x35, 0x64, 0x34, 0x38, 0x2D, 0x38, 0x65, 0x39, - 0x33, 0x2D, 0x39, 0x65, 0x62, 0x38, 0x39, 0x65, 0x31, 0x32, 0x30, 0x63, - 0x64, 0x35, 0x3C, 0x2F, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, 0x69, 0x6E, - 0x73, 0x74, 0x61, 0x6E, 0x63, 0x65, 0x49, 0x44, 0x3E, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x3C, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, 0x77, - 0x68, 0x65, 0x6E, 0x3E, 0x32, 0x30, 0x31, 0x38, 0x2D, 0x30, 0x31, 0x2D, - 0x32, 0x36, 0x54, 0x31, 0x31, 0x3A, 0x31, 0x38, 0x3A, 0x35, 0x37, 0x2B, - 0x30, 0x38, 0x3A, 0x30, 0x30, 0x3C, 0x2F, 0x73, 0x74, 0x45, 0x76, 0x74, - 0x3A, 0x77, 0x68, 0x65, 0x6E, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x3C, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, 0x73, 0x6F, 0x66, 0x74, - 0x77, 0x61, 0x72, 0x65, 0x41, 0x67, 0x65, 0x6E, 0x74, 0x3E, 0x41, 0x64, - 0x6F, 0x62, 0x65, 0x20, 0x50, 0x68, 0x6F, 0x74, 0x6F, 0x73, 0x68, 0x6F, - 0x70, 0x20, 0x43, 0x43, 0x20, 0x32, 0x30, 0x31, 0x37, 0x20, 0x28, 0x57, - 0x69, 0x6E, 0x64, 0x6F, 0x77, 0x73, 0x29, 0x3C, 0x2F, 0x73, 0x74, 0x45, - 0x76, 0x74, 0x3A, 0x73, 0x6F, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x41, - 0x67, 0x65, 0x6E, 0x74, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3C, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, 0x63, 0x68, 0x61, 0x6E, 0x67, - 0x65, 0x64, 0x3E, 0x2F, 0x3C, 0x2F, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, - 0x63, 0x68, 0x61, 0x6E, 0x67, 0x65, 0x64, 0x3E, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3C, 0x2F, 0x72, 0x64, 0x66, 0x3A, 0x6C, 0x69, 0x3E, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x2F, - 0x72, 0x64, 0x66, 0x3A, 0x53, 0x65, 0x71, 0x3E, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x2F, 0x78, 0x6D, 0x70, 0x4D, - 0x4D, 0x3A, 0x48, 0x69, 0x73, 0x74, 0x6F, 0x72, 0x79, 0x3E, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x64, 0x63, 0x3A, - 0x66, 0x6F, 0x72, 0x6D, 0x61, 0x74, 0x3E, 0x69, 0x6D, 0x61, 0x67, 0x65, - 0x2F, 0x70, 0x6E, 0x67, 0x3C, 0x2F, 0x64, 0x63, 0x3A, 0x66, 0x6F, 0x72, - 0x6D, 0x61, 0x74, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3C, 0x70, 0x68, 0x6F, 0x74, 0x6F, 0x73, 0x68, 0x6F, 0x70, - 0x3A, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x4D, 0x6F, 0x64, 0x65, 0x3E, 0x33, - 0x3C, 0x2F, 0x70, 0x68, 0x6F, 0x74, 0x6F, 0x73, 0x68, 0x6F, 0x70, 0x3A, - 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x4D, 0x6F, 0x64, 0x65, 0x3E, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x74, 0x69, 0x66, - 0x66, 0x3A, 0x4F, 0x72, 0x69, 0x65, 0x6E, 0x74, 0x61, 0x74, 0x69, 0x6F, - 0x6E, 0x3E, 0x31, 0x3C, 0x2F, 0x74, 0x69, 0x66, 0x66, 0x3A, 0x4F, 0x72, - 0x69, 0x65, 0x6E, 0x74, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x74, 0x69, 0x66, - 0x66, 0x3A, 0x58, 0x52, 0x65, 0x73, 0x6F, 0x6C, 0x75, 0x74, 0x69, 0x6F, - 0x6E, 0x3E, 0x37, 0x32, 0x30, 0x30, 0x30, 0x30, 0x2F, 0x31, 0x30, 0x30, - 0x30, 0x30, 0x3C, 0x2F, 0x74, 0x69, 0x66, 0x66, 0x3A, 0x58, 0x52, 0x65, - 0x73, 0x6F, 0x6C, 0x75, 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x74, 0x69, 0x66, 0x66, - 0x3A, 0x59, 0x52, 0x65, 0x73, 0x6F, 0x6C, 0x75, 0x74, 0x69, 0x6F, 0x6E, - 0x3E, 0x37, 0x32, 0x30, 0x30, 0x30, 0x30, 0x2F, 0x31, 0x30, 0x30, 0x30, - 0x30, 0x3C, 0x2F, 0x74, 0x69, 0x66, 0x66, 0x3A, 0x59, 0x52, 0x65, 0x73, - 0x6F, 0x6C, 0x75, 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x74, 0x69, 0x66, 0x66, 0x3A, - 0x52, 0x65, 0x73, 0x6F, 0x6C, 0x75, 0x74, 0x69, 0x6F, 0x6E, 0x55, 0x6E, - 0x69, 0x74, 0x3E, 0x32, 0x3C, 0x2F, 0x74, 0x69, 0x66, 0x66, 0x3A, 0x52, - 0x65, 0x73, 0x6F, 0x6C, 0x75, 0x74, 0x69, 0x6F, 0x6E, 0x55, 0x6E, 0x69, - 0x74, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3C, 0x65, 0x78, 0x69, 0x66, 0x3A, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x53, - 0x70, 0x61, 0x63, 0x65, 0x3E, 0x36, 0x35, 0x35, 0x33, 0x35, 0x3C, 0x2F, - 0x65, 0x78, 0x69, 0x66, 0x3A, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x53, 0x70, - 0x61, 0x63, 0x65, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3C, 0x65, 0x78, 0x69, 0x66, 0x3A, 0x50, 0x69, 0x78, 0x65, - 0x6C, 0x58, 0x44, 0x69, 0x6D, 0x65, 0x6E, 0x73, 0x69, 0x6F, 0x6E, 0x3E, - 0x36, 0x36, 0x3C, 0x2F, 0x65, 0x78, 0x69, 0x66, 0x3A, 0x50, 0x69, 0x78, - 0x65, 0x6C, 0x58, 0x44, 0x69, 0x6D, 0x65, 0x6E, 0x73, 0x69, 0x6F, 0x6E, - 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, - 0x65, 0x78, 0x69, 0x66, 0x3A, 0x50, 0x69, 0x78, 0x65, 0x6C, 0x59, 0x44, - 0x69, 0x6D, 0x65, 0x6E, 0x73, 0x69, 0x6F, 0x6E, 0x3E, 0x36, 0x36, 0x3C, - 0x2F, 0x65, 0x78, 0x69, 0x66, 0x3A, 0x50, 0x69, 0x78, 0x65, 0x6C, 0x59, - 0x44, 0x69, 0x6D, 0x65, 0x6E, 0x73, 0x69, 0x6F, 0x6E, 0x3E, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x2F, 0x72, 0x64, 0x66, 0x3A, 0x44, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x0A, - 0x20, 0x20, 0x20, 0x3C, 0x2F, 0x72, 0x64, 0x66, 0x3A, 0x52, 0x44, 0x46, - 0x3E, 0x0A, 0x3C, 0x2F, 0x78, 0x3A, 0x78, 0x6D, 0x70, 0x6D, 0x65, 0x74, - 0x61, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x3C, 0x3F, 0x78, 0x70, 0x61, 0x63, 0x6B, 0x65, 0x74, - 0x20, 0x65, 0x6E, 0x64, 0x3D, 0x22, 0x77, 0x22, 0x3F, 0x3E, 0xE2, 0x3E, - 0xB4, 0x34, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, 0x52, 0x4D, 0x00, 0x00, - 0x7A, 0x25, 0x00, 0x00, 0x80, 0x83, 0x00, 0x00, 0xF9, 0xFF, 0x00, 0x00, - 0x80, 0xE9, 0x00, 0x00, 0x75, 0x30, 0x00, 0x00, 0xEA, 0x60, 0x00, 0x00, - 0x3A, 0x98, 0x00, 0x00, 0x17, 0x6F, 0x92, 0x5F, 0xC5, 0x46, 0x00, 0x00, - 0x02, 0x8E, 0x49, 0x44, 0x41, 0x54, 0x78, 0xDA, 0xEC, 0xDB, 0xBF, 0x6B, - 0x14, 0x41, 0x18, 0xC6, 0xF1, 0xEF, 0xC6, 0x5C, 0xCE, 0xC3, 0x93, 0xA0, - 0x48, 0xF0, 0x07, 0x6A, 0x0A, 0x15, 0x31, 0x8D, 0x55, 0x40, 0xB0, 0xB4, - 0xD0, 0x42, 0xD0, 0xCE, 0x7F, 0x40, 0x41, 0x11, 0x04, 0x5B, 0x7B, 0x3B, - 0x11, 0xC4, 0x42, 0x05, 0xB1, 0x13, 0x04, 0x1B, 0x41, 0xAC, 0x6D, 0xAD, - 0x04, 0x41, 0xC4, 0x46, 0xB0, 0x88, 0x12, 0x41, 0xD0, 0x80, 0x07, 0x31, - 0xB9, 0x5B, 0x8B, 0x4C, 0x40, 0xD6, 0x99, 0xDD, 0xD9, 0x99, 0x59, 0xDD, - 0x95, 0x67, 0xE0, 0x8A, 0x5B, 0xDE, 0xEC, 0xED, 0x7C, 0xF6, 0x9D, 0x99, - 0x77, 0xF6, 0x72, 0x59, 0x9E, 0xE7, 0xA8, 0xC1, 0x94, 0x08, 0x04, 0x21, - 0x08, 0x41, 0x08, 0x42, 0x10, 0x82, 0x10, 0x84, 0x20, 0x04, 0x21, 0x08, - 0x41, 0x08, 0x42, 0x10, 0x82, 0x10, 0x84, 0x20, 0x04, 0x21, 0x88, 0xFF, - 0x09, 0xE2, 0x3C, 0xB0, 0x02, 0xE4, 0xFF, 0xE8, 0xB5, 0x0A, 0xDC, 0x88, - 0xE9, 0x40, 0x16, 0xF9, 0xF0, 0xF6, 0x15, 0xB0, 0xD8, 0xB2, 0x9B, 0xFB, - 0x09, 0x38, 0x00, 0x8C, 0xFF, 0x46, 0x46, 0x1C, 0x37, 0x77, 0x62, 0xB1, - 0x85, 0x59, 0xBE, 0x17, 0x58, 0x07, 0x2E, 0x36, 0x0D, 0x71, 0x0B, 0x78, - 0xDD, 0x81, 0x61, 0xFF, 0x00, 0x78, 0xD7, 0x14, 0xC4, 0x4D, 0xE0, 0x7A, - 0xC5, 0x87, 0x1F, 0x06, 0xB6, 0x02, 0x7D, 0x8F, 0xD7, 0x7C, 0xC9, 0xB9, - 0x06, 0x85, 0xD8, 0x61, 0x49, 0xAC, 0x6B, 0x7C, 0x1F, 0x05, 0xDE, 0xA7, - 0x9E, 0x23, 0x8E, 0x94, 0x9C, 0x74, 0x1B, 0x30, 0xAA, 0x89, 0xDA, 0x03, - 0x7E, 0xBA, 0xAE, 0xAB, 0x46, 0x67, 0x67, 0x80, 0x35, 0x60, 0x1A, 0xF8, - 0x02, 0xEC, 0xB0, 0xC4, 0x5C, 0x03, 0xEE, 0xA4, 0x82, 0xB0, 0x05, 0x3E, - 0x01, 0x2E, 0x04, 0xA4, 0x6D, 0x2A, 0x84, 0x21, 0xF0, 0xC3, 0x33, 0xB6, - 0x67, 0xE6, 0x8E, 0xA8, 0xA1, 0xF1, 0xC2, 0x72, 0xEC, 0x69, 0x87, 0x10, - 0x00, 0xBE, 0xA5, 0xC8, 0x88, 0xDC, 0xF3, 0xA2, 0xDB, 0x8A, 0xB0, 0xD9, - 0xB6, 0x00, 0x93, 0xD0, 0x8C, 0x38, 0xE1, 0x98, 0x13, 0xBA, 0x86, 0x00, - 0xF0, 0x38, 0x26, 0x23, 0x96, 0xCC, 0xDA, 0x1C, 0x93, 0x0D, 0x53, 0x25, - 0x05, 0x4E, 0x53, 0x08, 0x43, 0xB3, 0x7C, 0xEE, 0xF7, 0xB9, 0x76, 0x9F, - 0x8C, 0x28, 0x22, 0xDC, 0x4D, 0x88, 0x60, 0xFB, 0xFC, 0x89, 0x23, 0x76, - 0xA7, 0x05, 0x61, 0x52, 0x01, 0x76, 0x3A, 0x65, 0x89, 0x5D, 0x0C, 0xD8, - 0x67, 0xCA, 0xD8, 0x58, 0x04, 0xDB, 0x78, 0x9D, 0x38, 0xEE, 0xD8, 0x2E, - 0xE0, 0x6B, 0x60, 0x6C, 0xEE, 0x93, 0x11, 0x21, 0x10, 0xFD, 0x92, 0xB1, - 0xDE, 0x36, 0x04, 0x6F, 0x88, 0x90, 0x12, 0xBB, 0xD7, 0x21, 0x84, 0x46, - 0xF7, 0x1A, 0xA7, 0x3A, 0x84, 0xD0, 0x4F, 0x09, 0x51, 0xEC, 0xD4, 0xBD, - 0x9A, 0xF1, 0x65, 0x08, 0xAB, 0x35, 0x3A, 0xB6, 0x1E, 0x90, 0x09, 0xB7, - 0x53, 0x42, 0x3C, 0x2C, 0xBC, 0xDF, 0x1D, 0xB0, 0xF9, 0x99, 0xB1, 0x20, - 0x8C, 0xCC, 0xF1, 0x62, 0x9B, 0xB7, 0x74, 0x6C, 0x64, 0x20, 0x7D, 0x62, - 0x7F, 0x6F, 0x97, 0x0B, 0xEF, 0x97, 0x63, 0x20, 0xAE, 0x58, 0x8E, 0x3D, - 0x0A, 0xD8, 0x14, 0x15, 0x3B, 0x36, 0x70, 0x74, 0xEC, 0x63, 0x44, 0x6C, - 0x55, 0x21, 0x78, 0x32, 0xB6, 0xC4, 0x1E, 0x5B, 0xD0, 0x66, 0xD9, 0x78, - 0x3C, 0xD7, 0x46, 0x84, 0xCC, 0x51, 0x63, 0x64, 0xB1, 0x93, 0xE5, 0x9C, - 0xE5, 0xD8, 0x77, 0x53, 0x6A, 0xB7, 0x0D, 0xC1, 0x55, 0x68, 0x9D, 0x4B, - 0xB5, 0x0D, 0x7F, 0x0B, 0x1C, 0xF3, 0x8C, 0xB5, 0x21, 0xAC, 0x00, 0xDB, - 0x1B, 0x46, 0x98, 0x73, 0xCC, 0x03, 0x79, 0xD5, 0x4D, 0xAF, 0xB3, 0x7C, - 0x2E, 0x78, 0xC6, 0x0D, 0x2C, 0x08, 0x4B, 0x0E, 0x84, 0x05, 0x4B, 0xC7, - 0x3E, 0x3B, 0x10, 0x0E, 0x95, 0x20, 0xEC, 0x31, 0x25, 0xF5, 0x72, 0xC9, - 0x8A, 0x95, 0xEC, 0x09, 0x55, 0xD9, 0xD8, 0x6B, 0x73, 0xB3, 0x6D, 0xD4, - 0xFE, 0x68, 0xD3, 0x35, 0x4F, 0x9A, 0x1B, 0x8C, 0x31, 0xDD, 0xF8, 0x72, - 0xC8, 0x36, 0x44, 0x93, 0x55, 0x96, 0x9B, 0xA9, 0x76, 0xB5, 0xC5, 0x00, - 0xCF, 0xCC, 0x0D, 0x5B, 0xF3, 0x4E, 0xF5, 0x04, 0xFF, 0x9D, 0x7F, 0x1F, - 0xB8, 0xD4, 0x12, 0x80, 0xE7, 0xC0, 0xD9, 0x90, 0x3F, 0xCC, 0x12, 0xFF, - 0x4C, 0xE1, 0x20, 0x70, 0x86, 0x8D, 0xC7, 0xE8, 0x31, 0x6D, 0xD6, 0x2C, - 0xCF, 0x55, 0xED, 0x03, 0xF0, 0x12, 0x78, 0x13, 0x7B, 0xE1, 0x99, 0x7E, - 0xAF, 0x11, 0x37, 0x47, 0x08, 0x42, 0x10, 0x82, 0x10, 0x84, 0x20, 0x04, - 0x21, 0x08, 0x35, 0x41, 0x08, 0x42, 0x10, 0x82, 0x10, 0x84, 0x20, 0x04, - 0x21, 0x08, 0x41, 0x44, 0xB6, 0x5F, 0x03, 0x00, 0xB0, 0xEE, 0xE7, 0x04, - 0x67, 0x01, 0x94, 0x88, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4E, 0x44, - 0xAE, 0x42, 0x60, 0x82 -}; -} -static const unsigned char* misc_icon = raw::misc_raw; -} \ No newline at end of file diff --git a/tf2/icons/rage.hpp b/tf2/icons/rage.hpp deleted file mode 100644 index 00dff07..0000000 --- a/tf2/icons/rage.hpp +++ /dev/null @@ -1,1293 +0,0 @@ -/* E:\Users\admin\Desktop\stuff\icons\rage.png (1/26/2018 4:18:26 AM) - StartOffset: 00000000, EndOffset: 00003C11, Length: 00003C12 */ - -namespace icons { -static const size_t rage_size = 15378; -namespace raw { -static const unsigned char rage_raw[15378] = { - 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00, 0x00, 0x0D, - 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x42, - 0x08, 0x06, 0x00, 0x00, 0x00, 0xE3, 0x54, 0x00, 0xE8, 0x00, 0x00, 0x00, - 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0B, 0x13, 0x00, 0x00, 0x0B, - 0x13, 0x01, 0x00, 0x9A, 0x9C, 0x18, 0x00, 0x00, 0x39, 0xEC, 0x69, 0x54, - 0x58, 0x74, 0x58, 0x4D, 0x4C, 0x3A, 0x63, 0x6F, 0x6D, 0x2E, 0x61, 0x64, - 0x6F, 0x62, 0x65, 0x2E, 0x78, 0x6D, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3C, 0x3F, 0x78, 0x70, 0x61, 0x63, 0x6B, 0x65, 0x74, 0x20, 0x62, 0x65, - 0x67, 0x69, 0x6E, 0x3D, 0x22, 0xEF, 0xBB, 0xBF, 0x22, 0x20, 0x69, 0x64, - 0x3D, 0x22, 0x57, 0x35, 0x4D, 0x30, 0x4D, 0x70, 0x43, 0x65, 0x68, 0x69, - 0x48, 0x7A, 0x72, 0x65, 0x53, 0x7A, 0x4E, 0x54, 0x63, 0x7A, 0x6B, 0x63, - 0x39, 0x64, 0x22, 0x3F, 0x3E, 0x0A, 0x3C, 0x78, 0x3A, 0x78, 0x6D, 0x70, - 0x6D, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6D, 0x6C, 0x6E, 0x73, 0x3A, 0x78, - 0x3D, 0x22, 0x61, 0x64, 0x6F, 0x62, 0x65, 0x3A, 0x6E, 0x73, 0x3A, 0x6D, - 0x65, 0x74, 0x61, 0x2F, 0x22, 0x20, 0x78, 0x3A, 0x78, 0x6D, 0x70, 0x74, - 0x6B, 0x3D, 0x22, 0x41, 0x64, 0x6F, 0x62, 0x65, 0x20, 0x58, 0x4D, 0x50, - 0x20, 0x43, 0x6F, 0x72, 0x65, 0x20, 0x35, 0x2E, 0x36, 0x2D, 0x63, 0x31, - 0x33, 0x38, 0x20, 0x37, 0x39, 0x2E, 0x31, 0x35, 0x39, 0x38, 0x32, 0x34, - 0x2C, 0x20, 0x32, 0x30, 0x31, 0x36, 0x2F, 0x30, 0x39, 0x2F, 0x31, 0x34, - 0x2D, 0x30, 0x31, 0x3A, 0x30, 0x39, 0x3A, 0x30, 0x31, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x3C, - 0x72, 0x64, 0x66, 0x3A, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6D, 0x6C, 0x6E, - 0x73, 0x3A, 0x72, 0x64, 0x66, 0x3D, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3A, - 0x2F, 0x2F, 0x77, 0x77, 0x77, 0x2E, 0x77, 0x33, 0x2E, 0x6F, 0x72, 0x67, - 0x2F, 0x31, 0x39, 0x39, 0x39, 0x2F, 0x30, 0x32, 0x2F, 0x32, 0x32, 0x2D, - 0x72, 0x64, 0x66, 0x2D, 0x73, 0x79, 0x6E, 0x74, 0x61, 0x78, 0x2D, 0x6E, - 0x73, 0x23, 0x22, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, - 0x72, 0x64, 0x66, 0x3A, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6F, 0x6E, 0x20, 0x72, 0x64, 0x66, 0x3A, 0x61, 0x62, 0x6F, 0x75, - 0x74, 0x3D, 0x22, 0x22, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6D, 0x6C, 0x6E, 0x73, 0x3A, 0x78, - 0x6D, 0x70, 0x3D, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x6E, - 0x73, 0x2E, 0x61, 0x64, 0x6F, 0x62, 0x65, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, - 0x78, 0x61, 0x70, 0x2F, 0x31, 0x2E, 0x30, 0x2F, 0x22, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6D, - 0x6C, 0x6E, 0x73, 0x3A, 0x78, 0x6D, 0x70, 0x4D, 0x4D, 0x3D, 0x22, 0x68, - 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x6E, 0x73, 0x2E, 0x61, 0x64, 0x6F, - 0x62, 0x65, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x78, 0x61, 0x70, 0x2F, 0x31, - 0x2E, 0x30, 0x2F, 0x6D, 0x6D, 0x2F, 0x22, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6D, 0x6C, 0x6E, - 0x73, 0x3A, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3D, 0x22, 0x68, 0x74, 0x74, - 0x70, 0x3A, 0x2F, 0x2F, 0x6E, 0x73, 0x2E, 0x61, 0x64, 0x6F, 0x62, 0x65, - 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x78, 0x61, 0x70, 0x2F, 0x31, 0x2E, 0x30, - 0x2F, 0x73, 0x54, 0x79, 0x70, 0x65, 0x2F, 0x52, 0x65, 0x73, 0x6F, 0x75, - 0x72, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6E, 0x74, 0x23, 0x22, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, - 0x6D, 0x6C, 0x6E, 0x73, 0x3A, 0x64, 0x63, 0x3D, 0x22, 0x68, 0x74, 0x74, - 0x70, 0x3A, 0x2F, 0x2F, 0x70, 0x75, 0x72, 0x6C, 0x2E, 0x6F, 0x72, 0x67, - 0x2F, 0x64, 0x63, 0x2F, 0x65, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x73, - 0x2F, 0x31, 0x2E, 0x31, 0x2F, 0x22, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6D, 0x6C, 0x6E, 0x73, - 0x3A, 0x70, 0x68, 0x6F, 0x74, 0x6F, 0x73, 0x68, 0x6F, 0x70, 0x3D, 0x22, - 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x6E, 0x73, 0x2E, 0x61, 0x64, - 0x6F, 0x62, 0x65, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x70, 0x68, 0x6F, 0x74, - 0x6F, 0x73, 0x68, 0x6F, 0x70, 0x2F, 0x31, 0x2E, 0x30, 0x2F, 0x22, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x78, 0x6D, 0x6C, 0x6E, 0x73, 0x3A, 0x74, 0x69, 0x66, 0x66, 0x3D, 0x22, - 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x6E, 0x73, 0x2E, 0x61, 0x64, - 0x6F, 0x62, 0x65, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x74, 0x69, 0x66, 0x66, - 0x2F, 0x31, 0x2E, 0x30, 0x2F, 0x22, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6D, 0x6C, 0x6E, 0x73, - 0x3A, 0x65, 0x78, 0x69, 0x66, 0x3D, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3A, - 0x2F, 0x2F, 0x6E, 0x73, 0x2E, 0x61, 0x64, 0x6F, 0x62, 0x65, 0x2E, 0x63, - 0x6F, 0x6D, 0x2F, 0x65, 0x78, 0x69, 0x66, 0x2F, 0x31, 0x2E, 0x30, 0x2F, - 0x22, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3C, 0x78, 0x6D, 0x70, 0x3A, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6F, 0x72, - 0x54, 0x6F, 0x6F, 0x6C, 0x3E, 0x41, 0x64, 0x6F, 0x62, 0x65, 0x20, 0x50, - 0x68, 0x6F, 0x74, 0x6F, 0x73, 0x68, 0x6F, 0x70, 0x20, 0x43, 0x43, 0x20, - 0x32, 0x30, 0x31, 0x37, 0x20, 0x28, 0x57, 0x69, 0x6E, 0x64, 0x6F, 0x77, - 0x73, 0x29, 0x3C, 0x2F, 0x78, 0x6D, 0x70, 0x3A, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x6F, 0x72, 0x54, 0x6F, 0x6F, 0x6C, 0x3E, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x78, 0x6D, 0x70, 0x3A, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x65, 0x3E, 0x32, 0x30, - 0x31, 0x38, 0x2D, 0x30, 0x31, 0x2D, 0x32, 0x36, 0x54, 0x31, 0x31, 0x3A, - 0x31, 0x38, 0x3A, 0x32, 0x34, 0x2B, 0x30, 0x38, 0x3A, 0x30, 0x30, 0x3C, - 0x2F, 0x78, 0x6D, 0x70, 0x3A, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, - 0x61, 0x74, 0x65, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3C, 0x78, 0x6D, 0x70, 0x3A, 0x4D, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x44, 0x61, 0x74, 0x65, 0x3E, 0x32, 0x30, 0x31, 0x38, - 0x2D, 0x30, 0x31, 0x2D, 0x32, 0x36, 0x54, 0x31, 0x31, 0x3A, 0x31, 0x38, - 0x3A, 0x32, 0x34, 0x2B, 0x30, 0x38, 0x3A, 0x30, 0x30, 0x3C, 0x2F, 0x78, - 0x6D, 0x70, 0x3A, 0x4D, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x44, - 0x61, 0x74, 0x65, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3C, 0x78, 0x6D, 0x70, 0x3A, 0x4D, 0x6F, 0x64, 0x69, 0x66, - 0x79, 0x44, 0x61, 0x74, 0x65, 0x3E, 0x32, 0x30, 0x31, 0x38, 0x2D, 0x30, - 0x31, 0x2D, 0x32, 0x36, 0x54, 0x31, 0x31, 0x3A, 0x31, 0x38, 0x3A, 0x32, - 0x34, 0x2B, 0x30, 0x38, 0x3A, 0x30, 0x30, 0x3C, 0x2F, 0x78, 0x6D, 0x70, - 0x3A, 0x4D, 0x6F, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3E, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x78, - 0x6D, 0x70, 0x4D, 0x4D, 0x3A, 0x49, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x63, - 0x65, 0x49, 0x44, 0x3E, 0x78, 0x6D, 0x70, 0x2E, 0x69, 0x69, 0x64, 0x3A, - 0x39, 0x61, 0x36, 0x38, 0x61, 0x33, 0x31, 0x37, 0x2D, 0x37, 0x65, 0x39, - 0x34, 0x2D, 0x37, 0x30, 0x34, 0x31, 0x2D, 0x38, 0x63, 0x62, 0x30, 0x2D, - 0x61, 0x39, 0x35, 0x63, 0x62, 0x61, 0x33, 0x33, 0x39, 0x66, 0x34, 0x65, - 0x3C, 0x2F, 0x78, 0x6D, 0x70, 0x4D, 0x4D, 0x3A, 0x49, 0x6E, 0x73, 0x74, - 0x61, 0x6E, 0x63, 0x65, 0x49, 0x44, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x78, 0x6D, 0x70, 0x4D, 0x4D, 0x3A, - 0x44, 0x6F, 0x63, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x49, 0x44, 0x3E, 0x61, - 0x64, 0x6F, 0x62, 0x65, 0x3A, 0x64, 0x6F, 0x63, 0x69, 0x64, 0x3A, 0x70, - 0x68, 0x6F, 0x74, 0x6F, 0x73, 0x68, 0x6F, 0x70, 0x3A, 0x39, 0x31, 0x65, - 0x62, 0x39, 0x62, 0x37, 0x65, 0x2D, 0x30, 0x32, 0x34, 0x37, 0x2D, 0x31, - 0x31, 0x65, 0x38, 0x2D, 0x61, 0x33, 0x38, 0x37, 0x2D, 0x38, 0x65, 0x34, - 0x32, 0x36, 0x32, 0x63, 0x35, 0x34, 0x30, 0x63, 0x32, 0x3C, 0x2F, 0x78, - 0x6D, 0x70, 0x4D, 0x4D, 0x3A, 0x44, 0x6F, 0x63, 0x75, 0x6D, 0x65, 0x6E, - 0x74, 0x49, 0x44, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3C, 0x78, 0x6D, 0x70, 0x4D, 0x4D, 0x3A, 0x4F, 0x72, 0x69, - 0x67, 0x69, 0x6E, 0x61, 0x6C, 0x44, 0x6F, 0x63, 0x75, 0x6D, 0x65, 0x6E, - 0x74, 0x49, 0x44, 0x3E, 0x78, 0x6D, 0x70, 0x2E, 0x64, 0x69, 0x64, 0x3A, - 0x33, 0x62, 0x30, 0x66, 0x31, 0x39, 0x37, 0x63, 0x2D, 0x32, 0x35, 0x66, - 0x66, 0x2D, 0x30, 0x66, 0x34, 0x63, 0x2D, 0x61, 0x62, 0x66, 0x36, 0x2D, - 0x33, 0x66, 0x33, 0x30, 0x39, 0x30, 0x65, 0x33, 0x32, 0x31, 0x63, 0x62, - 0x3C, 0x2F, 0x78, 0x6D, 0x70, 0x4D, 0x4D, 0x3A, 0x4F, 0x72, 0x69, 0x67, - 0x69, 0x6E, 0x61, 0x6C, 0x44, 0x6F, 0x63, 0x75, 0x6D, 0x65, 0x6E, 0x74, - 0x49, 0x44, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x3C, 0x78, 0x6D, 0x70, 0x4D, 0x4D, 0x3A, 0x48, 0x69, 0x73, 0x74, - 0x6F, 0x72, 0x79, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x72, 0x64, 0x66, 0x3A, 0x53, 0x65, - 0x71, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x72, 0x64, 0x66, 0x3A, 0x6C, - 0x69, 0x20, 0x72, 0x64, 0x66, 0x3A, 0x70, 0x61, 0x72, 0x73, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x3D, 0x22, 0x52, 0x65, 0x73, 0x6F, 0x75, 0x72, 0x63, - 0x65, 0x22, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x73, - 0x74, 0x45, 0x76, 0x74, 0x3A, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x3E, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x3C, 0x2F, 0x73, 0x74, 0x45, - 0x76, 0x74, 0x3A, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, - 0x69, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x63, 0x65, 0x49, 0x44, 0x3E, 0x78, - 0x6D, 0x70, 0x2E, 0x69, 0x69, 0x64, 0x3A, 0x33, 0x62, 0x30, 0x66, 0x31, - 0x39, 0x37, 0x63, 0x2D, 0x32, 0x35, 0x66, 0x66, 0x2D, 0x30, 0x66, 0x34, - 0x63, 0x2D, 0x61, 0x62, 0x66, 0x36, 0x2D, 0x33, 0x66, 0x33, 0x30, 0x39, - 0x30, 0x65, 0x33, 0x32, 0x31, 0x63, 0x62, 0x3C, 0x2F, 0x73, 0x74, 0x45, - 0x76, 0x74, 0x3A, 0x69, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x63, 0x65, 0x49, - 0x44, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x73, 0x74, - 0x45, 0x76, 0x74, 0x3A, 0x77, 0x68, 0x65, 0x6E, 0x3E, 0x32, 0x30, 0x31, - 0x38, 0x2D, 0x30, 0x31, 0x2D, 0x32, 0x36, 0x54, 0x31, 0x31, 0x3A, 0x31, - 0x38, 0x3A, 0x32, 0x34, 0x2B, 0x30, 0x38, 0x3A, 0x30, 0x30, 0x3C, 0x2F, - 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, 0x77, 0x68, 0x65, 0x6E, 0x3E, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x73, 0x74, 0x45, 0x76, 0x74, - 0x3A, 0x73, 0x6F, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x41, 0x67, 0x65, - 0x6E, 0x74, 0x3E, 0x41, 0x64, 0x6F, 0x62, 0x65, 0x20, 0x50, 0x68, 0x6F, - 0x74, 0x6F, 0x73, 0x68, 0x6F, 0x70, 0x20, 0x43, 0x43, 0x20, 0x32, 0x30, - 0x31, 0x37, 0x20, 0x28, 0x57, 0x69, 0x6E, 0x64, 0x6F, 0x77, 0x73, 0x29, - 0x3C, 0x2F, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, 0x73, 0x6F, 0x66, 0x74, - 0x77, 0x61, 0x72, 0x65, 0x41, 0x67, 0x65, 0x6E, 0x74, 0x3E, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3C, 0x2F, 0x72, 0x64, 0x66, 0x3A, 0x6C, 0x69, 0x3E, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3C, 0x72, 0x64, 0x66, 0x3A, 0x6C, 0x69, 0x20, 0x72, - 0x64, 0x66, 0x3A, 0x70, 0x61, 0x72, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, - 0x3D, 0x22, 0x52, 0x65, 0x73, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x22, 0x3E, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x73, 0x74, 0x45, 0x76, - 0x74, 0x3A, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x73, 0x61, 0x76, - 0x65, 0x64, 0x3C, 0x2F, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, 0x61, 0x63, - 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3C, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, 0x69, 0x6E, 0x73, 0x74, 0x61, - 0x6E, 0x63, 0x65, 0x49, 0x44, 0x3E, 0x78, 0x6D, 0x70, 0x2E, 0x69, 0x69, - 0x64, 0x3A, 0x39, 0x61, 0x36, 0x38, 0x61, 0x33, 0x31, 0x37, 0x2D, 0x37, - 0x65, 0x39, 0x34, 0x2D, 0x37, 0x30, 0x34, 0x31, 0x2D, 0x38, 0x63, 0x62, - 0x30, 0x2D, 0x61, 0x39, 0x35, 0x63, 0x62, 0x61, 0x33, 0x33, 0x39, 0x66, - 0x34, 0x65, 0x3C, 0x2F, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, 0x69, 0x6E, - 0x73, 0x74, 0x61, 0x6E, 0x63, 0x65, 0x49, 0x44, 0x3E, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x3C, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, 0x77, - 0x68, 0x65, 0x6E, 0x3E, 0x32, 0x30, 0x31, 0x38, 0x2D, 0x30, 0x31, 0x2D, - 0x32, 0x36, 0x54, 0x31, 0x31, 0x3A, 0x31, 0x38, 0x3A, 0x32, 0x34, 0x2B, - 0x30, 0x38, 0x3A, 0x30, 0x30, 0x3C, 0x2F, 0x73, 0x74, 0x45, 0x76, 0x74, - 0x3A, 0x77, 0x68, 0x65, 0x6E, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x3C, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, 0x73, 0x6F, 0x66, 0x74, - 0x77, 0x61, 0x72, 0x65, 0x41, 0x67, 0x65, 0x6E, 0x74, 0x3E, 0x41, 0x64, - 0x6F, 0x62, 0x65, 0x20, 0x50, 0x68, 0x6F, 0x74, 0x6F, 0x73, 0x68, 0x6F, - 0x70, 0x20, 0x43, 0x43, 0x20, 0x32, 0x30, 0x31, 0x37, 0x20, 0x28, 0x57, - 0x69, 0x6E, 0x64, 0x6F, 0x77, 0x73, 0x29, 0x3C, 0x2F, 0x73, 0x74, 0x45, - 0x76, 0x74, 0x3A, 0x73, 0x6F, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x41, - 0x67, 0x65, 0x6E, 0x74, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3C, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, 0x63, 0x68, 0x61, 0x6E, 0x67, - 0x65, 0x64, 0x3E, 0x2F, 0x3C, 0x2F, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, - 0x63, 0x68, 0x61, 0x6E, 0x67, 0x65, 0x64, 0x3E, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3C, 0x2F, 0x72, 0x64, 0x66, 0x3A, 0x6C, 0x69, 0x3E, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x2F, - 0x72, 0x64, 0x66, 0x3A, 0x53, 0x65, 0x71, 0x3E, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x2F, 0x78, 0x6D, 0x70, 0x4D, - 0x4D, 0x3A, 0x48, 0x69, 0x73, 0x74, 0x6F, 0x72, 0x79, 0x3E, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x64, 0x63, 0x3A, - 0x66, 0x6F, 0x72, 0x6D, 0x61, 0x74, 0x3E, 0x69, 0x6D, 0x61, 0x67, 0x65, - 0x2F, 0x70, 0x6E, 0x67, 0x3C, 0x2F, 0x64, 0x63, 0x3A, 0x66, 0x6F, 0x72, - 0x6D, 0x61, 0x74, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3C, 0x70, 0x68, 0x6F, 0x74, 0x6F, 0x73, 0x68, 0x6F, 0x70, - 0x3A, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x4D, 0x6F, 0x64, 0x65, 0x3E, 0x33, - 0x3C, 0x2F, 0x70, 0x68, 0x6F, 0x74, 0x6F, 0x73, 0x68, 0x6F, 0x70, 0x3A, - 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x4D, 0x6F, 0x64, 0x65, 0x3E, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x74, 0x69, 0x66, - 0x66, 0x3A, 0x4F, 0x72, 0x69, 0x65, 0x6E, 0x74, 0x61, 0x74, 0x69, 0x6F, - 0x6E, 0x3E, 0x31, 0x3C, 0x2F, 0x74, 0x69, 0x66, 0x66, 0x3A, 0x4F, 0x72, - 0x69, 0x65, 0x6E, 0x74, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x74, 0x69, 0x66, - 0x66, 0x3A, 0x58, 0x52, 0x65, 0x73, 0x6F, 0x6C, 0x75, 0x74, 0x69, 0x6F, - 0x6E, 0x3E, 0x37, 0x32, 0x30, 0x30, 0x30, 0x30, 0x2F, 0x31, 0x30, 0x30, - 0x30, 0x30, 0x3C, 0x2F, 0x74, 0x69, 0x66, 0x66, 0x3A, 0x58, 0x52, 0x65, - 0x73, 0x6F, 0x6C, 0x75, 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x74, 0x69, 0x66, 0x66, - 0x3A, 0x59, 0x52, 0x65, 0x73, 0x6F, 0x6C, 0x75, 0x74, 0x69, 0x6F, 0x6E, - 0x3E, 0x37, 0x32, 0x30, 0x30, 0x30, 0x30, 0x2F, 0x31, 0x30, 0x30, 0x30, - 0x30, 0x3C, 0x2F, 0x74, 0x69, 0x66, 0x66, 0x3A, 0x59, 0x52, 0x65, 0x73, - 0x6F, 0x6C, 0x75, 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x74, 0x69, 0x66, 0x66, 0x3A, - 0x52, 0x65, 0x73, 0x6F, 0x6C, 0x75, 0x74, 0x69, 0x6F, 0x6E, 0x55, 0x6E, - 0x69, 0x74, 0x3E, 0x32, 0x3C, 0x2F, 0x74, 0x69, 0x66, 0x66, 0x3A, 0x52, - 0x65, 0x73, 0x6F, 0x6C, 0x75, 0x74, 0x69, 0x6F, 0x6E, 0x55, 0x6E, 0x69, - 0x74, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3C, 0x65, 0x78, 0x69, 0x66, 0x3A, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x53, - 0x70, 0x61, 0x63, 0x65, 0x3E, 0x36, 0x35, 0x35, 0x33, 0x35, 0x3C, 0x2F, - 0x65, 0x78, 0x69, 0x66, 0x3A, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x53, 0x70, - 0x61, 0x63, 0x65, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3C, 0x65, 0x78, 0x69, 0x66, 0x3A, 0x50, 0x69, 0x78, 0x65, - 0x6C, 0x58, 0x44, 0x69, 0x6D, 0x65, 0x6E, 0x73, 0x69, 0x6F, 0x6E, 0x3E, - 0x36, 0x36, 0x3C, 0x2F, 0x65, 0x78, 0x69, 0x66, 0x3A, 0x50, 0x69, 0x78, - 0x65, 0x6C, 0x58, 0x44, 0x69, 0x6D, 0x65, 0x6E, 0x73, 0x69, 0x6F, 0x6E, - 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, - 0x65, 0x78, 0x69, 0x66, 0x3A, 0x50, 0x69, 0x78, 0x65, 0x6C, 0x59, 0x44, - 0x69, 0x6D, 0x65, 0x6E, 0x73, 0x69, 0x6F, 0x6E, 0x3E, 0x36, 0x36, 0x3C, - 0x2F, 0x65, 0x78, 0x69, 0x66, 0x3A, 0x50, 0x69, 0x78, 0x65, 0x6C, 0x59, - 0x44, 0x69, 0x6D, 0x65, 0x6E, 0x73, 0x69, 0x6F, 0x6E, 0x3E, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x2F, 0x72, 0x64, 0x66, 0x3A, 0x44, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x0A, - 0x20, 0x20, 0x20, 0x3C, 0x2F, 0x72, 0x64, 0x66, 0x3A, 0x52, 0x44, 0x46, - 0x3E, 0x0A, 0x3C, 0x2F, 0x78, 0x3A, 0x78, 0x6D, 0x70, 0x6D, 0x65, 0x74, - 0x61, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x3C, 0x3F, 0x78, 0x70, 0x61, 0x63, 0x6B, 0x65, 0x74, - 0x20, 0x65, 0x6E, 0x64, 0x3D, 0x22, 0x77, 0x22, 0x3F, 0x3E, 0x2C, 0xB7, - 0x84, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, 0x52, 0x4D, 0x00, 0x00, - 0x7A, 0x25, 0x00, 0x00, 0x80, 0x83, 0x00, 0x00, 0xF9, 0xFF, 0x00, 0x00, - 0x80, 0xE9, 0x00, 0x00, 0x75, 0x30, 0x00, 0x00, 0xEA, 0x60, 0x00, 0x00, - 0x3A, 0x98, 0x00, 0x00, 0x17, 0x6F, 0x92, 0x5F, 0xC5, 0x46, 0x00, 0x00, - 0x01, 0xA0, 0x49, 0x44, 0x41, 0x54, 0x78, 0xDA, 0xEC, 0xDA, 0x3F, 0x4B, - 0xC3, 0x40, 0x18, 0xC7, 0xF1, 0x6F, 0xFC, 0x8B, 0xA2, 0xB3, 0x48, 0x07, - 0x37, 0x11, 0x1C, 0xEC, 0x24, 0x3A, 0x14, 0xC1, 0xC5, 0x97, 0xE0, 0x24, - 0x4E, 0xBE, 0x0B, 0x57, 0x75, 0x76, 0x12, 0x9C, 0x1C, 0xC4, 0xD1, 0x17, - 0xE0, 0x20, 0x4E, 0x8A, 0x20, 0xBA, 0x15, 0xD1, 0x41, 0x57, 0x9D, 0x05, - 0x07, 0x5B, 0xCF, 0x21, 0x05, 0xCB, 0x79, 0x36, 0x09, 0xB4, 0x49, 0x9B, - 0xE7, 0xF7, 0xC0, 0x0D, 0xF7, 0x5C, 0x2E, 0x21, 0x9F, 0x34, 0x77, 0xD7, - 0x6B, 0x23, 0xE7, 0x1C, 0x0A, 0x18, 0x12, 0x81, 0x20, 0x04, 0x21, 0x08, - 0x41, 0x08, 0x42, 0x10, 0x82, 0x10, 0x84, 0x20, 0x04, 0x21, 0x08, 0x41, - 0x08, 0x42, 0x10, 0x82, 0x10, 0x84, 0x20, 0x04, 0x31, 0x28, 0x10, 0x93, - 0x80, 0x6B, 0x2B, 0x7E, 0x34, 0xBC, 0xF6, 0xA2, 0xCA, 0x2B, 0x50, 0xED, - 0x25, 0xC4, 0x47, 0x42, 0xFB, 0x70, 0x9F, 0x3C, 0xD4, 0x39, 0xE0, 0xA1, - 0x85, 0xB2, 0x93, 0xB5, 0x73, 0x94, 0x62, 0x17, 0xDB, 0x3F, 0x20, 0x4A, - 0x68, 0xEF, 0xA7, 0x88, 0x34, 0x46, 0xFC, 0x3E, 0xA4, 0x54, 0xF7, 0x38, - 0xD2, 0x83, 0x8B, 0x9F, 0x01, 0x17, 0x5D, 0x3C, 0xDF, 0x89, 0x57, 0x7F, - 0x02, 0xF6, 0xDB, 0xEA, 0x53, 0xC0, 0x26, 0x50, 0xFB, 0xA7, 0x7F, 0x33, - 0xD5, 0x27, 0xC3, 0x39, 0x97, 0x54, 0xFC, 0x48, 0x6A, 0x9F, 0x4D, 0x71, - 0xCE, 0x2C, 0xC5, 0x8F, 0xED, 0x0E, 0xC7, 0xAE, 0xBB, 0x70, 0x5C, 0x25, - 0x5D, 0xA7, 0x6C, 0xAF, 0xC6, 0x25, 0x30, 0x16, 0xC8, 0xAF, 0x01, 0xA3, - 0xD6, 0xC6, 0x88, 0x2F, 0x60, 0x26, 0x90, 0x7F, 0xB1, 0x38, 0x58, 0xBE, - 0x03, 0x8F, 0x5E, 0xAE, 0x62, 0x75, 0xD6, 0x58, 0x0C, 0xE4, 0x16, 0x2C, - 0x42, 0x7C, 0x07, 0x72, 0xC7, 0x56, 0xD7, 0x11, 0xF7, 0x5E, 0x7D, 0xD9, - 0x2A, 0xC4, 0xB5, 0x57, 0x1F, 0xB7, 0x0A, 0xF1, 0xAC, 0x25, 0x76, 0x1C, - 0x35, 0x41, 0xC4, 0xB1, 0xE1, 0xD5, 0xDF, 0xAC, 0x42, 0x4C, 0x7B, 0xF5, - 0x23, 0x8B, 0x10, 0xA1, 0x19, 0x62, 0xCF, 0x22, 0xC4, 0x6D, 0x20, 0xD7, - 0xB0, 0x06, 0x71, 0x13, 0xC8, 0x6D, 0x59, 0x1B, 0x2C, 0xCF, 0x81, 0x95, - 0x40, 0xFE, 0x34, 0xEF, 0x8D, 0x99, 0xA2, 0xA2, 0x4A, 0xBC, 0x67, 0x19, - 0x8A, 0x4A, 0x52, 0xE7, 0xB2, 0xEF, 0x59, 0x02, 0xEC, 0x76, 0x1A, 0x24, - 0xAD, 0x4C, 0x9F, 0x07, 0x69, 0x10, 0xCA, 0xF6, 0x6A, 0x84, 0xBE, 0x86, - 0xD7, 0xBB, 0xB9, 0xB2, 0x5C, 0x1A, 0x30, 0x80, 0xC3, 0xD6, 0xEB, 0x5B, - 0xCF, 0xD2, 0x29, 0xEA, 0xC2, 0xBF, 0xF3, 0x57, 0x81, 0xF9, 0x9C, 0x6E, - 0x72, 0x02, 0xF8, 0xF4, 0x72, 0x4D, 0xE0, 0x8E, 0xBF, 0x3B, 0x52, 0xE4, - 0x0D, 0x51, 0x8A, 0xD0, 0x8F, 0xC0, 0x82, 0x10, 0x84, 0x20, 0x04, 0x21, - 0x08, 0x41, 0x08, 0x42, 0x10, 0x82, 0x10, 0x84, 0x20, 0x04, 0x21, 0x08, - 0x41, 0x08, 0x42, 0x10, 0x82, 0x28, 0x36, 0x7E, 0x06, 0x00, 0x5C, 0x33, - 0x34, 0xCB, 0x4C, 0x00, 0x5F, 0x5C, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, - 0x4E, 0x44, 0xAE, 0x42, 0x60, 0x82 -}; -} -static const unsigned char* rage_icon = raw::rage_raw; -} \ No newline at end of file diff --git a/tf2/icons/visuals.hpp b/tf2/icons/visuals.hpp deleted file mode 100644 index 4d50ae3..0000000 --- a/tf2/icons/visuals.hpp +++ /dev/null @@ -1,1318 +0,0 @@ -namespace icons { -constexpr size_t visuals_size = 15715; -namespace raw { -constexpr unsigned char visuals_raw[15715] = { - 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00, 0x00, 0x0D, - 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x42, - 0x08, 0x06, 0x00, 0x00, 0x00, 0xE3, 0x54, 0x00, 0xE8, 0x00, 0x00, 0x00, - 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0B, 0x13, 0x00, 0x00, 0x0B, - 0x13, 0x01, 0x00, 0x9A, 0x9C, 0x18, 0x00, 0x00, 0x39, 0xEC, 0x69, 0x54, - 0x58, 0x74, 0x58, 0x4D, 0x4C, 0x3A, 0x63, 0x6F, 0x6D, 0x2E, 0x61, 0x64, - 0x6F, 0x62, 0x65, 0x2E, 0x78, 0x6D, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3C, 0x3F, 0x78, 0x70, 0x61, 0x63, 0x6B, 0x65, 0x74, 0x20, 0x62, 0x65, - 0x67, 0x69, 0x6E, 0x3D, 0x22, 0xEF, 0xBB, 0xBF, 0x22, 0x20, 0x69, 0x64, - 0x3D, 0x22, 0x57, 0x35, 0x4D, 0x30, 0x4D, 0x70, 0x43, 0x65, 0x68, 0x69, - 0x48, 0x7A, 0x72, 0x65, 0x53, 0x7A, 0x4E, 0x54, 0x63, 0x7A, 0x6B, 0x63, - 0x39, 0x64, 0x22, 0x3F, 0x3E, 0x0A, 0x3C, 0x78, 0x3A, 0x78, 0x6D, 0x70, - 0x6D, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6D, 0x6C, 0x6E, 0x73, 0x3A, 0x78, - 0x3D, 0x22, 0x61, 0x64, 0x6F, 0x62, 0x65, 0x3A, 0x6E, 0x73, 0x3A, 0x6D, - 0x65, 0x74, 0x61, 0x2F, 0x22, 0x20, 0x78, 0x3A, 0x78, 0x6D, 0x70, 0x74, - 0x6B, 0x3D, 0x22, 0x41, 0x64, 0x6F, 0x62, 0x65, 0x20, 0x58, 0x4D, 0x50, - 0x20, 0x43, 0x6F, 0x72, 0x65, 0x20, 0x35, 0x2E, 0x36, 0x2D, 0x63, 0x31, - 0x33, 0x38, 0x20, 0x37, 0x39, 0x2E, 0x31, 0x35, 0x39, 0x38, 0x32, 0x34, - 0x2C, 0x20, 0x32, 0x30, 0x31, 0x36, 0x2F, 0x30, 0x39, 0x2F, 0x31, 0x34, - 0x2D, 0x30, 0x31, 0x3A, 0x30, 0x39, 0x3A, 0x30, 0x31, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x3C, - 0x72, 0x64, 0x66, 0x3A, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6D, 0x6C, 0x6E, - 0x73, 0x3A, 0x72, 0x64, 0x66, 0x3D, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3A, - 0x2F, 0x2F, 0x77, 0x77, 0x77, 0x2E, 0x77, 0x33, 0x2E, 0x6F, 0x72, 0x67, - 0x2F, 0x31, 0x39, 0x39, 0x39, 0x2F, 0x30, 0x32, 0x2F, 0x32, 0x32, 0x2D, - 0x72, 0x64, 0x66, 0x2D, 0x73, 0x79, 0x6E, 0x74, 0x61, 0x78, 0x2D, 0x6E, - 0x73, 0x23, 0x22, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, - 0x72, 0x64, 0x66, 0x3A, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6F, 0x6E, 0x20, 0x72, 0x64, 0x66, 0x3A, 0x61, 0x62, 0x6F, 0x75, - 0x74, 0x3D, 0x22, 0x22, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6D, 0x6C, 0x6E, 0x73, 0x3A, 0x78, - 0x6D, 0x70, 0x3D, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x6E, - 0x73, 0x2E, 0x61, 0x64, 0x6F, 0x62, 0x65, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, - 0x78, 0x61, 0x70, 0x2F, 0x31, 0x2E, 0x30, 0x2F, 0x22, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6D, - 0x6C, 0x6E, 0x73, 0x3A, 0x78, 0x6D, 0x70, 0x4D, 0x4D, 0x3D, 0x22, 0x68, - 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x6E, 0x73, 0x2E, 0x61, 0x64, 0x6F, - 0x62, 0x65, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x78, 0x61, 0x70, 0x2F, 0x31, - 0x2E, 0x30, 0x2F, 0x6D, 0x6D, 0x2F, 0x22, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6D, 0x6C, 0x6E, - 0x73, 0x3A, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3D, 0x22, 0x68, 0x74, 0x74, - 0x70, 0x3A, 0x2F, 0x2F, 0x6E, 0x73, 0x2E, 0x61, 0x64, 0x6F, 0x62, 0x65, - 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x78, 0x61, 0x70, 0x2F, 0x31, 0x2E, 0x30, - 0x2F, 0x73, 0x54, 0x79, 0x70, 0x65, 0x2F, 0x52, 0x65, 0x73, 0x6F, 0x75, - 0x72, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6E, 0x74, 0x23, 0x22, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, - 0x6D, 0x6C, 0x6E, 0x73, 0x3A, 0x64, 0x63, 0x3D, 0x22, 0x68, 0x74, 0x74, - 0x70, 0x3A, 0x2F, 0x2F, 0x70, 0x75, 0x72, 0x6C, 0x2E, 0x6F, 0x72, 0x67, - 0x2F, 0x64, 0x63, 0x2F, 0x65, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x73, - 0x2F, 0x31, 0x2E, 0x31, 0x2F, 0x22, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6D, 0x6C, 0x6E, 0x73, - 0x3A, 0x70, 0x68, 0x6F, 0x74, 0x6F, 0x73, 0x68, 0x6F, 0x70, 0x3D, 0x22, - 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x6E, 0x73, 0x2E, 0x61, 0x64, - 0x6F, 0x62, 0x65, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x70, 0x68, 0x6F, 0x74, - 0x6F, 0x73, 0x68, 0x6F, 0x70, 0x2F, 0x31, 0x2E, 0x30, 0x2F, 0x22, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x78, 0x6D, 0x6C, 0x6E, 0x73, 0x3A, 0x74, 0x69, 0x66, 0x66, 0x3D, 0x22, - 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x6E, 0x73, 0x2E, 0x61, 0x64, - 0x6F, 0x62, 0x65, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x74, 0x69, 0x66, 0x66, - 0x2F, 0x31, 0x2E, 0x30, 0x2F, 0x22, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6D, 0x6C, 0x6E, 0x73, - 0x3A, 0x65, 0x78, 0x69, 0x66, 0x3D, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3A, - 0x2F, 0x2F, 0x6E, 0x73, 0x2E, 0x61, 0x64, 0x6F, 0x62, 0x65, 0x2E, 0x63, - 0x6F, 0x6D, 0x2F, 0x65, 0x78, 0x69, 0x66, 0x2F, 0x31, 0x2E, 0x30, 0x2F, - 0x22, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3C, 0x78, 0x6D, 0x70, 0x3A, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6F, 0x72, - 0x54, 0x6F, 0x6F, 0x6C, 0x3E, 0x41, 0x64, 0x6F, 0x62, 0x65, 0x20, 0x50, - 0x68, 0x6F, 0x74, 0x6F, 0x73, 0x68, 0x6F, 0x70, 0x20, 0x43, 0x43, 0x20, - 0x32, 0x30, 0x31, 0x37, 0x20, 0x28, 0x57, 0x69, 0x6E, 0x64, 0x6F, 0x77, - 0x73, 0x29, 0x3C, 0x2F, 0x78, 0x6D, 0x70, 0x3A, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x6F, 0x72, 0x54, 0x6F, 0x6F, 0x6C, 0x3E, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x78, 0x6D, 0x70, 0x3A, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x65, 0x3E, 0x32, 0x30, - 0x31, 0x38, 0x2D, 0x30, 0x31, 0x2D, 0x32, 0x36, 0x54, 0x31, 0x31, 0x3A, - 0x31, 0x38, 0x3A, 0x33, 0x37, 0x2B, 0x30, 0x38, 0x3A, 0x30, 0x30, 0x3C, - 0x2F, 0x78, 0x6D, 0x70, 0x3A, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, - 0x61, 0x74, 0x65, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3C, 0x78, 0x6D, 0x70, 0x3A, 0x4D, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x44, 0x61, 0x74, 0x65, 0x3E, 0x32, 0x30, 0x31, 0x38, - 0x2D, 0x30, 0x31, 0x2D, 0x32, 0x36, 0x54, 0x31, 0x31, 0x3A, 0x31, 0x38, - 0x3A, 0x33, 0x37, 0x2B, 0x30, 0x38, 0x3A, 0x30, 0x30, 0x3C, 0x2F, 0x78, - 0x6D, 0x70, 0x3A, 0x4D, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x44, - 0x61, 0x74, 0x65, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3C, 0x78, 0x6D, 0x70, 0x3A, 0x4D, 0x6F, 0x64, 0x69, 0x66, - 0x79, 0x44, 0x61, 0x74, 0x65, 0x3E, 0x32, 0x30, 0x31, 0x38, 0x2D, 0x30, - 0x31, 0x2D, 0x32, 0x36, 0x54, 0x31, 0x31, 0x3A, 0x31, 0x38, 0x3A, 0x33, - 0x37, 0x2B, 0x30, 0x38, 0x3A, 0x30, 0x30, 0x3C, 0x2F, 0x78, 0x6D, 0x70, - 0x3A, 0x4D, 0x6F, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3E, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x78, - 0x6D, 0x70, 0x4D, 0x4D, 0x3A, 0x49, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x63, - 0x65, 0x49, 0x44, 0x3E, 0x78, 0x6D, 0x70, 0x2E, 0x69, 0x69, 0x64, 0x3A, - 0x32, 0x39, 0x31, 0x35, 0x36, 0x62, 0x33, 0x33, 0x2D, 0x65, 0x62, 0x62, - 0x31, 0x2D, 0x63, 0x39, 0x34, 0x36, 0x2D, 0x38, 0x62, 0x33, 0x34, 0x2D, - 0x30, 0x39, 0x32, 0x39, 0x31, 0x63, 0x62, 0x31, 0x34, 0x65, 0x36, 0x35, - 0x3C, 0x2F, 0x78, 0x6D, 0x70, 0x4D, 0x4D, 0x3A, 0x49, 0x6E, 0x73, 0x74, - 0x61, 0x6E, 0x63, 0x65, 0x49, 0x44, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x78, 0x6D, 0x70, 0x4D, 0x4D, 0x3A, - 0x44, 0x6F, 0x63, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x49, 0x44, 0x3E, 0x61, - 0x64, 0x6F, 0x62, 0x65, 0x3A, 0x64, 0x6F, 0x63, 0x69, 0x64, 0x3A, 0x70, - 0x68, 0x6F, 0x74, 0x6F, 0x73, 0x68, 0x6F, 0x70, 0x3A, 0x39, 0x33, 0x30, - 0x65, 0x35, 0x38, 0x62, 0x39, 0x2D, 0x30, 0x32, 0x34, 0x37, 0x2D, 0x31, - 0x31, 0x65, 0x38, 0x2D, 0x61, 0x33, 0x38, 0x37, 0x2D, 0x38, 0x65, 0x34, - 0x32, 0x36, 0x32, 0x63, 0x35, 0x34, 0x30, 0x63, 0x32, 0x3C, 0x2F, 0x78, - 0x6D, 0x70, 0x4D, 0x4D, 0x3A, 0x44, 0x6F, 0x63, 0x75, 0x6D, 0x65, 0x6E, - 0x74, 0x49, 0x44, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3C, 0x78, 0x6D, 0x70, 0x4D, 0x4D, 0x3A, 0x4F, 0x72, 0x69, - 0x67, 0x69, 0x6E, 0x61, 0x6C, 0x44, 0x6F, 0x63, 0x75, 0x6D, 0x65, 0x6E, - 0x74, 0x49, 0x44, 0x3E, 0x78, 0x6D, 0x70, 0x2E, 0x64, 0x69, 0x64, 0x3A, - 0x62, 0x64, 0x62, 0x35, 0x39, 0x65, 0x61, 0x36, 0x2D, 0x37, 0x63, 0x63, - 0x30, 0x2D, 0x65, 0x65, 0x34, 0x34, 0x2D, 0x39, 0x33, 0x61, 0x66, 0x2D, - 0x32, 0x64, 0x33, 0x62, 0x38, 0x30, 0x39, 0x32, 0x31, 0x35, 0x33, 0x39, - 0x3C, 0x2F, 0x78, 0x6D, 0x70, 0x4D, 0x4D, 0x3A, 0x4F, 0x72, 0x69, 0x67, - 0x69, 0x6E, 0x61, 0x6C, 0x44, 0x6F, 0x63, 0x75, 0x6D, 0x65, 0x6E, 0x74, - 0x49, 0x44, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x3C, 0x78, 0x6D, 0x70, 0x4D, 0x4D, 0x3A, 0x48, 0x69, 0x73, 0x74, - 0x6F, 0x72, 0x79, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x72, 0x64, 0x66, 0x3A, 0x53, 0x65, - 0x71, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x72, 0x64, 0x66, 0x3A, 0x6C, - 0x69, 0x20, 0x72, 0x64, 0x66, 0x3A, 0x70, 0x61, 0x72, 0x73, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x3D, 0x22, 0x52, 0x65, 0x73, 0x6F, 0x75, 0x72, 0x63, - 0x65, 0x22, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x73, - 0x74, 0x45, 0x76, 0x74, 0x3A, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x3E, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x3C, 0x2F, 0x73, 0x74, 0x45, - 0x76, 0x74, 0x3A, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, - 0x69, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x63, 0x65, 0x49, 0x44, 0x3E, 0x78, - 0x6D, 0x70, 0x2E, 0x69, 0x69, 0x64, 0x3A, 0x62, 0x64, 0x62, 0x35, 0x39, - 0x65, 0x61, 0x36, 0x2D, 0x37, 0x63, 0x63, 0x30, 0x2D, 0x65, 0x65, 0x34, - 0x34, 0x2D, 0x39, 0x33, 0x61, 0x66, 0x2D, 0x32, 0x64, 0x33, 0x62, 0x38, - 0x30, 0x39, 0x32, 0x31, 0x35, 0x33, 0x39, 0x3C, 0x2F, 0x73, 0x74, 0x45, - 0x76, 0x74, 0x3A, 0x69, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x63, 0x65, 0x49, - 0x44, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x73, 0x74, - 0x45, 0x76, 0x74, 0x3A, 0x77, 0x68, 0x65, 0x6E, 0x3E, 0x32, 0x30, 0x31, - 0x38, 0x2D, 0x30, 0x31, 0x2D, 0x32, 0x36, 0x54, 0x31, 0x31, 0x3A, 0x31, - 0x38, 0x3A, 0x33, 0x37, 0x2B, 0x30, 0x38, 0x3A, 0x30, 0x30, 0x3C, 0x2F, - 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, 0x77, 0x68, 0x65, 0x6E, 0x3E, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x73, 0x74, 0x45, 0x76, 0x74, - 0x3A, 0x73, 0x6F, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x41, 0x67, 0x65, - 0x6E, 0x74, 0x3E, 0x41, 0x64, 0x6F, 0x62, 0x65, 0x20, 0x50, 0x68, 0x6F, - 0x74, 0x6F, 0x73, 0x68, 0x6F, 0x70, 0x20, 0x43, 0x43, 0x20, 0x32, 0x30, - 0x31, 0x37, 0x20, 0x28, 0x57, 0x69, 0x6E, 0x64, 0x6F, 0x77, 0x73, 0x29, - 0x3C, 0x2F, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, 0x73, 0x6F, 0x66, 0x74, - 0x77, 0x61, 0x72, 0x65, 0x41, 0x67, 0x65, 0x6E, 0x74, 0x3E, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3C, 0x2F, 0x72, 0x64, 0x66, 0x3A, 0x6C, 0x69, 0x3E, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3C, 0x72, 0x64, 0x66, 0x3A, 0x6C, 0x69, 0x20, 0x72, - 0x64, 0x66, 0x3A, 0x70, 0x61, 0x72, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, - 0x3D, 0x22, 0x52, 0x65, 0x73, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x22, 0x3E, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x73, 0x74, 0x45, 0x76, - 0x74, 0x3A, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x73, 0x61, 0x76, - 0x65, 0x64, 0x3C, 0x2F, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, 0x61, 0x63, - 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3C, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, 0x69, 0x6E, 0x73, 0x74, 0x61, - 0x6E, 0x63, 0x65, 0x49, 0x44, 0x3E, 0x78, 0x6D, 0x70, 0x2E, 0x69, 0x69, - 0x64, 0x3A, 0x32, 0x39, 0x31, 0x35, 0x36, 0x62, 0x33, 0x33, 0x2D, 0x65, - 0x62, 0x62, 0x31, 0x2D, 0x63, 0x39, 0x34, 0x36, 0x2D, 0x38, 0x62, 0x33, - 0x34, 0x2D, 0x30, 0x39, 0x32, 0x39, 0x31, 0x63, 0x62, 0x31, 0x34, 0x65, - 0x36, 0x35, 0x3C, 0x2F, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, 0x69, 0x6E, - 0x73, 0x74, 0x61, 0x6E, 0x63, 0x65, 0x49, 0x44, 0x3E, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x3C, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, 0x77, - 0x68, 0x65, 0x6E, 0x3E, 0x32, 0x30, 0x31, 0x38, 0x2D, 0x30, 0x31, 0x2D, - 0x32, 0x36, 0x54, 0x31, 0x31, 0x3A, 0x31, 0x38, 0x3A, 0x33, 0x37, 0x2B, - 0x30, 0x38, 0x3A, 0x30, 0x30, 0x3C, 0x2F, 0x73, 0x74, 0x45, 0x76, 0x74, - 0x3A, 0x77, 0x68, 0x65, 0x6E, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x3C, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, 0x73, 0x6F, 0x66, 0x74, - 0x77, 0x61, 0x72, 0x65, 0x41, 0x67, 0x65, 0x6E, 0x74, 0x3E, 0x41, 0x64, - 0x6F, 0x62, 0x65, 0x20, 0x50, 0x68, 0x6F, 0x74, 0x6F, 0x73, 0x68, 0x6F, - 0x70, 0x20, 0x43, 0x43, 0x20, 0x32, 0x30, 0x31, 0x37, 0x20, 0x28, 0x57, - 0x69, 0x6E, 0x64, 0x6F, 0x77, 0x73, 0x29, 0x3C, 0x2F, 0x73, 0x74, 0x45, - 0x76, 0x74, 0x3A, 0x73, 0x6F, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x41, - 0x67, 0x65, 0x6E, 0x74, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3C, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, 0x63, 0x68, 0x61, 0x6E, 0x67, - 0x65, 0x64, 0x3E, 0x2F, 0x3C, 0x2F, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3A, - 0x63, 0x68, 0x61, 0x6E, 0x67, 0x65, 0x64, 0x3E, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3C, 0x2F, 0x72, 0x64, 0x66, 0x3A, 0x6C, 0x69, 0x3E, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x2F, - 0x72, 0x64, 0x66, 0x3A, 0x53, 0x65, 0x71, 0x3E, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x2F, 0x78, 0x6D, 0x70, 0x4D, - 0x4D, 0x3A, 0x48, 0x69, 0x73, 0x74, 0x6F, 0x72, 0x79, 0x3E, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x64, 0x63, 0x3A, - 0x66, 0x6F, 0x72, 0x6D, 0x61, 0x74, 0x3E, 0x69, 0x6D, 0x61, 0x67, 0x65, - 0x2F, 0x70, 0x6E, 0x67, 0x3C, 0x2F, 0x64, 0x63, 0x3A, 0x66, 0x6F, 0x72, - 0x6D, 0x61, 0x74, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3C, 0x70, 0x68, 0x6F, 0x74, 0x6F, 0x73, 0x68, 0x6F, 0x70, - 0x3A, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x4D, 0x6F, 0x64, 0x65, 0x3E, 0x33, - 0x3C, 0x2F, 0x70, 0x68, 0x6F, 0x74, 0x6F, 0x73, 0x68, 0x6F, 0x70, 0x3A, - 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x4D, 0x6F, 0x64, 0x65, 0x3E, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x74, 0x69, 0x66, - 0x66, 0x3A, 0x4F, 0x72, 0x69, 0x65, 0x6E, 0x74, 0x61, 0x74, 0x69, 0x6F, - 0x6E, 0x3E, 0x31, 0x3C, 0x2F, 0x74, 0x69, 0x66, 0x66, 0x3A, 0x4F, 0x72, - 0x69, 0x65, 0x6E, 0x74, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x74, 0x69, 0x66, - 0x66, 0x3A, 0x58, 0x52, 0x65, 0x73, 0x6F, 0x6C, 0x75, 0x74, 0x69, 0x6F, - 0x6E, 0x3E, 0x37, 0x32, 0x30, 0x30, 0x30, 0x30, 0x2F, 0x31, 0x30, 0x30, - 0x30, 0x30, 0x3C, 0x2F, 0x74, 0x69, 0x66, 0x66, 0x3A, 0x58, 0x52, 0x65, - 0x73, 0x6F, 0x6C, 0x75, 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x74, 0x69, 0x66, 0x66, - 0x3A, 0x59, 0x52, 0x65, 0x73, 0x6F, 0x6C, 0x75, 0x74, 0x69, 0x6F, 0x6E, - 0x3E, 0x37, 0x32, 0x30, 0x30, 0x30, 0x30, 0x2F, 0x31, 0x30, 0x30, 0x30, - 0x30, 0x3C, 0x2F, 0x74, 0x69, 0x66, 0x66, 0x3A, 0x59, 0x52, 0x65, 0x73, - 0x6F, 0x6C, 0x75, 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x74, 0x69, 0x66, 0x66, 0x3A, - 0x52, 0x65, 0x73, 0x6F, 0x6C, 0x75, 0x74, 0x69, 0x6F, 0x6E, 0x55, 0x6E, - 0x69, 0x74, 0x3E, 0x32, 0x3C, 0x2F, 0x74, 0x69, 0x66, 0x66, 0x3A, 0x52, - 0x65, 0x73, 0x6F, 0x6C, 0x75, 0x74, 0x69, 0x6F, 0x6E, 0x55, 0x6E, 0x69, - 0x74, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3C, 0x65, 0x78, 0x69, 0x66, 0x3A, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x53, - 0x70, 0x61, 0x63, 0x65, 0x3E, 0x36, 0x35, 0x35, 0x33, 0x35, 0x3C, 0x2F, - 0x65, 0x78, 0x69, 0x66, 0x3A, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x53, 0x70, - 0x61, 0x63, 0x65, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3C, 0x65, 0x78, 0x69, 0x66, 0x3A, 0x50, 0x69, 0x78, 0x65, - 0x6C, 0x58, 0x44, 0x69, 0x6D, 0x65, 0x6E, 0x73, 0x69, 0x6F, 0x6E, 0x3E, - 0x36, 0x36, 0x3C, 0x2F, 0x65, 0x78, 0x69, 0x66, 0x3A, 0x50, 0x69, 0x78, - 0x65, 0x6C, 0x58, 0x44, 0x69, 0x6D, 0x65, 0x6E, 0x73, 0x69, 0x6F, 0x6E, - 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, - 0x65, 0x78, 0x69, 0x66, 0x3A, 0x50, 0x69, 0x78, 0x65, 0x6C, 0x59, 0x44, - 0x69, 0x6D, 0x65, 0x6E, 0x73, 0x69, 0x6F, 0x6E, 0x3E, 0x36, 0x36, 0x3C, - 0x2F, 0x65, 0x78, 0x69, 0x66, 0x3A, 0x50, 0x69, 0x78, 0x65, 0x6C, 0x59, - 0x44, 0x69, 0x6D, 0x65, 0x6E, 0x73, 0x69, 0x6F, 0x6E, 0x3E, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x2F, 0x72, 0x64, 0x66, 0x3A, 0x44, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x0A, - 0x20, 0x20, 0x20, 0x3C, 0x2F, 0x72, 0x64, 0x66, 0x3A, 0x52, 0x44, 0x46, - 0x3E, 0x0A, 0x3C, 0x2F, 0x78, 0x3A, 0x78, 0x6D, 0x70, 0x6D, 0x65, 0x74, - 0x61, 0x3E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x0A, 0x3C, 0x3F, 0x78, 0x70, 0x61, 0x63, 0x6B, 0x65, 0x74, - 0x20, 0x65, 0x6E, 0x64, 0x3D, 0x22, 0x77, 0x22, 0x3F, 0x3E, 0x20, 0x2B, - 0x35, 0xED, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, 0x52, 0x4D, 0x00, 0x00, - 0x7A, 0x25, 0x00, 0x00, 0x80, 0x83, 0x00, 0x00, 0xF9, 0xFF, 0x00, 0x00, - 0x80, 0xE9, 0x00, 0x00, 0x75, 0x30, 0x00, 0x00, 0xEA, 0x60, 0x00, 0x00, - 0x3A, 0x98, 0x00, 0x00, 0x17, 0x6F, 0x92, 0x5F, 0xC5, 0x46, 0x00, 0x00, - 0x02, 0xF1, 0x49, 0x44, 0x41, 0x54, 0x78, 0xDA, 0xEC, 0x9B, 0xBD, 0x6B, - 0x14, 0x41, 0x18, 0x87, 0x9F, 0xBD, 0xDC, 0x25, 0x31, 0x41, 0x31, 0x11, - 0x4E, 0x05, 0x25, 0x48, 0x48, 0x2C, 0x04, 0x2B, 0x15, 0x14, 0x84, 0x60, - 0x6C, 0xAC, 0xFC, 0x28, 0x44, 0xD2, 0x89, 0xA8, 0x85, 0x85, 0x58, 0xD9, - 0x08, 0xFE, 0x01, 0x82, 0xFD, 0x89, 0x85, 0x8D, 0x60, 0x17, 0x45, 0x10, - 0x8D, 0x85, 0x96, 0x36, 0x62, 0x65, 0x21, 0x58, 0x84, 0x53, 0x50, 0xB9, - 0x22, 0x28, 0x1A, 0xF5, 0x72, 0xB9, 0xD7, 0xC2, 0x0D, 0x1C, 0xCB, 0x7C, - 0xEC, 0xEC, 0xEE, 0x7D, 0x04, 0xDE, 0x1F, 0x6C, 0xB1, 0x33, 0xF3, 0x9B, - 0xF7, 0xE6, 0xB9, 0x77, 0x67, 0x67, 0xE6, 0xB8, 0x48, 0x44, 0x50, 0x41, - 0x49, 0x11, 0x28, 0x08, 0x05, 0xA1, 0x20, 0x14, 0x84, 0x82, 0x50, 0x10, - 0x0A, 0x42, 0x41, 0x28, 0x08, 0x05, 0xA1, 0x20, 0x14, 0x84, 0x82, 0x50, - 0x10, 0x0A, 0x42, 0x41, 0x28, 0x88, 0xBE, 0xAA, 0x5C, 0x70, 0x7F, 0x3B, - 0x81, 0x79, 0x60, 0x06, 0x98, 0x08, 0xF4, 0x0E, 0x03, 0xCD, 0x80, 0xF6, - 0x4D, 0xE0, 0x3D, 0xF0, 0x0A, 0xA8, 0x0F, 0x02, 0x88, 0x1B, 0xC0, 0xDD, - 0x01, 0xF9, 0x62, 0x1F, 0x00, 0x17, 0xB3, 0x18, 0xA3, 0x1C, 0x87, 0xB7, - 0x0B, 0xC0, 0xC3, 0x01, 0xCD, 0xF4, 0x60, 0x20, 0x59, 0x41, 0xFC, 0x8D, - 0x53, 0x79, 0xD0, 0x55, 0x01, 0x5A, 0xDD, 0x9A, 0x2C, 0x65, 0x93, 0x40, - 0x00, 0x58, 0x03, 0x46, 0xBB, 0x01, 0xC2, 0x95, 0x3E, 0xF3, 0x40, 0x94, - 0xB8, 0x86, 0x3C, 0xFD, 0xDD, 0x01, 0xB6, 0x74, 0xB4, 0xAF, 0x00, 0x97, - 0x3C, 0x9E, 0x49, 0x43, 0x9C, 0x99, 0x38, 0x4B, 0x4D, 0xFA, 0x1D, 0xB7, - 0xF1, 0x8C, 0x4C, 0x24, 0xED, 0xF5, 0x56, 0xCC, 0x3A, 0xEE, 0xF0, 0xD8, - 0x74, 0x28, 0x45, 0xBC, 0xAA, 0xC3, 0x6F, 0xF3, 0xEC, 0xB1, 0xB4, 0x6F, - 0xF9, 0xE2, 0xA5, 0x85, 0xB0, 0xDD, 0x12, 0x60, 0xDC, 0xE1, 0xB9, 0x66, - 0xF1, 0x44, 0x01, 0xF0, 0x89, 0x07, 0x91, 0xD4, 0x3B, 0x47, 0xFB, 0xC8, - 0x12, 0xF7, 0x84, 0x2B, 0x4E, 0xDA, 0xC9, 0xB2, 0x65, 0x48, 0xF3, 0x49, - 0x60, 0x25, 0xF0, 0x31, 0x2A, 0x79, 0x1E, 0xAF, 0x90, 0xBE, 0x86, 0x80, - 0xB6, 0xE3, 0x91, 0x5F, 0x37, 0xBD, 0x1C, 0xF2, 0xCC, 0x11, 0x25, 0x03, - 0x84, 0x27, 0x1E, 0x08, 0xA7, 0x0D, 0x65, 0xFB, 0x33, 0x42, 0x00, 0x18, - 0x31, 0x94, 0xBD, 0x70, 0xB4, 0x6F, 0xC7, 0x73, 0x56, 0x52, 0xD3, 0x79, - 0x5E, 0x9F, 0x35, 0xE0, 0x4A, 0x5A, 0xB2, 0x1D, 0xB3, 0x75, 0x39, 0xD0, - 0xE3, 0x53, 0x1D, 0xD8, 0x1B, 0xD8, 0x67, 0x72, 0x70, 0x5F, 0x81, 0xDD, - 0x59, 0x33, 0x22, 0x39, 0x8B, 0x7F, 0xCB, 0xB0, 0x62, 0xBD, 0x50, 0xC0, - 0xAB, 0xF0, 0x40, 0x06, 0xCF, 0xBD, 0xC4, 0xFD, 0xAE, 0x3C, 0x19, 0x91, - 0x6C, 0x70, 0x0E, 0x58, 0x0C, 0xF4, 0x44, 0x14, 0xA3, 0x64, 0xBF, 0x53, - 0x9E, 0x7D, 0xC6, 0x18, 0xF0, 0x2B, 0xCD, 0x67, 0xC9, 0xB2, 0xA0, 0x5A, - 0xF2, 0xD4, 0x8F, 0xD2, 0x3B, 0x1D, 0xF1, 0xD4, 0xAF, 0x76, 0x73, 0x1B, - 0xBE, 0xE6, 0xA9, 0x1F, 0xEF, 0x21, 0x88, 0xC2, 0x62, 0x65, 0x01, 0xB1, - 0xC3, 0x53, 0xFF, 0xBD, 0x87, 0x20, 0x3E, 0xF5, 0x13, 0xC4, 0xCD, 0x14, - 0x6B, 0x8E, 0x5E, 0x3D, 0x2E, 0x6F, 0x3C, 0xF5, 0xB3, 0x45, 0x82, 0x68, - 0x24, 0xEE, 0xAF, 0x67, 0xF8, 0xC0, 0x8F, 0x0A, 0x18, 0xF4, 0xC9, 0x0C, - 0x73, 0xC0, 0x52, 0x91, 0x20, 0xCE, 0x5B, 0x66, 0x63, 0x97, 0x3E, 0xA6, - 0x58, 0x60, 0x85, 0xEA, 0x65, 0x06, 0xCF, 0x54, 0xE2, 0x7E, 0x31, 0x0F, - 0x88, 0xD7, 0x86, 0xB2, 0x9F, 0x1E, 0xCF, 0x61, 0x43, 0xD9, 0xD3, 0x1C, - 0x10, 0xCE, 0x1A, 0xCA, 0xCE, 0x78, 0x3C, 0x1F, 0x52, 0x7E, 0xA9, 0x41, - 0xBB, 0xCF, 0xE7, 0x86, 0x4D, 0x4C, 0xCD, 0xE3, 0x31, 0xE9, 0x68, 0xE0, - 0x86, 0x0B, 0x11, 0x99, 0x08, 0xDC, 0x81, 0x22, 0x22, 0x73, 0x86, 0xF6, - 0xAB, 0x45, 0xEC, 0x3E, 0x6D, 0x03, 0x73, 0xC1, 0xD8, 0x6A, 0xF1, 0x2C, - 0x04, 0xC4, 0x9C, 0xB6, 0xF4, 0x31, 0xE7, 0xF0, 0x9C, 0xB2, 0x78, 0x2A, - 0x45, 0x81, 0x38, 0x68, 0x09, 0xB0, 0x2E, 0x22, 0xC3, 0x16, 0xCF, 0x7D, - 0x8B, 0xA7, 0x29, 0x22, 0x63, 0x8E, 0x58, 0x65, 0x11, 0x59, 0xB6, 0x78, - 0x1B, 0x16, 0x4F, 0x49, 0x44, 0xBE, 0x58, 0x3C, 0xB7, 0x8B, 0x3A, 0x8F, - 0xD8, 0xB8, 0x6A, 0x8E, 0xC3, 0x92, 0x76, 0x1C, 0xB0, 0x1A, 0x83, 0xD9, - 0xB8, 0x7E, 0x88, 0x5B, 0x0D, 0x11, 0x79, 0x26, 0x22, 0x8F, 0x45, 0xE4, - 0xB3, 0xF8, 0x35, 0xD2, 0xD1, 0xF7, 0x36, 0x11, 0xB9, 0x1C, 0xA7, 0xBD, - 0x4D, 0xF5, 0x34, 0x63, 0xCB, 0x72, 0x78, 0x6B, 0xDA, 0x8D, 0x0E, 0xAA, - 0x96, 0x81, 0x7D, 0xDD, 0x5A, 0x50, 0x5D, 0x05, 0x8E, 0x6D, 0x02, 0x08, - 0xB7, 0xD2, 0x42, 0xC8, 0x73, 0x9C, 0xDF, 0xF9, 0x8A, 0x9A, 0x1D, 0x30, - 0x00, 0x2B, 0x40, 0x35, 0xED, 0x31, 0x7E, 0x9E, 0x8C, 0x48, 0x9E, 0x3A, - 0x45, 0xF1, 0xA3, 0xF2, 0xA7, 0x8F, 0x83, 0x6F, 0xF3, 0xFF, 0xD7, 0xB6, - 0x52, 0x7C, 0x84, 0xD8, 0x0A, 0xED, 0x20, 0xD2, 0xBF, 0x29, 0x14, 0x93, - 0x11, 0x0A, 0x42, 0x41, 0x28, 0x08, 0x05, 0xA1, 0x20, 0x14, 0x84, 0x82, - 0x50, 0x10, 0x0A, 0x42, 0x11, 0x28, 0x08, 0x05, 0xA1, 0x20, 0x14, 0x84, - 0x82, 0x50, 0x10, 0x0A, 0x42, 0x41, 0xE4, 0xD3, 0xBF, 0x01, 0x00, 0x36, - 0xC5, 0x99, 0x33, 0xE0, 0x8B, 0x14, 0x09, 0x00, 0x00, 0x00, 0x00, 0x49, - 0x45, 0x4E, 0x44, 0xAE, 0x42, 0x60, 0x82 -}; -} -static const unsigned char* visuals_icon = raw::visuals_raw; -} diff --git a/tf2/identity.h b/tf2/identity.h deleted file mode 100644 index 0b3906a..0000000 --- a/tf2/identity.h +++ /dev/null @@ -1,12 +0,0 @@ -#pragma once -#include "sdk.h" -//kept incase i wanna do shit here fuck you -namespace features -{ - class c_identity { - private: - public: - void operator()( ) { - } - }; -} \ No newline at end of file diff --git a/tf2/input_system.cpp b/tf2/input_system.cpp deleted file mode 100644 index 881fa02..0000000 --- a/tf2/input_system.cpp +++ /dev/null @@ -1,527 +0,0 @@ -#include - -#include "input_system.hpp" -#include "util.hpp" - -util::c_input_manager g_input; - -NAMESPACE_REGION( util ) - -const char* const key_names_short[] = { - "unk", - "m1", - "m2", - "can", - "m3", - "m4", - "m5", - "unk", - "back", - "tab", - "unk", - "unk", - "clr", - "ret", - "unk", - "unk", - "shift", - "ctrl", - "alt", - "pause", - "caps", - "kana", - "unk", - "junja", - "final", - "kanji", - "unk", - "esc", - "convert", - "nonconvert", - "accept", - "modechange", - " ", - "prior", - "next", - "end", - "home", - "left", - "up", - "right", - "down", - "slct", - "prnt", - "execute", - "snapshot", - "ins", - "del", - "help", - "0", - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "unk", - "unk", - "unk", - "unk", - "unk", - "unk", - "unk", - "a", - "b", - "c", - "d", - "e", - "f", - "g", - "h", - "i", - "j", - "k", - "l", - "m", - "n", - "o", - "p", - "q", - "r", - "s", - "t", - "u", - "v", - "w", - "x", - "y", - "z", - "lwin", - "rwin", - "apps", - "unk", - "unk", - "num0", - "num1", - "num2", - "num3", - "num4", - "num5", - "num6", - "num7", - "num8", - "num9", - "*", - "+", - "sep", - "-", - ",", - "/", - "f1", - "f2", - "f3", - "f4", - "f5", - "f6", - "f7", - "f8", - "f9", - "f10", - "f11", - "f12", - "f13", - "f14", - "f15", - "f16", - "f17", - "f18", - "f19", - "f20", - "f21", - "f22", - "f23", - "f24", - "unk", - "unk", - "unk", - "unk", - "unk", - "unk", - "unk", - "unk", - "numlock", - "scroll", - "oem_nec_equal", - "oem_fj_masshou", - "oem_fj_touroku", - "oem_fj_loya", - "oem_fj_roya", - "unk", - "unk", - "unk", - "unk", - "unk", - "unk", - "unk", - "unk", - "unk", - "lshift", - "rshift", - "lctrl", - "rctrl", - "lalt", - "ralt", -}; - -const char* const key_names[] = { - "unknown", - "mouse_1", - "mouse_2", - "cancel", - "mouse_3", - "mouse_4", - "mouse_5", - "unknown", - "back", - "tab", - "unknown", - "unknown", - "clear", - "return", - "unknown", - "unknown", - "shift", - "control", - "alt", - "pause", - "capital", - "kana", - "unknown", - "junja", - "final", - "kanji", - "unknown", - "escape", - "convert", - "nonconvert", - "accept", - "modechange", - "space", - "prior", - "next", - "end", - "home", - "left", - "up", - "right", - "down", - "select", - "print", - "execute", - "snapshot", - "insert", - "delete", - "help", - "0", - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "unknown", - "unknown", - "unknown", - "unknown", - "unknown", - "unknown", - "unknown", - "a", - "b", - "c", - "d", - "e", - "f", - "g", - "h", - "i", - "j", - "k", - "l", - "m", - "n", - "o", - "p", - "q", - "r", - "s", - "t", - "u", - "v", - "w", - "x", - "y", - "z", - "lwin", - "rwin", - "apps", - "unknown", - "unknown", - "numpad0", - "numpad1", - "numpad2", - "numpad3", - "numpad4", - "numpad5", - "numpad6", - "numpad7", - "numpad8", - "numpad9", - "multiply", - "add", - "separator", - "subtract", - "decimal", - "divide", - "f1", - "f2", - "f3", - "f4", - "f5", - "f6", - "f7", - "f8", - "f9", - "f10", - "f11", - "f12", - "f13", - "f14", - "f15", - "f16", - "f17", - "f18", - "f19", - "f20", - "f21", - "f22", - "f23", - "f24", - "unknown", - "unknown", - "unknown", - "unknown", - "unknown", - "unknown", - "unknown", - "unknown", - "numlock", - "scroll", - "oem_nec_equal", - "oem_fj_masshou", - "oem_fj_touroku", - "oem_fj_loya", - "oem_fj_roya", - "unknown", - "unknown", - "unknown", - "unknown", - "unknown", - "unknown", - "unknown", - "unknown", - "unknown", - "lshift", - "rshift", - "lcontrol", - "rcontrol", - "lmenu", - "rmenu", -}; - -void c_input_manager::capture_mouse_move( ulong_t lparam ) { - m_mouse_pos[ 0 ] = LOWORD( lparam ); - m_mouse_pos[ 1 ] = HIWORD( lparam ); -} - -void c_input_manager::clear_keys( ) { - memset( m_pressed_keys, 0, sizeof( m_pressed_keys ) ); -} - -bool c_input_manager::register_key_press( int key_event, int key ) -{ - switch ( key_event ) { - case KEYDOWN: { - if ( is_valid_key( key ) ) - m_pressed_keys[ key ] = true; - return true; - } - case KEYUP: { - if ( is_valid_key( key ) ) - m_pressed_keys[ key ] = false; - return true; - } - case SYSKEYDOWN: { //WTF IS THIS STUPID SHIT, WHY IS ALT LITERALLY THE ONLY FUCKING KEY UNDER SYSKEYDOWN OUT OF ALL THE MODIFIER KEYS? - if ( key == KEYS_ALT ) - m_pressed_keys[ key ] = true; - break; - } - case SYSKEYUP: { - if ( key == KEYS_ALT ) - m_pressed_keys[ key ] = false; - break; - } - case LBUTTONDOWN: - m_pressed_keys[ KEYS_MOUSE1 ] = true; - return true; - case LBUTTONUP: - m_pressed_keys[ KEYS_MOUSE1 ] = false; - return true; - case RBUTTONDOWN: - m_pressed_keys[ KEYS_MOUSE2 ] = true; - return true; - case RBUTTONUP: - m_pressed_keys[ KEYS_MOUSE2 ] = false; - return true; - case MBUTTONDOWN: - m_pressed_keys[ KEYS_MOUSE3 ] = true; - return true; - case MBUTTONUP: - m_pressed_keys[ KEYS_MOUSE3 ] = false; - return true; - case XBUTTONDOWN: { - bool pressed_xbutton = static_cast( HIWORD( key ) - 1 ); //should result in mouse4 as false, and mouse5 as true - m_pressed_keys[ pressed_xbutton ? KEYS_MOUSE5 : KEYS_MOUSE4 ] = true; - return true; - } - case XBUTTONUP: { - bool pressed_xbutton = static_cast( HIWORD( key ) - 1 ); //should result in mouse4 as false, and mouse5 as true - m_pressed_keys[ pressed_xbutton ? KEYS_MOUSE5 : KEYS_MOUSE4 ] = false; - return true; - } - case MOUSEWHEEL: { - short scroll_input = ( short )HIWORD( key ); - m_scroll_wheel_state = scroll_input > 0 ? 1 : -1; - return true; - } - } - - return key_event == 0x200 || key_event == 0x203 || key_event == 0x206 || key_event == 0x209; //gotta block WM_MOUSEFIST | WM_LBUTTONDBLCLK | WM_RBUTTONDBLCLK | WM_MBUTTONDBLCLK -} - -bool c_input_manager::is_key_pressed( int key ) { - auto k = key; - return is_valid_key( k ) && m_pressed_keys[ k ]; -} - -const char* c_input_manager::get_key_name( int key ) { - if ( !is_valid_key( key ) || key > KEYS_MAX ) - return key_names[ KEYS_NONE ]; - - return key_names[ key ]; -} - -const char* c_input_manager::get_short_name( int key ) { - return key_names_short[ is_valid_key( key ) ? key : KEYS_NONE ]; -} - -VirtualKeys_t c_input_manager::is_any_key_pressed( ) { - for ( size_t i{ }; i < KEYS_MAX; ++i ) { - if ( m_pressed_keys[ i ] ) { - return VirtualKeys_t( i ); - } - } - - return KEYS_NONE; -} - -int c_input_manager::get_scroll_state( ) { - int current_state = m_scroll_wheel_state; - m_scroll_wheel_state = 0; - return current_state; -} - -char c_input_manager::get_pressed_char( int* out ) { - size_t pressed_character{ }; - for ( size_t i{ }; i < KEYS_MAX; ++i ) { - if ( is_key_pressed( VirtualKeys_t( i ) ) ) { - if ( ( i >= KEYS_A && i <= KEYS_Z ) - || ( i >= KEYS_N0 && i <= KEYS_N9 ) ) { - pressed_character = i; - } - } - } - - if ( pressed_character ) { - if ( out ) { - *out = int( pressed_character ); - } - - if ( is_key_pressed( KEYS_SHIFT ) ) { - if ( pressed_character >= KEYS_A - && pressed_character <= KEYS_Z ) - return char( pressed_character ); - - //gay way to shift it to symbols - if ( pressed_character >= KEYS_N0 - && pressed_character <= KEYS_N9 ) { - switch ( pressed_character ) { - case KEYS_N0: - return ')'; - case KEYS_N1: - return '!'; - case KEYS_N2: - return '@'; - case KEYS_N3: - return '#'; - case KEYS_N4: - return '$'; - case KEYS_N5: - return '%'; - case KEYS_N6: - return '^'; - case KEYS_N7: - return '&'; - case KEYS_N8: - return '*'; - case KEYS_N9: - return '('; - } - } - } - else { - if ( pressed_character >= KEYS_A - && pressed_character <= KEYS_Z ) - return char( ::tolower( pressed_character ) ); - - if ( pressed_character >= KEYS_N0 - && pressed_character <= KEYS_N9 ) - return char( pressed_character ); - } - } - else if ( is_key_pressed( KEYS_SPACE ) ) { - if ( out ) - *out = KEYS_SPACE; - - return ' '; - } - else if ( is_key_pressed( KEYS_BACK ) ) { - if ( out ) - *out = KEYS_BACK; - - return 0; - } - - if ( out ) - *out = KEYS_NONE; - - return 0; -} - -END_REGION \ No newline at end of file diff --git a/tf2/input_system.hpp b/tf2/input_system.hpp deleted file mode 100644 index 6631a09..0000000 --- a/tf2/input_system.hpp +++ /dev/null @@ -1,185 +0,0 @@ -#pragma once -#include "util.hpp" - -enum VirtualKeyEvents_t { - KEYDOWN = 0x0100, - KEYUP = 0x0101, - SYSKEYDOWN = 0x104, - SYSKEYUP = 0x105, - LBUTTONDOWN = 0x0201, - LBUTTONUP = 0x0202, - RBUTTONDOWN = 0x0204, - RBUTTONUP = 0x0205, - MBUTTONDOWN = 0x0207, - MBUTTONUP = 0x0208, - MOUSEWHEEL = 0x020A, - XBUTTONDOWN = 0x020B, - XBUTTONUP = 0x020C, -}; - -enum VirtualKeys_t { - KEYS_NONE = 0, - KEYS_MOUSE1 = 0X01, - KEYS_MOUSE2 = 0X02, - KEYS_CANCEL = 0X03, - KEYS_MOUSE3 = 0X04, - KEYS_MOUSE4 = 0X05, - KEYS_MOUSE5 = 0X06, - KEYS_BACK = 0X08, - KEYS_TAB = 0X09, - KEYS_CLEAR = 0X0C, - KEYS_RETURN = 0X0D, - KEYS_SHIFT = 0X10, - KEYS_CONTROL = 0X11, - KEYS_ALT = 0X12, - KEYS_PAUSE = 0X13, - KEYS_CAPSLOCK = 0X14, - KEYS_ESCAPE = 0X1B, - KEYS_CONVERT = 0X1C, - KEYS_NONCONVERT = 0X1D, - KEYS_ACCEPT = 0X1E, - KEYS_MODECHANGE = 0X1F, - KEYS_SPACE = 0X20, - KEYS_PRIOR = 0X21, - KEYS_NEXT = 0X22, - KEYS_END = 0X23, - KEYS_HOME = 0X24, - KEYS_LEFT = 0X25, - KEYS_UP = 0X26, - KEYS_RIGHT = 0X27, - KEYS_DOWN = 0X28, - KEYS_SELECT = 0X29, - KEYS_PRINT = 0X2A, - KEYS_EXECUTE = 0X2B, - KEYS_SNAPSHOT = 0X2C, - KEYS_INSERT = 0X2D, - KEYS_DELETE = 0X2E, - KEYS_HELP = 0X2F, - KEYS_N0 = 0X30, - KEYS_N1 = 0X31, - KEYS_N2 = 0X32, - KEYS_N3 = 0X33, - KEYS_N4 = 0X34, - KEYS_N5 = 0X35, - KEYS_N6 = 0X36, - KEYS_N7 = 0X37, - KEYS_N8 = 0X38, - KEYS_N9 = 0X39, - KEYS_A = 0X41, - KEYS_B = 0X42, - KEYS_C = 0X43, - KEYS_D = 0X44, - KEYS_E = 0X45, - KEYS_F = 0X46, - KEYS_G = 0X47, - KEYS_H = 0X48, - KEYS_I = 0X49, - KEYS_J = 0X4A, - KEYS_K = 0X4B, - KEYS_L = 0X4C, - KEYS_M = 0X4D, - KEYS_N = 0X4E, - KEYS_O = 0X4F, - KEYS_P = 0X50, - KEYS_Q = 0X51, - KEYS_R = 0X52, - KEYS_S = 0X53, - KEYS_T = 0X54, - KEYS_U = 0X55, - KEYS_V = 0X56, - KEYS_W = 0X57, - KEYS_X = 0X58, - KEYS_Y = 0X59, - KEYS_Z = 0X5A, - KEYS_LEFTWINDOWS = 0X5B, - KEYS_RIGHTWINDOWS = 0X5C, - KEYS_APPLICATION = 0X5D, - KEYS_NUMPAD0 = 0X60, - KEYS_NUMPAD1 = 0X61, - KEYS_NUMPAD2 = 0X62, - KEYS_NUMPAD3 = 0X63, - KEYS_NUMPAD4 = 0X64, - KEYS_NUMPAD5 = 0X65, - KEYS_NUMPAD6 = 0X66, - KEYS_NUMPAD7 = 0X67, - KEYS_NUMPAD8 = 0X68, - KEYS_NUMPAD9 = 0X69, - KEYS_MULTIPLY = 0X6A, - KEYS_ADD = 0X6B, - KEYS_SEPARATOR = 0X6C, - KEYS_SUBTRACT = 0X6D, - KEYS_DECIMAL = 0X6E, - KEYS_DIVIDE = 0X6F, - KEYS_F1 = 0X70, - KEYS_F2 = 0X71, - KEYS_F3 = 0X72, - KEYS_F4 = 0X73, - KEYS_F5 = 0X74, - KEYS_F6 = 0X75, - KEYS_F7 = 0X76, - KEYS_F8 = 0X77, - KEYS_F9 = 0X78, - KEYS_F10 = 0X79, - KEYS_F11 = 0X7A, - KEYS_F12 = 0X7B, - KEYS_NUMLOCK = 0X90, - KEYS_SCROLLLOCK = 0X91, - KEYS_LEFTSHIFT = 0XA0, - KEYS_RIGHTSHIFT = 0XA1, - KEYS_LEFTCONTROL = 0XA2, - KEYS_RIGHTCONTROL = 0XA3, - KEYS_LEFTMENU = 0XA4, - KEYS_RIGHTMENU = 0XA5, - KEYS_PERIOD = 0xBE, - KEYS_MAX = 0XA6, - KEYS_LAST = 0xfe -}; - -namespace util -{ - class c_input_manager { - public: - bool m_pressed_keys[ KEYS_LAST ]{ }; - int m_mouse_pos[ 2 ]{ }; - int m_scroll_wheel_state{ }; - - - c_input_manager( ) { - memset( m_pressed_keys, 0, KEYS_LAST ); - } - - void capture_mouse_move( ulong_t lparam ); - - void clear_keys( ); - - //registers a key press from wndproc - bool register_key_press( int key_event, int key ); - - //checks if the key is pressed - bool is_key_pressed( int key ); - - //returns the first found key pressed, or KEY_NONE if none are - VirtualKeys_t is_any_key_pressed( ); - - //returns the last scroll state and resets it to 0 - int get_scroll_state( ); - - //returns the key's name - const char* get_key_name( int key ); - const char* get_short_name( int key ); - - //returns the first found currently pressed key - char get_pressed_char( int* pressed_key = nullptr ); - - //check if a key is valid - inline bool is_valid_key( int key ) { return key > KEYS_NONE && key < KEYS_LAST; } - - //get cursor pos - inline void get_cursor_pos( int& x, int& y ) { - x = m_mouse_pos[ 0 ]; - y = m_mouse_pos[ 1 ]; - } - }; -} - -extern util::c_input_manager g_input; \ No newline at end of file diff --git a/tf2/interfaces.cpp b/tf2/interfaces.cpp deleted file mode 100644 index 8ca7ff3..0000000 --- a/tf2/interfaces.cpp +++ /dev/null @@ -1,241 +0,0 @@ -#include "interfaces.h" -#include "console.hpp" -#include "hooks.h" -#include "renderer.hpp" -#include "pattern.hpp" -#include "base_cheat.h" -#include "settings.h" -#include "ctx.hpp" -#include "netvars.h" -#include - -tf2::client cl; -tf2::interfaces::c_interface_manager g_factory; - -bool tf2::create_interfaces( client *instance ) -{ - if ( !instance ) { - return false; - } - - - - auto d3d_device = pattern::first_code_match( GetModuleHandleA( xors( "shaderapidx9.dll" ) ), - xors( "A1 ?? ?? ?? ?? 50 8B 08 FF 51 0C" ) ) + 0x1; - - auto move_helper = pattern::first_code_match( GetModuleHandleA( xors( "client.dll" ) ), - xors( "8B 0D ?? ?? ?? ?? 8B 46 08 68" ) ) + 0x2; - - //sig to containing function: (+0x69) E9 ? ? ? ? CC 55 8B EC 5D - //auto beam_ptr = pattern::first_code_match( GetModuleHandleA( xors( "client.dll" ) ), xors( "" ) ); - - //g_con->print( "beam_found: 0x%08x\n", beam_ptr ); - - instance->create( &instance->m_d3d, **reinterpret_cast< uintptr_t** >( d3d_device ) ); - instance->create( &instance->m_movehelper, **reinterpret_cast< uintptr_t** >( move_helper ) ); - //instance->create( &instance->m_beams, *reinterpret_cast< uintptr_t* >( beam_ptr ) ); - - - /* - - - important - - issues: - - the background is white but so am i so really this isnt an issue - - THIS ENTIRE THING IS MESSY AND RIDDLED WITH SHIT COMMENTS AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - - chams - - fucking keyvalues - - glow count aint happy cbf looking into it - - menu goes invis because ????? gj menu - - too lazy to fix d3d - - emitsound hook is different - - aimbot is meh meh rn - - - lots of stuff not done that i want to get done, just wanna get it out there so i can keep working on it and not get harrased for the push - - - - - - */ - - //tf2::interfaces::interface_manager factory; - instance->create( &instance->m_chl, xors( "VClient" ) ); - instance->create( &instance->m_vgui, xors( "VEngineVGui" ) ); - instance->create( &instance->m_surface, xors( "VGUI_Surface" ) ); - instance->create( &instance->m_input, xors( "InputSystemVersion" ) ); - instance->create( &instance->m_panel, xors( "VGUI_Panel" ) ); - instance->create( &instance->m_engine, xors( "VEngineClient" ) ); - instance->create( &instance->m_entlist, xors( "VClientEntityList" ) ); - instance->create( &instance->m_prediction, xors( "VClientPrediction" ) ); - instance->create( &instance->m_cvar, xors( "VEngineCvar" ) ); - instance->create( &instance->m_movement, xors( "GameMovement" ) ); - instance->create( &instance->m_modelinfo, xors( "VModelInfoClient" ) ); - instance->create( &instance->m_overlay, "VDebugOverlay" ); - instance->create( &instance->m_trace, xors( "EngineTraceClient" ) ); - instance->create( &instance->m_model_render, xors( "VEngineModel" ) ); - instance->create( &instance->m_mat_system, xors( "VMaterialSystem" ) ); - instance->create( &instance->m_render_view, xors( "VEngineRenderView" ) ); - instance->create( &instance->m_engine_sound, xors( "IEngineSoundClient" ) ); - instance->create( &instance->m_event_mgr, xors( "GAMEEVENTSMANAGER002" ) ); - instance->create( &instance->m_string_table, xors( "VEngineClientStringTable" ) ); - instance->create( &instance->m_clientmode, **reinterpret_cast< uintptr_t** >( instance->m_chl->get_function( 10 ) + 5 ) ); - - instance->m_globals = *reinterpret_cast< CGlobalVarsBase** >( pattern::first_code_match( instance->m_engine.dll( ), "A1 ? ? ? ? 8B 11 68", 0x8 ) ); - - uintptr_t* input = *reinterpret_cast< uintptr_t** >( - instance->m_chl->get_old_function( 1 ) + 0x1 ); - instance->m_hl_input = reinterpret_cast< CInput* >( input ); - - auto kv_fn = ( void*( __cdecl* )( ) )( GetProcAddress( - GetModuleHandleA( xors( "vstdlib.dll" ) ), - xors( "KeyValuesSystem" ) ) ); - - instance->m_keyvalues = ( IKeyValuesSystem* )kv_fn( ); - instance->listeners.player_hurt.init( ); - - return true; -} - -con_fn clear_fn{ fnv( "clear" ), [ ]( const char*, const char* ) { g_con->m_logs.clear( ); }, "" }; -con_fn enable_logs_fn{ fnv( "log_enable" ), -[ ]( const char* a, const char* ) { - g_settings.menu.logs_enable ^= 1; - g_con->log( g_settings.menu.logs_enable ? xors( "logs enabled" ) : xors( "logs disabled" ) ); -}, -"" -}; - -con_fn fnv_fn{ fnv( "fnv" ), -[ ]( const char* a, const char* ) { - auto print = hash::fnv1a( a ); - g_con->log( "%08x", print ); -}, -"%S" -}; - -con_fn sum_fn{ fnv( "sum" ), -[ ]( const char* a, const char* syntax ) { - auto arg_1 = con_fn::get_arg< int >( a, 0, syntax ); - auto arg_2 = con_fn::get_arg< int >( a, 1, syntax ); - g_con->log( "%d + %d = %d", arg_1, arg_2, arg_1 + arg_2 ); -}, -"%D %D" -}; - -con_fn dump_cfg{ fnv( "dump_cfg" ), -[ ]( const char* , const char* ) { - for( auto& it : data::holder_.get_nodes( ) ) { - auto setting = static_cast< ISetting* >( it ); - g_con->log( "%08x: %s", setting->get_hash( ), setting->get_string( ).c_str( ) ); - } -}, -"" -}; - -con_fn retard_fn{ fnv( "retard" ), -[ ]( const char*, const char* ) { - g_con->log( "snuze" ); -}, -"" -}; - -con_fn unload_fn{ fnv( "unload" ), -[ ]( const char*, const char* ) { - cl.m_panic = true; - ExitProcess( 0 ); -}, -"" -}; - - -/*con_fn alias_fn{ fnv( "alias" ), -[ ]( const char* a, const char* b ) { -auto var_type = std::string( b ); -if( var_type.length( ) > 1 ) { -g_con->log( xors( "unknown var type: %s" ), var_type.c_str( ) ); -return; -} - -switch( b[ 0 ] ) { -case TYPE_STRING: { -std::shared_ptr< con_alias< const char* > >( fnv( ) ) -} -} -}, -"%S %S" -};*/ - -void tf2::client::initialize( ) { - //m_panic = true; - g_con->create( ); - auto now = std::chrono::high_resolution_clock::now( ); - g_con->print( xors( "hello\n" ) ); - //hi - //bye - - tf2::create_interfaces( &cl ); - g_fonts.initialize( ); - - g_netvars.init( ); - g_settings.load( ); - g_con->register_fn( &clear_fn ); - g_con->register_fn( &enable_logs_fn ); - g_con->register_fn( &fnv_fn ); - g_con->register_fn( &sum_fn ); - g_con->register_fn( &dump_cfg ); - g_con->register_fn( &retard_fn ); - g_con->register_fn( &unload_fn ); - - hooks::commit( &cl ); - - //g_cheat.chams.m_materials.initialize_materials( ); - - - auto offset = g_netvars.get_netvar( fnv( "DT_WeaponTFBaseGun" ), fnv( "m_fLastShotTime" ) ); - g_con->log( "lastshottime: %08x", offset ); - g_con->log( "prop: %08x", g_netvars.get_prop( fnv( "DT_WeaponTFBaseGun" ), fnv( "m_fLastShotTime" ) ) ); - - auto after = std::chrono::high_resolution_clock::now( ); - std::this_thread::sleep_for( std::chrono::milliseconds( 100 ) ); - - std::chrono::duration< float > delta = after - now; - g_con->log( xors( "cheat initialized\n" ) ); - g_con->log( xors( "time taken: %f\n" ), delta.count( ) ); - - - - m_panic = false; -} - -void tf2::client::uninitialize( ) { - m_panic = true; - g_con->destroy( ); - - //restore wndproc - if( hooks::window_procedure_o ) { - SetWindowLongA( m_hwnd, GWLP_WNDPROC, ( long )hooks::window_procedure_o ); - } - - //unreference materials - //g_cheat.chams.m_materials.destroy_materials( ); - - //restore all interfaces - restore( ); - - Sleep( 100 ); - - //free the library - FreeLibraryAndExitThread( g_dll, 0 ); -} \ No newline at end of file diff --git a/tf2/interfaces.h b/tf2/interfaces.h deleted file mode 100644 index 96e3be1..0000000 --- a/tf2/interfaces.h +++ /dev/null @@ -1,160 +0,0 @@ -#pragma once - -#include -#include "sdk.h" -#include "vmt.h" -#include "ctx.hpp" -#include "listener.hpp" -#include "factory.h" -struct IDirect3DDevice9; -namespace tf2 -{ -template < typename t > -class interface_base { - friend class client; -public: - t* operator( )( ) { - return m_interface; - } - - //calls a virtual - template< size_t index, typename ret = void, - class... Args > - ret call( Args... args ) { - return util::get_vfunc< ret( __thiscall* )( void*, Args... ) > - ( m_interface, index )( m_interface, args... ); - } - - //also calls a virtual but you supply the typedef instead of return type - template< typename def, size_t index, class... Args > - auto call( Args... args ) { - return util::get_vfunc< def > - ( m_interface, index )( m_interface, args... ); - } - - //allows you to cast the interface - template< typename t0 = t* > - t0 get( ) { - return ( t0 )m_interface; - } - - void operator( )( t* ptr ) { - m_interface = ptr; - m_hook.reset( ); - m_hook = std::make_shared< hooks::c_vmt >( static_cast< void* >( ptr ) ); - - /*find the module the interface is located in - i know i could just pass the pointer but traps are gay*/ - MEMORY_BASIC_INFORMATION info; - VirtualQuery( ptr, &info, sizeof( MEMORY_BASIC_INFORMATION ) ); - - m_dll = static_cast< HMODULE >( info.AllocationBase ); - } - - void operator( )( void* ptr ) { - operator( )( static_cast< t* >( ptr ) ); - } - - decltype( auto ) operator->( ) { - return m_hook; - } - - template< typename t2 = decltype( m_dll ) > - t2 dll( ) { - return ( t2 )m_dll; - } - -protected: - t* m_interface; - HMODULE m_dll; - std::shared_ptr< hooks::c_vmt > m_hook; -}; - - - class client { - public: - interface_base< IEngineVGui > m_vgui; - interface_base< IClientMode > m_clientmode; - interface_base< IEngineTrace > m_trace; - interface_base< IVEngineClient > m_engine; - interface_base< IInputSystem > m_input; - interface_base< chl_client > m_chl; - interface_base< IVDebugOverlay > m_overlay; - interface_base< client_ent_list > m_entlist; - interface_base< IPlayerInfoManager > m_playerinfo; - interface_base< ISurface > m_surface; - interface_base< IPanel > m_panel; - interface_base< ICVar > m_cvar; - interface_base< IVRenderView > m_renderview; - interface_base< IPrediction > m_prediction; - interface_base< IGameMovement > m_movement; - interface_base< IVModelInfo > m_modelinfo; - interface_base< uintptr_t > m_d3d; - interface_base< IVModelRender > m_model_render; - interface_base< IVRenderView > m_render_view; - interface_base< uintptr_t > m_engine_sound; - interface_base< IGameEventManager2 > m_event_mgr; - interface_base< IMaterialSystem > m_mat_system; - interface_base< CStringTable > m_string_table; - interface_base< IViewRenderBeams > m_beams; - IKeyValuesSystem* m_keyvalues; - CGlobalVarsBase* m_globals; - IMoveHelper* m_movehelper; - CInput* m_hl_input; - bool m_panic; - HWND m_hwnd{ }; - float m_frametime; - - struct { - generic_listener_t player_hurt{ xors( "player_hurt" ), &listeners::player_hurt }; - } listeners; - - public: - //find the interface inside of the module - void create( void* iface, const std::string& name, const std::string& mod ) { - auto* interface_ = static_cast< interface_base< uintptr_t >* >( iface ); - auto ptr = g_factory.find_interface( mod, name ); - if( !ptr ) - return; - - ( *interface_ )( ptr ); - m_container.push_back( interface_ ); - } - - void create( void* iface, uintptr_t pointer ) { - auto interface_ = static_cast< interface_base< uintptr_t >* >( iface ); - - //msvc is retarded - ( *interface_ )( ( void* )pointer ); - m_container.push_back( interface_ ); - } - - void create( void* iface, const std::string& name ) { - auto* interface_ = static_cast< interface_base< uintptr_t >* >( iface ); - auto ptr = g_factory.find_interface( name ); - if( !ptr ) - return; - - ( *interface_ )( ptr ); - m_container.push_back( interface_ ); - } - - void __cdecl initialize( ); - void __cdecl uninitialize( ); - - private: - //restore the vmts to their original - void restore( ) { - for( const auto& it : m_container ) { - it->m_hook->restore( ); - } - } - - private: - std::vector< interface_base< uintptr_t >* > m_container; - }; - - bool create_interfaces( client * ); -} - -extern tf2::client cl; diff --git a/tf2/listener.cpp b/tf2/listener.cpp deleted file mode 100644 index c48b900..0000000 --- a/tf2/listener.cpp +++ /dev/null @@ -1,42 +0,0 @@ -#include "listener.hpp" -#include "interfaces.h" -#include "base_cheat.h" -#include "ctx.hpp" -#include "settings.h" -#undef PlaySound - -//how can you listen if youre deaf - -generic_listener_t::generic_listener_t( const char* name, void( *function )( IGameEvent* ) ) : - m_function( function ), m_name( name ) { } - -generic_listener_t::~generic_listener_t( ) { - if( m_registered ) - cl.m_event_mgr( )->RemoveListener( this ); - -} - -void generic_listener_t::init( ) { - cl.m_event_mgr( )->AddListener( this, m_name, false ); - m_registered = true; -} - -namespace listeners -{ - - void player_hurt( IGameEvent* e ) { - if( !cl.m_panic && e ) { - int user_id = e->GetInt( xors( "userid" ) ); - int attacker = e->GetInt( xors( "attacker" ) ); - int attacker_id = cl.m_engine( )->GetPlayerForUserID( attacker ); - int player_id = cl.m_engine( )->GetPlayerForUserID( user_id ); - - - //if( attacker_id == cl.m_engine( )->GetLocalPlayer( ) && user_id != attacker_id ) { - g_cheat.visuals.store_hit( ); - - //} - } - } - -} \ No newline at end of file diff --git a/tf2/listener.hpp b/tf2/listener.hpp deleted file mode 100644 index 1ee442f..0000000 --- a/tf2/listener.hpp +++ /dev/null @@ -1,24 +0,0 @@ -#pragma once -#include "sdk.h" - -struct generic_listener_t : public IGameEventListener2 { - generic_listener_t( const char* event_name, - void( *function )( IGameEvent* ) ); - - generic_listener_t( ) = default; - - ~generic_listener_t( ); - - void init( ); - - void FireGameEvent( IGameEvent* event ) override { m_function( event ); } - int GetEventDebugID( ) override { return 0x2a; } -private: - void( *m_function )( IGameEvent* ); - const char* m_name{ }; - bool m_registered{ }; -}; - -namespace listeners { - extern void player_hurt( IGameEvent* e ); -} \ No newline at end of file diff --git a/tf2/math.cpp b/tf2/math.cpp deleted file mode 100644 index e3e7436..0000000 --- a/tf2/math.cpp +++ /dev/null @@ -1,267 +0,0 @@ -#include -#include "math.h" -#include "interfaces.h" - -using _m128 = __m128; - -namespace math -{ - uint32_t md5_pseudorandom( uint32_t seed ) { - using fn = uint32_t( __thiscall * )( uint32_t seed ); - - static auto func = pattern::first_code_match< fn >( cl.m_chl.dll( ), xors( "55 8B EC 83 E4 F8 83 EC 70 6A 58" ) ); - if( !func ) { - return 0; - } - - return func( seed ); - } - - static const __declspec( align( 16 ) ) uint32_t g_simd_component_mask[ 4 ][ 4 ] = { - { 0xFFFFFFFF, 0, 0, 0 }, - { 0, 0xFFFFFFFF, 0, 0 }, - { 0, 0, 0xFFFFFFFF, 0 }, - { 0, 0, 0, 0xFFFFFFFF } - }; - - void concat_transforms( const matrix3x4& in, const matrix3x4& in2, matrix3x4& out ) { - //SSE concat transforms - turbo mode engaged - - _m128 last_mask = *( _m128* )( &g_simd_component_mask[ 3 ] ); - _m128 row_a0 = _mm_loadu_ps( in[ 0 ] ); - _m128 row_a1 = _mm_loadu_ps( in[ 1 ] ); - _m128 row_a2 = _mm_loadu_ps( in[ 2 ] ); - - _m128 row_b0 = _mm_loadu_ps( in2[ 0 ] ); - _m128 row_b1 = _mm_loadu_ps( in2[ 1 ] ); - _m128 row_b2 = _mm_loadu_ps( in2[ 2 ] ); - - _m128 a0 = _mm_shuffle_ps( row_a0, row_a0, _MM_SHUFFLE( 0, 0, 0, 0 ) ); - _m128 a1 = _mm_shuffle_ps( row_a0, row_a0, _MM_SHUFFLE( 1, 1, 1, 1 ) ); - _m128 a2 = _mm_shuffle_ps( row_a0, row_a0, _MM_SHUFFLE( 2, 2, 2, 2 ) ); - - _m128 mul00 = _mm_mul_ps( a0, row_b0 ); - _m128 mul01 = _mm_mul_ps( a1, row_b1 ); - _m128 mul02 = _mm_mul_ps( a2, row_b2 ); - _m128 out0 = _mm_add_ps( mul00, _mm_add_ps( mul01, mul02 ) ); - - a0 = _mm_shuffle_ps( row_a2, row_a2, _MM_SHUFFLE( 0, 0, 0, 0 ) ); - a1 = _mm_shuffle_ps( row_a2, row_a2, _MM_SHUFFLE( 1, 1, 1, 1 ) ); - a2 = _mm_shuffle_ps( row_a2, row_a2, _MM_SHUFFLE( 2, 2, 2, 2 ) ); - - _m128 mul10 = _mm_mul_ps( a0, row_b0 ); - _m128 mul11 = _mm_mul_ps( a1, row_b1 ); - _m128 mul12 = _mm_mul_ps( a2, row_b2 ); - _m128 out1 = _mm_add_ps( mul10, _mm_add_ps( mul11, mul12 ) ); - - a0 = _mm_shuffle_ps( row_a2, row_a2, _MM_SHUFFLE( 0, 0, 0, 0 ) ); - a1 = _mm_shuffle_ps( row_a2, row_a2, _MM_SHUFFLE( 1, 1, 1, 1 ) ); - a2 = _mm_shuffle_ps( row_a2, row_a2, _MM_SHUFFLE( 2, 2, 2, 2 ) ); - - _m128 mul20 = _mm_mul_ps( a0, row_b0 ); - _m128 mul21 = _mm_mul_ps( a0, row_b1 ); - _m128 mul22 = _mm_mul_ps( a0, row_b2 ); - _m128 out2 = _mm_add_ps( mul20, _mm_add_ps( mul21, mul22 ) ); - - a0 = _mm_and_ps( row_a0, last_mask ); - a1 = _mm_and_ps( row_a1, last_mask ); - a2 = _mm_and_ps( row_a2, last_mask ); - - out0 = _mm_add_ps( out0, a0 ); - out1 = _mm_add_ps( out1, a1 ); - out2 = _mm_add_ps( out2, a2 ); - - *( _m128* )( out[ 0 ] ) = out0; - *( _m128* )( out[ 1 ] ) = out1; - *( _m128* )( out[ 2 ] ) = out2; - } - - void math::set_matrix_position( vec3_t pos, matrix3x4& matrix ) { - for( size_t i{ }; i < 3; ++i ) { - matrix[ i ][ 3 ] = pos[ i ]; - } - } - - vec3_t math::get_matrix_position( const matrix3x4& src ) { - return vec3_t( src[ 0 ][ 3 ], src[ 1 ][ 3 ], src[ 2 ][ 3 ] ); - } - - void angle_matrix( vec3_t angles, matrix3x4& matrix ) { - float sr, sp, sy, cr, cp, cy; - - sp = sinf( angles.x * M_PIRAD ); - cp = cosf( angles.x * M_PIRAD ); - sy = sinf( angles.y * M_PIRAD ); - cy = cosf( angles.y * M_PIRAD ); - sr = sinf( angles.z * M_PIRAD ); - cr = cosf( angles.z * M_PIRAD ); - - matrix[ 0 ][ 0 ] = cp * cy; - matrix[ 1 ][ 0 ] = cp * sy; - matrix[ 2 ][ 0 ] = -sp; - - float crcy = cr * cy; - float crsy = cr * sy; - float srcy = sr * cy; - float srsy = sr * sy; - matrix[ 0 ][ 1 ] = sp * srcy - crsy; - matrix[ 1 ][ 1 ] = sp * srsy + crcy; - matrix[ 2 ][ 1 ] = sr * cp; - - matrix[ 0 ][ 2 ] = ( sp*crcy + srsy ); - matrix[ 1 ][ 2 ] = ( sp*crsy - srcy ); - matrix[ 2 ][ 2 ] = cr * cp; - - matrix[ 0 ][ 3 ] = 0.f; - matrix[ 1 ][ 3 ] = 0.f; - matrix[ 2 ][ 3 ] = 0.f; - } - - void angle_imatrix( vec3_t angles, matrix3x4& matrix ) { - float sr, sp, sy, cr, cp, cy; - - sp = sinf( angles.x * M_PIRAD ); - cp = cosf( angles.x * M_PIRAD ); - sy = sinf( angles.y * M_PIRAD ); - cy = cosf( angles.y * M_PIRAD ); - sr = sinf( angles.z * M_PIRAD ); - cr = cosf( angles.z * M_PIRAD ); - - matrix[ 0 ][ 0 ] = cp * cy; - matrix[ 0 ][ 1 ] = cp * sy; - matrix[ 0 ][ 2 ] = -sp; - matrix[ 1 ][ 0 ] = sr * sp*cy + cr * -sy; - matrix[ 1 ][ 1 ] = sr * sp*sy + cr * cy; - matrix[ 1 ][ 2 ] = sr * cp; - matrix[ 2 ][ 0 ] = ( cr*sp*cy + -sr * -sy ); - matrix[ 2 ][ 1 ] = ( cr*sp*sy + -sr * cy ); - matrix[ 2 ][ 2 ] = cr * cp; - matrix[ 0 ][ 3 ] = 0.f; - matrix[ 1 ][ 3 ] = 0.f; - matrix[ 2 ][ 3 ] = 0.f; - } - - void angle_matrix( vec3_t angles, matrix3x4& matrix, vec3_t origin ) { - angle_matrix( angles, matrix ); - set_matrix_position( origin, matrix ); - } - - vec3_t matrix_angles( const matrix3x4& matrix ) { - //thx strackoverflow - vec3_t angles; - float forward[ 3 ]; - float left[ 3 ]; - float up[ 3 ]; - - forward[ 0 ] = matrix[ 0 ][ 0 ]; - forward[ 1 ] = matrix[ 1 ][ 0 ]; - forward[ 2 ] = matrix[ 2 ][ 0 ]; - left[ 0 ] = matrix[ 0 ][ 1 ]; - left[ 1 ] = matrix[ 1 ][ 1 ]; - left[ 2 ] = matrix[ 2 ][ 1 ]; - up[ 2 ] = matrix[ 2 ][ 2 ]; - - float xy_dist = sqrtf( forward[ 0 ] * forward[ 0 ] + forward[ 1 ] * forward[ 1 ] ); - - if( xy_dist > 0.001f ) { - angles.y = RAD2DEG( atan2f( forward[ 1 ], forward[ 0 ] ) ); - angles.x = RAD2DEG( atan2f( -forward[ 2 ], xy_dist ) ); - angles.z = RAD2DEG( atan2f( left[ 2 ], up[ 2 ] ) ); - } - else { - angles.y = RAD2DEG( atan2f( -left[ 0 ], left[ 1 ] ) ); - angles.x = RAD2DEG( atan2f( -forward[ 2 ], xy_dist ) ); - - angles.z = 0; - } - - return angles; - } - - void rotate_matrix( vec3_t angles, vec3_t origin, float degrees, matrix3x4& matrix ) { - angles.y += degrees; - angles.clamp( ); - - vec3_t rotated( 0, degrees, 0 ); - matrix3x4 rotated_matrix; - angle_matrix( rotated, rotated_matrix ); - - vec3_t delta = get_matrix_position( matrix ) - origin; - vec3_t out = vector_transform( delta, rotated_matrix ); - - matrix3x4 bone_rotation, matrix_out; - memcpy( &bone_rotation, &matrix, sizeof( matrix3x4 ) ); - - set_matrix_position( vec3_t( ), bone_rotation ); - concat_transforms( rotated_matrix, bone_rotation, matrix_out ); - auto angles_out = matrix_angles( matrix_out ); - angle_matrix( angles_out, matrix, out ); - } - - float __vectorcall dist_segment_to_segment( vec3_t s1, vec3_t s2, vec3_t k1, vec3_t k2 ) { - vec3_t u = s2 - s1; - vec3_t v = k2 - k1; - vec3_t w = s1 - k1; - float a = u.dot( u ); - float b = u.dot( v ); - float c = v.dot( v ); - float d = u.dot( w ); - float e = v.dot( w ); - float D = a * c - b * b; - float sc, sN, sD = D; - float tc, tN, tD = D; - - if( D < SMALL_NUM ) { - sN = 0.0f; - sD = 1.0f; - tN = e; - tD = c; - } - else { - sN = ( b*e - c * d ); - tN = ( a*e - b * d ); - if( sN < 0.0f ) { - sN = 0.0f; - tN = e; - tD = c; - } - else if( sN > sD ) { - sN = sD; - tN = e + b; - tD = c; - } - } - - if( tN < 0.0f ) { - tN = 0.0; - - if( -d < 0.0f ) - sN = 0.0; - else if( -d > a ) - sN = sD; - else { - sN = -d; - sD = a; - } - } - else if( tN > tD ) { - tN = tD; - - if( ( -d + b ) < 0.0f ) - sN = 0; - else if( ( -d + b ) > a ) - sN = sD; - else { - sN = ( -d + b ); - sD = a; - } - } - - sc = ( abs( sN ) < SMALL_NUM ? 0.0f : sN / sD ); - tc = ( abs( tN ) < SMALL_NUM ? 0.0f : tN / tD ); - - vec3_t dP = w + ( u * sc ) - ( v * tc ); - - return dP.length( ); - } -} \ No newline at end of file diff --git a/tf2/math.h b/tf2/math.h deleted file mode 100644 index c5a107f..0000000 --- a/tf2/math.h +++ /dev/null @@ -1,157 +0,0 @@ -#pragma once -#include -#include "util.hpp" -#include "pattern.hpp" -#include "sdk.h" - -static constexpr long double M_PI = 3.14159265358979323846f; -static constexpr long double M_RADPI = 57.295779513082f; -static constexpr long double M_PIRAD = 0.01745329251f; -static constexpr float SMALL_NUM = 0.00000001f; -static constexpr float M_PI_F = ( ( float )( M_PI ) ); -__forceinline float RAD2DEG( float x ) { return( ( float )( x ) * ( float )( 180.f / M_PI_F ) ); } -__forceinline float DEG2RAD( float x ) { return( ( float )( x ) * ( float )( M_PI_F / 180.f ) ); } - -namespace { - //make a random generator and seed it with a p random number - static std::random_device rd; - static std::mt19937 gen( rd( ) ); -} - -NAMESPACE_REGION( math ) - -#undef min -#undef max - -template < typename t > -t min( const t& t1, const t& t2 ) { - return t1 < t2 ? t1 : t2; -} - -template < typename t, typename... ts_ > -t min( const t& t1, const t& t2, ts_&&... ts ) { - return t1 < t2 ? - min( t1, std::forward< ts_ >( ts )... ) : - min( t2, std::forward< ts_ >( ts )... ); -} - -template < typename t > -t max( const t& t1, const t& t2 ) { - return t1 > t2 ? t1 : t2; -} - -template < typename t, typename... ts_ > -t max( const t& t1, const t& t2, ts_&&... ts ) { - return t1 > t2 ? - max( t1, std::forward< ts_ >( ts )... ) : - max( t2, std::forward< ts_ >( ts )... ); -} - -// todo - dex; make 2 random generator funcs here, this one only works for floats normally - -template < typename t > -__forceinline t random_number( t min, t max ) { - if constexpr( !std::is_integral_v< t > ) { - std::uniform_real_distribution< t > dist( min, max ); - return dist( gen ); - } - else { - std::uniform_int_distribution< t > dist( min, max ); - return dist( gen ); - } -} - -__forceinline vec3_t get_rotated_pos( vec3_t start, float rotation, float distance ) { - float rad = DEG2RAD( rotation ); - start.x += cos( rad ) * distance; - start.y += sin( rad ) * distance; - - return start; -} - -__forceinline vec3_t vector_angles( const vec3_t& start, const vec3_t& end ) { - vec3_t delta = end - start; - - float magnitude = sqrtf( delta.x * delta.x + delta.y * delta.y ); - float pitch = atan2f( -delta.z, magnitude ) * M_RADPI; - float yaw = atan2f( delta.y, delta.x ) * M_RADPI; - - vec3_t angle( pitch, yaw, 0.0f ); - return angle.clamp( ); -} - - -__forceinline vec3_t vector_angles( const vec3_t& v ) { - float magnitude = sqrtf( v.x * v.x + v.y * v.y ); - float pitch = atan2f( -v.z, magnitude ) * M_RADPI; - float yaw = atan2f( v.y, v.x ) * M_RADPI; - - vec3_t angle( pitch, yaw, 0.0f ); - return angle; -} - -__forceinline vec3_t angle_vectors( const vec3_t& angles ) { - float sp, sy, cp, cy; - sp = sinf( angles.x * M_PIRAD ); - cp = cosf( angles.x * M_PIRAD ); - sy = sinf( angles.y * M_PIRAD ); - cy = cosf( angles.y * M_PIRAD ); - - return vec3_t{ cp * cy, cp * sy, -sp }; -} - -__forceinline void angle_vectors( const vec3_t& angles, vec3_t* forward, vec3_t* right, vec3_t* up ) { - float sr, sp, sy, cr, cp, cy; - - sp = sinf( angles.x * M_PIRAD ); - cp = cosf( angles.x * M_PIRAD ); - sy = sinf( angles.y * M_PIRAD ); - cy = cosf( angles.y * M_PIRAD ); - sr = sinf( angles.z * M_PIRAD ); - cr = cosf( angles.z * M_PIRAD ); - - if( forward ) { - forward->x = cp * cy; - forward->y = cp * sy; - forward->z = -sp; - } - - if( right ) { - right->x = -1 * sr * sp * cy + -1 * cr * -sy; - right->y = -1 * sr * sp * sy + -1 * cr * cy; - right->z = -1 * sr * cp; - } - - if( up ) { - up->x = cr * sp * cy + -sr * -sy; - up->y = cr * sp * sy + -sr * cy; - up->z = cr * cp; - } -} - -__forceinline float find_closest_step( float angle, float step ) { - int steps = ( int )( angle / step + 0.5f ); - - return steps * step; -} - -__forceinline vec3_t vector_transform( const vec3_t& in, const matrix3x4& matrix ) { - vec3_t out; - for( int i{ }; i < 3; i++ ) - out[ i ] = in.dot( ( const vec3_t& )matrix[ i ] ) + matrix[ i ][ 3 ]; - - return out; -} - -extern void concat_transforms( const matrix3x4& in, const matrix3x4& in2, matrix3x4& out ); -extern void rotate_matrix( vec3_t angles, vec3_t origin, float degrees, matrix3x4& matrix ); -extern void set_matrix_position( vec3_t pos, matrix3x4& src ); -extern vec3_t get_matrix_position( const matrix3x4& pos ); -extern vec3_t matrix_angles( const matrix3x4& matrix ); -extern void angle_matrix( vec3_t angles, matrix3x4& matrix, vec3_t origin ); -extern void angle_imatrix( vec3_t angles, matrix3x4& matrix ); -extern void angle_matrix( vec3_t angles, matrix3x4& matrix ); -extern uint32_t md5_pseudorandom( uint32_t seed ); -extern float __vectorcall dist_segment_to_segment( vec3_t s1, vec3_t s2, vec3_t k1, vec3_t k2 ); - -END_REGION \ No newline at end of file diff --git a/tf2/mem.hpp b/tf2/mem.hpp deleted file mode 100644 index 22e8fbf..0000000 --- a/tf2/mem.hpp +++ /dev/null @@ -1,66 +0,0 @@ -#pragma once -#include -#include "util.hpp" - -#define get_baseptr( ) ( ( uintptr_t )( _AddressOfReturnAddress( ) ) - sizeof( uintptr_t ) ) - -class stack_t { - uintptr_t m_ptr; - -public: - __forceinline stack_t( ) : m_ptr( get_baseptr( ) ) { } - - __forceinline stack_t( uintptr_t ptr ) : m_ptr( ptr ) { } - - template < typename t = uintptr_t > - __forceinline t get( ) { - return ( t )m_ptr; - } - - template < typename t = uintptr_t > - __forceinline t return_address( ) { - return *( t* )( m_ptr + sizeof( void* ) ); - } - - template < typename t = uintptr_t > - __forceinline t address_of_return_address( ) { - return ( t )( m_ptr + sizeof( uintptr_t ) ); - } - - __forceinline stack_t& next( ) { - return *( stack_t* )( m_ptr ); - } - - template < typename t = uintptr_t > - __forceinline t local( size_t at ) { - return ( t )( m_ptr - at ); - } - - template < typename t = uintptr_t > - __forceinline t arg( size_t at ) { - return ( t )( m_ptr + at ); - } -}; - -namespace util { - template < typename t = uint8_t > - __forceinline t* memcpy( t* dst, t* src, size_t size = sizeof( t ) ) { - __movsb( - ( uint8_t* )dst, - ( uint8_t* )src, - size - ); - - return dst; - } - - __forceinline void* memset( uint8_t* dst, uint8_t val, size_t size ) { - __stosb( - dst, - val, - size - ); - - return dst; - } -} \ No newline at end of file diff --git a/tf2/movement.cpp b/tf2/movement.cpp deleted file mode 100644 index e1dd335..0000000 --- a/tf2/movement.cpp +++ /dev/null @@ -1,41 +0,0 @@ -#include "movement.h" -#include "interfaces.h" -#include "settings.h" - -namespace features { - void c_movement::bhop( ) { - if( !g_settings.misc.bunny_hop ) - return; - - if( g_ctx.m_local->m_nMoveType( ) == MOVETYPE_LADDER || - g_ctx.m_local->m_nMoveType( ) == MOVETYPE_NOCLIP ) - return; - - //jump like you nohat -> WELL THERES FUCKING HATS IN THIS GAME ISNT THERE CUNT - if( m_cmd->m_buttons & IN_JUMP && !( g_ctx.m_local->m_fFlags( ) & FL_ONGROUND ) ) { - m_cmd->m_buttons &= ~IN_JUMP; - } - } - - - //ehhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh lazy - void c_movement::autostrafe( ) { - if( !g_settings.misc.auto_strafe ) - return; - - float velocity = g_ctx.m_local->m_vecVelocity( ).length2d( ); - auto cmd = g_ctx.get_last_cmd( ); - - if( cmd && m_cmd->m_buttons & IN_JUMP && velocity > 1.0f ) { - if( !cmd->m_forwardmove && !cmd->m_sidemove ) { - if( !cmd->m_mousedx ) { - cmd->m_forwardmove = std::min< float >( 450.f, 5850.f / velocity ); - cmd->m_sidemove = ( m_cmd->m_cmd_nr % 2 ) == 0 ? -450.f : 450.f; - } - else { - cmd->m_sidemove = m_cmd->m_mousedx < 0.f ? -450.f : 450.f; - } - } - } - } -} diff --git a/tf2/movement.h b/tf2/movement.h deleted file mode 100644 index d32fb2b..0000000 --- a/tf2/movement.h +++ /dev/null @@ -1,19 +0,0 @@ -#pragma once -#include "sdk.h" - -namespace features { - class c_movement { - public: - void update( user_cmd_t* cmd ) { - if ( !cmd ) return; - m_cmd = cmd; - - bhop( ); - } - - private: - void bhop( ); - void autostrafe( ); - user_cmd_t* m_cmd; - }; -} \ No newline at end of file diff --git a/tf2/netvar_proxy.hpp b/tf2/netvar_proxy.hpp deleted file mode 100644 index ea18a4d..0000000 --- a/tf2/netvar_proxy.hpp +++ /dev/null @@ -1,37 +0,0 @@ -#pragma once -#include "dt_recv.h" - -//dont leave things out of namespaces -namespace hooks -{ - class c_netvar_proxy { - public: - c_netvar_proxy( RecvProp* target_property, RecvVarProxyFn new_proxy ) { - m_target = target_property; - m_original = target_property->m_ProxyFn; - m_target->m_ProxyFn = new_proxy; - } - - c_netvar_proxy( ) = default; - - void init( RecvProp* target, RecvVarProxyFn new_proxy ) { - m_target = target; - m_original = target->m_ProxyFn; - m_target->m_ProxyFn = new_proxy; - } - - ~c_netvar_proxy( ) { - if( !m_target ) return; - m_target->m_ProxyFn = m_original; - } - - RecvVarProxyFn get_old_function( ) const { - return m_original; - } - - private: - //overcomplicated... - RecvProp * m_target; - RecvVarProxyFn m_original; - }; -} \ No newline at end of file diff --git a/tf2/netvars.cpp b/tf2/netvars.cpp deleted file mode 100644 index 2a064bd..0000000 --- a/tf2/netvars.cpp +++ /dev/null @@ -1,93 +0,0 @@ -#include "netvars.h" -#include "interfaces.h" - -tf2::c_netvars g_netvars; - -NAMESPACE_REGION( tf2 ) - -void c_netvars::init( ) { - for( auto client_class = cl.m_chl( )->GetAllClasses( ); - !!client_class; - client_class = client_class->m_next - ) { - auto table = client_class->m_rt_table; - m_tables.push_back( table ); - } -} - -RecvTable* c_netvars::get_table( hash_t hash ) const { - if( m_tables.empty( ) ) return nullptr; - - for( auto& table : m_tables ) { - if( !table ) continue; - - if( hash == hash::fnv1a( table->m_pNetTableName ) ) { - return table; - } - } - - return nullptr; -} - -//iterating this too much results in a stack overflow, so thats cool -RecvProp* c_netvars::get_prop( hash_t data, hash_t name ) const { - RecvProp* prop{ }; - RecvTable* child{ }; - - auto table = get_table( data ); - if( !table ) return nullptr; - - for( int i{ }; i < table->m_nProps; ++i ) { - prop = &table->m_pProps[ i ]; - child = prop->GetDataTable( ); - - if( child && child->m_nProps ) { - auto tmp = get_prop( hash::fnv1a( child->m_pNetTableName ), name ); - if( tmp ) return tmp; - } - - if( name != hash::fnv1a( prop->m_pVarName ) ) - continue; - - return prop; - } - - return nullptr; -} - -std::ptrdiff_t c_netvars::get_entry( hash_t name, RecvTable* table ) const { - std::ptrdiff_t ret{ }; - RecvProp* prop; - RecvTable* child; - - for( int i{ }; i < table->m_nProps; ++i ) { - prop = &table->m_pProps[ i ]; - child = prop->GetDataTable( ); - - if( child && child->m_nProps ) { - auto tmp = get_entry( name, child ); - if( tmp ) ret += prop->GetOffset( ) + tmp; - } - - if( name != hash::fnv1a( prop->m_pVarName ) ) - continue; - - return prop->GetOffset( ) + ret; - } - - return ret; -} - -std::ptrdiff_t c_netvars::get_netvar( hash_t data, hash_t name ) const { - std::ptrdiff_t ret{ }; - auto table = get_table( data ); - if( !table ) return 0; - - ret = get_entry( name, table ); -#ifdef DEBUG - printf( "%s:\t\t 0x%05x\n", name.c_str( ), ret ); -#endif - return ret; -} - -END_REGION \ No newline at end of file diff --git a/tf2/netvars.h b/tf2/netvars.h deleted file mode 100644 index 54b92be..0000000 --- a/tf2/netvars.h +++ /dev/null @@ -1,44 +0,0 @@ -#pragma once -#include - -#include "dt_recv.h" -#include "util.hpp" -#include "fnv.hpp" - -class RecvTable; - -#define NETVAR( funcname, name, table, extra, type ) \ -__forceinline auto& funcname( ) { \ - static std::ptrdiff_t offset = g_netvars.get_netvar( fnv( table ), fnv( name ) ); \ - return get< type >( offset + extra ); \ -} - -#define PNETVAR( funcname, name, table, extra, type ) \ -__forceinline type* funcname( ) { \ - static std::ptrdiff_t offset = g_netvars.get_netvar( fnv( table ), fnv( name ) ); \ - return reinterpret_cast< type* >( uintptr_t( this ) + offset + extra ); \ -} - -#define OFFSET( funcname, offset, type ) \ -__forceinline auto& funcname( ) { \ - return get< type >( offset ); \ -} - -NAMESPACE_REGION( tf2 ) - -class c_netvars { -public: - void init( ); - //search through the netvar list - std::ptrdiff_t get_netvar( hash_t table, hash_t hash ) const; - RecvProp* get_prop( hash_t table, hash_t name ) const; -public: - std::ptrdiff_t get_entry( hash_t hash, RecvTable* table ) const; - RecvTable* get_table( hash_t hash ) const; -private: - std::vector< RecvTable* > m_tables; -}; - -END_REGION - -extern tf2::c_netvars g_netvars; \ No newline at end of file diff --git a/tf2/on_screen_size_changed.cpp b/tf2/on_screen_size_changed.cpp deleted file mode 100644 index 580e2db..0000000 --- a/tf2/on_screen_size_changed.cpp +++ /dev/null @@ -1,9 +0,0 @@ -#include "hooks.h" - -void __fastcall hooks::on_screen_size_changed( void* ecx_, void* edx_, int old_w, int old_h ) { - static auto old_fn = cl.m_surface->get_old_function< decltype( &hooks::on_screen_size_changed ) >( 116 ); - - old_fn( ecx_, nullptr, old_w, old_h ); - - g_fonts.initialize( ); -} \ No newline at end of file diff --git a/tf2/override_mouse_input.cpp b/tf2/override_mouse_input.cpp deleted file mode 100644 index d3a4b9b..0000000 --- a/tf2/override_mouse_input.cpp +++ /dev/null @@ -1,14 +0,0 @@ -#include "hooks.h" -#include "base_cheat.h" -#include "ctx.hpp" - -void __fastcall hooks::override_mouse_input( void* ecx_, void* edx_, float* x, float* y ) { - static auto omi_o = cl.m_clientmode->get_old_function< decltype( &hooks::override_mouse_input ) >( 20 ); - omi_o( ecx_, edx_, x, y ); - - if( cl.m_panic ) return; - - if( g_ctx.run_frame( ) && g_ctx.m_local->is_alive( ) ) { - g_cheat.aim( x, y ); - } -} \ No newline at end of file diff --git a/tf2/override_view.cpp b/tf2/override_view.cpp deleted file mode 100644 index 2e22e58..0000000 --- a/tf2/override_view.cpp +++ /dev/null @@ -1,17 +0,0 @@ -#include "base_cheat.h" -#include "ctx.hpp" -#include "hooks.h" -#include "settings.h" -void __fastcall hooks::override_view( void* ecx_, void* edx_, CViewSetup* setup ) { - static auto override_view_o = cl.m_clientmode->get_old_function< decltype( &hooks::override_view ) >( 16 ); - if( cl.m_panic ) { - return override_view_o( ecx_, nullptr, setup ); - } - - g_ctx.m_fov = setup->m_flFov; - if( g_ctx.run_frame( ) && g_ctx.m_local->is_valid( ) ) { - setup->m_flFov = g_settings.misc.fov_changer( ); - } - g_cheat.extra.thirdperson( ); - override_view_o( ecx_, nullptr, setup ); -} \ No newline at end of file diff --git a/tf2/paint.cpp b/tf2/paint.cpp deleted file mode 100644 index 144847b..0000000 --- a/tf2/paint.cpp +++ /dev/null @@ -1,51 +0,0 @@ -#include "hooks.h" -#include "interfaces.h" -#include "search.h" -#include "graphics.h" -#include "settings.h" -#include "base_cheat.h" - - -void __fastcall hooks::paint_traverse( void *ecx_, void *edx_, unsigned int panel, bool forcerepaint, bool allowforce ) { - static auto paint_o = cl.m_panel->get_old_function< decltype( hooks::paint_traverse )* >( 41 ); - paint_o( ecx_, edx_, panel, forcerepaint, allowforce ); - - if ( cl.m_panic /*|| !g_ctx->run_frame( ) this will disable esp when dead u dummie!!!*/ ) { - return; - } - - static uint32_t focus_overlay_panel{ }; - if ( !focus_overlay_panel ) { - std::string panelname( cl.m_panel( )->GetName( panel ) ); - if ( panelname.find( "FocusOverlayPanel" ) != std::string::npos ) { //matsystemtoppanel is glitched the fuck out in tf2 - focus_overlay_panel = panel; //hovewer this draws on shit other than the main screen - } //so we should get paint working - } - - if ( panel == focus_overlay_panel ) { //i still wonder why dont we do this in paint - //dank 2007 esp here - cl.m_panel( )->SetMouseInputEnabled( panel, g_settings.menu.open || g_con->m_open ); - } -} - -void __fastcall hooks::paint( void* ecx_, void* edx_, int mode ) { - static auto engine_paint_o = cl.m_vgui->get_old_function< decltype( hooks::paint )* >( 13 ); - static auto start_d = pattern::first_code_match< void( __thiscall* )( void* ) >( cl.m_surface.dll( ), "55 8B EC 64 A1 ? ? ? ? 6A FF 68 ? ? ? ? 50 64 89 25 ? ? ? ? 83 EC 14" ); - static auto finish_d = pattern::first_code_match< void( __thiscall* )( void* ) >( cl.m_surface.dll( ), "55 8B EC 6A FF 68 ? ? ? ? 64 A1 ? ? ? ? 50 64 89 25 ? ? ? ? 51 56 6A 00" ); - - engine_paint_o( ecx_, edx_, mode ); - - if ( cl.m_panic ) return; - - if ( mode & PAINT_UIPANELS ) { - start_d( cl.m_surface( ) ); - - //did you say lazy? - - g_renderer.draw_box( 0, 0, 1, 1, clr_t( 0, 0, 0, 1 ) ); - if( !g_settings.misc.hide_from_obs ) - g_cheat.visuals( ); - - finish_d( cl.m_surface( ) ); - } -} \ No newline at end of file diff --git a/tf2/pattern.hpp b/tf2/pattern.hpp deleted file mode 100644 index 0bc4b1b..0000000 --- a/tf2/pattern.hpp +++ /dev/null @@ -1,68 +0,0 @@ -#pragma once - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#pragma warning ( disable : 4018 ) - -namespace pattern -{ - inline bool bin_match( uint8_t* code, uint8_t* pattern, size_t size ) { - for( size_t j = 0; j < size; j++ ) { - if( pattern[ j ] && code[ j ] != pattern[ j ] ) { - return false; - } - } - return true; - } - - template< typename t = uintptr_t > static t first_match( uintptr_t start, std::string sig, size_t len, std::ptrdiff_t offset = 0 ) { - std::istringstream iss( sig ); - std::vector< std::string > tokens{ std::istream_iterator< std::string >{ iss }, std::istream_iterator< std::string >{} }; - std::vector< uint8_t > sig_bytes; - - for( const auto& hex_byte : tokens ) { - sig_bytes.push_back( static_cast< uint8_t >( std::strtoul( hex_byte.c_str( ), nullptr, 16 ) ) ); - } - - if( sig_bytes.empty( ) || sig_bytes.size( ) < 2 ) { - return t{ }; - } - - auto sig_data = sig_bytes.data( ); - auto sig_size = sig_bytes.size( ); - - for( size_t i{ }; i < len; i++ ) { - uint8_t* code_ptr = reinterpret_cast< uint8_t* >( start + i ); - - if( bin_match( code_ptr, sig_data, sig_size ) ) { - return( ( t )( start + i + offset ) ); - } - } - - return t{ }; - } - - //ultimately the function you want to call to sigscan ( ida style ) - template< typename t = uintptr_t > static t first_code_match( HMODULE start, std::string sig, std::ptrdiff_t offset = 0 ) { - auto dos_hdr = reinterpret_cast< PIMAGE_DOS_HEADER >( start ); - - if( !dos_hdr ) return t{ }; - - //DOS header, verifies if module is valid - if( dos_hdr->e_magic != 0x5a4d ) { - return t{ }; - } - - auto nt_hdrs = reinterpret_cast< PIMAGE_NT_HEADERS >( reinterpret_cast< uintptr_t >( dos_hdr ) + dos_hdr->e_lfanew ); - - return first_match< t >( reinterpret_cast< uintptr_t >( dos_hdr ) + nt_hdrs->OptionalHeader.BaseOfCode, sig, nt_hdrs->OptionalHeader.SizeOfCode, offset ); - } -}; \ No newline at end of file diff --git a/tf2/prediction.cpp b/tf2/prediction.cpp deleted file mode 100644 index c9e2493..0000000 --- a/tf2/prediction.cpp +++ /dev/null @@ -1,70 +0,0 @@ -#include "prediction.h" -#include "sdk.h" -#include "interfaces.h" - -void features::c_prediction::run_prediction( user_cmd_t* cmd ) { - static uintptr_t addr_of_runcommand = cl.m_prediction->get_function( 17 ); - static uint32_t pseudo_random_offset = pattern::first_code_match( cl.m_chl.dll( ), "55 8B EC 8B 45 08 85 C0 75 0C", 0x1 ); - static char* move_data = reinterpret_cast< char* >( malloc( 0x256 ) ); - - if ( !cmd || !g_ctx.m_local ) return; - - int flags = g_ctx.m_local->get_flags( ); - int cmd_buttons = cmd->m_buttons; - - auto set_random_seed = reinterpret_cast< void( __cdecl* )( uint32_t ) >( pseudo_random_offset ); - - *reinterpret_cast< user_cmd_t** >( uintptr_t( g_ctx.m_local ) + 0x107c ) = cmd; - - if ( cmd->m_impulse ) { - *reinterpret_cast< uint8_t* >( uintptr_t( g_ctx.m_local ) + 0x1124 ) = cmd->m_impulse; - } - - /*void __cdecl SetButtonState(int a1) - { - int v1; // ecx@0 - int v2; // edx@1 - - v2 = a1 ^ *(_DWORD *)(v1 + 0x1078); - *(_DWORD *)(v1 + 0x106C) = *(_DWORD *)(v1 + 0x1078); - *(_DWORD *)(v1 + 0x1078) = a1; - *(_DWORD *)(v1 + 0x1070) = a1 & v2; - *(_DWORD *)(v1 + 0x1074) = v2 & ~a1; - }*/ - auto v2 = cmd->m_buttons ^ *reinterpret_cast< int* >( uintptr_t( g_ctx.m_local ) + 0x1078 ); - - *reinterpret_cast< int* >( uintptr_t( g_ctx.m_local ) + 0x106c ) = *reinterpret_cast< int* >( uintptr_t( g_ctx.m_local ) + 0x1078 ); - *reinterpret_cast< int* >( uintptr_t( g_ctx.m_local ) + 0x1078 ) = cmd->m_buttons; - *reinterpret_cast< int* >( uintptr_t( g_ctx.m_local ) + 0x1070 ) = cmd->m_buttons & v2; - *reinterpret_cast< int* >( uintptr_t( g_ctx.m_local ) + 0x1074 ) = v2 &~ cmd->m_buttons; - - cl.m_globals->curtime = g_ctx.m_local->get_tick_base( ) * cl.m_globals->interval_per_tick; - cl.m_globals->frametime = cl.m_globals->interval_per_tick; - - set_random_seed( cmd->m_random_seed ); - **reinterpret_cast< uintptr_t** >( addr_of_runcommand + 0x2b + 0x2 ) = uintptr_t( g_ctx.m_local ); - - cl.m_movement( )->StartTrackPredictionErrors( reinterpret_cast< uintptr_t* >( g_ctx.m_local ) ); - - int tick_base = g_ctx.m_local->get_tick_base( ); - - static auto setup_move = cl.m_prediction->get_function< void( __thiscall* )( void*, c_base_player*, user_cmd_t*, IMoveHelper*, CMoveData* ) >( 18 ); - static auto finish_move = cl.m_prediction->get_function< void( __thiscall* )( void*, c_base_player*, user_cmd_t*, CMoveData* ) >( 19 ); - setup_move( cl.m_prediction( ), g_ctx.m_local, cmd, cl.m_movehelper, reinterpret_cast< CMoveData* >( move_data ) ); - cl.m_movement( )->ProcessMovement( reinterpret_cast< uintptr_t* >( g_ctx.m_local ), reinterpret_cast< CMoveData* >( move_data ) ); - finish_move( cl.m_prediction( ), g_ctx.m_local, cmd, reinterpret_cast< CMoveData* >( move_data ) ); - - g_ctx.m_local->m_nTickBase( ); - - cl.m_movement( )->FinishTrackPredictionErrors( reinterpret_cast< uintptr_t* >( g_ctx.m_local ) ); - - set_random_seed( 0xfffffff ); - **reinterpret_cast< uintptr_t*** >( addr_of_runcommand + 0x2b + 0x2 ) = nullptr; - *reinterpret_cast< user_cmd_t** >( uintptr_t( g_ctx.m_local ) + 0x107c ) = nullptr; - - cl.m_globals->curtime = g_ctx.m_local->get_tick_base( ) * cl.m_globals->interval_per_tick; - cl.m_globals->frametime = cl.m_globals->interval_per_tick; - - g_ctx.m_local->m_nTickBase( ); - cmd->m_buttons = cmd_buttons; -} \ No newline at end of file diff --git a/tf2/prediction.h b/tf2/prediction.h deleted file mode 100644 index e71ac24..0000000 --- a/tf2/prediction.h +++ /dev/null @@ -1,10 +0,0 @@ -#pragma once -class user_cmd_t; -class c_base_player; -namespace features -{ - class c_prediction { - public: - void run_prediction( user_cmd_t* cmd ); - }; -} \ No newline at end of file diff --git a/tf2/process_movement.cpp b/tf2/process_movement.cpp deleted file mode 100644 index c6f186e..0000000 --- a/tf2/process_movement.cpp +++ /dev/null @@ -1,12 +0,0 @@ -#include "hooks.h" -#include "interfaces.h" - -void __fastcall hooks::process_movement( void* thisptr, void* edx_, c_base_player* player, CMoveData* move ) { - static auto old_fn = cl.m_movement->get_old_function< decltype( hooks::process_movement )* >( 1 ); - - if ( cl.m_input( )->IsButtonDown( MOUSE_MIDDLE ) ) { - move->m_outStepHeight = -1.0f; - } - - return old_fn( thisptr, edx_, player, move ); -} \ No newline at end of file diff --git a/tf2/projectile_pred.cpp b/tf2/projectile_pred.cpp deleted file mode 100644 index c54f712..0000000 --- a/tf2/projectile_pred.cpp +++ /dev/null @@ -1,70 +0,0 @@ -#include "projectile_pred.h" -#include "sdk.h" -#include "interfaces.h" - -namespace util -{ - - vec3_t c_projectile_pred::predict_player( c_base_player* player ) { - if ( !player || !player->is_valid( ) ) return vec3_t{ }; - - static auto sv_gravity = cl.m_cvar( )->FindVar( "sv_gravity" ); //unnecessary for now - auto local = g_ctx.m_local; //will be used for stuff like grenades - //will also need to calculate friction etc - auto weapon = local->get_active_weapon( ); - if ( !weapon ) return player->get_origin( ); - - float projectile_speed = get_projectile_speed( weapon ); - - vec3_t player_vel = player->get_velocity( ); - vec3_t projectile_vel = vec3_t( ); - - float estimated_travel_time = ( local->get_eye_pos( ) - player->get_origin( ) ).length( ) / projectile_speed + cl.m_globals->interval_per_tick; - vec3_t estimated_predicted_pos = player->get_origin( ) + player_vel * estimated_travel_time; - - return estimated_predicted_pos; - } - - float c_projectile_pred::get_projectile_speed( c_base_weapon* weapon ) { - if ( !weapon ) - return -1.f; - /* - this is completely hardcoded - if you can find a better way to figure this out - then please tell me - -- nave - */ - - int id = weapon->GetClientClass( )->m_class_id; - - float BeginCharge; - float Charge; - - //return flSpeed; - switch ( id ) { - case ClientClassIDs::CTFGrenadeLauncher: - return 840.0f; - case ClientClassIDs::CTFRocketLauncher_DirectHit: - return 1980.0f; - case ClientClassIDs::CTFRocketLauncher: - case ClientClassIDs::CTFRocketLauncher_Mortar: - return 1100.0f; - case ClientClassIDs::CTFFlareGun: - return 1450.0f; - case ClientClassIDs::CTFBat_Wood: - return 1940.0f; - case ClientClassIDs::CTFSyringeGun: - return 990.0f; - case ClientClassIDs::CTFCompoundBow: { - return 0.f; //need more shit, cba now - } - - default: - return -1.0f; - } - - return -1.0f; - } -} - -util::c_projectile_pred projectile_pred; \ No newline at end of file diff --git a/tf2/projectile_pred.h b/tf2/projectile_pred.h deleted file mode 100644 index bd1b3d8..0000000 --- a/tf2/projectile_pred.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once -class c_base_weapon; -class c_base_player; -class vec3_t; -namespace util -{ - class c_projectile_pred { - public: - vec3_t predict_player( c_base_player* ); - private: - float get_projectile_speed( c_base_weapon* ); - }; -} - -extern util::c_projectile_pred projectile_pred; \ No newline at end of file diff --git a/tf2/renderer.cpp b/tf2/renderer.cpp deleted file mode 100644 index 8f5e8e7..0000000 --- a/tf2/renderer.cpp +++ /dev/null @@ -1,93 +0,0 @@ -#include "renderer.hpp" -#include "interfaces.h" - -#undef CreateFont - - -drawings::c_fonts g_fonts; -drawings::c_drawings g_renderer; - -NAMESPACE_REGION( drawings ) - -c_fonts::font_t::font_t( std::string name, int size, - int weight, ulong_t flags ) : - m_name( name ), m_size( size ), - m_weight( weight ), m_flags( flags ) { - g_fonts.m_container.push_back( this ); -}; - -void c_fonts::font_t::initialize( ) { - m_font = cl.m_surface( )->CreateFnt( ); - cl.m_surface( )->SetFontGlyphSet( - m_font, m_name.c_str( ), m_size, - m_weight, 0, 0, - m_flags - ); -} - -void c_fonts::initialize( ) { - for( auto& it : m_container ) { - it->initialize( ); - } -} - -void c_drawings::draw_string( const wchar_t* text, HFont font, int x, int y, const clr_t& color ) { - cl.m_surface( )->DrawSetTextPos( x, y ); - cl.m_surface( )->DrawSetTextFont( font ); - cl.m_surface( )->DrawSetTextColor( color ); - cl.m_surface( )->DrawPrintText( text, wcslen( text ) ); -} - -void c_drawings::draw_rect( int x, int y, int w, int h, const clr_t& color ) { - cl.m_surface( )->DrawSetColor( color ); - cl.m_surface( )->DrawFilledRect( x, y, x + w, y + h ); -} - -void c_drawings::draw_line( int x, int y, int x1, int y1, const clr_t& clr ) { - cl.m_surface( )->DrawSetColor( clr ); - cl.m_surface( )->DrawLine( x, y, x1, y1 ); -} - -void c_drawings::draw_box( int x, int y, int w, int h, const clr_t& clr ) { - draw_line( x, y, x + w, y, clr ); - draw_line( x + w, y, x + w, y + h, clr ); - draw_line( x, y + h, x + w + 1, y + h, clr ); - draw_line( x, y, x, y + h, clr ); -} - -void c_drawings::draw_circle( int x, int y, int r, const clr_t& col, int res ) { - cl.m_surface( )->DrawSetColor( col ); - cl.m_surface( )->DrawOutlinedCircle( x, y, r, res ); -} - -void c_drawings::draw_filled_circle( int x, int y, int r, const clr_t& col, int res ) { - vertex_t* v = ( vertex_t* )( _alloca( res * sizeof( vertex_t ) ) ); - const float step = M_PI * 2.0f / res; - - for( size_t i{ }; i < res; ++i ) { - float theta = i * step; - float x_off = r * cos( theta ); - float y_off = r * sin( theta ); - v[ i ].init( x + x_off, y + y_off ); - } - - draw_polygon( res, v, col ); -} - -void c_drawings::draw_line( const vec2_t& begin, const vec2_t& end, const clr_t& clr ) { - draw_line( ( int )begin.x, ( int )begin.y, ( int )end.x, ( int )end.y, clr ); -} - -void c_drawings::draw_polygon( int count, vertex_t* vertices, const clr_t& col ) { - static int texture = cl.m_surface( )->CreateNewTextureID( true ); - - clr_t buf( 255, 255, 255 ); - - cl.m_surface( )->DrawSetTextureRGBA( texture, ( byte* )( &buf ), 1, 1 ); - cl.m_surface( )->DrawSetColor( col ); - cl.m_surface( )->DrawSetTexture( texture ); - - cl.m_surface( )->DrawTexturedPolygon( count, vertices ); -} - -END_REGION \ No newline at end of file diff --git a/tf2/renderer.hpp b/tf2/renderer.hpp deleted file mode 100644 index 1c86511..0000000 --- a/tf2/renderer.hpp +++ /dev/null @@ -1,120 +0,0 @@ -#pragma once -#include -#include -#include - -#include "util.hpp" -#include "sdk.h" - -enum e_font_style : size_t { - -}; - -enum FontAlign_t : size_t { - ALIGN_CENTER, - ALIGN_LEFT, - ALIGN_RIGHT -}; - -NAMESPACE_REGION( drawings ) - - -class c_fonts { -protected: - struct font_t { - friend class c_fonts; - font_t( std::string name, int size, - int weight, ulong_t flags ); - - operator HFont( ) { - return m_font; - } - - private: - void initialize( ); - - HFont m_font; - std::string m_name; - int m_size; - int m_weight; - ulong_t m_flags; - }; - - std::vector< font_t* > m_container; - friend struct c_fonts::font_t; -public: - void initialize( ); - - font_t f_esp_small{ xors( "Tahoma" ), 11, 500, FONTFLAG_OUTLINE }; - font_t f_bold{ xors( "Verdana" ), 18, 900, FONTFLAG_DROPSHADOW | FONTFLAG_ANTIALIAS }; - font_t f_12{ xors( "Verdana" ), 12, 700, 128 }; - font_t f_14{ xors( "Verdana" ), 14, 700, 128 }; - font_t f_16{ xors( "Verdana" ), 16, 700, 128 }; - font_t f_18{ xors( "Verdana" ), 18, 700, 128 }; -}; - - - -//im going to fill ur triangles -class c_drawings { -private: - //dumb hacky fix for template functions - void draw_string( const wchar_t* msg, HFont font, int x, int y, const clr_t& color ); - -public: - void draw_line( const vec2_t& begin, const vec2_t& end, const clr_t& color ); - void draw_line( int x, int y, int x1, int y2, const clr_t& color ); - void draw_rect( int x, int y, int w, int h, const clr_t& color ); - void draw_box( int x, int y, int w, int h, const clr_t& color ); //thicc - void draw_polygon( int count, vertex_t* vertices, const clr_t& col ); - void draw_circle( int x, int y, int r, const clr_t& col, int res = 48 ); - void draw_filled_circle( int x, int y, int r, const clr_t& col, int res = 48 ); - - template < FontAlign_t align = ALIGN_LEFT > //fuck ur sprintf nigga varargs nigga - void draw_string( HFont font, int x, int y, const clr_t& color, const wchar_t* msg, ... ) { - wchar_t* buffer = ( wchar_t* )_alloca( 2048 ); - va_list list{ }; - int wide, tall; - - memset( buffer, 0, 2048 ); - - __crt_va_start( list, msg ); - vswprintf_s( buffer, 1024, msg, list ); - __crt_va_end( list ); - - cl.m_surface( )->GetTextSize( - font, buffer, wide, tall ); - - switch( align ) { - case ALIGN_CENTER: - x -= wide / 2; - break; - case ALIGN_RIGHT: - x -= wide; - break; - default: break; - } - - draw_string( buffer, font, x, y, color ); - } - - template < FontAlign_t align = ALIGN_LEFT > //debatable whether it should be center or not - void draw_string( HFont font, int x, int y, const clr_t& color, const char* msg, ... ) { - char* buffer = ( char* )_alloca( 1024 ); - va_list list{ }; - - memset( buffer, 0, 1024 ); - - __crt_va_start( list, msg ); - vsprintf_s( buffer, 1024, msg, list ); - __crt_va_end( list ); - - auto wide_str = util::ascii_to_unicode( buffer ); - draw_string< align >( font, x, y, color, wide_str.c_str( ) ); - } -}; - -END_REGION - -extern drawings::c_fonts g_fonts; -extern drawings::c_drawings g_renderer; \ No newline at end of file diff --git a/tf2/scene_end.cpp b/tf2/scene_end.cpp deleted file mode 100644 index bb88311..0000000 --- a/tf2/scene_end.cpp +++ /dev/null @@ -1,37 +0,0 @@ -#include "hooks.h" -#include "settings.h" -#include "base_cheat.h" -#include "ctx.hpp" - -void __fastcall hooks::scene_end( void* ecx_, void* edx_ ) { - static auto scene_end_o = cl.m_render_view->get_old_function< decltype( &hooks::scene_end ) >( 9 ); - scene_end_o( edx_, 0 ); - - if( !cl.m_panic && g_ctx.m_local && g_settings.visuals.chams.enabled( ) && g_settings.visuals.chams.ignore_z( ) ) { - g_ctx.m_drawing_screneend = true; - for( int i = 1; i < cl.m_globals->maxclients; ++i ) { - auto ent = cl.m_entlist( )->get_client_entity< c_base_player >( i ); - if( ent && ent->is_valid( ) ) { - if( ent == g_ctx.m_local && ent->m_bIsScoped( ) ) { - continue; - } - int team = ent->m_iTeamNum( ); - bool enemy = team != g_ctx.m_local->m_iTeamNum( ); - if( enemy || g_settings.visuals.chams.friendlies( ) ) { - IMaterial* mat = g_settings.visuals.chams.flat ? g_cheat.chams.m_materials.m_chams_flat : g_cheat.chams.m_materials.m_chams; - fclr_t clr_vis = enemy ? g_settings.visuals.chams.color_visible_enemy( ).to_fclr( ) : g_settings.visuals.chams.color_visible_friendly( ).to_fclr( ); - fclr_t clr_hid = enemy ? g_settings.visuals.chams.color_hidden_enemy( ).to_fclr( ) : g_settings.visuals.chams.color_hidden_friendly( ).to_fclr( ); - mat->SetMaterialVarFlag( MATERIAL_VAR_IGNOREZ, true ); - //g_cheat.chams.m_materials.force_material( mat, clr_hid ); - ent->ce( )->DrawModel( 0x1, 255 ); - mat->SetMaterialVarFlag( MATERIAL_VAR_IGNOREZ, false ); - //g_cheat.chams.m_materials.force_material( mat, clr_vis ); - ent->ce( )->DrawModel( 0x1, 255 ); - cl.m_model_render( )->ForcedMaterialOverride( nullptr ); - } - } - } - - g_ctx.m_drawing_screneend = false; - } -} \ No newline at end of file diff --git a/tf2/sdk.h b/tf2/sdk.h deleted file mode 100644 index 4db8a8f..0000000 --- a/tf2/sdk.h +++ /dev/null @@ -1,34 +0,0 @@ -#pragma once - -#define CLIENT_DLL - -#include -#include -#include - -#include "vector.hpp" - -#include "color.hpp" -#include "IClientMode.h" -#include "CHLClient.h" -#include "IEngineVGui.h" -#include "IClientEntityList.h" -#include "IEngineTrace.h" -#include "CGlobalVarsBase.h" -#include "ICvar.h" -#include "IVDebugOverlay.h" -#include "IVEngineClient.h" -#include "IPlayerInfoManager.h" -#include "CBasePlayer.h" -#include "IPanel.h" -#include "ISurface.h" -#include "GlowObject.h" -#include "IInputSystem.h" -#include "IVRenderView.h" -#include "CBaseWeapon.h" -#include "IVModelInfo.h" -#include "IGameMovement.h" -#include "IMaterialSystem.hpp" -#include "IGameEventManager.h" -#include "CInput.hpp" -#include "KeyValues.h" \ No newline at end of file diff --git a/tf2/settings.cpp b/tf2/settings.cpp deleted file mode 100644 index 144c74a..0000000 --- a/tf2/settings.cpp +++ /dev/null @@ -1,4 +0,0 @@ -#include "settings.h" - -SettingHolder holder_{ "" }; -c_settings settings; \ No newline at end of file diff --git a/tf2/settings.h b/tf2/settings.h deleted file mode 100644 index 3f9fbac..0000000 --- a/tf2/settings.h +++ /dev/null @@ -1,276 +0,0 @@ -#pragma once -#include "simple_settings.h" -#include "strings.hpp" -#include "color.hpp" -#include -//later i will implement a way to load all config files - -namespace data -{ - - - extern SettingHolder holder_; - - - class legitbot_settings : SettingHolder { - public: - using SettingHolder::SettingHolder; - - con_var< float > m_fov{ this, fnv( "fov" ), 5.f }; - con_var< float > m_speed{ this, fnv( "speed" ), 10.f }; - con_var< float > m_assist_strength{ this, fnv( "assist_strength" ), 0.f }; - con_var< int > m_hitbox{ this, fnv( "hitbox" ), 0 }; - con_var< int > m_bone{ this, fnv( "bone" ), 0 }; - }; - - - class c_settings { - public: - - void load( ) { - switch( menu.cur_setting ) { - case 0: - holder_.load( "", xors( "./tf/cfg/scout.cfg" ) ); - break; - case 1: - holder_.load( "", xors( "./tf/cfg/soldier.cfg" ) ); - break; - case 2: - holder_.load( "", xors( "./tf/cfg/pyro.cfg" ) ); - break; - case 3: - holder_.load( "", xors( "./tf/cfg/demo.cfg" ) ); - break; - case 4: - holder_.load( "", xors( "./tf/cfg/heavy.cfg" ) ); - break; - case 5: - holder_.load( "", xors( "./tf/cfg/engineer.cfg" ) ); - break; - case 6: - holder_.load( "", xors( "./tf/cfg/medic.cfg" ) ); - break; - case 7: - holder_.load( "", xors( "./tf/cfg/sniper.cfg" ) ); - break; - case 8: - holder_.load( "", xors( "./tf/cfg/spy.cfg" ) ); - break; - case 9: - holder_.load( "", xors( "./tf/cfg/money_rage1.cfg" ) ); - break; - case 10: - holder_.load( "", xors( "./tf/cfg/money_rage2.cfg" ) ); - break; - } - - menu.anti_untrusted = true; - } - - void save( ) { - switch( menu.cur_setting ) { - case 0: - holder_.load( "", xors( "./tf/cfg/scout.cfg" ) ); - break; - case 1: - holder_.load( "", xors( "./tf/cfg/soldier.cfg" ) ); - break; - case 2: - holder_.load( "", xors( "./tf/cfg/pyro.cfg" ) ); - break; - case 3: - holder_.load( "", xors( "./tf/cfg/demo.cfg" ) ); - break; - case 4: - holder_.load( "", xors( "./tf/cfg/heavy.cfg" ) ); - break; - case 5: - holder_.load( "", xors( "./tf/cfg/engineer.cfg" ) ); - break; - case 6: - holder_.load( "", xors( "./tf/cfg/medic.cfg" ) ); - break; - case 7: - holder_.load( "", xors( "./tf/cfg/sniper.cfg" ) ); - break; - case 8: - holder_.load( "", xors( "./tf/cfg/spy.cfg" ) ); - break; - case 9: - holder_.load( "", xors( "./tf/cfg/money_rage1.cfg" ) ); - break; - case 10: - holder_.load( "", xors( "./tf/cfg/money_rage2.cfg" ) ); - break; - } - } - - void copy_to_clipboard( ) { - holder_.save( "", xors( "./tf/cfg/money_temp.cfg" ) ); - std::vector< uint8_t > file_data; - FILE* f = fopen( xors( "./tf/cfg/money_temp.cfg" ), "r" ); - size_t size = 0; - fseek( f, 0, SEEK_END ); - size = ftell( f ); - - char* buf = ( char* )malloc( size ); - fread( buf, 1, size, f ); - fclose( f ); - for( size_t i{ }; i < size; ++i ) { - file_data.push_back( buf[ i ] ); - } - - free( buf ); - - EmptyClipboard( ); - OpenClipboard( nullptr ); - - auto g = GlobalAlloc( GMEM_FIXED, size ); - memcpy( g, file_data.data( ), size ); - - SetClipboardData( CF_TEXT, g ); - CloseClipboard( ); - //DeleteFileA( xors( "./tf/cfg/money_temp.cfg" ) ); - } - - void load_from_clipboard( ) { - FILE* f = fopen( xors( "./tf/cfg/money_temp.cfg" ), "wb" ); - auto data = GetClipboardData( CF_TEXT ); - - auto size = GlobalSize( data ); - fwrite( data, 1, size, f ); - fclose( f ); - - holder_.load( "", xors( "./tf/cfg/money_temp.cfg" ) ); - - CloseClipboard( ); - //DeleteFileA( xors( "./tf/cfg/money_temp.cfg" ) ); - } - - struct { - con_var< bool > enabled{ &holder_, fnv( "legit_active" ), false }; - con_var< size_t > sample_size{ &holder_, fnv( "legit_sample_size" ), 12 }; - con_var< float > smooth_factor{ &holder_, fnv( "legit_smooth_factor" ), 1.0f }; - con_var< bool > dynamic_smoothing{ &holder_, fnv( "legit_dynamic_smoothing" ), false }; - con_var< bool > assist{ &holder_, fnv( "legit_assist" ), false }; - con_var< bool > friendlies{ &holder_, fnv( "legit_friendlies" ), false }; - con_var< int > activation_type{ &holder_, fnv( "legit_activation_type" ), 1 }; - con_var< int > key{ &holder_, fnv( "legit_key" ), 0 }; - con_var< bool > backtracking{ &holder_, fnv( "legit_backtracking" ), 0 }; - con_var< float > backtracking_time{ &holder_, fnv( "legit_bt_time" ), 0.2f }; - con_var< float > backtracking_fov{ &holder_, fnv( "legit_bt_fov" ), 5.0f }; - con_var< bool > backtracking_target{ &holder_, fnv( "legit_bt_target" ), false }; - con_var< bool > backtracking_visualize{ &holder_, fnv( "legit_bt_visualize" ), 0 }; - con_var< clr_t > backtracking_col{ &holder_, fnv( "legit_bt_col" ), clr_t( 255, 255, 255, 120 ) }; - con_var< bool > triggerbot{ &holder_, fnv( "legit_triggerbot" ), false }; - con_var< int > trigger_key{ &holder_, fnv( "legit_triggerkey" ), 0 }; - con_var< float > trigger_delay{ &holder_, fnv( "legit_triggerdelay" ), 0.f }; - legitbot_settings secondary{ &holder_, "legit_primary" }; - legitbot_settings melee{ &holder_, "legit_melee" }; - legitbot_settings primary{ &holder_, "legit_secondary" }; - legitbot_settings* active = &primary; - } legit; - - struct { - struct { - con_var< bool > enabled{ &holder_, fnv( "visuals_chams_enabled" ), 0 }; - con_var< bool > flat{ &holder_, fnv( "visuals_chams_flat" ), 0 }; - con_var< bool > ignore_z{ &holder_, fnv( "visuals_chams_ignore_z" ), 0 }; - con_var< float > reflectivity{ &holder_, fnv( "visuals_chams_reflectivity" ), 1.0f }; - con_var< float > shine{ &holder_, fnv( "visuals_chams_shine" ), 1.0f }; - con_var< bool > friendlies{ &holder_, fnv( "visuals_chams_friendlies" ), 0 }; - con_var< clr_t > color_visible_friendly{ &holder_, fnv( "visuals_chams_color_friendly" ), clr_t( 0, 255, 255 ) }; - con_var< clr_t > color_visible_enemy{ &holder_, fnv( "visuals_chams_color_enemy" ), clr_t( 255, 255, 0 ) }; - con_var< clr_t > color_hidden_friendly{ &holder_, fnv( "visuals_chams_color_h_friendly" ), clr_t( 0, 0, 255 ) }; - con_var< clr_t > color_hidden_enemy{ &holder_, fnv( "visuals_chams_color_h_enemy" ), clr_t( 255, 0, 0 ) }; - } chams; - - con_var< int > activation_type{ &holder_, fnv( "visuals_activation" ), false }; - //players - con_var< bool > box{ &holder_, fnv( "visuals_box" ), false }; - con_var< bool > dormant{ &holder_, fnv( "visuals_dormant" ), false }; - con_var< bool > health{ &holder_, fnv( "visuals_health" ), false }; - con_var< bool > weapon{ &holder_, fnv( "visuals_weapon" ), false }; - con_var< bool > name{ &holder_, fnv( "visuals_name" ), false }; - con_var< bool > out_of_pov{ &holder_, fnv( "visuals_out_of_pov" ), false }; - con_var< float > out_of_pov_radius{ &holder_, fnv( "visuals_out_of_pov_radius" ), 0.75f }; - con_var< int > out_of_pov_size{ &holder_, fnv( "visuals_out_of_pov_size" ), 25 }; - con_var< bool > friendlies{ &holder_, fnv( "visuals_friendlies" ), false }; - con_var< bool > skeleton{ &holder_, fnv( "visuals_skeleton" ) }; - con_var< bool > glow{ &holder_, fnv( "visuals_glow" ), false }; - con_var< bool > conditions{ &holder_, fnv( "visuals_conditions" ), false }; //conditions - con_var< bool > resolver_indicator{ &holder_, fnv( "visuals_resolver_indicator" ), false }; - con_var< bool > ammo{ &holder_, fnv( "visuals_ammo" ), false }; - con_var< bool > player_class{ &holder_, fnv( "visuals_player_class" ) }; - con_var< bool > floating_ragdolls{ &holder_, fnv( "visuals_floating_ragdolls" ) }; //dont remember - con_var< bool > sound{ &holder_, fnv( "visuals_sound" ), false }; - con_var< clr_t > box_enemy{ &holder_, fnv( "visuals_clr_enemy" ), clr_t( 0, 255, 255 ) }; - con_var< clr_t > box_friendly{ &holder_, fnv( "visuals_clr_friendly" ), clr_t( 255, 0, 255 ) }; - con_var< clr_t > glow_enemy{ &holder_, fnv( "visuals_glow_enemy" ), clr_t( 255, 0, 255, 150 ) }; - con_var< clr_t > glow_friendly{ &holder_, fnv( "visuals_glow_friendly" ), clr_t( 255, 120, 0, 150 ) }; - con_var< clr_t > skeleton_enemy{ &holder_, fnv( "visuals_skeleton_enemy" ), clr_t( 255, 255, 255 ) }; - con_var< clr_t > skeleton_friendly{ &holder_, fnv( "visuals_skeleton_friendly" ), clr_t( 255, 255, 255 ) }; - con_var< int > bullet_tracers{ &holder_, fnv( "visuals_bullet_tracers" ), 0 }; - con_var< int > sound_range{ &holder_, fnv( "visuals_sound_range" ), 360 }; - con_var< int > key{ &holder_, fnv( "visuals_key" ), 0 }; - con_var< bool > hitmarkers{ &holder_, fnv( "visuals_hitmarkers" ), false }; - - - //world - con_var< bool > world_modulate{ &holder_, fnv( "visuals_world_modulate" ), false }; - con_var< bool > night_mode{ &holder_, fnv( "visuals_night_mode" ), false }; - con_var< bool > transparent_props{ &holder_, fnv( "visuals_transparent_props" ), false }; - con_var< int > projectile_esp{ &holder_, fnv( "visuals_projectile_esp" ), 0 }; //projectile_esp - con_var< int > building_esp{ &holder_, fnv( "visuals_building_esp" ), 0 };//building_esp - con_var< bool > building_owner{ &holder_, fnv( "visuals_building_owner" ), false }; //building_owner - con_var< clr_t > projectile_esp_clr{ &holder_, fnv( "visuals_projectile_esp_clr" ), clr_t( 255, 255, 255, 180 ) }; - con_var< clr_t > building_esp_clr{ &holder_, fnv( "visuals_building_esp_clr" ), clr_t( 255, 255, 255, 180 ) }; - con_var< bool > fullbright{ &holder_, fnv( "visuals_fullbright" ), false }; - con_var< bool > objective_info{ &holder_, fnv( "visuals_objective_info" ), false }; //objective_info - - //local - con_var< bool > draw_spread{ &holder_, fnv( "misc_draw_spread" ), false }; - con_var< bool > grenade_prediction{ &holder_, fnv( "visuals_grenade_prediction" ), false }; - con_var< bool > spec_list{ &holder_, fnv( "visuals_spec_list" ), false }; - - bool active = true; - } visuals; - - struct { - con_var< bool > watermark{ &holder_, fnv( "misc_watermark" ), false }; - con_var< bool > bunny_hop{ &holder_, fnv( "misc_bhop" ), false }; - con_var< bool > auto_strafe{ &holder_, fnv( "misc_autostrafe" ), false }; - con_var< int > viewmodel_fov{ &holder_, fnv( "misc_viewmodel_fov" ), 0 }; - con_var< int > fov_changer{ &holder_, fnv( "fov_changer" ), 90 }; - con_var< bool > thirdperson{ &holder_, fnv( "misc_thirdperson" ), false }; - con_var< int > thirdperson_key{ &holder_, fnv( "misc_tp_key" ), 0 }; - - con_var< bool > no_recoil{ &holder_, fnv( "misc_no_recoil" ), false }; - con_var< bool > no_sound{ &holder_, fnv( "misc_no_sound" ), false }; - con_var< bool > no_scope{ &holder_, fnv( "misc_no_scope" ), false }; - con_var< bool > transparent_vm{ &holder_, fnv( "misc_transparent_vm" ), false }; - con_var< bool > hide_from_obs{ &holder_, fnv( "misc_hide_from_obs" ), false }; - con_var< bool > disable_post_process{ &holder_, fnv( "misc_disable_post_process" ), false }; - - bool recorder_enable = false; - } misc; - - struct { - con_var< uint8_t > menu_color_1r{ &holder_, fnv( "menu_color_1r" ), 231 }; - con_var< uint8_t > menu_color_1g{ &holder_, fnv( "menu_color_1g" ), 105 }; - con_var< uint8_t > menu_color_1b{ &holder_, fnv( "menu_color_1b" ), 105 }; - - con_var< uint8_t > menu_color_2r{ &holder_, fnv( "menu_color_2r" ), 0xf4 }; - con_var< uint8_t > menu_color_2g{ &holder_, fnv( "menu_color_2g" ), 0x7c }; - con_var< uint8_t > menu_color_2b{ &holder_, fnv( "menu_color_2b" ), 0xa8 }; - - bool auto_class_settings = false; - bool anti_untrusted = true; - bool open = false; - bool logs_enable = false; - int cur_setting = 0; - } menu; - }; -} - -extern data::c_settings g_settings; \ No newline at end of file diff --git a/tf2/shut_down.cpp b/tf2/shut_down.cpp deleted file mode 100644 index 149fbf6..0000000 --- a/tf2/shut_down.cpp +++ /dev/null @@ -1,16 +0,0 @@ -#include "hooks.h" -#include "chams.h" -#include "base_cheat.h" - -void __fastcall hooks::shut_down( void* ecx_, void* edx_ ) { - static auto original_fn = cl.m_chl->get_old_function< decltype( &shut_down ) >( 3 ); - - cl.m_engine( )->ClientCmd_Unrestricted( xors( "host_writeconfig" ) ); - //fuck you - abort( ); - - //how about fuck you instead dumb fucking tentacle hentai lookin ass mofo - - //g_cheat.chams.m_materials.destroy_materials( ); - return original_fn( ecx_, edx_ ); -} \ No newline at end of file diff --git a/tf2/simple_settings.cpp b/tf2/simple_settings.cpp deleted file mode 100644 index 9d1d1de..0000000 --- a/tf2/simple_settings.cpp +++ /dev/null @@ -1,32 +0,0 @@ -#include "settings.h" - -SettingHolder data::holder_{ "fucking_nerd" }; -data::c_settings g_settings; - -#pragma warning(disable: 4996) - -void simple_save( const char* path, const char* name, const void* src, size_t size, const char* filename ) { - auto buffer = reinterpret_cast< char* >( _alloca( size * 2 + 1 ) ); - auto data = reinterpret_cast< const uint8_t* >( src ); - - for( size_t i = 0; i < size; i++ ) - sprintf( &buffer[ 2 * i ], "%02X", data[ i ] ); - - WritePrivateProfileStringA( path, name, buffer, filename ); -} - -void simple_load( const char* path, const char* name, void* dest, size_t size, const char* filename ) { - auto buffer = reinterpret_cast< char* >( _alloca( size * 2 + 1 ) ); - auto data = reinterpret_cast< uint8_t* >( dest ); - - GetPrivateProfileStringA( path, name, "", buffer, size * 2 + 1, filename ); - - if( *buffer == 0 ) - return; - - for( size_t i = 0; i < size; i++ ) { - unsigned temp; - sscanf( &buffer[ 2 * i ], "%02X", &temp ); - data[ i ] = temp; - } -} \ No newline at end of file diff --git a/tf2/simple_settings.h b/tf2/simple_settings.h deleted file mode 100644 index db9b814..0000000 --- a/tf2/simple_settings.h +++ /dev/null @@ -1,204 +0,0 @@ -#pragma once -#include -#include -#include -#include - -#include "util.hpp" -#include "fnv.hpp" - -//nama stuff -extern void simple_save( const char* path, const char* name, const void* src, size_t size, const char* filename ); -extern void simple_load( const char* path, const char* name, void* dest, size_t size, const char* filename ); - -class ISettingNode { -public: - virtual ~ISettingNode( ) = default; - - virtual void load( const char* path, const char* file ) = 0; - virtual void save( const char* path, const char* file ) const = 0; - virtual void register_( ISettingNode* node_ptr ) = 0; - virtual bool has_nodes( ) { return false; } - virtual hash_t get_hash( ) { return 0; } -}; - -class SettingHolder : public ISettingNode { -public: - __forceinline SettingHolder( const char* name ) : name_( name ) {} - __forceinline SettingHolder( SettingHolder* holder_ptr, const char* name ) : name_( name ) { holder_ptr->register_( this ); } - - void register_( ISettingNode* node_ptr ) override { - setting_nodes_.push_back( node_ptr ); - } - - void load( const char* path, const char* file ) override { - char full_path[ 64 ]; - strcpy_s( full_path, path ); - strcat_s( full_path, "_" ); - strcat_s( full_path, name_ ); - for( auto x : setting_nodes_ ) - x->load( full_path, file ); - } - - void save( const char* path, const char* file ) const override { - char full_path[ 64 ]; - strcpy_s( full_path, path ); - strcat_s( full_path, "_" ); - strcat_s( full_path, name_ ); - for( auto x : setting_nodes_ ) - x->save( full_path, file ); - } - - auto& get_nodes( ) { - return setting_nodes_; - } - - virtual bool has_nodes( ) { - return true; - } - -private: - const char* name_; - bool has_nodes_; - std::vector setting_nodes_; -}; - -class ISetting : public ISettingNode { - void register_( ISettingNode* node_ptr ) override {} -public: - virtual void set( float value ) = 0; - virtual void set( int value ) = 0; - virtual void set( ulong_t value ) = 0; - virtual std::string get_string( ) = 0; - virtual hash_t get_hash( ) = 0; - virtual std::string get_data_string( ) = 0; - virtual void load_from_string( const std::string& ) = 0; -}; - -template < size_t L > -class SettingString : ISetting { -public: - __forceinline SettingString( SettingHolder* holder_ptr, hash_t hash ) : - m_name( name ), m_value( "" ) { - holder_ptr->register_( this ); - }; - - void load( const char* path, const char* file ) override { - GetPrivateProfileStringA( path, std::to_string( m_name ).c_str( ), "", m_value, L, file ); - } - - void save( const char* path, const char* file ) const override { - WritePrivateProfileStringA( path, std::to_string( m_name ).c_str( ), m_value, file ); - } - - char* get( ) { - return m_value; - } - -private: - char m_value[ L ]; - hash_t m_name; -}; - -template < typename T > -class con_var : public ISetting { -public: - __forceinline con_var( SettingHolder* holder_ptr, hash_t name ) : - name_( name ), - is_float_( std::is_floating_point_v< T > ), - is_integral_( std::is_integral_v< T > ) { - holder_ptr->register_( this ); - } - __forceinline con_var( SettingHolder* holder_ptr, hash_t name, const T& rhs ) : - value_( rhs ), - name_( name ), - is_float_( std::is_floating_point_v< T > ), - is_integral_( std::is_integral_v< T > ) { - holder_ptr->register_( this ); - } - - void load( const char* path, const char* file ) override { simple_load( path, std::to_string( name_ ).c_str( ), &value_, sizeof( value_ ), file ); } - - void save( const char* path, const char* file ) const override { simple_save( path, std::to_string( name_ ).c_str( ), &value_, sizeof( value_ ), file ); } - - __forceinline operator T&( ) { return value_; } - __forceinline T* operator &( ) { return &value_; } - - __forceinline T& operator ()( ) { return value_; } - - virtual std::string get_string( ) { - if constexpr( std::is_arithmetic_v< T > ) { - return std::to_string( value_ ); - } - else { - return util::to_hex_str( *( ulong_t* )( &value_ ) ); - } - } - - virtual void set( float value ) { - if constexpr( std::is_arithmetic_v< T > ) { - value_ = ( T )( value ); - } - } - - virtual void set( int value ) { - if constexpr( std::is_arithmetic_v< T > ) { - value_ = ( T )( value ); - } - else { - value_ = *( T* )( &value ); - } - } - - virtual void set( ulong_t value ) { - if constexpr( sizeof( T ) == sizeof( ulong_t ) ) { - *( ulong_t* )( &value_ ) = value; - return; - } - - memcpy( &value_, &value, sizeof( value_ ) ); - } - - virtual hash_t get_hash( ) { - return name_; - } - - __forceinline bool is_floating_point( ) { - return is_float_; - } - - __forceinline bool is_integral( ) { - return is_integral_; - } - - virtual std::string get_data_string( ) override { - auto buffer = reinterpret_cast< char* >( _alloca( sizeof( T ) * 2 + 1 ) ); - auto data = reinterpret_cast< const uint8_t* >( &value_ ); - - for( size_t i = 0; i < sizeof( T ); i++ ) - sprintf( &buffer[ 2 * i ], "%02X", data[ i ] ); - - return buffer; - } - - virtual void load_from_string( const std::string& str ) override { - auto data = reinterpret_cast< uint8_t* >( &value_ ); - auto buffer = str.data( ); - - if( *buffer == 0 ) - return; - - for( size_t i = 0; i < sizeof( T ); i++ ) { - unsigned temp; - sscanf( &buffer[ 2 * i ], "%02X", &temp ); - data[ i ] = temp; - } - } - - -private: - hash_t name_; - bool is_float_; - bool is_integral_; - T value_; -}; \ No newline at end of file diff --git a/tf2/strings.hpp b/tf2/strings.hpp deleted file mode 100644 index dfdeb8b..0000000 --- a/tf2/strings.hpp +++ /dev/null @@ -1,162 +0,0 @@ -//-------------------------------------------------------------------------------- -//-- XorCompileTime.hpp -// -// Author: frk -// Date: 12.12.2015 -// -//-------------------------------------------------------------------------------- - -#pragma once -#include -#include -#include - -#define BEGIN_NAMESPACE( x ) namespace x { -#define END_NAMESPACE } - -BEGIN_NAMESPACE( strenc ) - -constexpr auto time = __TIME__; -constexpr auto seed = static_cast< int >( time[ 7 ] ) + static_cast< int >( time[ 6 ] ) * 10 + static_cast< int >( time[ 4 ] ) * 60 + static_cast< int >( time[ 3 ] ) * 600 + static_cast< int >( time[ 1 ] ) * 3600 + static_cast< int >( time[ 0 ] ) * 36000; - -// 1988, Stephen Park and Keith Miller -// "Random Number Generators: Good Ones Are Hard To Find", considered as "minimal standard" -// Park-Miller 31 bit pseudo-random number generator, implemented with G. Carta's optimisation: -// with 32-bit math and without division - -template < int N > -struct RandomGenerator { -private: - static constexpr unsigned a = 16807; // 7^5 - static constexpr unsigned m = 2147483647; // 2^31 - 1 - - static constexpr unsigned s = RandomGenerator< N - 1 >::value; - static constexpr unsigned lo = a * ( s & 0xFFFF ); // Multiply lower 16 bits by 16807 - static constexpr unsigned hi = a * ( s >> 16 ); // Multiply higher 16 bits by 16807 - static constexpr unsigned lo2 = lo + ( ( hi & 0x7FFF ) << 16 ); // Combine lower 15 bits of hi with lo's upper bits - static constexpr unsigned hi2 = hi >> 15; // Discard lower 15 bits of hi - static constexpr unsigned lo3 = lo2 + hi; - -public: - static constexpr unsigned max = m; - static constexpr unsigned value = lo3 > m ? lo3 - m : lo3; -}; - -template <> -struct RandomGenerator< 0 > { - static constexpr unsigned value = seed; -}; - -template < int N, int M > -struct RandomInt { - static constexpr auto value = RandomGenerator< N + 1 >::value % M; -}; - -template < int N > -struct RandomChar { - static const char value = static_cast< char >( 1 + RandomInt< N, 0x7F - 1 >::value ); -}; - -template < size_t N, int K > -struct XorString { -private: - const char _key; - std::array< char, N + 1 > _encrypted; - bool decrypted = false; - - constexpr char enc( char c ) const { - return c ^ _key; - } - - char dec( char c ) const { - return c ^ _key; - } - -public: - template < size_t... Is > - constexpr __forceinline XorString( const char* const str, std::index_sequence< Is... > ) : _key( RandomChar< K >::value ), _encrypted{ enc( str[ Is ] )... } { - } - - __forceinline const char* decrypt( void ) { - if( !decrypted ) { - for( size_t i = 0; i < N; ++i ) { - _encrypted[ i ] = dec( _encrypted[ i ] ); - } - _encrypted[ N ] = '\0'; - decrypted = true; - } - printf( "N: %u K: %d str: %s address: %08x\n", N, K, _encrypted.data( ), _encrypted.data( ) ); - - return _encrypted.data( ); - } -}; - -//-------------------------------------------------------------------------------- -//-- Note: XorStr will __NOT__ work directly with functions like printf. -// To work with them you need a wrapper function that takes a const char* -// as parameter and passes it to printf and alike. -// -// The Microsoft Compiler/Linker is not working correctly with variadic -// templates! -// -// Use the functions below or use std::cout (and similar)! -//-------------------------------------------------------------------------------- - -static auto w_printf = [ ]( const char* fmt, ... ) { - va_list args; - va_start( args, fmt ); - vprintf_s( fmt, args ); - va_end( args ); -}; - -static auto w_printf_s = [ ]( const char* fmt, ... ) { - va_list args; - va_start( args, fmt ); - vprintf_s( fmt, args ); - va_end( args ); -}; - -static auto w_sprintf = [ ]( char* buf, const char* fmt, ... ) { - va_list args; - va_start( args, fmt ); - vsprintf( buf, fmt, args ); - va_end( args ); -}; - -static auto w_sprintf_s = [ ]( char* buf, size_t buf_size, const char* fmt, ... ) { - va_list args; - va_start( args, fmt ); - vsprintf_s( buf, buf_size, fmt, args ); - va_end( args ); -}; - -//for compatibility with debug mode -struct debug_ret { -private: - const char* ret; - -public: - debug_ret( const char* str ) : ret( str ) { }; - - auto decrypt( ) { - return ret; - } -}; - -constexpr size_t strlen_ct( const char* const str ) { - size_t out = 1; - - for( ; str[ out ] != '\0'; ++out ); - - return out; -} - -#if 0 -#define xors_raw( s ) ( strenc::XorString< strenc::strlen_ct( s ), __COUNTER__ >( s, std::make_index_sequence< sizeof( s ) - 1>() ) ) -#define xors( s ) ( strenc::XorString< strenc::strlen_ct( s ), __COUNTER__ >( s, std::make_index_sequence< sizeof( s ) - 1>() ).decrypt() ) -#else -#define xors_raw( s ) ( [ ]{ strenc::debug_ret ret{ s }; return ret; }( ) ) -#define xors( s ) ( s ) -#endif - -END_NAMESPACE \ No newline at end of file diff --git a/tf2/test_cso2.vcxproj b/tf2/test_cso2.vcxproj deleted file mode 100644 index 52b6d12..0000000 --- a/tf2/test_cso2.vcxproj +++ /dev/null @@ -1,377 +0,0 @@ - - - - - Debug - Win32 - - - pHit - Win32 - - - pHit - x64 - - - Release - Win32 - - - Debug - x64 - - - Release - x64 - - - - {DD486C1B-C911-42B8-AB24-A9102A23DC02} - Win32Proj - test_cso2 - 10.0.16299.0 - tf2_base - - - - DynamicLibrary - true - v141 - Unicode - - - DynamicLibrary - false - v141 - true - MultiByte - - - DynamicLibrary - false - v141 - true - MultiByte - - - DynamicLibrary - true - v141 - Unicode - - - DynamicLibrary - false - v141 - true - Unicode - - - DynamicLibrary - false - v141 - true - Unicode - - - - - - - - - - - - - - - - - - - - - - - - - - - true - $(SolutionDir)\bin\ - C:\Program Files %28x86%29\Microsoft DirectX SDK %28June 2010%29\Include;$(IncludePath) - C:\Program Files %28x86%29\Microsoft DirectX SDK %28June 2010%29\Lib\x86;$(LibraryPath) - - - true - - - false - $(SolutionDir)\bin\$(Configuration)\ - C:\Program Files %28x86%29\Microsoft DirectX SDK %28June 2010%29\Include;$(IncludePath) - C:\Program Files %28x86%29\Microsoft DirectX SDK %28June 2010%29\Lib\x86;$(LibraryPath) - - - false - $(SolutionDir)\bin\$(Configuration)\ - C:\Program Files %28x86%29\Microsoft DirectX SDK %28June 2010%29\Include;$(IncludePath) - C:\Program Files %28x86%29\Microsoft DirectX SDK %28June 2010%29\Lib\x86;$(LibraryPath) - - - false - - - false - - - - - - Level2 - Disabled - WIN32;_DEBUG;_WINDOWS;_USRDLL;TEST_CSO2_EXPORTS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - true - false - /Zc:threadSafeInit- %(AdditionalOptions) /std:c++latest - - - Windows - true - - - - - - - Level3 - Disabled - _DEBUG;_WINDOWS;_USRDLL;TEST_CSO2_EXPORTS;%(PreprocessorDefinitions) - /Zc:threadSafeInit- /std:c++latest %(AdditionalOptions) - - - Windows - true - - - - - Level3 - - - MaxSpeed - true - true - WIN32;NDEBUG;_WINDOWS;_USRDLL;TEST_CSO2_EXPORTS;%(PreprocessorDefinitions) - C:\HL-SDK\mp\game\shared;C:\HL-SDK\mp\game\client;C:\HL-SDK\mp\common;C:\HL-SDK\mp\common\xbox;C:\HL-SDK\mp\public\tier3;C:\HL-SDK\mp\public\tier2;C:\HL-SDK\mp\public\tier1;C:\HL-SDK\mp\public\tier0;C:\HL-SDK\mp\public;C:\HL-SDK\mp\tier1 - /Zc:threadSafeInit- %(AdditionalOptions) /std:c++latest - AnySuitable - - - Windows - true - true - true - - - - - Level3 - - - MaxSpeed - true - true - WIN32;NDEBUG;_WINDOWS;_USRDLL;TEST_CSO2_EXPORTS;%(PreprocessorDefinitions) - C:\HL-SDK\mp\game\shared;C:\HL-SDK\mp\game\client;C:\HL-SDK\mp\common;C:\HL-SDK\mp\common\xbox;C:\HL-SDK\mp\public\tier3;C:\HL-SDK\mp\public\tier2;C:\HL-SDK\mp\public\tier1;C:\HL-SDK\mp\public\tier0;C:\HL-SDK\mp\public;C:\HL-SDK\mp\tier1 - /Zc:threadSafeInit- %(AdditionalOptions) /std:c++latest - AnySuitable - - - Windows - true - true - true - - - - - Level3 - - - MaxSpeed - true - true - NDEBUG;_WINDOWS;_USRDLL;TEST_CSO2_EXPORTS;%(PreprocessorDefinitions) - C:\HL-SDK\mp\game\shared;C:\HL-SDK\mp\game\client;C:\HL-SDK\mp\common;C:\HL-SDK\mp\common\xbox;C:\HL-SDK\mp\public\tier3;C:\HL-SDK\mp\public\tier2;C:\HL-SDK\mp\public\tier1;C:\HL-SDK\mp\public\tier0;C:\HL-SDK\mp\public;C:\HL-SDK\mp\tier1 - - - Windows - true - true - true - - - - - Level3 - - - MaxSpeed - true - true - NDEBUG;_WINDOWS;_USRDLL;TEST_CSO2_EXPORTS;%(PreprocessorDefinitions) - C:\HL-SDK\mp\game\shared;C:\HL-SDK\mp\game\client;C:\HL-SDK\mp\common;C:\HL-SDK\mp\common\xbox;C:\HL-SDK\mp\public\tier3;C:\HL-SDK\mp\public\tier2;C:\HL-SDK\mp\public\tier1;C:\HL-SDK\mp\public\tier0;C:\HL-SDK\mp\public;C:\HL-SDK\mp\tier1 - - - Windows - true - true - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/tf2/test_cso2.vcxproj.filters b/tf2/test_cso2.vcxproj.filters deleted file mode 100644 index d9d322d..0000000 --- a/tf2/test_cso2.vcxproj.filters +++ /dev/null @@ -1,428 +0,0 @@ - - - - - - - features - - - sdk - - - data - - - util - - - features - - - context - - - hooks - - - hooks - - - util - - - sdk - - - hooks - - - hooks - - - util - - - sdk - - - features - - - hooks - - - util - - - util - - - util - - - hooks - - - - util - - - util - - - data - - - hooks - - - sdk - - - features - - - features - - - features - - - features - - - hooks - - - hooks - - - hooks - - - hooks - - - hooks - - - hooks - - - hooks - - - hooks - - - hooks - - - hooks - - - features - - - features - - - util - - - hooks\hookers - - - features - - - - - - sdk - - - sdk - - - sdk - - - sdk - - - sdk - - - sdk - - - sdk - - - sdk - - - sdk - - - sdk - - - sdk - - - sdk - - - sdk - - - sdk - - - data - - - data - - - data - - - features - - - data - - - data - - - util - - - features - - - sdk - - - sdk - - - sdk - - - features - - - sdk - - - sdk - - - sdk - - - sdk - - - sdk - - - sdk - - - protection - - - context - - - util - - - hooks - - - util - - - sdk - - - sdk - - - sdk - - - util - - - sdk - - - sdk - - - sdk - - - features - - - sdk - - - menu - - - menu - - - menu - - - menu - - - menu - - - menu - - - menu - - - menu - - - menu - - - menu - - - menu - - - menu - - - menu - - - menu - - - menu - - - menu - - - util - - - util - - - util - - - util - - - util - - - - - protection - - - util - - - - - util - - - sdk - - - sdk - - - util - - - hooks\hookers - - - sdk - - - sdk - - - sdk - - - util - - - sdk - - - features - - - features - - - features - - - features - - - hooks\hookers - - - - - {3662005c-363b-4165-98d1-4cd08efa5aec} - - - {9b96d956-b922-4bc1-a7fd-448a79007f56} - - - {971e8665-630e-40f6-a426-a9c59476dd28} - - - {7abe95b2-6694-4252-9044-b0a3b6ca500d} - - - {280b6489-8704-41f7-98d1-76e4510e59b1} - - - {45735c33-3420-447c-9257-46d489466c79} - - - {8f34dc36-01d7-4458-a53a-f3698e843b94} - - - {bf4d8bec-9f02-4e3b-99bd-a328befb5cd3} - - - {2c764ae7-bdc8-4a36-b752-8ac395c2c006} - - - \ No newline at end of file diff --git a/tf2/ui.h b/tf2/ui.h deleted file mode 100644 index bafb2ce..0000000 --- a/tf2/ui.h +++ /dev/null @@ -1,374 +0,0 @@ -#pragma once -#include "ui_base_item.h" -#include "ui_menu.h" -#include "ui_form.h" -#include "ui_render.h" -#include "ui_checkbox.h" -#include "ui_tab_manager.h" -#include "ui_slider.h" -#include "ui_dropdown.h" -#include "ui_key_picker.h" -#include "ui_button.h" -#include "ui_color_picker.h" -#include "ui_label.h" -//#include "ui_itemlist.h" -//#include "ui_itemlist_def.h" - -#include "settings.h" -#include "base_cheat.h" - -namespace ui -{ - int current_category = 0; - - static std::string date_str = __DATE__; - auto menu = std::make_shared< ui::c_menu >( 10, 10, 580, 470, xors( "quebot" ), - __DATE__ ); - - static void render( ) { - static bool was_setup = false; - if( !was_setup ) { - std::transform( date_str.begin( ), date_str.end( ), date_str.begin( ), - [ ]( char c ) { return ::tolower( c ); } - ); - - menu.reset( ); - menu = std::make_shared< ui::c_menu >( 10, 10, 580, 470, xors( "moneybot - tf2" ), - date_str.c_str( ) ); - auto tab_sheet = std::make_shared< ui::c_tab_manager >( ); - - //todo: replace with icons? - auto tab_legit = std::make_shared< ui::c_tab_sheet >( xors( "legit" ), &icons::sprite_legit ); { - auto subtab_sheet = std::make_shared< ui::c_subtab_manager >( ); - - auto subtab_main = std::make_shared< ui::c_tab_sheet >( xors( "main" ) ); { - auto left_column = std::make_shared< ui::base_item >( 0, 0, 0, 0 ); - auto right_column = std::make_shared< ui::base_item >( 220, -5, 0, 0 ); - - auto main_form = std::make_shared< ui::c_form >( 0, 0, 215, 0, xors( "main" ) ); { - main_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "enabled" ), &g_settings.legit.enabled ) ); - auto activation_dropdown = std::make_shared< ui::c_dropdown< > >( - 0, 0, 120, xors( "activation type" ), - &g_settings.legit.activation_type, - &ui::dropdowns::activation_types_aimbot ); - activation_dropdown->add_item( std::make_shared< ui::c_key_picker_small >( 195, 0, &g_settings.legit.key ) )->set_cond( - [ ]( ) { return g_settings.legit.activation_type == 1; } ); - main_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "friendlies" ), &g_settings.legit.friendlies ) ); - main_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "aim assist" ), &g_settings.legit.assist ) ); - - main_form->add_item( activation_dropdown ); - } - - auto smooth_form = std::make_shared< ui::c_form >( 0, 0, 215, 0, xors( "smoothing" ) ); { - smooth_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "dynamic smoothing" ), &g_settings.legit.dynamic_smoothing ) ); - smooth_form->add_item( std::make_shared< ui::c_slider< size_t > >( 0, 0, 120, 2, 28, xors( "sample size" ), &g_settings.legit.sample_size ) ); - smooth_form->add_item( std::make_shared< ui::c_slider< float > >( 0, 0, 120, 0.1f, 2.0f, xors( "multiplier" ), &g_settings.legit.smooth_factor ) ); - } - - auto backtracking_form = std::make_shared< ui::c_form >( 0, 0, 215, 0, xors( "backtracking" ) ); { - backtracking_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "enabled" ), &g_settings.legit.backtracking ) ); - backtracking_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "target" ), &g_settings.legit.backtracking_target ) ); - auto visualize_checkbox = backtracking_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "visualize" ), &g_settings.legit.backtracking_visualize ) ); - visualize_checkbox->add_item( std::make_shared< ui::c_color_picker >( 175, 2, 15, &g_settings.legit.backtracking_col ) ); - visualize_checkbox->set_cond( [ ] { return !g_settings.misc.hide_from_obs( ); } ); - - backtracking_form->add_item( std::make_shared< ui::c_slider< float > >( 0, 0, 120, 0.f, 50.f, xors( "max fov" ), &g_settings.legit.backtracking_fov ) ); - backtracking_form->add_item( std::make_shared< ui::c_slider< float > >( 0, 0, 120, 0.f, 0.2f, xors( "max time" ), &g_settings.legit.backtracking_time, "s" ) ); - } - - auto triggerbot_form = std::make_shared< ui::c_form >( 0, 0, 215, 0, xors( "triggerbot" ) ); { - triggerbot_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "enabled" ), &g_settings.legit.triggerbot ) )->add_item( - std::make_shared< ui::c_key_picker_small >( 195, 0, &g_settings.legit.trigger_key ) ); - - triggerbot_form->add_item( std::make_shared< ui::c_slider< float > >( 0, 0, 120, 0.f, 0.2f, xors( "trigger delay" ), &g_settings.legit.trigger_delay, "s" ) - )->set_cond( [ ] { return g_settings.legit.triggerbot( ); } ); - } - - left_column->add_item( main_form ); - left_column->add_item( smooth_form ); - - right_column->add_item( backtracking_form ); - right_column->add_item( triggerbot_form ); - - subtab_main->add_item( left_column ); - subtab_main->add_item( right_column ); - } - - //make a subtab for each weapon type? - auto subtab_weapons = std::make_shared< ui::c_tab_sheet >( xors( "weapons" ) ); { - auto left_column = std::make_shared< ui::base_item >( 0, 0, 0, 0 ); - auto right_column = std::make_shared< ui::base_item >( 220, -5, 0, 0 ); - - auto general_form = std::make_shared< ui::c_form >( 0, 0, 215, 0, xors( "general" ) ); { - general_form->add_item( std::make_shared< ui::c_slider< float > >( 0, 0, 140, 0.f, 40.f, xors( "fov" ), &g_settings.legit.primary.m_fov ) ); - general_form->add_item( std::make_shared< ui::c_slider< float > >( 0, 0, 140, 0.f, 50.f, xors( "speed" ), &g_settings.legit.primary.m_speed ) ); - general_form->add_item( std::make_shared< ui::c_dropdown< > >( 0, 0, 120, xors( "bone - dropdown" ), &g_settings.legit.primary.m_bone, &ui::dropdowns::aimbot_bone ) ); - general_form->add_item( std::make_shared< ui::c_slider< float > >( 0, 0, 140, 0.f, 1.f, xors( "assist strength" ), &g_settings.legit.primary.m_assist_strength ) ); - } - - auto snipers_form = std::make_shared< ui::c_form >( 0, 0, 215, 0, xors( "snipers" ) ); { - snipers_form->add_item( std::make_shared< ui::c_slider< float > >( 0, 0, 140, 0.f, 40.f, xors( "fov" ), &g_settings.legit.melee.m_fov ) ); - snipers_form->add_item( std::make_shared< ui::c_slider< float > >( 0, 0, 140, 0.f, 50.f, xors( "speed" ), &g_settings.legit.melee.m_speed ) ); - snipers_form->add_item( std::make_shared< ui::c_dropdown< > >( 0, 0, 120, xors( "bone - dropdown" ), &g_settings.legit.melee.m_bone, &ui::dropdowns::aimbot_bone ) ); - snipers_form->add_item( std::make_shared< ui::c_slider< float > >( 0, 0, 140, 0.f, 1.f, xors( "assist strength" ), &g_settings.legit.melee.m_assist_strength ) ); - } - - auto rifles_form = std::make_shared< ui::c_form >( 0, 0, 215, 0, xors( "rifles" ) ); { - rifles_form->add_item( std::make_shared< ui::c_slider< float > >( 0, 0, 140, 0.f, 40.f, xors( "fov" ), &g_settings.legit.secondary.m_fov ) ); - rifles_form->add_item( std::make_shared< ui::c_slider< float > >( 0, 0, 140, 0.f, 50.f, xors( "speed" ), &g_settings.legit.secondary.m_speed ) ); - rifles_form->add_item( std::make_shared< ui::c_dropdown< > >( 0, 0, 120, xors( "bone - dropdown" ), &g_settings.legit.secondary.m_bone, &ui::dropdowns::aimbot_bone ) ); - rifles_form->add_item( std::make_shared< ui::c_slider< float > >( 0, 0, 140, 0.f, 1.f, xors( "assist strength" ), &g_settings.legit.secondary.m_assist_strength ) ); - } - - - - left_column->add_item( general_form ); - left_column->add_item( snipers_form ); - right_column->add_item( rifles_form ); - - subtab_weapons->add_item( left_column ); - subtab_weapons->add_item( right_column ); - } - - subtab_sheet->add_item( subtab_weapons ); - subtab_sheet->add_item( subtab_main ); - - tab_legit->add_item( subtab_sheet ); - } - - - auto tab_rage = std::make_shared< ui::c_tab_sheet >( xors( "rage" ), &icons::sprite_rage ); { - - - - } - - - auto tab_visuals = std::make_shared< ui::c_tab_sheet >( xors( "visuals" ), &icons::sprite_visuals ); { - auto subtab_sheet = std::make_shared< ui::c_subtab_manager >( ); - - auto subtab_players = std::make_shared< ui::c_tab_sheet >( xors( "players" ) ); { - auto left_column = std::make_shared< ui::base_item >( 0, 0, 0, 0 ); - auto right_column = std::make_shared< ui::base_item >( 220, -5, 0, 0 ); - - auto main_form = std::make_shared< ui::c_form >( 0, 0, 215, 0, xors( "main" ) ); { - main_form->add_item( std::make_shared< ui::c_dropdown< > >( 0, 0, 120, xors( "activation type" ), &g_settings.visuals.activation_type, &dropdowns::activation_type_visuals ) )->add_item( - std::make_shared< ui::c_key_picker_small >( 195, 0, &g_settings.visuals.key ) )->set_cond( [ ]( ) { return g_settings.visuals.activation_type > 1; } ); - main_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "friendlies" ), &g_settings.visuals.friendlies ) ); - } - - auto player_form = std::make_shared< ui::c_form >( 0, 0, 215, 0, xors( "players" ) ); { - auto box_checkbox = player_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "box" ), &g_settings.visuals.box ) ); - box_checkbox->add_item( std::make_shared< ui::c_color_picker >( 160, 4, 15, &g_settings.visuals.box_enemy( ) ) ); - box_checkbox->add_item( std::make_shared< ui::c_color_picker >( 180, -9, 15, &g_settings.visuals.box_friendly( ) ) )->set_cond( - [ ]( ) { return g_settings.visuals.friendlies; } ); - - auto glow_checkbox = player_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "glow - test" ), &g_settings.visuals.glow ) ); - glow_checkbox->add_item( std::make_shared< ui::c_color_picker >( 160, 2, 15, &g_settings.visuals.glow_enemy ) ); - glow_checkbox->add_item( std::make_shared< ui::c_color_picker >( 180, -11, 15, &g_settings.visuals.glow_friendly ) )->set_cond( - [ ]( ) { return g_settings.visuals.friendlies || g_settings.visuals.chams.friendlies; } ); - glow_checkbox->set_cond( [ ]( ) { return !g_settings.misc.hide_from_obs; } ); - - auto skeleton_checkbox = player_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "skeleton" ), &g_settings.visuals.skeleton ) ); - skeleton_checkbox->add_item( std::make_shared< ui::c_color_picker >( 160, 2, 15, &g_settings.visuals.skeleton_enemy ) ); - skeleton_checkbox->add_item( std::make_shared< ui::c_color_picker >( 180, -11, 15, &g_settings.visuals.skeleton_friendly ) )->set_cond( - [ ]( ) { return g_settings.visuals.friendlies; } ); - - player_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "dormant" ), &g_settings.visuals.dormant ) ); - player_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "health" ), &g_settings.visuals.health ) ); - player_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "name" ), &g_settings.visuals.name ) ); - player_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "weapon" ), &g_settings.visuals.weapon ) ); - - player_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "ammo" ), &g_settings.visuals.ammo ) ); - player_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "conditions - close" ), &g_settings.visuals.conditions ) ); - player_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "class" ), &g_settings.visuals.player_class ) ); - //player_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "resolver indicator - when i add hvh" ), &g_settings.visuals.resolver_indicator ) ); - player_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "sound" ), &g_settings.visuals.sound ) )->set_cond( [ ]( ) { return !g_settings.misc.hide_from_obs; } ); - player_form->add_item( std::make_shared< ui::c_slider< int > >( 0, 0, 120, 220, 500, &g_settings.visuals.sound_range ) )->set_cond( [ ]( ) { return g_settings.visuals.sound && !g_settings.misc.hide_from_obs; } ); - } - - auto hud_form = std::make_shared< ui::c_form >( 0, 0, 215, 0, xors( "hud" ) ); { - hud_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "out of pov - weird angles" ), &g_settings.visuals.out_of_pov ) ); - hud_form->add_item( std::make_shared< ui::c_slider< float > >( 0, 0, 120, 0.25f, 1.f, &g_settings.visuals.out_of_pov_radius ) - )->set_cond( [ ]( ) { return g_settings.visuals.out_of_pov( ); } ); - - hud_form->add_item( std::make_shared< ui::c_slider< int > >( 0, 0, 120, 15, 40, &g_settings.visuals.out_of_pov_size, xors( "px" ) ) - )->set_cond( [ ]( ) { return g_settings.visuals.out_of_pov( ); } ); - //hud_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "hitmarkers - not done" ), &g_settings.visuals.hitmarkers ) ); no need - hud_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "spectator list" ), &g_settings.visuals.spec_list ) ); - } - - auto other_form = std::make_shared< ui::c_form >( 0, 0, 215, 0, xors( "other" ) ); { - //other_form->add_item( std::make_shared< ui::c_dropdown< > >( 0, 0, 120, xors( "bullet tracers - not done" ), &g_settings.visuals.bullet_tracers, &dropdowns::tracer_type ) ); no bullet_impact event or any equivalent - other_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "floating ragdolls - hopefully" ), &g_settings.visuals.floating_ragdolls ) ); - } - - auto chams_form = std::make_shared< ui::c_form >( 0, 0, 215, 0, xors( "chams - crash" ), 170 ); { - chams_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "enabled" ), &g_settings.visuals.chams.enabled( ) ) ); - chams_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "through walls" ), &g_settings.visuals.chams.ignore_z( ) ) ); - chams_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "friendlies" ), &g_settings.visuals.chams.friendlies( ) ) ); - chams_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "flat" ), &g_settings.visuals.chams.flat( ) ) )->set_cond( [ ]( ) { return !g_settings.misc.hide_from_obs( ); } ); - chams_form->add_item( std::make_shared< ui::c_slider< float > >( 0, 0, 120, 0.f, 1.f, xors( "reflectivity" ), &g_settings.visuals.chams.reflectivity ) - )->set_cond( [ ]( ) { return !g_settings.visuals.chams.flat && !g_settings.misc.hide_from_obs; } ); - - chams_form->add_item( std::make_shared< ui::c_slider< float > >( 0, 0, 120, 0.f, 1.f, xors( "shine" ), &g_settings.visuals.chams.shine ) - )->set_cond( [ ]( ) { return !g_settings.visuals.chams.flat && !g_settings.misc.hide_from_obs; } ); - - chams_form->add_item( std::make_shared< ui::c_color_picker >( 0, 0, 120, xors( "friendlies visible" ), &g_settings.visuals.chams.color_visible_friendly( ) ) )->set_cond( - [ ]( ) { return g_settings.visuals.chams.friendlies( ); } ); - chams_form->add_item( std::make_shared< ui::c_color_picker >( 0, 0, 120, xors( "friendlies hidden" ), &g_settings.visuals.chams.color_hidden_friendly( ) ) )->set_cond( - [ ]( ) { return g_settings.visuals.chams.friendlies( ) && g_settings.visuals.chams.ignore_z( ); } ); - chams_form->add_item( std::make_shared< ui::c_color_picker >( 0, 0, 120, xors( "enemies visible" ), &g_settings.visuals.chams.color_visible_enemy( ) ) ); - chams_form->add_item( std::make_shared< ui::c_color_picker >( 0, 0, 120, xors( "enemies hidden" ), &g_settings.visuals.chams.color_hidden_enemy( ) ) )->set_cond( - [ ]( ) { return g_settings.visuals.chams.ignore_z( ); } ); - } - - chams_form->set_cond( [ ]( ) { return !g_settings.misc.hide_from_obs( ); } ); - - left_column->add_item( main_form ); - left_column->add_item( player_form ); - - right_column->add_item( hud_form ); - right_column->add_item( other_form ); - right_column->add_item( chams_form ); - - subtab_players->add_item( left_column ); - subtab_players->add_item( right_column ); - } - - auto subtab_other = std::make_shared< ui::c_tab_sheet >( xors( "other" ) ); { - auto left_column = std::make_shared< ui::base_item >( 0, 0, 0, 0 ); - auto right_column = std::make_shared< ui::base_item >( 220, -5, 0, 0 ); - - auto world_form = std::make_shared< ui::c_form >( 0, 0, 215, 0, xors( "world" ) ); { - world_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "world modulate - not done" ), &g_settings.visuals.world_modulate ) - )->set_cond( [ ]( ) { return !g_settings.misc.hide_from_obs( ); } ); - world_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "night mode - not done" ), &g_settings.visuals.night_mode ) - )->set_cond( [ ]( ) { return g_settings.visuals.world_modulate && !g_settings.misc.hide_from_obs( ); } ); - world_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "transparent props - maybe" ), &g_settings.visuals.transparent_props ) //maybe? - )->set_cond( [ ]( ) { return g_settings.visuals.world_modulate && !g_settings.misc.hide_from_obs( ); } ); - - world_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "fullbright - not done" ), &g_settings.visuals.fullbright ) ); - world_form->add_item( std::make_shared< ui::c_dropdown< > >( 0, 0, 120, xors( "projectiles" ), &g_settings.visuals.projectile_esp, &dropdowns::world_esp_type ) - )->add_item( std::make_shared< ui::c_color_picker >( 180, 4, 15, &g_settings.visuals.building_esp_clr( ) ) ); - - world_form->add_item( std::make_shared< ui::c_dropdown< > >( 0, 0, 120, xors( "buildings" ), &g_settings.visuals.building_esp, &dropdowns::world_esp_type ) - )->add_item( std::make_shared< ui::c_color_picker >( 180, 4, 15, &g_settings.visuals.building_esp_clr( ) ) ); - - world_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "building owner - not done" ), &g_settings.visuals.building_owner ) - )->set_cond( [ ]( ) { return g_settings.visuals.building_esp == 1 || g_settings.visuals.building_esp == 3; } ); - } - - //auto local_form = std::make_shared< ui::c_form >( 0, 0, 215, 0, xors( "local player" ) ); { - // local_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "projectile prediction - hopefully" ), &g_settings.visuals.grenade_prediction( ) ) ); - //} - - auto view_form = std::make_shared< ui::c_form >( 0, 0, 215, 0, xors( "view" ) ); { - view_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "watermark" ), &g_settings.misc.watermark ) ); - view_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "thirdperson - crash" ), &g_settings.misc.thirdperson( ) ) )->add_item( - std::make_shared< ui::c_key_picker_small >( 195, 0, &g_settings.misc.thirdperson_key ) - ); - view_form->add_item( std::make_shared< ui::c_slider< int > >( 0, 0, 120, 0, 40, xors( "viewmodel fov" ), &g_settings.misc.viewmodel_fov( ) ) ); - view_form->add_item( std::make_shared< ui::c_slider< int > >( 0, 0, 120, 90, 130, xors( "view fov - broken" ), &g_settings.misc.fov_changer( ) ) ); - } - - auto removals_form = std::make_shared< ui::c_form >( 0, 0, 215, 0, xors( "removals" ) ); { - removals_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "no scope - not done" ), &g_settings.misc.no_scope ) ); - removals_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "transparent viewmodel - hopefully" ), &g_settings.misc.transparent_vm ) ); - removals_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "no post processing - not done" ), &g_settings.misc.disable_post_process ) ); - } - - left_column->add_item( world_form ); - //left_column->add_item( local_form ); - - right_column->add_item( view_form ); - right_column->add_item( removals_form ); - - subtab_other->add_item( left_column ); - subtab_other->add_item( right_column ); - } - - subtab_sheet->add_item( subtab_other ); - subtab_sheet->add_item( subtab_players ); - - tab_visuals->add_item( subtab_sheet ); - } - - - auto tab_misc = std::make_shared< ui::c_tab_sheet >( xors( "miscellaneous" ), &icons::sprite_misc ); { - auto subtab_sheet = std::make_shared< ui::c_subtab_manager >( ); - - auto subtab_general = std::make_shared< ui::c_tab_sheet >( xors( "general" ) ); { - auto column_left = subtab_general->add_item( std::make_shared< ui::base_item >( 0, 0, 0, 0 ) ); - auto column_right = subtab_general->add_item( std::make_shared< ui::base_item >( 220, -5, 0, 0 ) ); - - auto movement_form = std::make_shared< ui::c_form >( 0, 0, 215, 0, xors( "movement" ) ); { - movement_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "auto strafe" ), &g_settings.misc.auto_strafe ) ); - movement_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "bhop" ), &g_settings.misc.bunny_hop( ) ) ); - } - - auto identity_form = std::make_shared< ui::c_form >( 0, 1, 215, 0, xors( "timeshift - not done" ) ); { - //enabled (key) - //on attack - //value - } - - - auto helpers_form = std::make_shared< ui::c_form >( 0, 0, 215, 0, xors( "helpers - not done" ) ); { - //no push - //auto backstab - // - } - - auto other_form = std::make_shared< ui::c_form >( 0, 0, 215, 0, xors( "other" ) ); { - other_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "remove gun sounds" ), &g_settings.misc.no_sound ) ); - other_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "hide from obs" ), &g_settings.misc.hide_from_obs ) ); - //other_form->add_item( std::make_shared< ui::c_button >( 0, 0, 120, 20, xors( "unlock hidden cvars" ), [ ]( ) { g_cheat.extra.unlock_hidden_cvars( ); } ) ); - } - - column_left->add_item( movement_form ); - column_right->add_item( identity_form ); - column_right->add_item( helpers_form ); - column_left->add_item( other_form ); - - } - subtab_sheet->add_item( subtab_general ); - - tab_misc->add_item( subtab_sheet ); - } - - - auto tab_config = std::make_shared< ui::c_tab_sheet >( xors( "config" ), &icons::sprite_config ); { - auto cfg_form = std::make_shared< ui::c_form >( 0, 10, 200, 93, xors( "config" ) ); - cfg_form->add_item( std::make_shared< ui::c_dropdown< > >( 0, 0, 180, xors( "setting" ), &g_settings.menu.cur_setting, &dropdowns::configs ) ); - cfg_form->add_item( std::make_shared< ui::c_button >( 0, 0, 85, 20, xors( "save" ), [ ]( ) { g_settings.save( ); } ) ); - cfg_form->add_item( std::make_shared< ui::c_button >( 95, -25, 85, 20, xors( "load" ), [ ]( ) { g_settings.load( ); } ) ); - //cfg_form->add_item( std::make_shared< ui::c_button >( 0, -25, 85, 20, xors( "to clipboard" ), [ ]( ) { g_settings.copy_to_clipboard( ); } ) ); - //cfg_form->add_item( std::make_shared< ui::c_button >( 95, -50, 85, 20, xors( "from clipboard" ), [ ]( ) { g_settings.load_from_clipboard( ); } ) ); - cfg_form->add_item( std::make_shared< ui::c_checkbox >( 0, -25, xors( "anti-untrusted" ), &g_settings.menu.anti_untrusted ) ); - - tab_config->add_item( cfg_form ); - } - - tab_sheet->add_item( tab_config ); - tab_sheet->add_item( tab_misc ); - tab_sheet->add_item( tab_visuals ); - tab_sheet->add_item( tab_rage ); - tab_sheet->add_item( tab_legit ); - - menu->add_item( tab_sheet ); - - was_setup = true; - } - - render_item( menu.get( ) ); - - //reset the menu if home is pressed for debugging purposes - if( g_input.is_key_pressed( KEYS_END ) ) { - menu.reset( ); - menu = std::make_shared< c_menu >( 10, 10, 580, 470, xors( "golden cheat" ) ); - was_setup = false; - } - - } -} \ No newline at end of file diff --git a/tf2/ui_base_item.h b/tf2/ui_base_item.h deleted file mode 100644 index 68c2198..0000000 --- a/tf2/ui_base_item.h +++ /dev/null @@ -1,164 +0,0 @@ -#pragma once -#include -#include -#include - -#include "ui_draw.h" - -namespace ui -{ - //the offset between each item - constexpr int ITEM_OFFSET = 5; - - class base_item : public std::enable_shared_from_this< base_item > { - public: - base_item( ) { } - base_item( int x, int y, int w, int h, const char* name = nullptr ) : - m_x( x ), m_y( y ), m_width( w ), m_height( h ) { - if( name ) { - strcpy( m_text, name ); - } - } - - virtual void render( ) { }; - virtual bool is_hovered( ) { return false; } - virtual bool is_form( ) const { return false; } - - virtual void reset( ) { - m_y_offset = 0; - } - - virtual int get_total_height( ) const { - return m_height; - } - - void set_y_offset( int offset ) { - m_y_offset = offset; - } - - int get_y_offset( ) const { - return m_y_offset; - } - - auto add_item( std::shared_ptr< base_item > item ) { - item.get( )->m_parent = shared_from_this( ); - m_items.emplace( m_items.begin( ), item ); - - return item; - } - - auto& get_items( ) { return m_items; } - auto get_parent( ) { return m_parent; } - - virtual int x( ) const { return m_x; } - virtual int y( ) const { return m_y; } - virtual int w( ) const { return m_width; } - virtual int h( ) const { return m_height; } - - void set_x( int x ) { m_x = x; } - void set_y( int y ) { m_y = y; } - - void set_width( int w ) { m_width = w; } - void set_height( int h ) { m_height = h; } - - bool get_visible( ) const { - if( m_cond && !m_cond( ) ) { - return false; - } - - return m_visible; - } - - void set_cond( std::function< bool( ) > func ) { - m_cond = func; - } - - void set_visible( bool vis ) { m_visible = vis; } - void set_text( const char* text ) { - strcpy( m_text, text ); - } - auto get_text( ) const { - return m_text; - } - - std::shared_ptr< base_item > find_item( const char* name ) { - if( !m_items.empty( ) ) { - for( auto& it : m_items ) { - if( it->get_text( ) && !strcmp( it->get_text( ), name ) ) { - return it; - } - - auto it_find = it->find_item( name ); - if( it_find != it ) return it_find; - } - } - - return shared_from_this( ); - } - - auto get_top_parent( ) { - for( auto parent = m_parent; ; - parent = parent->get_parent( ) ) { - if( !parent->get_parent( ) ) { - return parent; - } - } - - return shared_from_this( ); - } - - int get_relative_x( ) { - int x = m_x; - for( auto parent = get_parent( ); !!parent; - parent = parent->get_parent( ) ) { - x += parent->x( ); - } - - return x; - } - - int get_relative_y( ) { - int y = m_y + get_y_offset( ); - for( auto parent = get_parent( ); !!parent; - parent = parent->get_parent( ) ) { - y += parent->y( ) + parent->get_y_offset( ); - } - - return y; - } - - void set_disabled( bool disabled ) { - m_disabled = disabled; - - for( auto& it : m_items ) { - it->set_disabled( disabled ); - } - } - - void set_disabled_callbacks( bool disabled ) { - auto top = get_top_parent( ); - - top->set_disabled( disabled ); - - m_disabled = false; - } - - protected: - int m_x{ }; - int m_y{ }; - - int m_width{ }; - int m_height{ }; - - //current y position for rendering - int m_y_offset{ }; - - bool m_visible = true; - bool m_disabled = false; - char m_text[ 256 ]{ }; - - std::shared_ptr< base_item > m_parent; - std::vector< std::shared_ptr< base_item > > m_items; - std::function< bool( ) > m_cond; - }; -} \ No newline at end of file diff --git a/tf2/ui_button.h b/tf2/ui_button.h deleted file mode 100644 index 022fc67..0000000 --- a/tf2/ui_button.h +++ /dev/null @@ -1,56 +0,0 @@ -#pragma once - -#include - -#include "ui_base_item.h" - -namespace ui -{ - class c_button : public base_item { - public: - c_button( int x, int y, int w, int h, const char* name, std::function< void( ) > fn ) : - base_item( x, y, w, h, name ), m_fn( fn ) { } - - virtual bool is_hovered( ) override { - if ( m_disabled ) return false; - - int x = get_relative_x( ); - int y = get_relative_y( ); - int h = m_height; - - int mouse_x, mouse_y; - ui_get_cursor_pos( mouse_x, mouse_y ); - - - return mouse_x >= x && mouse_x <= x + m_width - && mouse_y >= y && mouse_y <= y + h; - } - - - virtual void render( ) override { - int x = get_relative_x( ); - int y = get_relative_y( ); - - ui_draw_rect( x, y, m_width, m_height, ui_get_disabled_col( ) ); - ui_draw_outlined_rect( x - 1, y - 1, m_width + 1, m_height + 1, - is_hovered( ) ? ui_get_text_col( ) : ui_get_accent_col( ) ); - - if ( is_hovered( ) && g_input.is_key_pressed( KEYS_MOUSE1 ) ) { - ui_draw_rect( x, y, m_width, m_height, ui_get_bg_col( ) ); - if ( !m_mouse_held ) { - m_fn( ); - } - m_mouse_held = true; - } - else { - m_mouse_held = false; - } - - ui_draw_string( x + m_width / 2, y + 2, true, ui_get_text_col( ), m_text ); - } - - protected: - std::function< void( ) > m_fn; - bool m_mouse_held{ }; - }; -} \ No newline at end of file diff --git a/tf2/ui_checkbox.h b/tf2/ui_checkbox.h deleted file mode 100644 index 50cad1c..0000000 --- a/tf2/ui_checkbox.h +++ /dev/null @@ -1,68 +0,0 @@ -#pragma once -#include "ui_base_item.h" - -namespace ui -{ - class c_checkbox : public base_item { - public: - c_checkbox( int x, int y, const char* txt, bool* setting ) : - base_item( x, y, 16, 16, txt ), m_setting( setting ) { } - - virtual bool is_hovered( ) override { - if ( m_disabled ) return false; - - int mouse_x, mouse_y; - ui_get_cursor_pos( mouse_x, mouse_y ); - - int rel_x = get_relative_x( ); - int rel_y = get_relative_y( ); - - return mouse_x >= rel_x && mouse_x <= rel_x + m_width - && mouse_y >= rel_y && mouse_y <= rel_y + m_height; - } - - inline void render_checkbox( const int& x, const int& y ) { - clr_t col = ui_get_bg_col( ); - if ( is_hovered( ) ) { - col = *m_setting ? ui_get_accent_col( ) * 0.8f : ui_get_bg_col( ) * 1.3f; - } - else if ( *m_setting ) { - col = ui_get_accent_col( ); - } - - ui_draw_rect( x, y, m_width, m_height, ui_get_disabled_col( ) ); - ui_draw_rect( x + 1, y + 1, m_width - 2, m_height - 2, col ); - - //ui_draw_outlined_rect( x, y, m_width, m_height, ui_get_accent_col( ) ); - } - - inline void input( ) { - bool mouse_presesed = g_input.is_key_pressed( KEYS_MOUSE1 ); - - if ( is_hovered( ) && mouse_presesed ) { - if ( !m_mouse_held ) { - *m_setting = !*m_setting; - } - m_mouse_held = true; - } - else { - m_mouse_held = false; - } - } - - virtual void render( ) override { - int x = get_relative_x( ); - int y = get_relative_y( ); - - render_checkbox( x, y ); - input( ); - - - ui_draw_string( x + m_width + 6, y + 2, false, ui_get_text_col( ), m_text ); - } - - protected: - bool* m_setting; - bool m_mouse_held{ }; - }; -} \ No newline at end of file diff --git a/tf2/ui_color_picker.h b/tf2/ui_color_picker.h deleted file mode 100644 index 2711d29..0000000 --- a/tf2/ui_color_picker.h +++ /dev/null @@ -1,201 +0,0 @@ -#pragma once - -#include "ui_base_item.h" -#include "d3d.hpp" - -namespace ui -{ - class c_color_picker : public base_item { - static constexpr int BOX_WIDTH = 106; - static constexpr int BOX_HEIGHT = 125; - public: - c_color_picker( int x, int y, int w, const char* name, clr_t* setting ) : - base_item( x, y, w, 4, name ), m_setting( setting ), - m_has_text( true ) { } - - c_color_picker( int x, int y, int w, clr_t* setting ) : - base_item( x, y, w, 8, xors( "COLOR_PICKER" ) ), m_setting( setting ), - m_has_text( false ) { } - - virtual bool is_hovered( ) override { - if ( m_disabled ) return false; - - int x = get_relative_x( ); - int y = get_relative_y( ); - - int cursor_x, cursor_y; - ui_get_cursor_pos( cursor_x, cursor_y ); - - if ( m_has_text ) y += 12; - - if ( !m_active ) { - return cursor_x >= x && cursor_x <= x + m_width - && cursor_y >= y && cursor_y <= y + m_height; - } - - return cursor_x >= x && cursor_x <= x + BOX_WIDTH + 23 - && cursor_y >= y && cursor_y <= y + BOX_HEIGHT + 2; - } - - virtual int get_total_height( ) const override { - return m_has_text ? ( m_height + 12 ) : m_height; - } - - void input( ) { - bool active_backup = m_active; - bool active_changed = false; - - if ( is_hovered( ) && g_input.is_key_pressed( KEYS_MOUSE1 ) ) { - if ( !m_active ) { - m_mouse_held = true; - } - - m_active = true; - } - else if ( m_active && !is_hovered( ) && g_input.is_key_pressed( KEYS_MOUSE1 ) ) { - m_active = false; - } - else { - m_mouse_held = false; - } - - active_changed = active_backup != m_active; - if ( active_changed ) { - set_disabled_callbacks( m_active ); - } - - m_hue = m_setting->hue( ); - if ( m_hue > 1.0f ) { - m_hue -= 359.f; - } - - m_saturation = m_setting->saturation( ); - m_brightness = m_setting->brightness( ) / 255.f; - m_alpha = m_setting->a( ); - } - - void output( ) { - *m_setting = clr_t::from_hsb( m_hue, m_saturation, m_brightness ); - m_setting->a( ) = m_alpha; - } - - virtual void render( ) override { - int x = get_relative_x( ); - int y = get_relative_y( ); - - if ( m_has_text ) { - ui_draw_string( x + 2, y, false, ui_get_text_col( ), m_text ); - y += 12; - } - - input( ); - - if ( m_active ) { - RECT old_rect; - g_d3d.get_device( )->GetScissorRect( &old_rect ); - - RECT new_rect{ - x - 1, y - 1, - x + BOX_WIDTH + 22, - y + BOX_HEIGHT + 2 - }; - - g_d3d.get_device( )->SetScissorRect( &new_rect ); - - int mouse_x, mouse_y; - ui_get_cursor_pos( mouse_x, mouse_y ); - - clr_t bg_col( 0, 0, 0, 90 ); - ui_draw_rect( x, y, BOX_WIDTH + 20, BOX_HEIGHT, bg_col ); - ui_draw_outlined_rect( x - 1, y - 1, BOX_WIDTH + 22, BOX_HEIGHT + 2, ui_get_accent_col( ) ); - - for ( int i{ }; i < 100; i += 3 ) { - for ( int i2{ }; i2 < 100; i2 += 3 ) { - ui_draw_rect( x + i + 1, y + i2 + 1, 3, 3, - clr_t::from_hsb( m_hue, float( i2 ) * 0.01f, float( i ) * 0.01f ) ); - } - } - - if ( g_input.is_key_pressed( KEYS_MOUSE1 ) && !m_mouse_held - && mouse_x > x && mouse_x <= x + 100 - && mouse_y > y && mouse_y <= y + 100 ) { - - int mouse_x_c = std::clamp( mouse_x, x, x + 100 ); - int mouse_y_c = std::clamp( mouse_y, y, y + 100 ); - - int delta_y = std::clamp( mouse_y_c - y, 0, 100 ); - int delta_x = std::clamp( mouse_x_c - x, 0, 100 ); - - m_saturation = float( delta_y ) * 0.01f; - m_brightness = float( delta_x ) * 0.01f; - } - - auto is_hue_slider_hovered = [&]( ) -> bool { - return mouse_x > x + 110 && mouse_x < x + 122 - && mouse_y > y && mouse_y < y + 100; - }; - - auto draw_slider_hue = [&]( ) { - for ( int i{ }; i < 100; ++i ) { - auto cur_col = clr_t::from_hsb( float( i ) * 0.01f, m_saturation, m_brightness ); - - ui_draw_rect( x + 110, y + i + 1, 12, 2, cur_col ); - } - - ui_draw_outlined_rect( x + 109, y + int( m_hue * 100.f ) + 1, 14, 3, - is_hue_slider_hovered( ) ? ui_get_text_col( ) : ui_get_disabled_col( ) ); - }; - - auto is_alpha_slider_hovered = [&]( ) -> bool { - return mouse_x > x + 1 && mouse_x < x + 122 - && mouse_y > y + 110 && mouse_y < y + 124; - }; - - auto draw_slider_alpha = [&]( ) { - for ( int i{ 121 }; i >= 0; --i ) { - auto col = *m_setting; - col.a( ) = ( int )( float( i ) * 255.f / 121.f ); - - ui_draw_rect( x + i + 1, y + 110, 1, 12, col ); - } - - int a_pos = ( int )( float( m_alpha ) * 121.f / 255.f ); - ui_draw_outlined_rect( x + 1 + a_pos, y + 109, 3, 14, - is_alpha_slider_hovered( ) ? ui_get_text_col( ) : ui_get_disabled_col( ) ); - }; - - draw_slider_hue( ); - if ( is_hue_slider_hovered( ) && g_input.is_key_pressed( KEYS_MOUSE1 ) ) { - int delta = std::clamp( mouse_y - y, 0, 100 ); - m_hue = float( delta ) * 0.01f; - } - - draw_slider_alpha( ); - if ( is_alpha_slider_hovered( ) && g_input.is_key_pressed( KEYS_MOUSE1 ) ) { - int delta = std::clamp( mouse_x - x, 0, 121 ); - m_alpha = ( int )( float( delta ) * 255.f / 121.f ); - } - - output( ); - - g_d3d.get_device( )->SetScissorRect( &old_rect ); - } - else { - if ( is_hovered( ) ) { - ui_draw_rect( x - 1, y - 1, m_width + 2, m_height + 2, ui_get_text_col( ) ); - } - ui_draw_rect( x, y, m_width, m_height, *m_setting ); - } - } - - protected: - clr_t* m_setting = nullptr; - bool m_active = false; - bool m_mouse_held = false; - float m_saturation = 1.0f; - float m_brightness = 1.0f; - float m_hue = 0.f; - uint8_t m_alpha = 255; - bool m_has_text = false; - }; -} \ No newline at end of file diff --git a/tf2/ui_draw.h b/tf2/ui_draw.h deleted file mode 100644 index 4686bf0..0000000 --- a/tf2/ui_draw.h +++ /dev/null @@ -1,163 +0,0 @@ -#pragma once -#include "color.hpp" -#include "d3d.hpp" -#include "icons.hpp" -#include "d3d_sprite.hpp" -#include "input_system.hpp" - -namespace ui -{ - extern float get_tf2_frametime( ); - /*__forceinline auto ui_get_background_texture( ) { - static auto buffer = std::make_shared< byte[ 512 ] >( ); - static auto color = D3DCOLOR_RGBA( 27, 27, 27, 233 ); - static auto color_bright = D3DCOLOR_RGBA( 31, 31, 31, 255 ); - static IDirect3DTexture9* texture; - - if ( !texture ) { - for ( int i = 0; i < 512; i += 4 ) { - *( ulong_t* )( uintptr_t( buffer.get( ) ) + i ) = !( i % 12 ) ? color : color_bright; - } - - D3DXCreateTextureFromFileInMemory( g_d3d.get_device( ), buffer.get( ), 512, &texture ); - } - - return texture; - }*/ - - static float anim_time{ }; - - __forceinline void set_animtime( float animtime ) { - anim_time = animtime; - } - - __forceinline void setup_sprites( IDirect3DDevice9* device ) { - //fuck msvc - icons::sprite_legit.init( device, icons::legit_icon, icons::legit_size, 66, 66 ); - icons::sprite_rage.init( device, icons::rage_icon, icons::rage_size, 66, 66 ); - icons::sprite_visuals.init( device, icons::raw::visuals_raw, icons::visuals_size, 66, 66 ); - icons::sprite_misc.init( device, icons::misc_icon, icons::misc_size, 66, 66 ); - icons::sprite_config.init( device, icons::config_icon, icons::config_size, 66, 66 ); - } - - __forceinline clr_t ui_get_accent_col( ) { - clr_t col_start = { - g_settings.menu.menu_color_1r, - g_settings.menu.menu_color_1g, - g_settings.menu.menu_color_1b - }; - - clr_t col_end = { - g_settings.menu.menu_color_2r, - g_settings.menu.menu_color_2g, - g_settings.menu.menu_color_2b - }; - - clr_t col = clr_t::blend( col_start, col_end, anim_time ); - - return col; - } - - __forceinline clr_t& ui_get_disabled_col( ) { - static clr_t col = clr_t( 61, 61, 61, 255 ); - return col; - } - - __forceinline clr_t& ui_get_bg_col( ) { - static clr_t col = clr_t( 24, 25, 27, 255 ); - return col; - } - - __forceinline clr_t& ui_get_text_col( ) { - static clr_t col = clr_t( 221, 221, 221, 255 ); - return col; - } - - __forceinline void ui_draw_gradient( int x, int y, int w, int h, clr_t start, - clr_t end, GradientType_t type = GRADIENT_HORIZONTAL ) { - - g_d3d.draw_gradient( start, end, x, y, w, h, type ); - } - - __forceinline void ui_draw_line( int x, int y, int x1, int y1, clr_t color ) { - g_d3d.draw_line( color, x, y, x1, y1 ); - } - - __forceinline void ui_draw_rect( int x, int y, int w, int h, clr_t color ) { - g_d3d.draw_filled_rect( color, x, y, w, h ); - } - - __forceinline void ui_draw_outlined_rect( int x, int y, int w, int h, clr_t color ) { - g_d3d.draw_rect( color, x, y, w, h ); - } - - __forceinline void ui_draw_circle( int x, int y, int r, clr_t color, int res = 48 ) { - g_d3d.draw_circle( color, x, y, r, res ); - } - - __forceinline void ui_draw_filled_circle( int x, int y, int r, clr_t color, int res = 48 ) { - g_d3d.draw_filled_circle( color, x, y, r, res ); - } - - __forceinline void ui_draw_string( int x, int y, bool center, clr_t color, const char* str, ... ) { - char buf[ 2048 ]{ }; - va_list list{ }; - - __crt_va_start( list, str ); - vsprintf_s( buf, 2048, str, list ); - __crt_va_end( list ); - - g_d3d.draw_text( d3d::fonts.f_menu, color, x, y, - center ? ALIGN_CENTER : ALIGN_LEFT, D3DFONTFLAG_DROPSHADOW, buf ); - } - - __forceinline void ui_get_text_size( int& w, int& h, const char* text, ... ) { - char* buf = ( char* )_alloca( 2048 ); - va_list list{ }; - - __crt_va_start( list, text ); - vsprintf_s( buf, 2048, text, list ); - __crt_va_end( list ); - - w = g_d3d.get_text_width( d3d::fonts.f_menu, 0, buf ); - h = g_d3d.get_text_height( d3d::fonts.f_menu, 0, buf ); - } - - __forceinline void ui_get_cursor_pos( int& x, int& y ) { - g_input.get_cursor_pos( x, y ); - } - - __forceinline float ui_get_frametime( ) { - return get_tf2_frametime( ); - } - - __forceinline void ui_draw_cursor( ) { - const clr_t black( 0, 0, 0, 255 ), accent( ui_get_accent_col( ) ); - int x, y; - ui_get_cursor_pos( x, y ); - - - for( int i{ }; i <= 9; ++i ) { - ui_draw_line( x, y, x + i, y + 11, accent ); - } - - for( int i{ }; i <= 7; ++i ) { - ui_draw_line( x, y + 9 + i, x + i, y + 9, accent ); - } - - for( int i{ }; i <= 3; ++i ) { - ui_draw_line( x + 6 + i, y + 11, x, y + i, accent ); - } - - ui_draw_line( x + 5, y + 11, x + 8, y + 18, accent ); - ui_draw_line( x + 4, y + 11, x + 7, y + 18, accent ); - - ui_draw_line( x, y, x, y + 17, black ); - ui_draw_line( x, y + 17, x + 3, y + 14, black ); - ui_draw_line( x + 4, y + 14, x + 7, y + 19, black ); - ui_draw_line( x + 7, y + 18, x + 9, y + 18, black ); - ui_draw_line( x + 10, y + 18, x + 7, y + 12, black ); - ui_draw_line( x + 7, y + 12, x + 11, y + 12, black ); - ui_draw_line( x + 11, y + 12, x, y, black ); - } -} \ No newline at end of file diff --git a/tf2/ui_dropdown.h b/tf2/ui_dropdown.h deleted file mode 100644 index 0c4e990..0000000 --- a/tf2/ui_dropdown.h +++ /dev/null @@ -1,217 +0,0 @@ -#pragma once -#include "ui_dropdown_item.h" - -namespace ui -{ - template < typename t = int > - class c_dropdown : public base_item { - public: - c_dropdown( int x, int y, int w, const char* name, t* setting, - std::vector< dropdowns::dropdown_item_t< t > >* items, size_t max_items = 8 ) : - base_item( x, y, w, 16, name ), m_dropdown_items( items ), m_setting( setting ), - m_max_items( max_items ) { } - - virtual bool is_hovered( ) override { - if ( m_disabled ) return false; - - int x = get_relative_x( ); - int y = get_relative_y( ) + 12; - int h = m_height; - - int mouse_x, mouse_y; - ui_get_cursor_pos( mouse_x, mouse_y ); - - - return mouse_x >= x && mouse_x <= x + m_width - && mouse_y >= y && mouse_y <= y + h; - } - - inline bool is_any_item_hovered( ) { - if ( m_disabled || !m_active ) return false; - - int x = get_relative_x( ); - int y = get_relative_y( ) + m_height + 12; - int h = m_height * ( std::min< size_t >( - m_dropdown_items->size( ), m_max_items ) ); - - int mouse_x, mouse_y; - ui_get_cursor_pos( mouse_x, mouse_y ); - - - return mouse_x >= x && mouse_x <= x + m_width - && mouse_y >= y && mouse_y <= y + h; - } - - virtual int get_total_height( ) const override { - return m_height + 13; - } - - void draw_box( const int& x, const int& y, const char* str, bool hovered = false ) { - ui_draw_rect( x, y, m_width, m_height, hovered ? ui_get_disabled_col( ) : ui_get_bg_col( ) ); - ui_draw_line( x, y + m_height, x + m_width, y + m_height, ui_get_accent_col( ) ); - - ui_draw_string( x + m_width / 2, y + 2, true, ui_get_text_col( ), str ); - } - - void update_value( ) { - for ( auto& it : *m_dropdown_items ) { - if ( it.m_value == *m_setting ) { - m_selected_item = ⁢ - } - } - } - - void draw_items( const int& x, const int& y ) { - auto& items = *m_dropdown_items; - auto it = &items.front( ); - int offset = m_height + 1; - int hovered = 0; - int mouse_x, mouse_y; - ui_get_cursor_pos( mouse_x, mouse_y ); - - auto is_hovered = [ & ] ( int y_offset ) { - return mouse_x >= x && mouse_x <= x + m_width - && mouse_y >= y + y_offset && mouse_y <= y + y_offset + m_height; - }; - - - for ( size_t i = items.size( ) > m_max_items ? m_curr_scroll : 0; - i < std::min< size_t >( m_dropdown_items->size( ), m_max_items + m_curr_scroll ); - ++i, offset += m_height + 1 - ) { - it = &items.at( i ); - - draw_box( x, y + offset, it->m_name ); - - if ( is_hovered( offset ) ) { - hovered = offset; - if ( g_input.is_key_pressed( KEYS_MOUSE1 ) ) { - m_selected_item = it; - *m_setting = it->m_value; - m_active = false; - m_enable_time = GetTickCount( ) * 0.001f + 0.220f; - m_enable_next_frame = true; - } - } - } - - if ( hovered ) { - ui_draw_outlined_rect( x - 1, y - 1 + hovered, - m_width + 1, m_height + 1, ui_get_text_col( ) ); - } - } - - void input( ) { - bool active_backup = m_active; - bool active_changed = false; - - if ( is_hovered( ) && g_input.is_key_pressed( KEYS_MOUSE1 ) ) { - if ( !m_mouse_held ) { - m_active = !m_active; - } - m_mouse_held = true; - } - else if ( !is_any_item_hovered( ) ) { - m_mouse_held = false; - } - - if ( !is_hovered( ) && g_input.is_key_pressed( KEYS_MOUSE1 ) && !is_any_item_hovered( ) ) { - m_active = false; - } - - if ( GetTickCount( ) * 0.001f > m_enable_time && m_enable_next_frame ) { - set_disabled_callbacks( false ); - m_enable_next_frame = false; - } - - - active_changed = m_active != active_backup; - //disable input on all items - if ( active_changed ) { - if ( !m_active ) { - m_enable_time = GetTickCount( ) * 0.001f + 0.220f; - m_enable_next_frame = true; - } - else { - set_disabled_callbacks( true ); - } - } - - if ( m_selected_item ) { - *m_setting = m_selected_item->m_value; - } - - if ( m_active && m_dropdown_items->size( ) > m_max_items ) { - int scroll_input = g_input.get_scroll_state( ); - - if ( m_curr_scroll > 0 || scroll_input < 0 ) //we dont want scroll to loop around from 0 to max - m_curr_scroll -= scroll_input; //because positive is scroll up, we gotta flip it - - if ( m_curr_scroll > m_dropdown_items->size( ) - m_max_items ) - m_curr_scroll = m_dropdown_items->size( ) - m_max_items; - } - } - - virtual void render( ) override { - int x = get_relative_x( ); - int y = get_relative_y( ); - - bool restore = false; - RECT prev_rect{ }; - - if ( m_active ) { - restore = true; - g_d3d.get_device( )->GetScissorRect( &prev_rect ); - - RECT new_rect{ - prev_rect.left, - prev_rect.top, - g_d3d.m_width, - g_d3d.m_height, - }; - - g_d3d.get_device( )->SetScissorRect( &new_rect ); - - draw_items( x, y + 11 ); - - - //draw scrollbar - size_t total_items = m_dropdown_items->size( ); - if ( total_items > m_max_items ) { - const size_t height = ( m_height + 1 ) * m_max_items; - const float slider_step = ( float )( height ) / float( total_items - m_max_items + 1 ); - - size_t slider_pos = static_cast< size_t >( slider_step * m_curr_scroll ); - ui_draw_rect( x + m_width - 1, y + slider_pos + m_height + 13, 2, ( int )slider_step, ui_get_accent_col( ) ); - } - } - - update_value( ); - input( ); - - ui_draw_string( x + 2, y, false, ui_get_text_col( ), m_text ); - ui_draw_rect( x, y + 13, m_width, m_height, ui_get_disabled_col( ) ); - ui_draw_outlined_rect( x - 1, y + 12, m_width + 1, m_height + 1, - is_hovered( ) || m_active ? ui_get_text_col( ) : ui_get_accent_col( ) ); - - if ( m_selected_item ) { - ui_draw_string( x + m_width / 2, y + 14, true, ui_get_text_col( ), m_selected_item->m_name ); - } - - if( restore ) { - g_d3d.get_device( )->SetScissorRect( &prev_rect ); - } - } - - protected: - std::vector< dropdowns::dropdown_item_t< t > >* m_dropdown_items{ }; - dropdowns::dropdown_item_t< t >* m_selected_item{ }; - bool m_active = false; - bool m_mouse_held = false; - t* m_setting{ }; - size_t m_max_items{ }; - size_t m_curr_scroll{ }; - float m_enable_time{ }; - int m_enable_next_frame{ }; - }; -} \ No newline at end of file diff --git a/tf2/ui_dropdown_item.h b/tf2/ui_dropdown_item.h deleted file mode 100644 index f77a732..0000000 --- a/tf2/ui_dropdown_item.h +++ /dev/null @@ -1,83 +0,0 @@ -#pragma once - -#include "ui_base_item.h" - -namespace ui -{ - namespace dropdowns - { - template < typename t = int > - struct dropdown_item_t { - const char* m_name; - t m_value; - }; - - static std::vector< dropdown_item_t< > > activation_types_aimbot = { - { xors( "always" ), 0 }, - { xors( "on key" ), 1 }, - }; - - static std::vector< dropdown_item_t< > > silent_aimbot_types = { - { xors( "none" ), 0 }, - { xors( "client-side" ), 1 }, - { xors( "server-side" ), 2 }, - }; - - static std::vector< dropdown_item_t< > > hitboxes = { - { "head", 0 }, - { "neck", 1 }, - { "pelvis", 3 }, - { "chest", 6 }, - { "thorax", 5 }, - }; - - static std::vector< dropdown_item_t< > > tracer_type = { - { xors( "none" ), 0 }, - { xors( "line" ), 1 }, - { xors( "beam" ), 2 } - }; - - static std::vector< dropdown_item_t< > > world_esp_type = { - { xors( "off" ), 0 }, - { xors( "name" ), 1 }, - { xors( "glow" ), 2 }, - { xors( "both" ), 3 } - }; - - static std::vector< dropdown_item_t< > > weapon_esp_types = { - { xors( "none" ), 0 }, - { xors( "icon" ), 1 }, - { xors( "name" ), 2 }, - }; - - static std::vector< dropdown_item_t< > > activation_type_visuals = { - { xors( "never" ), 0 }, - { xors( "always" ), 1 }, - { xors( "on hold" ), 2 }, - { xors( "toggle" ), 3 }, - }; - - static std::vector< dropdown_item_t< > > aimbot_bone = { - { "head", 0 }, - { "neck", 1 }, - { "pelvis", 3 }, - { "chest", 6 }, - { "thorax", 5 }, - }; - - static std::vector< dropdown_item_t< > > configs = { - { xors( "scout" ), 0 }, - { xors( "soldier" ), 1 }, - { xors( "pyro" ), 2 }, - { xors( "demo" ), 3 }, - { xors( "heavy" ), 4 }, - { xors( "engineer" ), 5 }, - { xors( "medic" ), 6 }, - { xors( "sniper" ), 7 }, - { xors( "spy" ), 8 }, - { xors( "rage 1" ), 9 }, - { xors( "rage 2" ), 10 }, - }; - - } -} \ No newline at end of file diff --git a/tf2/ui_form.h b/tf2/ui_form.h deleted file mode 100644 index 0791528..0000000 --- a/tf2/ui_form.h +++ /dev/null @@ -1,187 +0,0 @@ -#pragma once -#include "ui_base_item.h" - -namespace ui -{ - class c_form : public base_item { - public: - c_form( int x, int y, int w, int h, const char* name, int max_h = 0, bool collapse = false ) : - base_item( x, y, w, h, name ), m_dynamic( !h ), m_max_height( max_h ), m_collapse( collapse ) { }; - - virtual int x( ) const override { - return m_x + 10; - } - - virtual int y( ) const override { - return m_y + m_scroll_offset + 9; - } - - virtual bool is_form( ) const override { - return true; - } - - virtual bool is_hovered( ) override { - int mouse_x, mouse_y; - ui_get_cursor_pos( mouse_x, mouse_y ); - - int x = get_relative_x( ); - int y = get_relative_y( ); - - return mouse_x > x && mouse_x < x + w( ) - && mouse_y > y && mouse_y < y + h( ); - } - - bool is_collapse_hovered( ) { - if( !m_collapse ) return false; - - int mouse_x, mouse_y; - ui_get_cursor_pos( mouse_x, mouse_y ); - - int x = get_relative_x( ) + m_width - 8; - int y = get_relative_y( ) + 2; - - return mouse_x >= x && mouse_x <= x + 5 - && mouse_y >= y && mouse_y <= y + 7; - } - - bool is_collapsed( ) { - return ( m_collapse && !m_open ); - } - - inline void update_size( ) { - if ( !m_dynamic ) return; - - int total_height{ ITEM_OFFSET * 2 }; - for ( auto& it : m_items ) { - if ( it->get_visible( ) ) { - auto item_height = it->get_total_height( ) + ITEM_OFFSET; - if( m_max_height && total_height + item_height > m_max_height ) { - total_height = m_max_height; - break; - } - total_height += it->get_total_height( ) + ITEM_OFFSET; - } - } - - m_height = total_height; - } - - virtual int get_total_height( ) const override { - if( !m_open && m_collapse ) return 18; - return m_height + 5; - } - - int get_total_item_height( ) { - int total_height{ ITEM_OFFSET * 2 }; - for( auto& it : m_items ) { - if( it->get_visible( ) ) { - auto item_height = it->get_total_height( ) + ITEM_OFFSET; - total_height += it->get_total_height( ) + ITEM_OFFSET; - } - } - - return total_height; - } - - void input( ) { - if( m_collapse ) { - bool hovered = is_collapse_hovered( ); - bool clicked = g_input.is_key_pressed( KEYS_MOUSE1 ); - if( hovered && clicked ) { - if( !m_was_pressed ) { - m_open ^= 1; - } - m_was_pressed = true; - } - else { - m_was_pressed = false; - } - } - - if( m_max_height && get_total_item_height( ) > m_max_height ) { - if( !m_disabled && is_hovered( ) ) { - auto scroll_state = g_input.get_scroll_state( ); - if( !!scroll_state && m_was_hovered ) { - scroll_state > 0 ? m_scroll_offset += 13 : m_scroll_offset -= 13; - } - m_scroll_offset = std::clamp( m_scroll_offset, -( get_total_item_height( ) - m_height + 3 ), 0 ); - } - } - else { - m_scroll_offset = 0; - } - } - - virtual void render( ) override { - update_size( ); - input( ); - int x = get_relative_x( ); - int y = get_relative_y( ); - - int text_w, text_h; - ui_get_text_size( text_w, text_h, m_text ); - - if( m_collapse ) { - if( !m_open && m_collapse ) { - ui_draw_outlined_rect( x, y, m_width, 14, ui_get_accent_col( ) ); - ui_draw_line( x + 3, y, x + text_w + 1, y, ui_get_bg_col( ) ); - ui_draw_string( x + 3, y - 7, false, ui_get_text_col( ), m_text ); - - int button_x = x + m_width - 6; - int button_y = y + 2; - - ui_draw_string( button_x, button_y, true, - is_collapse_hovered( ) ? ui_get_accent_col( ) : ui_get_text_col( ), "+" ); - return; - } - } - - for( int i{ }; i < 8; ++i ) { - clr_t col = ui_get_bg_col( ) * ( 0.72f + i * 0.04f ); - ui_draw_rect( x, y + i, m_width, m_height - i * 2, col ); - } - - ui_draw_outlined_rect( x, y, m_width, m_height, ui_get_accent_col( ) ); - - if( m_max_height && get_total_item_height( ) > m_height ) { - const size_t height = get_total_height( ) - 20; - const float delta = ( float )( get_total_item_height( ) - height + 1 ); - const float slider_step = ( ( float )( height ) / delta ); - const float slider_height = slider_step * 13.f; - - size_t slider_pos = static_cast< size_t >( slider_step * m_scroll_offset ); - ui_draw_rect( x + m_width - 7, y + 8, 4, height, ui_get_disabled_col( ) ); - ui_draw_rect( x + m_width - 7, y - slider_pos + 8, 4, ( int )slider_height + 1, ui_get_accent_col( ) ); - } - - if( is_hovered( ) != m_was_hovered ) { - bool backup = m_disabled; - if( !backup ) { - set_disabled( !is_hovered( ) ); - } - m_disabled = backup; - } - - ui_draw_line( x + 3, y, x + text_w + 1, y, ui_get_bg_col( ) ); - ui_draw_string( x + 3, y - 7, false, ui_get_text_col( ), m_text ); - if( m_collapse ) { - int button_x = x + m_width - 6; - int button_y = y + 2; - - ui_draw_string( button_x, button_y, true, - is_collapse_hovered( ) ? ui_get_accent_col( ) : ui_get_text_col( ), "-" ); - } - - m_was_hovered = is_hovered( ); - } - - protected: - bool m_dynamic{ }; - bool m_was_hovered{ }; - int m_max_height{ }; - int m_scroll_offset{ }; - bool m_was_pressed{ }; - bool m_collapse{ }; - bool m_open{ true }; - }; -} \ No newline at end of file diff --git a/tf2/ui_key_picker.h b/tf2/ui_key_picker.h deleted file mode 100644 index 03aed84..0000000 --- a/tf2/ui_key_picker.h +++ /dev/null @@ -1,164 +0,0 @@ -#pragma once -#include "ui_base_item.h" - -namespace ui -{ - class c_key_picker : public base_item { - public: - c_key_picker( int x, int y, int w, const char* name, int* setting ) : - base_item( x, y, w, 16, name ), m_setting( setting ) { } - - virtual bool is_hovered( ) override { - if ( m_disabled ) return false; - - int x = get_relative_x( ); - int y = get_relative_y( ) + 12; - int h = m_height; - - int mouse_x, mouse_y; - ui_get_cursor_pos( mouse_x, mouse_y ); - - - return mouse_x >= x && mouse_x <= x + m_width - && mouse_y >= y && mouse_y <= y + h; - } - - virtual int get_total_height( ) const override { - return m_height + 12; - } - - void input( ) { - bool active_backup = m_active; - bool active_changed = false; - - if ( is_hovered( ) && g_input.is_key_pressed( KEYS_MOUSE1 ) ) { - if ( !m_mouse_held ) { - m_active = true; - } - m_mouse_held = true; - } - - if ( g_input.is_key_pressed( KEYS_ESCAPE ) ) { - m_active = false; - *m_setting = KEYS_NONE; - } - - if ( m_active && !m_mouse_held ) { - int key = g_input.is_any_key_pressed( ); - if ( key != KEYS_NONE ) { - *m_setting = key; - m_active = false; - } - } - - active_changed = active_backup != m_active; - if ( active_changed ) { - set_disabled_callbacks( m_active ); - } - } - - virtual void render( ) override { - int x = get_relative_x( ); - int y = get_relative_y( ); - - input( ); - - ui_draw_string( x + 2, y, false, ui_get_text_col( ), m_text ); - ui_draw_rect( x, y + 13, m_width, m_height, ui_get_disabled_col( ) ); - ui_draw_outlined_rect( x - 1, y + 12, m_width + 1, m_height + 1, - is_hovered( ) || m_active ? ui_get_text_col( ) : ui_get_accent_col( ) ); - - ui_draw_string( x + m_width / 2, y + 14, true, ui_get_text_col( ), - g_input.get_key_name( ( VirtualKeys_t )*m_setting ) ); - } - - protected: - int* m_setting{ }; - bool m_active{ }; - bool m_mouse_held{ }; - }; - - //skEeT PiCkErS - class c_key_picker_small : public base_item { - public: - c_key_picker_small( int x, int y, int* setting ) : - base_item( x, y, 0, 0, xors( "KEY_PICKER" ) ), m_setting( setting ) { } - - virtual int get_total_height( ) const override { - const char* name = g_input.get_short_name( ( VirtualKeys_t )*m_setting ); - int w, h; - ui_get_text_size( w, h, name ); - - return h; - } - - virtual bool is_hovered( ) override { - if ( m_disabled ) return false; - - const char* name = g_input.get_short_name( ( VirtualKeys_t )*m_setting ); - int x = get_relative_x( ); - int y = get_relative_y( ); - int mouse_x, mouse_y; - int w, h; - - ui_get_text_size( w, h, "[%s]", name ); - ui_get_cursor_pos( mouse_x, mouse_y ); - - return mouse_x >= x - w && mouse_x <= x - && mouse_y >= y && mouse_y <= y + h; - } - - void input( ) { - - bool active_backup = m_active; - bool active_changed = false; - - if ( g_input.is_key_pressed( KEYS_ESCAPE ) ) { - m_active = false; - *m_setting = KEYS_NONE; - } - - if ( m_active && !m_mouse_held ) { - int key = g_input.is_any_key_pressed( ); - if ( key != KEYS_NONE ) { - *m_setting = key; - m_active = false; - } - } - - if ( is_hovered( ) && g_input.is_key_pressed( KEYS_MOUSE1 ) ) { - if ( !m_mouse_held ) { - m_active = true; - } - m_mouse_held = true; - } - else { - m_mouse_held = false; - } - - active_changed = active_backup != m_active; - if ( active_changed ) { - set_disabled_callbacks( m_active ); - } - } - - virtual void render( ) override { - const char* name = g_input.get_short_name( ( VirtualKeys_t )*m_setting ); - int x = get_relative_x( ); - int y = get_relative_y( ); - - int w, h; - ui_get_text_size( w, h, "[%s]", name ); - - input( ); - - ui_draw_string( x - w, y, false, is_hovered( ) || m_active ? - ui_get_accent_col( ) : ui_get_text_col( ), "[%s]", name ); - } - - protected: - int* m_setting; - bool m_active{ }; - bool m_mouse_held{ }; - }; -} \ No newline at end of file diff --git a/tf2/ui_label.h b/tf2/ui_label.h deleted file mode 100644 index 9df46b5..0000000 --- a/tf2/ui_label.h +++ /dev/null @@ -1,18 +0,0 @@ -#pragma once -#include "ui_base_item.h" - -namespace ui -{ - class c_label : public base_item { - public: - c_label( int x, int y, const char* text ) : - base_item( x, y, 0, 16, text ) { } - - virtual void render( ) override { - int x = get_relative_x( ); - int y = get_relative_y( ); - - ui_draw_string( x + 2, y + 2, false, ui_get_text_col( ), m_text ); - } - }; -} \ No newline at end of file diff --git a/tf2/ui_menu.h b/tf2/ui_menu.h deleted file mode 100644 index aae68a9..0000000 --- a/tf2/ui_menu.h +++ /dev/null @@ -1,89 +0,0 @@ -#pragma once -#include "ui_base_item.h" - -namespace ui -{ - class c_menu : public base_item { - public: - c_menu( int start_x, int start_y, int width, - int height, const char* name, const char* right_text = nullptr ) : - base_item( start_x, start_y, width, height, name ), - m_right_text( right_text ) { } - - virtual bool is_hovered( ) override { - if( m_disabled ) return false; - - int mouse_x, mouse_y; - ui_get_cursor_pos( mouse_x, mouse_y ); - - return mouse_x >= m_x && mouse_x <= m_x + w( ) - && mouse_y >= m_y && mouse_y <= m_y + 19; - } - - virtual int y( ) const override { - return m_y + 19; - } - - inline void input( ) { - int mouse_x, mouse_y; - ui_get_cursor_pos( mouse_x, mouse_y ); - bool mouse_clicked = g_input.is_key_pressed( KEYS_MOUSE1 ); - - if( is_hovered( ) ) { - m_mouse_held = true; - } - - if( !mouse_clicked ) { - m_mouse_held = is_hovered( ); - } - - if( m_mouse_held && !mouse_clicked ) { - m_drag_offset_y = mouse_y - m_y; - m_drag_offset_x = mouse_x - m_x; - } - - if( m_mouse_held && mouse_clicked ) { - m_x = mouse_x - m_drag_offset_x; - m_y = mouse_y - m_drag_offset_y; - } - } - - virtual void render( ) override { - constexpr auto top_height = 19; - - input( ); - - //draw a c00l shadow - ui_draw_outlined_rect( m_x, m_y + 1, m_width + 1, m_height, clr_t( 0, 0, 0, 166 ) ); - - ui_draw_rect( m_x + 1, m_y + 1, m_width - 1, top_height - 2, ui_get_bg_col( ) * 1.2f ); - if( is_hovered( ) ) { - ui_draw_rect( m_x + 1, m_y + 1, m_width - 1, top_height - 2, clr_t( 61, 61, 61 ) ); - } - - for( int i{ }; i < 8; ++i ) { - clr_t col = ui_get_bg_col( ) * ( 0.72f + i * 0.04f ); - ui_draw_rect( m_x, m_y + i + top_height - 1, m_width, m_height - i * 2 - top_height + 1, col ); - } - ui_draw_outlined_rect( m_x, m_y, m_width, m_height, ui_get_accent_col( ) ); - - if( m_right_text ) { - ui_draw_string( m_x + 5, m_y + 4, false, ui_get_text_col( ), m_text ); - - int width, height; - ui_get_text_size( width, height, m_right_text ); - - ui_draw_string( m_x + m_width - 5 - width, m_y + 4, false, ui_get_text_col( ), m_right_text ); - } - else { - ui_draw_string( m_x + m_width / 2, m_y + 4, true, ui_get_text_col( ), m_text ); - } - } - - protected: - int m_drag_offset_x{ }; - int m_drag_offset_y{ }; - bool m_mouse_held{ }; - const char* m_right_text{ }; - }; -} \ No newline at end of file diff --git a/tf2/ui_render.h b/tf2/ui_render.h deleted file mode 100644 index f67f16b..0000000 --- a/tf2/ui_render.h +++ /dev/null @@ -1,63 +0,0 @@ -#pragma once - -#include "ui_base_item.h" - -namespace ui -{ - //recursively render all items - static void render_item( base_item* item, int offset = 0, bool allow_rect = true ) { - if( !item->get_visible( ) ) return; - - item->reset( ); - item->render( ); - bool reset = false; - RECT original; - - if( allow_rect && item->is_form( ) ) { - auto device = g_d3d.get_device( ); - device->GetScissorRect( &original ); - - auto x = item->get_relative_x( ); - auto y = item->get_relative_y( ); - - RECT new_rect{ - x, - y + 4, - x + item->w( ), - y + item->get_total_height( ) - 7 - }; - - device->SetScissorRect( &new_rect ); - reset = true; - } - - bool draw = true; - if( item->is_form( ) ) { - auto form_cast = static_cast< c_form* >( item ); - draw = !form_cast->is_collapsed( ); - } - - if( item->get_items( ).size( ) && draw ) { - //madr0fl - int* height_offset = ( int* )_alloca( sizeof( int ) * item->get_items( ).size( ) ); - int cur_offset = 0; - for( int i = ( int )item->get_items( ).size( ) - 1; i >= 0; --i ) { - auto& cur_item = item->get_items( )[ i ]; - height_offset[ i ] = cur_offset; - cur_offset += cur_item->get_visible( ) ? cur_item->get_total_height( ) + ITEM_OFFSET : 0; - } - - int i{ }; - for( auto& it : item->get_items( ) ) { - item->set_y_offset( height_offset[ i ] ); - render_item( it.get( ), height_offset[ i ], !reset && allow_rect ); - ++i; - } - } - - if( reset ) { - auto device = g_d3d.get_device( ); - device->SetScissorRect( &original ); - } - } -} \ No newline at end of file diff --git a/tf2/ui_slider.h b/tf2/ui_slider.h deleted file mode 100644 index 0e55a73..0000000 --- a/tf2/ui_slider.h +++ /dev/null @@ -1,165 +0,0 @@ -#pragma once - -#include "ui_base_item.h" - -namespace ui -{ - template < typename t > - class c_slider : public base_item { - public: - c_slider( int x, int y, int w, t min, t max, const char* text, t* setting, t full, const char* suffix = 0 ) : - base_item( x, y, w, 5, text ), m_setting( setting ), m_suffix( suffix ), - m_min( float( min ) ), m_max( float( max ) ), m_full( full ), m_has_text( true ) { }; - - c_slider( int x, int y, int w, t min, t max, const char* text, t* setting, const char* suffix = 0 ) : - base_item( x, y, w, 5, text ), m_setting( setting ), m_suffix( suffix ), - m_min( float( min ) ), m_max( float( max ) ), m_full( max ), m_has_text( true ) { }; - - c_slider( int x, int y, int w, t min, t max, t* setting, const char* suffix = 0 ) : - base_item( x, y, w, 5, nullptr ), m_setting( setting ), m_suffix( suffix ), - m_min( float( min ) ), m_max( float( max ) ), m_full( max ), m_has_text( false ) { } - - virtual bool is_hovered( ) override { - if ( m_disabled ) return false; - - int x = get_relative_x( ); - int y = get_relative_y( ) + ( m_has_text ? 11 : 2 ); - - int mouse_x, mouse_y; - ui_get_cursor_pos( mouse_x, mouse_y ); - - if( !m_has_text ) { - x += 4; - return mouse_x >= x && mouse_x <= x + m_width - 8 - && mouse_y >= y && mouse_y <= y + m_height + 2; - } - - return mouse_x >= x - 1 && mouse_x <= x + m_width + 1 - && mouse_y >= y && mouse_y <= y + m_height + 2; - } - - void input( ) { - bool mouse_clicked = g_input.is_key_pressed( KEYS_MOUSE1 ); - bool hovered = is_hovered( ); - float progress = 0.f; - int x = get_relative_x( ); - int y = get_relative_y( ) + 2; - int mouse_x, mouse_y; - - *m_setting = ( t )( std::clamp< float >( *m_setting, m_min, m_max ) ); - ui_get_cursor_pos( mouse_x, mouse_y ); - - if ( hovered && mouse_clicked ) { - - float progress{ }; - - if( m_has_text ) { - progress = std::clamp< float >( float( mouse_x - x ) / ( m_width - 3 ), 0.f, 1.0f ); - } - else { - progress = std::clamp< float >( float( mouse_x - x - 4 ) / ( m_width - 10 ), 0.f, 1.0f ); - } - - *m_setting = progress == 1.0f ? m_full : ( t )( ( ( m_max - m_min ) * progress ) + m_min ); - } - - if( !m_has_text ) { - bool y_hover = mouse_y >= y && mouse_y <= y + m_height + 1; - - bool minus_hovered = mouse_x >= x - 1 && mouse_x <= x + 3 && y_hover; - bool plus_hovered = mouse_x >= x + m_width - 2 && mouse_x <= x + m_width + 2 && y_hover; - - if( mouse_clicked ) { - if( !m_mouse_held ) { - if( !std::is_floating_point< t >::value ) { - if( minus_hovered ) *m_setting -= ( t )1; - if( plus_hovered ) *m_setting += ( t )1; - } - else if( m_max - m_min <= 2.0f ) { - if( minus_hovered ) *m_setting -= ( t )0.1f; - if( plus_hovered ) *m_setting += ( t )0.1f; - } - } - - m_mouse_held = true; - } - else { - m_mouse_held = false; - } - } - }; - - void draw_slider( int x, int y ) { - float val = float( *m_setting ); - float progress = ( val - m_min ) / ( m_max - m_min ); - - ui_draw_rect( x, y, m_width, m_height, ui_get_disabled_col( ) ); - - ui_draw_rect( x, y, ( int )( ( m_width - 3 ) * progress ), m_height, ui_get_accent_col( ) ); - ui_draw_rect( x + ( int )( ( m_width - 3 ) * progress ), y, 3, m_height, - is_hovered( ) ? ui_get_text_col( ) : ui_get_accent_col( ) * 0.7f ); - } - - void draw_slider_small( int x, int y ) { - float val = float( *m_setting ); - float progress = ( val - m_min ) / ( m_max - m_min ); - x -= 1; //i couldnt be fucked - - ui_draw_rect( x + 5, y, m_width - 8, m_height, ui_get_disabled_col( ) ); - - ui_draw_rect( x + 5, y, ( int )( ( m_width - 10 ) * progress ), m_height, ui_get_accent_col( ) ); - ui_draw_rect( x + ( int )( ( m_width - 10 ) * progress ) + 3, y, 3, m_height, - is_hovered( ) ? ui_get_text_col( ) : ui_get_accent_col( ) * 0.7f ); - - ui_draw_string( x, y - 3, false, ui_get_text_col( ), "-" ); - ui_draw_string( x + m_width - 2, y - 3, false, ui_get_text_col( ), "+" ); - - char val_str[ 12 ]; - if( m_suffix ) - sprintf_s( val_str, 12, t( 0.1f ) == t( 0 ) ? "%d %s" : "%0.2f %s", *m_setting, m_suffix ); - else - sprintf_s( val_str, 12, t( 0.1f ) == t( 0 ) ? "%d" : "%0.2f", *m_setting ); - - ui_draw_string( x + ( int )( ( m_width - 8 ) * progress ) + 3, y + 2, true, ui_get_text_col( ), val_str ); - } - - virtual int get_total_height( ) const override { - return m_height + ( m_has_text ? 12 : 6 ); - } - - virtual void render( ) override { - int x = get_relative_x( ); - int y = get_relative_y( ); - int text_w, text_h; - char val[ 12 ]; - - input( ); - - //weird hacky fix for floating point vars - if ( m_suffix ) - sprintf_s( val, 12, t( 0.1f ) == t( 0 ) ? "%d %s" : "%0.2f %s", *m_setting, m_suffix ); - else - sprintf_s( val, 12, t( 0.1f ) == t( 0 ) ? "%d" : "%0.2f", *m_setting ); - - if( m_has_text ) { - ui_draw_string( x + 2, y, false, ui_get_text_col( ), m_text ); - ui_get_text_size( text_w, text_h, val ); - ui_draw_string( x + m_width - text_w - 1, y, false, ui_get_text_col( ), val ); - draw_slider( x, y + 12 ); - } - else { - draw_slider_small( x, y + 2 ); - } - } - - - protected: - t* m_setting; - t m_full; - float m_min; - float m_max; - bool m_has_text = true; - const char* m_suffix; - bool m_mouse_held = false; - }; -} \ No newline at end of file diff --git a/tf2/ui_tab_manager.h b/tf2/ui_tab_manager.h deleted file mode 100644 index 76258c8..0000000 --- a/tf2/ui_tab_manager.h +++ /dev/null @@ -1,227 +0,0 @@ -#pragma once -#include "ui_base_item.h" - - - -namespace ui -{ - namespace { - constexpr int BUTTON_WIDTH = 120; - constexpr int BUTTON_HEIGHT = 80; - - constexpr int SUBTAB_HEIGHT = 25; - } - - class c_tab_sheet : public base_item { - public: - c_tab_sheet( const char* tab_name ) : - base_item( 0, 0, 0, 0, tab_name ), - m_fade_progress( 0 ) { }; - - c_tab_sheet( const char* tab_name, d3d::c_sprite* sprite ) : - base_item( 0, 0, 0, 0, tab_name ), m_sprite( sprite ), - m_fade_progress( 0.f ) { }; - - virtual void render( ) override { }; - virtual bool is_hovered( ) override { - return false; - }; - - public: - float m_fade_progress{ }; - d3d::c_sprite* m_sprite{ }; - }; - - - class c_tab_manager : public base_item { - public: - c_tab_manager( ) : base_item( BUTTON_WIDTH + 11, 0, 0, 0, - xors( "TAB_MANAGER" ) ) { }; - - virtual bool is_hovered( ) override { - return false; - } - - inline void scale_button_fade( c_tab_sheet* item, bool hovered ) { - if ( hovered ) { - constexpr float frequency = 1.f / 0.3f; - const float step = ui_get_frametime( ) * frequency; - - item->m_fade_progress = std::clamp( item->m_fade_progress + step, 0.f, 0.8f ); - } - else { - item->m_fade_progress = 0.f; - } - } - - auto get_selected_tab( ) { - return m_selected_tab; - } - - void draw_tab_button( decltype( m_parent )& button, int start, bool hovered ) { - auto item = ( c_tab_sheet* )button.get( ); - auto text = item->get_text( ); - auto parent_x = m_parent->x( ) + 5; - auto parent_y = m_parent->y( ) + 5; - int item_height = BUTTON_HEIGHT; - - scale_button_fade( item, hovered ); - - ui_draw_rect( parent_x, parent_y + start, BUTTON_WIDTH + 1, - item_height + 1, ui_get_bg_col( ) ); - - ui_draw_line( parent_x + BUTTON_WIDTH - 8, parent_y + start - 1, - parent_x + BUTTON_WIDTH - 8, parent_y + start + BUTTON_HEIGHT + 2, - ui_get_disabled_col( ) ); - - if( hovered ) { - ui_draw_line( parent_x + BUTTON_WIDTH - 8, parent_y + start - 1, - parent_x + BUTTON_WIDTH - 8, parent_y + start + BUTTON_HEIGHT + 2, - ui_get_accent_col( ) * ( item->m_fade_progress + 0.2f ) * 0.8f ); - } - - if( item->m_sprite ) { - auto sprite_color = hovered ? ui_get_text_col( ) * ( ( item->m_fade_progress + 0.3f ) * 0.7f ) : ui_get_disabled_col( ); - item->m_sprite->draw( parent_x + ( BUTTON_WIDTH - 8 ) / 2 - 2, - parent_y + BUTTON_HEIGHT / 2 + start, sprite_color ); - } - else { - g_con->log( "sprite is null" ); - } - } - - inline bool is_button_hovered( int start ) { - auto item_x = m_parent->x( ) + 5; - auto item_y = m_parent->y( ) + 5 + start; - int item_height = BUTTON_HEIGHT; - int mouse_x, mouse_y; - - ui_get_cursor_pos( mouse_x, mouse_y ); - - return mouse_x >= item_x && mouse_x <= item_x + BUTTON_WIDTH - 8 - && mouse_y >= item_y && mouse_y <= item_y + item_height; - } - - virtual void render( ) override { - if ( !m_items.empty( ) ) { - int cur_y{ 10 }; - for ( auto& it : m_items ) { - it->set_visible( false ); - bool hovered = is_button_hovered( cur_y ); - if ( g_input.is_key_pressed( KEYS_MOUSE1 ) && hovered ) { - //fix items that disable input mess it up when changing tabs - set_disabled_callbacks( false ); - m_selected_tab = it; - } - - draw_tab_button( it, cur_y, hovered || it == m_selected_tab ); - cur_y += BUTTON_HEIGHT + 4; - } - } - - if ( !m_selected_tab ) { - m_selected_tab = m_items.front( ); - } - - m_selected_tab->set_visible( true ); - } - - protected: - decltype( m_parent ) m_selected_tab{ }; - }; - - - class c_subtab_manager : public base_item { - public: - c_subtab_manager( ) : base_item( 0, 35, 0, 5, - xors( "SUBTAB_MANAGER" ) ) { } - - virtual bool is_hovered( ) override { return false; } - - int get_button_width( ) { - int width = get_top_parent( )->w( ) - BUTTON_WIDTH - 26; - - if ( !m_items.empty( ) ) - return ( int )std::ceilf( float( width ) / float( m_items.size( ) ) ); - - return width; - } - - inline void scale_button_fade( c_tab_sheet* item, bool hovered ) { - if ( hovered ) { - constexpr float frequency = 1.f / 0.3f; - const float step = ui_get_frametime( ) * frequency; - - item->m_fade_progress = std::clamp( item->m_fade_progress + step, 0.f, 0.8f ); - } - else { - item->m_fade_progress = 0.f; - } - } - - auto get_selected_tab( ) { - return m_selected_tab; - } - - void render_button( decltype( m_parent )& button, int start, bool hovered ) { - auto item = ( c_tab_sheet* )button.get( ); - auto item_x = get_relative_x( ) + start - 2; - auto item_y = get_relative_y( ) + 3 - m_y; - auto width = get_button_width( ); - - scale_button_fade( item, hovered ); - clr_t tab_clr = ui_get_disabled_col( ); - - //ui_draw_rect( item_x, item_y, get_button_width( ), SUBTAB_HEIGHT, ui_get_bg_col( ) ); - ui_draw_rect( item_x + 1, item_y + SUBTAB_HEIGHT - 2, width, 2, tab_clr ); - if ( hovered ) { - clr_t col = ui_get_accent_col( ); - col.a( ) *= item->m_fade_progress; - ui_draw_rect( item_x + 1, item_y + SUBTAB_HEIGHT - 2, width, 2, col ); - } - - ui_draw_string( item_x + width / 2, item_y + 4, true, ui_get_text_col( ), item->get_text( ) ); - } - - bool is_button_hovered( decltype( m_parent )& button, int start ) { - int item_x = get_relative_x( ) + start - 2; - int item_y = get_relative_y( ) + 3 - m_y - 3; - int item_w = get_button_width( ); - int mouse_x, mouse_y; - - ui_get_cursor_pos( mouse_x, mouse_y ); - - return mouse_x >= item_x && mouse_x <= item_x + item_w && - mouse_y >= item_y && mouse_y <= item_y + SUBTAB_HEIGHT; - } - - virtual void render( ) override { - if ( !m_items.empty( ) ) { - int start = 2; - int width = get_button_width( ); - - for ( auto& it : m_items ) { - it->set_visible( false ); - bool hovered = is_button_hovered( it, start ); - if ( g_input.is_key_pressed( KEYS_MOUSE1 ) && hovered ) { - //fix items that disable input mess it up when changing tabs - set_disabled_callbacks( false ); - m_selected_tab = it; - } - - render_button( it, start, hovered || it == m_selected_tab ); - start += width; - } - - if ( !m_selected_tab ) { - m_selected_tab = m_items.front( ); - } - - m_selected_tab->set_visible( true ); - } - } - - protected: - decltype( m_parent ) m_selected_tab; - }; -} \ No newline at end of file diff --git a/tf2/ui_text_input.h b/tf2/ui_text_input.h deleted file mode 100644 index f486106..0000000 --- a/tf2/ui_text_input.h +++ /dev/null @@ -1,47 +0,0 @@ -#pragma once -#include "ui_base_item.h" - -namespace ui -{ - class c_text_input : public base_item { - c_text_input( int x, int y, int w, const char* name, size_t max_chars, char* str ) : - base_item( x, y, w, 16, name ), m_length( max_chars ), m_str( str ) { } - - virtual bool is_hovered( ) override { - - } - - void input( ) { - static float last_press[ KEYS_MAX ]{ }; - - int key = g_input.is_any_key_pressed( ); - if ( key == KEYS_BACK ) { - if ( strlen( m_str ) ) { - m_str[ strlen( m_str ) - 1 ] = 0; - } - } - if ( key != KEYS_NONE ) { - float cur_time = GetTickCount( ) * 0.001f; - if ( std::abs( cur_time - last_press[ key ] ) > 0.1f ) { - - auto scan_code = MapVirtualKeyA( key, MAPVK_VK_TO_VSC ); - uword_t ascii; - ToAscii( key, scan_code, 0, &ascii, 0 ); - char str[ 2 ] = { ( char )ascii, 0 }; - strcat_s( m_str, m_length, str ); - - last_press[ key ] = cur_time; - } - } - } - - virtual void render( ) override { - - } - - protected: - size_t m_length{ }; - char* m_str{ }; - - }; -} \ No newline at end of file diff --git a/tf2/util.cpp b/tf2/util.cpp deleted file mode 100644 index 424df71..0000000 --- a/tf2/util.cpp +++ /dev/null @@ -1,223 +0,0 @@ -#include "util.hpp" - -#include "interfaces.h" -#include "CBasePlayer.h" -#include "pattern.hpp" -#include "ctx.hpp" -#include "settings.h" -#include "math.h" -#include "base_cheat.h" - -float TICK_INTERVAL( ) { - return cl.m_globals->interval_per_tick; -} - -int TIME_TO_TICKS( float dt ) { - return static_cast< int >( 0.5f + dt / TICK_INTERVAL( ) ); -} - -float TICKS_TO_TIME( int tick ) { - return tick * TICK_INTERVAL( ); -} - -bool util::is_low_fps( ) { - return cl.m_globals->frametime > cl.m_globals->interval_per_tick; -} - -int util::get_closest_player( ) { - float cur_fov{ 360.f }; - int ret{ -1 }; - vec3_t viewangles{ }; - vec3_t local_pos{ }; - - bool friendlies = g_settings.legit.friendlies; - - local_pos = g_ctx.m_local->get_eye_pos( ); - cl.m_engine( )->GetViewAngles( viewangles ); - - for( int i{ 1 }; i < cl.m_globals->maxclients; ++i ) { - auto ent = cl.m_entlist( )->get_client_entity< c_base_player >( i ); - - if( !ent ) continue; - if( ent == g_ctx.m_local ) continue; - if( !ent->is_valid( ) ) continue; - int team = ent->get_team( ); - if( team == g_ctx.m_local->get_team( ) && !friendlies ) { - continue; - } - - auto ang = math::vector_angles( local_pos, ent->get_hitbox_position( 0 ) ); - ang.clamp( ); - - float fov = ( viewangles - ang ).clamp( ).length2d( ); - if( fov < cur_fov ) { - ret = i; - cur_fov = fov; - } - } - - return ret; -} - -void util::clip_trace_to_player( IClientEntity* player, vec3_t& src, vec3_t& end, - unsigned mask, CTraceFilter* filter, CGameTrace* tr ) { - CGameTrace player_trace; - Ray_t ray; - float smallest_fraction = tr->fraction; - - ray.Init( src, end ); - - if( !filter->ShouldHitEntity( player, mask ) ) { - return; - } - - cl.m_trace( )->clip_ray_to_ent( ray, mask | CONTENTS_HITBOX, player, &player_trace ); - - if( player_trace.fraction < smallest_fraction ) { - *tr = player_trace; - smallest_fraction = player_trace.fraction; - } -} - - -bool util::trace_ray( vec3_t& start, vec3_t& end, IClientEntity* a, IClientEntity* b ) { - CGameTrace tr; - Ray_t ray; - CTraceFilter filter; - - filter.pSkip = a; - - ray.Init( start, end ); - - cl.m_trace( )->trace_ray( ray, 0x46004003 | CONTENTS_HITBOX, &filter, &tr ); - clip_trace_to_player( b, start, end, ( unsigned )0x46004003, &filter, &tr ); - - return tr.m_pEnt == b || tr.fraction > 0.98f; -} - -void util::set_random_seed( int seed ) { - using fn = int( __cdecl* )( int ); - fn fn_ptr = ( fn )( GetProcAddress( - GetModuleHandleA( xors( "vstdlib.dll" ) ), - xors( "RandomSeed" ) ) ); - - fn_ptr( seed ); -} - -float util::get_random_float( float min, float max ) { - using fn = float( *)( float, float ); - fn fn_ptr = ( fn )( GetProcAddress( - GetModuleHandleA( xors( "vstdlib.dll" ) ), - xors( "RandomFloat" ) ) ); - - return fn_ptr( min, max ); -} - -vec3_t util::get_spread_dir( float inaccuracy, float spread, vec3_t angles, int seed ) { - set_random_seed( ( seed & 0xff ) + 1 ); - - float rand_a = get_random_float( 0.0f, 1.0f ); - float pi_rand_a = get_random_float( 0.f, 2.f * M_PI ); - float rand_b = get_random_float( 0.f, 1.0f ); - float pi_rand_b = get_random_float( 0.f, 2.f * M_PI ); - - float spread_x = cos( pi_rand_a ) * ( rand_a * inaccuracy ) + cos( pi_rand_b ) * ( rand_b * spread ); - float spread_y = sin( pi_rand_a ) * ( rand_a * inaccuracy ) + sin( pi_rand_b ) * ( rand_b * spread ); - - vec3_t forward, right, up; - math::angle_vectors( angles, &forward, &right, &up ); - - vec3_t spread_dir = forward + ( right * spread_x ) + ( up * spread_y ); - spread_dir.normalize_vector( ); - - return spread_dir; -} - -bool __vectorcall util::intersects_hitbox( vec3_t eye_pos, vec3_t end_pos, vec3_t min, vec3_t max, float radius ) { - auto dist = math::dist_segment_to_segment( eye_pos, end_pos, min, max ); - - return ( dist < radius ); -} - -float util::get_total_latency( ) { - auto nci = cl.m_engine( )->GetNetChannelInfo( ); - - if( nci ) { - float latency = nci->GetLatency( 0 ) + nci->GetLatency( 1 ); - return latency; - } - - return 0.f; -} - -float util::get_lerptime( ) { - static cvar_t* cl_interpolate = cl.m_cvar( )->FindVar( xors( "cl_interpolate" ) ); - static cvar_t* cl_interp = cl.m_cvar( )->FindVar( xors( "cl_interp" ) ); - static cvar_t* cl_updaterate = cl.m_cvar( )->FindVar( xors( "cl_updaterate" ) ); - static cvar_t* cl_interp_ratio = cl.m_cvar( )->FindVar( xors( "cl_interp_ratio" ) ); - - if( cl_interp && cl_interpolate && cl_updaterate && cl_interp_ratio ) { - bool interpolate = cl_interpolate->get_int( ); - if( interpolate ) { - float interp = cl_interp->get_float( ); - float interp_ratio = cl_interp_ratio->get_float( ); - float updaterate = cl_updaterate->get_float( ); - - return std::max< float >( interp, interp_ratio / updaterate ); - } - } - - return 0.f; -} - -bool util::is_tick_valid( int tickcount ) { - float latency = get_total_latency( ); - float correct = std::clamp( latency + get_lerptime( ), 0.f, 1.f ); - float delta = correct - ( g_ctx.pred_time( ) - TICKS_TO_TIME( tickcount ) ); - - - return std::abs( delta ) < 0.2f; -} - -void util::disable_pvs( ) { - for( int i{ 1 }; i < 65; ++i ) { - auto ent = cl.m_entlist( )->get_client_entity< c_base_player >( i ); - - if( !ent || !ent->is_valid( ) ) - continue; - - if( ent == g_ctx.m_local ) - continue; - - *( int* )( uintptr_t( ent ) + 0xa30 ) = cl.m_globals->framecount; - *( int* )( uintptr_t( ent ) + 0xa28 ) = 0; - } -} - -vec2_t util::screen_transform( vec3_t world ) { - vec3_t tmp; cl.m_overlay( )->ScreenPosition( world, tmp ); - const matrix3x4& w2s_matrix = cl.m_engine( )->GetWorldToScreenMatrix( ); - float w = w2s_matrix[ 3 ][ 3 ]; - for( int i{ }; i < 3; i++ ) { - w += w2s_matrix[ 3 ][ i ] * world[ i ]; - } - if( w < 0.001f ) return{ 10000.f, 10000.f }; - - return{ tmp.x, tmp.y }; -} - -const char* util::object_index_to_name( int index ) { - index = std::clamp( index, 0, 65 ); - - switch( index ) { - case 89: - return xors( "teleporter" ); - case 86: - return xors( "dispenser" ); - case 88: - return xors( "sentry" ); - default: - return xors( "none" ); - } -} - diff --git a/tf2/util.hpp b/tf2/util.hpp deleted file mode 100644 index 7aaa007..0000000 --- a/tf2/util.hpp +++ /dev/null @@ -1,100 +0,0 @@ -#pragma once -#include -#include -#include "strings.hpp" - -#define NAMESPACE_REGION( x ) namespace x { -#define END_REGION } - -extern int TIME_TO_TICKS( float dt ); -extern float TICKS_TO_TIME( int tick ); -extern float TICK_INTERVAL( ); - -//WEE WOO WEE WOO ITS THE DWORD POLICE -using ulong_t = unsigned long; -using uword_t = unsigned short; - -class IClientEntity; -class CTraceFilter; -class CGameTrace; -class vec3_t; -class vec2_t; - -NAMESPACE_REGION( util ) - -template < typename t > -struct reverse_iterable { - reverse_iterable( t&& it ) : - iterable( it ) { } - - t& iterable; - inline auto begin( ) { - return std::rbegin( iterable ); - } - - inline auto end( ) { - return std::rend( iterable ); - } -}; - -template< typename t > -reverse_iterable< t > -reverse_iterator( t&& iter ) { - return reverse_iterable< t >{ iter }; -} - -template < typename fn > __forceinline fn get_vfunc( void* classbase, int index ) { - if( !classbase ) return fn{ }; - return ( fn )( *( uintptr_t** )classbase )[ index ]; -} - -template < size_t index, typename ret, class ... args_ > -__forceinline ret get_vfunc( void* thisptr, args_... args ) { - using fn = ret( __thiscall* )( void*, args_... ); - - auto fn_ptr = ( fn )( *( uintptr_t** )thisptr )[ index ]; - return fn_ptr( thisptr, args... ); -} - -__forceinline std::string unicode_to_ascii( const std::wstring& unicode ) { - std::string ascii_str( unicode.begin( ), unicode.end( ) ); - return ascii_str; -} - -__forceinline std::wstring ascii_to_unicode( const std::string& ascii ) { - std::wstring unicode_str( ascii.begin( ), ascii.end( ) ); - return unicode_str; -} - -template < typename integer > -__forceinline auto to_hex_str( const integer& w, - size_t hex_len = sizeof( integer ) << 1 ) { - constexpr char* hex_digits = xors( "0123456789abcdef" ); - std::string rc( hex_len, 0 ); - - for( size_t i{ }, j{ ( hex_len - 1 ) * 4 }; i < hex_len; ++i, j -= 4 ) - rc[ i ] = hex_digits[ ( w >> j ) & 0x0f ]; - - return rc; -} - -extern void clip_trace_to_player( IClientEntity* player, vec3_t& src, vec3_t& end, - unsigned mask, CTraceFilter* filter, CGameTrace* trace ); - -extern bool trace_ray( vec3_t& start, vec3_t& end, IClientEntity* a, IClientEntity* b ); -extern bool is_low_fps( ); -extern bool is_tick_valid( int tickcount ); -extern void set_random_seed( int seed ); -extern vec3_t get_spread_dir( float inaccuracy, float spread, vec3_t angles, int seed ); -extern float get_random_float( float min, float max ); -extern bool __vectorcall intersects_hitbox( vec3_t eye_pos, vec3_t end_pos, vec3_t min, vec3_t max, float radius ); -extern bool hitchance( int target, const vec3_t& angles, int percentage ); -extern bool hitchance( int target, const vec3_t& angle, int percentage, int hi ); -extern float get_total_latency( ); -extern float get_lerptime( ); -extern int get_closest_player( ); -extern vec2_t screen_transform( vec3_t world ); -extern const char* object_index_to_name( int index ); -extern void disable_pvs( ); - -END_REGION \ No newline at end of file diff --git a/tf2/vector.hpp b/tf2/vector.hpp deleted file mode 100644 index af24136..0000000 --- a/tf2/vector.hpp +++ /dev/null @@ -1,334 +0,0 @@ -#pragma once -#include -#include - - -class vec2_t { -public: - vec2_t( ) { - x = y = 0.0f; - } - - vec2_t( float X, float Y ) { - x = X; y = Y; - } - - vec2_t( float* v ) { - x = v[ 0 ]; y = v[ 1 ]; - } - - vec2_t( const float* v ) { - x = v[ 0 ]; y = v[ 1 ]; - } - - vec2_t( const vec2_t& v ) { - x = v.x; y = v.y; - } - - vec2_t& operator=( const vec2_t& v ) { - x = v.x; y = v.y; return *this; - } - - float& operator[]( int i ) { - return ( ( float* )this )[ i ]; - } - - float operator[]( int i ) const { - return ( ( float* )this )[ i ]; - } - - vec2_t& operator+=( const vec2_t& v ) { - x += v.x; y += v.y; return *this; - } - - vec2_t& operator-=( const vec2_t& v ) { - x -= v.x; y -= v.y; return *this; - } - - vec2_t& operator*=( const vec2_t& v ) { - x *= v.x; y *= v.y; return *this; - } - - vec2_t& operator/=( const vec2_t& v ) { - x /= v.x; y /= v.y; return *this; - } - - vec2_t& operator+=( float v ) { - x += v; y += v; return *this; - } - - vec2_t& operator-=( float v ) { - x -= v; y -= v; return *this; - } - - vec2_t& operator*=( float v ) { - x *= v; y *= v; return *this; - } - - vec2_t& operator/=( float v ) { - x /= v; y /= v; return *this; - } - - vec2_t operator+( const vec2_t& v ) const { - return vec2_t( x + v.x, y + v.y ); - } - - vec2_t operator-( const vec2_t& v ) const { - return vec2_t( x - v.x, y - v.y ); - } - - vec2_t operator*( const vec2_t& v ) const { - return vec2_t( x * v.x, y * v.y ); - } - - vec2_t operator/( const vec2_t& v ) const { - return vec2_t( x / v.x, y / v.y ); - } - - vec2_t operator+( float v ) const { - return vec2_t( x + v, y + v ); - } - - vec2_t operator-( float v ) const { - return vec2_t( x - v, y - v ); - } - - vec2_t operator*( float v ) const { - return vec2_t( x * v, y * v ); - } - - vec2_t operator/( float v ) const { - return vec2_t( x / v, y / v ); - } - - void set( float X = 0.0f, float Y = 0.0f ) { - x = X; y = Y; - } - - float length( void ) const { - return sqrtf( x * x + y * y ); - } - - float lengthsqr( void ) const { - return ( x * x + y * y ); - } - - float dist_to( const vec2_t& v ) const { - return ( *this - v ).length( ); - } - - float dist_to_sqr( const vec2_t& v ) const { - return ( *this - v ).lengthsqr( ); - } - - float dot( const vec2_t& v ) const { - return ( x * v.x + y * v.y ); - } - - bool is_zero( void ) const { - return ( x > -FLT_EPSILON && x < FLT_EPSILON && - y > -FLT_EPSILON && y < FLT_EPSILON ); - } - - operator bool( ) const noexcept { - return !is_zero( ); - } - -public: - float x, y; -}; - -class vec3_t { -public: - vec3_t( ) { - x = y = z = 0.0f; - } - - vec3_t( float X, float Y, float Z ) { - x = X; y = Y; z = Z; - } - - vec3_t( float* v ) { - x = v[ 0 ]; y = v[ 1 ]; z = v[ 2 ]; - } - - vec3_t( const float* v ) { - x = v[ 0 ]; y = v[ 1 ]; z = v[ 2 ]; - } - - vec3_t( const vec3_t& v ) { - x = v.x; y = v.y; z = v.z; - } - - vec3_t( const vec2_t& v ) { - x = v.x; y = v.y; z = 0.0f; - } - - __forceinline vec3_t& operator=( const vec3_t& v ) { - x = v.x; y = v.y; z = v.z; return *this; - } - - __forceinline vec3_t& operator=( const vec2_t& v ) { - x = v.x; y = v.y; z = 0.0f; return *this; - } - - float& operator[]( int i ) { - return ( ( float* )this )[ i ]; - } - - __forceinline float operator[]( int i ) const { - return ( ( float* )this )[ i ]; - } - - vec3_t& operator+=( const vec3_t& v ) { - x += v.x; y += v.y; z += v.z; return *this; - } - - vec3_t& operator-=( const vec3_t& v ) { - x -= v.x; y -= v.y; z -= v.z; return *this; - } - - vec3_t& operator*=( const vec3_t& v ) { - x *= v.x; y *= v.y; z *= v.z; return *this; - } - - vec3_t& operator/=( const vec3_t& v ) { - x /= v.x; y /= v.y; z /= v.z; return *this; - } - - vec3_t& operator+=( float v ) { - x += v; y += v; z += v; return *this; - } - - vec3_t& operator-=( float v ) { - x -= v; y -= v; z -= v; return *this; - } - - vec3_t& operator*=( float v ) { - x *= v; y *= v; z *= v; return *this; - } - - vec3_t& operator/=( float v ) { - x /= v; y /= v; z /= v; return *this; - } - - __forceinline vec3_t operator+( const vec3_t& v ) const { - return vec3_t( x + v.x, y + v.y, z + v.z ); - } - - __forceinline vec3_t operator-( const vec3_t& v ) const { - return vec3_t( x - v.x, y - v.y, z - v.z ); - } - - __forceinline vec3_t operator*( const vec3_t& v ) const { - return vec3_t( x * v.x, y * v.y, z * v.z ); - } - - __forceinline vec3_t operator/( const vec3_t& v ) const { - return vec3_t( x / v.x, y / v.y, z / v.z ); - } - - __forceinline vec3_t operator+( float v ) const { - return vec3_t( x + v, y + v, z + v ); - } - - __forceinline vec3_t operator-( float v ) const { - return vec3_t( x - v, y - v, z - v ); - } - - __forceinline vec3_t operator*( float v ) const { - return vec3_t( x * v, y * v, z * v ); - } - - __forceinline vec3_t operator/( float v ) const { - return vec3_t( x / v, y / v, z / v ); - } - - __forceinline float length( ) const { - return sqrtf( x * x + y * y + z * z ); - } - - __forceinline float lengthsqr( ) const { - return ( x * x + y * y + z * z ); - } - - __forceinline float length2d( ) const { - return sqrtf( x * x + y * y ); - } - - __forceinline float length2dsqr( ) const { - return ( x * x + y * y ); - } - - __forceinline float dist_to( const vec3_t& v ) const { - return ( *this - v ).length( ); - } - - __forceinline float dist_to_sqr( const vec3_t& v ) const { - return ( *this - v ).lengthsqr( ); - } - - __forceinline float dot( const vec3_t& v ) const { - return ( x * v.x + y * v.y + z * v.z ); - } - - __forceinline float fov_to( vec3_t to ) { - const float from_length = length( ); - const float to_length = to.length( ); - - if( from_length && to_length ) { - return acos( dot( to ) / from_length * to_length ); - } - - return 0.f; - } - - vec3_t cross( const vec3_t& v ) const { - return vec3_t( y * v.z - z * v.y, z * v.x - x * v.z, x * v.y - y * v.x ); - } - - bool is_zero( ) const { - return ( x > -FLT_EPSILON && x < FLT_EPSILON && - y > -FLT_EPSILON && y < FLT_EPSILON && - z > -FLT_EPSILON && z < FLT_EPSILON ); - } - - operator bool( ) const { - return !is_zero( ); - } - - inline void normalize_vector( ) { - vec3_t& v = *this; - - float iradius = 1.f / ( this->length( ) + FLT_EPSILON ); //FLT_EPSILON - - v.x *= iradius; - v.y *= iradius; - v.z *= iradius; - } - - vec3_t abs( ) const { - return vec3_t{ std::abs( x ), std::abs( y ), std::abs( z ) }; - } - - vec3_t clamp( ) { - for( size_t axis{ }; axis < 2; axis++ ) { - auto &cur_axis = operator[]( axis ); - if( !std::isfinite( cur_axis ) ) { - cur_axis = 0.f; - } - } - - x = std::clamp( x, -89.f, 89.f ); - y = std::clamp( std::remainder( y, 360.f ), -180.f, 180.f ); - z = 0.f; - return *this; - } - -public: - float x, y, z; -}; - -__forceinline vec3_t operator*( float f, const vec3_t& v ) { - return v * f; -} diff --git a/tf2/visuals.hpp b/tf2/visuals.hpp deleted file mode 100644 index 2f8e9f3..0000000 --- a/tf2/visuals.hpp +++ /dev/null @@ -1,56 +0,0 @@ -#pragma once -#include -#include "vector.hpp" -#include "color.hpp" -#include -#include "strings.hpp" -#include "IVRenderView.h" -class c_base_player; - -namespace features -{ - class c_visuals { - private: - static const clr_t esp_green( uint8_t alpha = 255 ) { - return clr_t( 1, 216, 62, alpha ); - } - static const clr_t esp_red( uint8_t alpha = 255 ) { - return clr_t( 240, 0, 0, alpha ); - } - static const clr_t esp_blue( uint8_t alpha = 255 ) { - return clr_t( 84, 173, 247, alpha ); - } - - void draw_line( const vec2_t& a, const vec2_t& b, const clr_t& clr ); - void draw_line( int x, int y, int x1, int y1, const clr_t& clr ); - void draw_rect( int x, int y, int w, int h, const clr_t& clr ); - void draw_filled_rect( int x, int y, int w, int h, const clr_t& clr ); - void draw_circle( int x, int y, int r, const clr_t& clr, int res = 48 ); - - void draw_really_big_string( int x, int y, const clr_t& clr, const char* msg, ... ); - void draw_string( int x, int y, int align, bool big, const clr_t& clr, const char* msg, ... ); - - - void draw_local( ); - void draw_players( ); - void draw_world( ); - - void draw_hits( ); - void spectator_list( ); - //void throwable_prediction( ); - - void invalidate_glow( ); - - vec3_t m_stored_pos[ 65 ]{ }; - float m_anim_progress[ 65 ]{ }; - float m_last_hit{ }; - int m_ent_dmg[ 65 ]{ }; - public: - void update_glow( ); - void world_modulate( ); - void update_position( int index, const vec3_t& pos ); - void out_of_fov( c_base_player* ent, const vec3_t& pos, clr_t col ); - void store_hit( ); - void operator()( ); - }; -} \ No newline at end of file diff --git a/tf2/visuals_draw.cpp b/tf2/visuals_draw.cpp deleted file mode 100644 index 87c476b..0000000 --- a/tf2/visuals_draw.cpp +++ /dev/null @@ -1,94 +0,0 @@ -#include "d3d.hpp" -#include "interfaces.h" -#include "renderer.hpp" -#include "visuals.hpp" -#include "settings.h" - -namespace features -{ - void c_visuals::draw_line( const vec2_t& a, const vec2_t& b, const clr_t& clr ) { - if( g_settings.misc.hide_from_obs ) - g_d3d.draw_line( clr, a.x, a.y, b.x, b.y ); - else - g_renderer.draw_line( a, b, clr ); - } - - void c_visuals::draw_line( int x, int y, int x1, int y1, const clr_t& clr ) { - if( g_settings.misc.hide_from_obs ) - g_d3d.draw_line( clr, x, y, x1, y1 ); - else - g_renderer.draw_line( x, y, x1, y1, clr ); - } - - void c_visuals::draw_rect( int x, int y, int w, int h, const clr_t& clr ) { - if( g_settings.misc.hide_from_obs ) - g_d3d.draw_rect( clr, x, y, w, h ); - else - g_renderer.draw_box( x, y, w, h, clr ); - } - - void c_visuals::draw_filled_rect( int x, int y, int w, int h, const clr_t& col ) { - if( g_settings.misc.hide_from_obs ) - g_d3d.draw_filled_rect( col, x, y, w, h ); - else - g_renderer.draw_rect( x, y, w, h, col ); - } - - void c_visuals::draw_circle( int x, int y, int r, const clr_t& col, int res ) { - if( g_settings.misc.hide_from_obs ) - g_d3d.draw_circle( col, x, y, r, res ); - else - g_renderer.draw_circle( x, y, r, col, res ); - } - - void c_visuals::draw_string( int x, int y, int align, bool big, const clr_t& col, const char* msg, ... ) { - char* buffer = ( char* )_alloca( 1024 ); - va_list list{ }; - - memset( buffer, 0, 1024 ); - - __crt_va_start( list, msg ); - vsprintf_s( buffer, 1024, msg, list ); - __crt_va_end( list ); - - switch( align ) { - case ALIGN_CENTER: - if( g_settings.misc.hide_from_obs ) - g_d3d.draw_text< ALIGN_CENTER >( big ? ::d3d::fonts.f_12 : ::d3d::fonts.f_esp_small, col, x, y, big ? D3DFONTFLAG_DROPSHADOW : D3DFONTFLAG_OUTLINE, buffer ); - else - g_renderer.draw_string< ALIGN_CENTER >( big ? g_fonts.f_12 : g_fonts.f_esp_small, x, y, col, buffer ); - - break; - case ALIGN_LEFT: - if( g_settings.misc.hide_from_obs ) - g_d3d.draw_text< ALIGN_LEFT >( big ? ::d3d::fonts.f_12 : ::d3d::fonts.f_esp_small, col, x, y, big ? D3DFONTFLAG_DROPSHADOW : D3DFONTFLAG_OUTLINE, buffer ); - else - g_renderer.draw_string< ALIGN_LEFT >( big ? g_fonts.f_12 : g_fonts.f_esp_small, x, y, col, buffer ); - - break; - case ALIGN_RIGHT: - if( g_settings.misc.hide_from_obs ) - g_d3d.draw_text< ALIGN_RIGHT >( big ? ::d3d::fonts.f_12 : ::d3d::fonts.f_esp_small, col, x, y, big ? D3DFONTFLAG_DROPSHADOW : D3DFONTFLAG_OUTLINE, buffer ); - else - g_renderer.draw_string< ALIGN_RIGHT >( big ? g_fonts.f_12 : g_fonts.f_esp_small, x, y, col, buffer ); - - break; - } - } - - void c_visuals::draw_really_big_string( int x, int y, const clr_t& col, const char* msg, ... ) { - char* buffer = ( char* )_alloca( 1024 ); - va_list list{ }; - - memset( buffer, 0, 1024 ); - - __crt_va_start( list, msg ); - vsprintf_s( buffer, 1024, msg, list ); - __crt_va_end( list ); - - if( g_settings.misc.hide_from_obs ) - g_d3d.draw_text< ALIGN_LEFT >( ::d3d::fonts.f_18, col, x, y, D3DFONTFLAG_OUTLINE, buffer ); - else - g_renderer.draw_string< ALIGN_LEFT >( g_fonts.f_bold, x, y, col, msg ); - } -} \ No newline at end of file diff --git a/tf2/visuals_local.cpp b/tf2/visuals_local.cpp deleted file mode 100644 index 7f549d9..0000000 --- a/tf2/visuals_local.cpp +++ /dev/null @@ -1,207 +0,0 @@ -#include - -#include "visuals.hpp" -#include "ctx.hpp" -#include "base_cheat.h" -#include "renderer.hpp" -#include "input_system.hpp" -#include "math.h" -#include "settings.h" -#include "interfaces.h" -namespace features -{ - void c_visuals::draw_local( ) { - int screen_w, screen_h; - cl.m_engine( )->GetScreenSize( screen_w, screen_h ); - - int cur_pos{ }; - - - if( g_settings.misc.no_scope( ) && - g_ctx.m_local->m_bIsScoped( ) ) { - int w, h; - cl.m_engine( )->GetScreenSize( w, h ); - - draw_line( 0, h / 2, w, h / 2, clr_t( 0, 0, 0 ) ); - draw_line( w / 2, 0, w / 2, h, clr_t( 0, 0, 0 ) ); - } - spectator_list( ); - //throwable_prediction( ); -- sometime when i can be fucked - } - - void c_visuals::spectator_list( ) { - if( !g_settings.visuals.spec_list ) - return; - - std::vector< std::string > spec_list; - - for( size_t i{ }; i < 65; ++i ) { - auto ent = cl.m_entlist( )->get_client_entity< c_base_player >( i ); - if( ent && ent->is_player( ) && !ent->ce( )->is_dormant( ) ) { - auto spec_handle = ent->m_hObserverTarget( ); - auto spec_ent = cl.m_entlist( )->get_entity_from_handle< c_base_player >( spec_handle ); - - if( spec_ent == g_ctx.m_local ) { - char player_name[ 32 ]; - ent->get_name_safe( player_name ); - spec_list.push_back( player_name ); - } - } - } - - int screen_w, screen_h; - cl.m_engine( )->GetScreenSize( screen_w, screen_h ); - - int cur_pos{ }; - - if( g_settings.misc.watermark ) { - cur_pos = 20; - } - - for( auto& it : spec_list ) { - draw_string( screen_w - 3, cur_pos, ALIGN_RIGHT, true, clr_t( 255, 255, 255 ), it.c_str( ) ); - cur_pos += 10; - } - } - //i wanna do this - /* - void c_visuals::throwable_prediction( ) { - static auto sv_gravity = cl.m_cvar( )->FindVar( xors( "sv_gravity" ) ); - - if( !g_settings.visuals.grenade_prediction ) - return; - - - /* - auto get_detonate_time = [ ]( int defindex ) { - switch( defindex ) { - case WEAPON_FLASHBANG: - case WEAPON_HEGRENADE: - return 1.5f; - case WEAPON_INCGRENADE: - case WEAPON_MOLOTOV: - return molotov_detonate_time->get_float( ); - case WEAPON_DECOY: - return 5.f; - default: return 3.f; - } - }; - - auto draw_3d_line = [ this ]( const vec3_t& start, const vec3_t& end, clr_t col, bool circle = false ) { - vec2_t start_w2s = util::screen_transform( start ); - vec2_t end_w2s = util::screen_transform( end ); - - draw_line( start_w2s, end_w2s, col ); - if( circle ) - draw_rect( end_w2s.x - 1, end_w2s.y - 1, 2, 2, clr_t( 230, 230, 230 ) ); - }; - - auto clip_velocity = [ ]( const vec3_t& in, const vec3_t& normal, vec3_t& out, float overbounce ) { - int blocked = 0; - float angle = normal[ 2 ]; - - if( angle > 0.f ) - blocked |= 1; - - if( !angle ) - blocked |= 2; - - float backoff = in.dot( normal ) * overbounce; - - for( int i{ }; i < 3; ++i ) { - out[ i ] = in[ i ] - ( normal[ i ] * backoff ); - - if( out[ i ] > -0.1f && out[ i ] < 0.1f ) { - out[ i ] = 0.f; - } - } - - return blocked; - }; - - auto weapon = g_ctx.m_local->get_active_weapon( ); - if( !weapon ) return; - - int def_index = weapon->m_iItemDefinitionIndex( ); - if( weapon->has_trajectory( ) ) - return; - - auto wpn_info = weapon->get_wpn_info( ); - - vec3_t throw_ang, forward; - cl.m_engine( )->GetViewAngles( throw_ang ); - throw_ang.x -= ( 90.f - abs( throw_ang.x ) ) * 0.11111111f; - throw_ang.x = std::remainderf( throw_ang.x, 360.f ); - - forward = math::angle_vectors( throw_ang ); - - float throw_strength = weapon->m_flThrowStrength( ); - float throw_velocity = std::min( std::max( wpn_info->throw_velocity * 0.9f, 15.f ), 750.f ); - - float throw_height = ( throw_strength * 12.f ) - 12.f; - float v68 = throw_velocity * ( ( 0.7f * throw_strength ) + 0.3f ); - - vec3_t start_pos = g_ctx.m_local->get_eye_pos( ) + vec3_t( 0, 0, throw_height ); - vec3_t end_pos = start_pos + ( forward * 22.f ); - - CTraceFilter filter; - filter.pSkip = g_ctx.m_local; - - CGameTrace trace; - Ray_t ray; - ray.Init( start_pos, end_pos, vec3_t( -2.f, -2.f, -2.f ), vec3_t( 2.f, 2.f, 2.f ) ); - - cl.m_trace( )->trace_ray( ray, CONTENTS_SOLID | CONTENTS_MONSTER | CONTENTS_MOVEABLE | CONTENTS_CURRENT_90, &filter, &trace ); - end_pos = trace.endpos - forward * 6.f; - vec3_t throw_pos = g_ctx.m_local->m_vecVelocity( ) * 1.25f + forward * v68; - - //draw_3d_line( start_pos, end_pos, clr_t( 255, 255, 255 ) ); - float gravity = sv_gravity->get_float( ) * 0.4f; - - player_info_t info{ }; - - for( int ticks = TIME_TO_TICKS( get_detonate_time( def_index ) ); ticks >= 0; --ticks ) { - auto throw_dir = vec3_t( throw_pos.x, throw_pos.y, ( throw_pos.z + ( throw_pos.z - ( gravity * TICK_INTERVAL( ) ) ) ) * 0.5f ); - auto temp = throw_dir * TICK_INTERVAL( ); - throw_pos.z -= gravity * TICK_INTERVAL( ); - - vec3_t src = end_pos, end = end_pos + temp; - Ray_t ray; - ray.Init( src, end, vec3_t( -2.f, -2.f, -2.f ), vec3_t( 2.f, 2.f, 2.f ) ); - - cl.m_trace( )->trace_ray( ray, CONTENTS_SOLID | CONTENTS_MOVEABLE | CONTENTS_MONSTER | CONTENTS_CURRENT_90, &filter, &trace ); - if( trace.allsolid ) - throw_pos = vec3_t( ); - - end_pos = trace.endpos; - draw_3d_line( src, end_pos, clr_t( 66, 143, 244 ) ); - - if( trace.fraction != 1.f ) { - float surf_elasticity = 1.f; - vec3_t throw_pos2{ }; - clip_velocity( throw_pos, trace.plane.normal, throw_pos2, 2.f ); - - if( trace.m_pEnt && cl.m_engine( )->GetPlayerInfo( trace.m_pEnt->index( ), &info ) ) { - surf_elasticity = 0.3f; - } - - throw_pos2 *= std::clamp( surf_elasticity * 0.45f, 0.f, 0.9f ); - end = end_pos + throw_pos2 * ( ( 1.f - trace.fraction ) * TICK_INTERVAL( ) ); - - if( def_index == WEAPON_MOLOTOV || def_index == WEAPON_INCGRENADE ) { - if( trace.plane.normal.z >= cos( DEG2RAD( molotov_detonate_slope->get_float( ) ) ) ) { - return; - } - } - - ray.Init( end_pos, end, vec3_t( -2.f, -2.f, -2.f ), vec3_t( 2.f, 2.f, 2.f ) ); - cl.m_trace( )->trace_ray( ray, CONTENTS_SOLID | CONTENTS_MOVEABLE | CONTENTS_MONSTER | CONTENTS_CURRENT_90, &filter, &trace ); - - draw_3d_line( end_pos, end, clr_t( 66, 143, 244 ), true ); - end_pos = trace.endpos; - throw_pos = throw_pos2; - } - } - }*/ - -} \ No newline at end of file diff --git a/tf2/visuals_objects.cpp b/tf2/visuals_objects.cpp deleted file mode 100644 index e69de29..0000000 diff --git a/tf2/visuals_players.cpp b/tf2/visuals_players.cpp deleted file mode 100644 index 8b9aaf9..0000000 --- a/tf2/visuals_players.cpp +++ /dev/null @@ -1,551 +0,0 @@ -#include - -#include "visuals.hpp" -#include "ctx.hpp" -#include "base_cheat.h" -#include "renderer.hpp" -#include "input_system.hpp" -#include "math.h" -#include "settings.h" -#include "interfaces.h" -//2k lines of code here -int screen_w, screen_h; - -namespace features -{ - void c_visuals::update_position( int index, const vec3_t& pos ) { - m_stored_pos[ index ] = pos; - if( m_anim_progress[ index ] <= 0.3f && g_settings.visuals.dormant ) { - m_anim_progress[ index ] = 0.3f; - } - } - - void c_visuals::store_hit( ) { - if( !g_settings.visuals.hitmarkers ) - return; - - cl.m_surface( )->play_sound( xors( "buttons\\arena_switch_press_02.wav" ) ); - m_last_hit = cl.m_globals->curtime; - } - - - void c_visuals::draw_hits( ) { - if( !g_settings.visuals.hitmarkers || !g_ctx.run_frame( ) ) - return; - - static const clr_t col_start = clr_t( 231, 75, 75, 255 ); - static const clr_t col_end = clr_t( 0xf4, 0x7c, 0xa8, 255 ); - - float delta = ( cl.m_globals->curtime - m_last_hit ) * 1.5f; - if( std::abs( delta ) > 1.0f ) return; - - clr_t blend = clr_t::blend( col_start, col_end, delta ); - if( delta > 0.75f ) { - blend.a( ) = 255 * ( 1.0f - delta ) * 4.f; - } - - auto get_rotated_point = [ ]( vec2_t point, float rotation, float distance ) { - float rad = DEG2RAD( rotation ); - - point.x += sin( rad ) * distance; - point.y += cos( rad ) * distance; - - return point; - }; - - - for( size_t i{ }; i < 2; ++i ) { - float rotation = 135.f + i * 90.f; - - vec2_t center = { screen_w * 0.5f, screen_h * 0.5f }; - vec2_t start = get_rotated_point( center, rotation, 8.f ); - vec2_t end = get_rotated_point( center, rotation, 17.f ); - - vec2_t rot_start = get_rotated_point( center, rotation - 180.f, 8.f ); - vec2_t rot_end = get_rotated_point( center, rotation - 180.f, 17.f ); - - draw_line( start, end, blend ); - draw_line( rot_start, rot_end, blend ); - } - } - - struct box_t { - int x, y, w, h; - }; - - box_t get_box( c_base_player* ent ) { - const matrix3x4& matrix = ent->m_CollisionGroup( ); - - vec3_t min = ent->m_vecMins( ); - vec3_t max = ent->m_vecMaxs( ); - - std::array< vec3_t, 8 > point_list = { - vec3_t{ min.x, min.y, min.z }, - vec3_t{ min.x, max.y, min.z }, - vec3_t{ max.x, max.y, min.z }, - vec3_t{ max.x, min.y, min.z }, - vec3_t{ max.x, max.y, max.z }, - vec3_t{ min.x, max.y, max.z }, - vec3_t{ min.x, min.y, max.z }, - vec3_t{ max.x, min.y, max.z } - }; - - std::array< float, 8 > x_points; - std::array< float, 8 > y_points; - - vec2_t origin = util::screen_transform( ent->m_vecOrigin( ) ); - - for( auto& it : point_list ) { - vec3_t backup = it; - for( int i{ }; i < 3; ++i ) { - it[ i ] = backup.dot( ( const vec3_t& )( matrix[ i ] ) ) + matrix[ i ][ 3 ]; - } - } - - for( size_t i{ }; i < 8; ++i ) { - vec2_t w2s = util::screen_transform( point_list[ i ] ); - x_points[ i ] = w2s.x; - y_points[ i ] = w2s.y; - } - - std::sort( x_points.begin( ), x_points.end( ) ); - std::sort( y_points.begin( ), y_points.end( ) ); - - int x = ( int )x_points.front( ); - int w = ( int )x_points.back( ) - x; - - int y = ( int )y_points.front( ); - int h = ( int )y_points.back( ) - y; - - return { x - ( int )origin.x, y - ( int )origin.y, w, h }; - } - - void c_visuals::out_of_fov( c_base_player* ent, const vec3_t& pos, clr_t col ) { - vec2_t screen; - vec2_t circle; - - auto find_point = [ ]( vec2_t& point, float deg_x, float deg_y ) { - float x2 = screen_w / 2.f; - float y2 = screen_h / 2.f; - - float d = sqrt( pow( point.x - x2, 2 ) + pow( point.y - y2, 2 ) ); - float r_x = deg_x / d; - float r_y = deg_y / d; - - point.x = r_x * point.x + ( 1.f - r_x ) * x2; - point.y = r_y * point.y + ( 1.f - r_y ) * y2; - }; - - auto get_screen_point = [ ]( vec2_t& screen, const vec3_t& delta ) { - decltype( auto ) w2s_matrix = cl.m_engine( )->GetWorldToScreenMatrix( ); - float x; - float w; - float y; - - screen.x = w2s_matrix[ 0 ][ 0 ] * delta[ 0 ] + w2s_matrix[ 0 ][ 1 ] * delta[ 1 ] + w2s_matrix[ 0 ][ 2 ] * delta[ 2 ] + w2s_matrix[ 0 ][ 3 ]; - screen.y = w2s_matrix[ 1 ][ 0 ] * delta[ 0 ] + w2s_matrix[ 1 ][ 1 ] * delta[ 1 ] + w2s_matrix[ 1 ][ 2 ] * delta[ 2 ] + w2s_matrix[ 1 ][ 3 ]; - w = w2s_matrix[ 3 ][ 0 ] * delta[ 0 ] + w2s_matrix[ 3 ][ 1 ] * delta[ 1 ] + w2s_matrix[ 3 ][ 2 ] * delta[ 2 ] + w2s_matrix[ 3 ][ 3 ]; - - if( w < 0.001f ) { - float invw = -1.0f / w; - screen.x *= invw; - screen.y *= invw; - } - else { - float invw = 1.0f / w; - screen.x *= invw; - screen.y *= invw; - } - - x = float( screen_w ) / 2.f; - y = float( screen_h ) / 2.f; - x += 0.5f * screen.x * screen_w + 0.5f; - y -= 0.5f * screen.y * screen_h + 0.5f; - screen.x = x; - screen.y = y; - }; - - screen = util::screen_transform( pos );//get_screen_point( screen, pos ); - circle = util::screen_transform( pos );// get_screen_point( circle, pos ); - - float radius = g_settings.visuals.out_of_pov_radius * 0.49f; - - float ratio = g_settings.visuals.out_of_pov_radius; - - float w = screen_w * ratio + screen_h * ( 1.0f - ratio ); - - find_point( screen, w * radius, - float( screen_h ) * radius ); - - auto min = std::min< int >( screen_w, screen_h ) * radius; - find_point( circle, float( min ), float( min ) ); - - auto rot_around_center = [ ]( vec2_t start, float rot ) { - float rad = rot * ( M_PI / 180.f ); - - start.x += sin( rad ) * float( g_settings.visuals.out_of_pov_size ); - start.y += cos( rad ) * float( g_settings.visuals.out_of_pov_size ); - - return start; - }; - - float delta_x = ( float( screen_w / 2 ) - circle.x ); - float delta_y = ( float( screen_h / 2 ) - circle.y ); - - auto hyp = sqrt( delta_x * delta_x + delta_y * delta_y ); - - float cos_ = delta_x / hyp; - - float deg = RAD2DEG( acos( cos_ ) ); - - if( screen.y < screen_h / 2 ) { - deg *= -1.f; - } - - auto rotated_pos_1 = rot_around_center( screen, deg + 115 ); - auto rotated_pos_2 = rot_around_center( screen, deg + 65 ); - - col.a( ) *= 0.8f; - - vertex_t v[ ] = { - { screen }, - { rotated_pos_1 }, - { rotated_pos_2 } - }; - - if( !g_settings.misc.hide_from_obs ) - g_renderer.draw_polygon( 3, v, col ); - else { - draw_line( screen, rotated_pos_1, col ); - draw_line( screen, rotated_pos_2, col ); - draw_line( rotated_pos_1, rotated_pos_2, col ); - } - } - - void c_visuals::update_glow( ) { - if( !g_settings.visuals.active || g_settings.misc.hide_from_obs ) - return; - - static auto glow_object_manager = *pattern::first_code_match< GlowObjectManager_t** >( cl.m_chl.dll( ), xors ( "8B 0D ? ? ? ? A1 ? ? ? ? 56 8B 37" ) ) + 0x2; - if( !glow_object_manager ) return; - - static bool invalidated; - if( !g_settings.visuals.glow ) { - if( !invalidated ) { - invalidate_glow( ); - invalidated = true; - } - return; - } - - invalidated = false; - for( int i{ }; i < 64; ++i ) { - auto ent = cl.m_entlist( )->get_client_entity< c_base_player >( i ); - if( !ent ) continue; - - - if( !ent->is_valid( ) ) { - continue; - } - - if( ent->is_enemy( ) || g_settings.visuals.friendlies ) { - ent->m_bGlowEnabled( ) = true; - ent->update_glow_effect( ); - } - } - - if( !glow_object_manager->data.Count( ) ) return; //data count crashed yea lazy cool cool? cool - for( int i{ }; i < glow_object_manager->data.Count( ); ++i ) { - auto ent = ( c_base_player* )cl.m_entlist( )->get_entity_from_handle( glow_object_manager->data[ i ].ent_ptr ); - if( ent && ent->is_valid( ) && ( ent->is_enemy( ) || g_settings.visuals.friendlies( ) ) ) { - clr_t clr = ent->m_iTeamNum( ) == g_ctx.m_local->m_iTeamNum( ) ? g_settings.visuals.glow_friendly : g_settings.visuals.glow_enemy; - clr.a( ) = 200; - glow_object_manager->data[ i ].glow_color = clr.to_fclr( ); - } - } - - } - - void c_visuals::invalidate_glow( ) { - for( int i{ }; i < 64; i++ ) { - auto ent = cl.m_entlist( )->get_client_entity< c_base_player >( i ); - if( !ent ) continue; - if( ent->get_client_class( )->m_class_id == CTFPlayer ) { - ent->m_bGlowEnabled( ) = false; - ent->destroy_glow_effect( ); - } - } - } - - inline clr_t blend_clr( clr_t in, float progress ) { - static const clr_t clr_gray = { 160, 160, 160, 255 }; - int a = in.a( ); - - clr_t ret = clr_t::blend( clr_gray, in, 0.1f + progress * 0.9f ); - ret.a( ) = a; - return ret; - } - - void c_visuals::draw_players( ) { - static constexpr float anim_rate = 1.0f / 0.3f; - static float pov_progress[ 65 ]{ }; - - auto resource = c_base_player::get_player_resource( ); - - for( int i{ }; i < 65; ++i ) { - auto ent = cl.m_entlist( )->get_client_entity< c_base_player >( i ); - - if( !ent || !ent->is_player( ) || !ent->is_alive( ) || ent == g_ctx.m_local ) - continue; - - if( i == ( g_ctx.m_local->m_hObserverTarget( ) & 0xfff ) ) - continue; - - if( ent->m_iTeamNum( ) == g_ctx.m_local->m_iTeamNum( ) && - !g_settings.visuals.friendlies( ) ) - continue; - - float rate = cl.m_globals->frametime * anim_rate; - float& anim = m_anim_progress[ i ]; - float alpha = anim; - bool dormant = ent->ce( )->is_dormant( ); - int health = ent->m_iHealth( ); - auto origin = ent->m_vecOrigin( ); - auto box = get_box( ent ); - int right_pos = 0; - int bottom_pos = 0; - bool too_distant = true; - if( g_ctx.m_local ) - too_distant = ent->m_vecOrigin( ).dist_to( g_ctx.m_local->m_vecOrigin( ) ) > 2500.f; - - if( !dormant ) { - update_position( i, origin ); - anim = 1.0f; - } - else { - if( anim < 0.3f && g_settings.visuals.dormant && !too_distant ) { - rate *= 0.01f; - } - anim = std::clamp( anim -= rate, 0.f, 1.0f ); - if( m_anim_progress[ i ] <= 0.f ) - continue; - } - - clr_t col = ent->m_iTeamNum( ) == g_ctx.m_local->m_iTeamNum( ) ? - g_settings.visuals.box_friendly : g_settings.visuals.box_enemy; - - if( dormant ) { - col = blend_clr( col, anim ); - col.a( ) *= anim; - } - - auto w2s_cur_origin = util::screen_transform( m_stored_pos[ i ] ); - - box.x += w2s_cur_origin.x; - box.y += w2s_cur_origin.y; - - if( box.x > screen_w || box.x + box.w < 0 || - box.y > screen_h || box.y + box.h < 0 ) { - if( g_settings.visuals.out_of_pov ) { - auto& anim = pov_progress[ i ]; - anim = std::clamp( anim += cl.m_globals->frametime * anim_rate, 0.f, 1.0f ); - if( dormant ) - anim = std::clamp( anim -= cl.m_globals->frametime * anim_rate, 0.f, 1.0f ); - else - anim = std::clamp( anim += cl.m_globals->frametime * anim_rate, 0.f, 1.0f ); - - col.a( ) *= anim; - out_of_fov( ent, origin, col ); - } - continue; - } - - pov_progress[ i ] = 0.f; - - if( g_settings.visuals.skeleton( ) && !dormant ) { - clr_t col = ent->m_iTeamNum( ) == g_ctx.m_local->m_iTeamNum( ) ? g_settings.visuals.skeleton_friendly : g_settings.visuals.skeleton_enemy; - col.a( ) *= alpha; - - auto hdr = cl.m_modelinfo( )->GetStudioModel( ent->ce( )->get_model( ) ); - if( hdr ) { - matrix3x4 matrix[ 128 ]; - ent->ce( )->setup_bones( matrix, 128, 0x100, 0.f ); - - for( size_t bone{ }; bone < hdr->numbones; ++bone ) { - auto b = hdr->GetBone( bone ); - if( b && b->flags & 0x100 && b->parent != -1 ) { - vec3_t child = vec3_t{ matrix[ bone ][ 0 ][ 3 ], matrix[ bone ][ 1 ][ 3 ], matrix[ bone ][ 2 ][ 3 ] }; - vec3_t parent = vec3_t{ matrix[ b->parent ][ 0 ][ 3 ], matrix[ b->parent ][ 1 ][ 3 ], matrix[ b->parent ][ 2 ][ 3 ] }; - - auto child_screen = util::screen_transform( child ); - auto parent_screen = util::screen_transform( parent ); - - draw_line( child_screen, parent_screen, col ); - } - } - } - } - - if( g_settings.visuals.box( ) ) { - auto alpha_ = col.a( ); - float percent = float( alpha_ ) / 255.f; - draw_rect( box.x + 1, box.y + 1, box.w - 2, box.h - 2, clr_t( 0, 0, 0, 180 * alpha * percent ) ); - draw_rect( box.x, box.y, box.w, box.h, col ); - } - - if( g_settings.visuals.health( ) ) { - auto fill = box.h - 1; - fill *= std::clamp( health, 0, 100 ) * 0.01f; - - auto hp_col = clr_t( - std::min< int >( 510 * ( 100 - health ) / 100, 255 ), - std::min< int >( 510 * health / 100, 255 ), - 0, - 255 * alpha ); - - draw_filled_rect( box.x - 4, box.y, 3, box.h + 1, clr_t( 0, 0, 0, 170 * alpha ) ); - draw_filled_rect( box.x - 3, box.y + box.h - fill, 1, fill, hp_col ); - - if( health != 100 ) - draw_string( box.x - 2, box.y + 1 + box.h - fill - 3, ALIGN_CENTER, false, clr_t( 255, 255, 255, 255 * alpha ), "%d", health ); - } - - if( g_settings.visuals.name( ) ) { - draw_string( box.x + box.w / 2, box.y - 12, ALIGN_CENTER, true, - blend_clr( clr_t( 255, 255, 255, alpha * 255 ), anim ), ent->get_info( ).name ); - } - - if( g_settings.visuals.player_class( ) ) { - int x_pos = box.x + box.w + 2; - int y_pos = box.y - 1 + right_pos; - draw_string( x_pos, y_pos, ALIGN_LEFT, false, - blend_clr( esp_green( 255 * alpha ), anim ), ent->get_class_name( ) ); - - right_pos += 9; - } - - if( g_settings.visuals.weapon( ) ) { - auto weapon = ent->get_active_weapon( ); - if( weapon ) { //magic font - int max = weapon->get_max_clip_1( ); - - if( g_settings.visuals.ammo && max > 1 && g_settings.visuals.weapon == 1 && !g_settings.misc.hide_from_obs ) { - auto progress = float( weapon->m_iClip1( ) ) / max; - float fill = box.w - 2.f; - float percent = fill * progress; - - draw_filled_rect( box.x, box.y + box.h + 3 + bottom_pos, - box.w, 3, clr_t( 0, 0, 0, 180 * alpha ) ); - - draw_filled_rect( box.x + 1, box.y + box.h + 4 + bottom_pos, - percent, 1, blend_clr( clr_t( 66, 143, 244, 255 * alpha ), anim ) ); - - if( progress < 0.25f ) { - draw_string( - box.x + percent, box.y + box.h + 2 + bottom_pos, ALIGN_LEFT, false, - clr_t( 255, 255, 255, 180 * alpha ), "%d", weapon->m_iClip1( ) ); - } - - bottom_pos += 4; - } - - /*if( g_settings.visuals.weapon == 1 && !g_settings.misc.hide_from_obs ) { - g_renderer.draw_string< ALIGN_CENTER >( 0xa1, box.x + box.w / 2, box.y + box.h + bottom_pos + 3, - clr_t( 255, 255, 255, alpha * 255 ), "%c", weapon->get_hud_icon( ) ); - }*/ - else { - char wep_str[ 64 ]; - if( g_settings.visuals.ammo( ) && weapon->m_iClip1( ) > -1 ) - sprintf_s< 64 >( wep_str, "%s [%d]", weapon->get_print_name( ), weapon->m_iClip1( ) ); - else - sprintf_s< 64 >( wep_str, "%s", weapon->get_print_name( ) ); - - draw_string( box.x + box.w / 2, box.y + box.h + 3 + bottom_pos, ALIGN_CENTER, false, - clr_t( 255, 255, 255, alpha * 255 ), wep_str ); - } - } - } - - if( g_settings.visuals.conditions( ) ) { - int x_pos = box.x + box.w + 3; - int y_pos = box.y - 1; - - switch( ent->m_nPlayerCond( ) ) { - case TFCond_Slowed: - draw_string( x_pos, y_pos + right_pos, ALIGN_LEFT, false, clr_t( 255, 255, 255, 255 * alpha ), xors( "slow" ) ); - right_pos += 9; - break; - case TFCond_Zoomed: //dont work too lazy - draw_string( x_pos, y_pos + right_pos, ALIGN_LEFT, false, clr_t( 255, 255, 255, 255 * alpha ), xors( "scoped" ) ); - right_pos += 9; - break; - case TFCond_Bonked: - draw_string( x_pos, y_pos + right_pos, ALIGN_LEFT, false, clr_t( 255, 255, 255, 255 * alpha ), xors( "bonk" ) ); - right_pos += 9; - break; - case TFCond_Disguised: - draw_string( x_pos, y_pos + right_pos, ALIGN_LEFT, false, clr_t( 255, 255, 255, 255 * alpha ), xors( "disg" ) ); - right_pos += 9; - break; - case TFCond_Cloaked: - draw_string( x_pos, y_pos + right_pos, ALIGN_LEFT, false, clr_t( 255, 255, 255, 255 * alpha ), xors( "cloak" ) ); - right_pos += 9; - break; - case TFCond_Ubercharged: - draw_string( x_pos, y_pos + right_pos, ALIGN_LEFT, false, clr_t( 255, 255, 255, 255 * alpha ), xors( "uber" ) ); - right_pos += 9; - break; - case TFCond_UberchargeFading: - draw_string( x_pos, y_pos + right_pos, ALIGN_LEFT, false, clr_t( 255, 255, 255, 255 * alpha ), xors( "uber" ) ); - right_pos += 9; - break; - } - - } - - } - } - - void c_visuals::operator()( ) { - cl.m_engine( )->GetScreenSize( screen_w, screen_h ); - if( g_ctx.run_frame( ) ) { - draw_local( ); - } - - if( !g_ctx.m_local ) - return; - - switch( g_settings.visuals.activation_type( ) ) { - case 0: - g_settings.visuals.active = false; - break; - case 1: - g_settings.visuals.active = true; - break; - case 2: - g_settings.visuals.active = g_input.is_key_pressed( g_settings.visuals.key ); - break; - case 3: { - static bool held = false; - bool pressed = g_input.is_key_pressed( g_settings.visuals.key ); - if( pressed ) { - if( !held ) - g_settings.visuals.active ^= 1; - held = true; - } - else held = false; - } - break; - default: - g_settings.visuals.active = false; - break; - } - - if( g_settings.visuals.active ) { - draw_players( ); - } - - draw_world( ); - draw_hits( ); - } -} \ No newline at end of file diff --git a/tf2/visuals_world.cpp b/tf2/visuals_world.cpp deleted file mode 100644 index b727798..0000000 --- a/tf2/visuals_world.cpp +++ /dev/null @@ -1,344 +0,0 @@ -#include -#include -#include "ctx.hpp" -#include "visuals.hpp" -#include "interfaces.h" -#include "renderer.hpp" -#include "base_cheat.h" -#include "settings.h" -namespace features -{ - void fix_static_props( ) { - static auto cvar = cl.m_cvar( )->FindVar( xors( "r_drawspecificstaticprop" ) ); - static bool fixed{ }; - if( !fixed ) { - cvar->m_flags |= 0; - cvar->set_value( 1 ); - - fixed = true; - } - } - - - void c_visuals::draw_world( ) { - if( !g_settings.visuals.active ) - return; - - static const auto m_bShouldGlow = g_netvars.get_netvar( fnv( "DT_DynamicProp" ), fnv( "m_bShouldGlow" ) ); - - - for( int i{ }; i < cl.m_entlist( )->get_highest_entity_index( ); ++i ) { - auto ent = cl.m_entlist( )->get_client_entity< IClientEntity >( i ); - if( !ent ) continue; - - auto client_class = ent->get_client_class( ); - if( !client_class ) continue; - - int class_id = client_class->m_class_id; - std::string name = ""; - - auto is_object = [ &name ]( int class_id ) -> bool { - switch( class_id ) { - case CObjectSentrygun: - name = xors( "sentry" ); - return true; - case CObjectDispenser: - name = xors( "dispenser" ); - return true; - case CObjectTeleporter: - name = xors( "teleporter" ); - return true; - default: - return false; - } - - return false; - }; - - auto is_projectile = [ &name ]( int class_id ) -> bool { - switch( class_id ) { - case CTFProjectile_Arrow: - name = xors( "arrow" ); - return true; - case CTFProjectile_Cleaver: - name = xors( "cleaver" ); - return true; - case CTFProjectile_EnergyBall: - name = xors( "energy ball" ); - return true; - case CTFProjectile_EnergyRing: - name = xors( "energy ring" ); - return true; - case CTFProjectile_Flare: - name = xors( "flare" ); - return true; - case CTFProjectile_HealingBolt: - name = xors( "healing bolt" ); - return true; - case CTFProjectile_Jar: - name = xors( "jar" ); - return true; - case CTFProjectile_JarMilk: - name = xors( "jar milk" ); - return true; - case CTFGrenadePipebombProjectile: - name = xors( "pipe bomb" ); - return true; - case CTFProjectile_Rocket: - name = xors( "rocket" ); - return true; - case CTFProjectile_Throwable: - name = xors( "throwable" ); - return true; - case CTFProjectile_ThrowableBreadMonster: - name = xors( "bread monster" ); - return true; - case CTFProjectile_ThrowableBrick: - name = xors( "brick" ); - return true; - case CTFProjectile_ThrowableRepel: - name = xors( "repel" ); - return true; - case CTFProjectile_SentryRocket: - name = xors( "rocket" ); - return true; - default: - return false; - } - return false; - }; - - //objects - if( is_object( class_id ) ) { - - //wont work - if( ( g_settings.visuals.building_esp == 2 || g_settings.visuals.building_esp == 3 ) && !g_settings.misc.hide_from_obs ) { - //*( bool* )( uintptr_t( ent ) + m_bShouldGlow ) = true; - } - - if( g_settings.visuals.building_esp == 1 || g_settings.visuals.building_esp == 3 ) { - auto pos = ent->get_abs_origin( ); - auto w2s = util::screen_transform( pos ); - //currently they are not cute - //auto cutie = cl.m_entlist( )->get_entity_from_handle< c_base_player >( ent->as< c_base_weapon >( )->m_hOwnerEntity( ) ); - draw_string( w2s.x, w2s.y, ALIGN_CENTER, false, - g_settings.visuals.building_esp_clr, name.c_str( ) ); - - //later - - //if( g_settings.visuals.building_owner( ) ) - // draw_string( w2s.x, w2s.y + 10, ALIGN_CENTER, false, g_settings.visuals.building_esp_clr, cutie->get_info( ).name ); - } - } - - - - - //projectiles - if( is_projectile( class_id ) ) { - //wont work - if( ( g_settings.visuals.projectile_esp == 2 || g_settings.visuals.projectile_esp == 3 ) && !g_settings.misc.hide_from_obs ) { - //*( bool* )( uintptr_t( ent ) + m_bShouldGlow ) = true; - } - - if( g_settings.visuals.projectile_esp == 1 || g_settings.visuals.projectile_esp == 3 ) { - auto pos = ent->get_abs_origin( ); - auto w2s = util::screen_transform( pos ); - //again not cute - //auto cutie = cl.m_entlist( )->get_entity_from_handle< c_base_player >( ent->as< c_base_weapon >( )->m_hOwnerEntity( ) ); - draw_string( w2s.x, w2s.y, ALIGN_CENTER, false, - g_settings.visuals.projectile_esp_clr, name.c_str( ) ); - - //later when i can be fucked - - //if( g_settings.visuals.building_owner( ) ) - // draw_string( w2s.x, w2s.y + 10, ALIGN_CENTER, false, g_settings.visuals.projectile_esp_clr, cutie->get_info( ).name ); - } - } - - - - - - /*if( class_id == CObjectTeleporter || class_id == CObjectDispenser || class_id == CObjectSentrygun ) { - auto owner = ( int )ent->as< c_base_weapon >( )->m_hBuilder( ) & 0xfff; - if( owner <= 0 || owner > 64 ) { - auto origin = ent->get_render_origin( ); - if( origin ) { - bool draw = g_settings.visuals.grenade_esp( ) == 1; - bool glow = g_settings.visuals.grenade_esp( ) == 2; - - if( draw || g_settings.visuals.grenade_esp == 3 ) { - if( !glow && !g_settings.misc.hide_from_obs ) { - *( bool* )( uintptr_t( ent ) + m_bShouldGlow ) = false; - } - - auto w2s = util::screen_transform( origin ); - auto name = util::object_index_to_name( class_id ); - - draw_string( w2s.x, w2s.y, ALIGN_CENTER, false, - g_settings.visuals.grenade_esp_clr( ), name ); - } - if( ( glow || g_settings.visuals.grenade_esp == 3 ) && !g_settings.misc.hide_from_obs ) { - *( bool* )( uintptr_t( ent ) + m_bShouldGlow ) = true; - } - } - } - }*/ - /*else { - if( g_settings.visuals.weapon_esp && strstr( client_class->m_name, xors( "Projectile" ) ) ) { - auto model = ent->get_model( ); - if( !model ) continue; - - std::string name = xors( "Rocket" ); - - auto hdr = cl.m_modelinfo( )->GetStudioModel( model ); - if( !hdr ) - continue; - - if( !strstr( hdr->name, xors( "thrown" ) ) && !strstr( hdr->name, xors( "dropped" ) ) ) - continue; - - - - - if( strstr( hdr->name, xors( "JarGas" ) ) ) { - name = xors( "jargas" ); - } - else if( strstr( hdr->name, xors( "Cleaver" ) ) ) { - name = xors( "Cleaver" ); - } - else if( strstr( hdr->name, xors( "JarMilk" ) ) ) { - name = xors( "Milk" ); - } - else if( strstr( hdr->name, xors( "incendiary" ) ) || strstr( hdr->name, xors( "molotov" ) ) ) { - name = xors( "molotov" ); - } - - if( ( g_settings.visuals.weapon_esp == 2 || g_settings.visuals.weapon_esp == 3 ) && !g_settings.misc.hide_from_obs ) { - *( bool* )( uintptr_t( ent ) + m_bShouldGlow ) = true; - } - - if( g_settings.visuals.weapon_esp == 1 || g_settings.visuals.weapon_esp == 3 ) { - auto pos = ent->get_render_origin( ); - auto w2s = util::screen_transform( pos ); - auto cutie = cl.m_entlist( )->get_entity_from_handle< c_base_player >( ent->as< c_base_weapon >( )->m_hOwnerEntity( ) ); - draw_string( w2s.x, w2s.y, ALIGN_CENTER, false, - g_settings.visuals.grenade_esp_clr, name.c_str( ) ); - - if( g_settings.visuals.grenade_owner( ) ) - draw_string( w2s.x, w2s.y + 10, ALIGN_CENTER, false, g_settings.visuals.grenade_esp_clr, cutie->get_info( ).name ); - } - } - } - }*/ - - } -} - - - void c_visuals::world_modulate( ) { - static std::unordered_map< MaterialHandle_t, fclr_t > world_materials; - static std::unordered_map< MaterialHandle_t, fclr_t > world_materials2; - static c_base_player* local_player = nullptr; - static auto night_mode = false; - static bool modulated = false; - static bool alpha = false; - - if( !g_settings.visuals.world_modulate || !cl.m_engine( )->IsInGame( ) || g_settings.misc.hide_from_obs ) { - modulated = false; - if( !world_materials2.empty( ) ) { - for( auto& it : world_materials2 ) { - auto mat = cl.m_mat_system( )->GetMaterial( it.first ); - if( !mat ) continue; - - auto original_col = it.second; - mat->ColorModulate( original_col.r( ), original_col.g( ), original_col.b( ) ); - mat->AlphaModulate( original_col.a( ) ); - } - - world_materials.clear( ); - world_materials2.clear( ); - } - - return; - } - - if( g_ctx.m_stage == FRAME_NET_UPDATE_POSTDATAUPDATE_END ) { - fix_static_props( ); - - if( local_player == g_ctx.m_local && - night_mode == g_settings.visuals.night_mode( ) && - alpha == g_settings.visuals.transparent_props( ) && - modulated == g_settings.visuals.world_modulate( ) ) - return; - - - for( auto i = cl.m_mat_system( )->FirstMaterial( ); - i != cl.m_mat_system( )->InvalidMaterial( ); - i = cl.m_mat_system( )->NextMaterial( i ) ) { - - auto mat = cl.m_mat_system( )->GetMaterial( i ); - if( !mat ) continue; - - const char* group = mat->GetTextureGroupName( ); - bool is_world = strstr( group, xors( "World" ) ); - bool is_sky = strstr( group, xors( "Sky" ) ); - bool is_prop = strstr( group, xors( "StaticProp" ) ); - - if( is_world || is_sky || is_prop ) { - const char* name = mat->GetName( ); - if( world_materials.find( i ) == world_materials.end( ) ) { - fclr_t clr; - - mat->GetColorModulate( &clr.r( ), &clr.g( ), &clr.b( ) ); - clr.a( ) = mat->GetAlphaModulation( ); - - world_materials.emplace( i, clr ); - world_materials2.emplace( i, clr ); - } - - fclr_t new_color; - - new_color = world_materials2.find( i )->second; - bool apply = g_settings.visuals.night_mode && g_settings.visuals.world_modulate; - - if( is_world ) { - if( apply ) { - new_color.r( ) *= 0.15f; - new_color.g( ) *= 0.15f; - new_color.b( ) *= 0.15f; - } - } - else if( is_prop ) { - if( apply ) { - new_color.r( ) *= 0.3f; - new_color.g( ) *= 0.3f; - new_color.b( ) *= 0.3f; - } - if( g_settings.visuals.world_modulate && g_settings.visuals.transparent_props ) { - new_color.a( ) *= 0.6f; - } - } - else if( is_sky ) { - if( apply ) { - new_color = fclr_t( 0.f, 0.f, 0.f ); - } - } - - if( !( world_materials.at( i ) == new_color ) ) { - mat->ColorModulate( new_color.r( ), new_color.g( ), new_color.b( ) ); - mat->AlphaModulate( new_color.a( ) ); - - world_materials.at( i ) = new_color; - } - } - } - - modulated = g_settings.visuals.world_modulate; - night_mode = g_settings.visuals.night_mode; - alpha = g_settings.visuals.transparent_props; - local_player = g_ctx.m_local; - } - } -} \ No newline at end of file diff --git a/tf2/vmt.h b/tf2/vmt.h deleted file mode 100644 index f2a39ac..0000000 --- a/tf2/vmt.h +++ /dev/null @@ -1,79 +0,0 @@ -#pragma once -#include -#include "util.hpp" - -// todo - dex; rewrite this, VirtualQuery (except for custom codeptr / readptr) and VirtualProtect shouldnt be used -// and we need to copy rtti over too or stuff will break later on - -// correct me if im wrong, but the vtable isnt replaced, instead the original is edited during hooking, rtti should be intact and accessable by game -// class could definetly do with a rewrite tho! - -// ^ you're corrct, but changing page rights and replacing ptrs direclty in rdata (or usually the heap, since thats where vmts go) is not a safe solution -// copying table + aligning it to compensate for rtti is safer -// vac loves scanning memory regions but it doesnt really do much outside of game servers (only loads some shit for checking DEP and stuff) - -// trash - -//llama is a fucking nigger -//true - -namespace hooks -{ - class c_vmt { - uintptr_t* m_table; - uintptr_t* m_original; - std::vector< uintptr_t > m_new; - public: - int count( ) { - int vfunc_count{ }; - - while( m_original[ vfunc_count ] ) { - vfunc_count++; - }; - - return vfunc_count; - } - - c_vmt( void* table ) { - if( !table ) { - return; - } - - this->m_table = reinterpret_cast< uintptr_t* >( table ); - this->m_original = *reinterpret_cast< uintptr_t** >( this->m_table ); - - for( int i = -1; i < this->count( ); ++i ) { - this->m_new.push_back( this->m_original[ i ] ); - } - - auto data = this->m_new.data( ); - *this->m_table = uintptr_t( &data[ 1 ] ); - } - - ~c_vmt( ) { } - - template< typename T = uintptr_t > T get_function( int index ) { - return( ( T )( this->m_new.at( index + 1 ) ) ); - } - - template< typename T = uintptr_t > T get_old_function( int index ) { - return( ( T )( this->m_original[ index ] ) ); - } - - void hook( int index, uintptr_t new_func ) { - this->m_new.at( index + 1 ) = new_func; - } - - void unhook( int index ) { - this->m_new.at( index + 1 ) = this->m_original[ index ]; - } - - void hook( int index, void* new_func ) { - hook( index, reinterpret_cast< uintptr_t >( new_func ) ); - } - - void restore( ) const { - *this->m_table = uintptr_t( m_original ); - } - }; -} \ No newline at end of file diff --git a/tf2/window_procedure.cpp b/tf2/window_procedure.cpp deleted file mode 100644 index b67f9bb..0000000 --- a/tf2/window_procedure.cpp +++ /dev/null @@ -1,59 +0,0 @@ -#include "hooks.h" -#include "input_system.hpp" -#include "settings.h" - -//im pretty sure half this shit is redundant rn but idrc - - -decltype( &hooks::window_procedure ) hooks::window_procedure_o; -long __stdcall hooks::window_procedure( HWND hwnd, uint32_t msg, uint32_t wparam, long lparam ) { - if( cl.m_panic ) { - return CallWindowProcA( ( WNDPROC )window_procedure_o, hwnd, msg, wparam, lparam ); - } - - if( msg == WM_ACTIVATE && wparam == WA_INACTIVE ) { - g_input.clear_keys( ); - } - - if( msg == WM_MOUSEMOVE ) { - g_input.capture_mouse_move( lparam ); - g_con->get_input( )->capture_mouse_move( lparam ); - } - static auto con_pressed = false; - if( g_con->get_input( )->is_key_pressed( KEYS_HOME ) ) { - if( !con_pressed ) { - if( !g_con->m_open ) { - g_con->m_consuming_input = true; - } - - g_con->m_open ^= 1; - } - con_pressed = true; - } - else con_pressed = false; - - if( g_con->get_input( )->register_key_press( VirtualKeyEvents_t( msg ), VirtualKeys_t( wparam ) ) ) { - if( g_con->m_open ) return false; - } - - if( !g_con->m_open ) { - static bool was_pressed = false; - if( g_input.is_key_pressed( KEYS_INSERT ) ) { - if( !was_pressed ) { - g_settings.menu.open ^= 1; - - was_pressed = true; - } - } - else { - was_pressed = false; - } - - if( g_input.register_key_press( VirtualKeyEvents_t( msg ), VirtualKeys_t( wparam ) ) - && g_settings.menu.open ) { - return false; - } - } - - return CallWindowProcA( ( WNDPROC )window_procedure_o, hwnd, msg, wparam, lparam ); -} \ No newline at end of file diff --git a/tf2/x86.hpp b/tf2/x86.hpp deleted file mode 100644 index e96c469..0000000 --- a/tf2/x86.hpp +++ /dev/null @@ -1,47 +0,0 @@ -#pragma once -#include - -namespace x86 -{ - enum class reg : size_t { - eax = 0, - ecx, - edx, - ebx, - esp, - ebp, - esi, - edi, - - /* - x64: - r8, - r9, - r10, - r11, - r12, - r13, - r14, - r15,*/ - }; - - enum instruction : uint8_t { - retn_imm16 = 0xc2, - retn = 0xc3, - fs = 0x64, - //its big nigga season - call = 0xff - }; - - __forceinline static uint32_t encode_mov_imm32( x86::reg dreg ) { - return ( 0xb8 + ( size_t( dreg ) ) ); - } - - __forceinline static uint32_t encode_push_reg( x86::reg dreg ) { - return ( 0x50 | ( ( size_t( dreg ) ) & 7 ) ); - } - - __forceinline static uint32_t encode_pop_reg( x86::reg dreg ) { - return ( 0x58 | ( ( size_t( dreg ) ) & 7 ) ); - } -}; \ No newline at end of file -- cgit v1.2.3