Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 04/12/2021 in Posts

  1. I wonder if number of lines of code implementing About box finally will not be much bigger than whole main project (without About box) ...
    6 points
  2. Last but not least here the version with chip sound: ;Coded by UEZ build 2021-04-14 ;Thanks to wakillon for the SID Dll, Soren Lund (Jeff) for the SID tune and Ward for the MemoryDllCall functions #AutoIt3Wrapper_Run_Au3Stripper=y #Au3Stripper_Parameters=/so /pe ;/rm #AutoIt3Wrapper_Run_After=del /f /q "%scriptdir%\%scriptfile%_stripped.au3" #AutoIt3Wrapper_Res_HiDpi=y #include <GDIPlus.au3> #include <GuiConstantsEx.au3> #include <Memory.au3> #include <WindowsConstants.au3> #Region TichySID Global Const $tagIMAGE_DOS_HEADER = 'WORD e_magic;WORD e_cblp;WORD e_cp;WORD e_crlc;WORD e_cparhdr;WORD e_minalloc;WORD e_maxalloc;WORD e_ss;WORD e_sp;WORD e_csum;WORD e_ip;WORD e_cs;WORD e_lfarlc;WORD e_ovno;WORD e_res[4];WORD e_oemid;WORD e_oeminfo;WORD e_res2[10];LONG e_lfanew;' Global Const $tagIMAGE_FILE_HEADER = 'WORD Machine;WORD NumberOfSections;DWORD TimeDateStamp;DWORD PointerToSymbolTable;DWORD NumberOfSymbols;WORD SizeOfOptionalHeader;WORD Characteristics;' Global $tagIMAGE_OPTIONAL_HEADER = 'WORD Magic;BYTE MajorLinkerVersion;BYTE MinorLinkerVersion;DWORD SizeOfCode;DWORD SizeOfInitializedData;DWORD SizeOfUninitializedData;DWORD AddressOfEntryPoint;DWORD BaseOfCode;DWORD BaseOfData;PTR ImageBase;DWORD SectionAlignment;DWORD FileAlignment;WORD MajorOperatingSystemVersion;WORD MinorOperatingSystemVersion;WORD MajorImageVersion;WORD MinorImageVersion;WORD MajorSubsystemVersion;WORD MinorSubsystemVersion;DWORD Win32VersionValue;DWORD SizeOfImage;DWORD SizeOfHeaders;DWORD CheckSum;WORD Subsystem;WORD DllCharacteristics;PTR SizeOfStackReserve;PTR SizeOfStackCommit;PTR SizeOfHeapReserve;PTR SizeOfHeapCommit;DWORD LoaderFlags;DWORD NumberOfRvaAndSizes;' If @AutoItX64 Then $tagIMAGE_OPTIONAL_HEADER = 'WORD Magic;BYTE MajorLinkerVersion;BYTE MinorLinkerVersion;DWORD SizeOfCode;DWORD SizeOfInitializedData;DWORD SizeOfUninitializedData;DWORD AddressOfEntryPoint;DWORD BaseOfCode;PTR ImageBase;DWORD SectionAlignment;DWORD FileAlignment;WORD MajorOperatingSystemVersion;WORD MinorOperatingSystemVersion;WORD MajorImageVersion;WORD MinorImageVersion;WORD MajorSubsystemVersion;WORD MinorSubsystemVersion;DWORD Win32VersionValue;DWORD SizeOfImage;DWORD SizeOfHeaders;DWORD CheckSum;WORD Subsystem;WORD DllCharacteristics;PTR SizeOfStackReserve;PTR SizeOfStackCommit;PTR SizeOfHeapReserve;PTR SizeOfHeapCommit;DWORD LoaderFlags;DWORD NumberOfRvaAndSizes;' Global Const $tagIMAGE_NT_HEADER = 'DWORD Signature;' & $tagIMAGE_FILE_HEADER & $tagIMAGE_OPTIONAL_HEADER Global Const $tagIMAGE_SECTION_HEADER = 'CHAR Name[8];DWORD VirtualSize;DWORD VirtualAddress;DWORD SizeOfRawData;DWORD PointerToRawData;DWORD PointerToRelocations;DWORD PointerToLinenumbers;WORD NumberOfRelocations;WORD NumberOfLinenumbers;DWORD Characteristics;' Global Const $tagIMAGE_DATA_DIRECTORY = 'DWORD VirtualAddress;DWORD Size;' Global Const $tagIMAGE_BASE_RELOCATION = 'DWORD VirtualAddress;DWORD SizeOfBlock;' Global Const $tagIMAGE_IMPORT_DESCRIPTOR = 'DWORD OriginalFirstThunk;DWORD TimeDateStamp;DWORD ForwarderChain;DWORD Name;DWORD FirstThunk;' Global Const $tagIMAGE_IMPORT_BY_NAME = 'WORD Hint;char Name[1];' Global Const $tagIMAGE_EXPORT_DIRECTORY = 'DWORD Characteristics;DWORD TimeDateStamp;WORD MajorVersion;WORD MinorVersion;DWORD Name;DWORD Base;DWORD NumberOfFunctions;DWORD NumberOfNames;DWORD AddressOfFunctions;DWORD AddressOfNames;DWORD AddressOfNameOrdinals;' Global $_KERNEL32DLL = DllOpen('kernel32.dll') Global $_MFHookPtr, $_MFHookBak, $_MFHookApi = 'LocalCompact' Global Const $tagModule = 'PTR ExportList;PTR CodeBase;PTR ImportList;PTR DllEntry;DWORD Initialized;' Global Const $SID_MEMORY = 1 Global Const $SID_NON_DEFAULT = 2 Global $hTitchysidDll, $iSubsongCount = 0 #EndRegion _GDIPlus_Startup() Global $aDPI = _GDIPlus_GraphicsGetDPIRatio() Global $hGUI, $iFPS = 0, $iShowFPS = 0, $bExit AutoItSetOption("GUIOnEventMode", 1) Global $sText = _ "This is an About Window ²" & _ ;² is the marker for the column width which all lines below must follow "coded with Autoit using " & _ "GDI+ library to produce " & _ "this flying chars effect. " & _ "------------------------ " & _ "Greetings fly out to: " & _ "All Autoit users around " & _ "the world! " & _ " " & _ " " & _ "Coded by UEZ 2021 ;-) " & _ " " & _ " " & _ " " & _ "Press ESC to exit. " Global Const $binSIDSound = _Chip_Sound() _SIDStartup() _SIDOpen($binSIDSound) GDIPlus_About($sText, 16 * $aDPI[0]) _SIDStop() _SIDClose() _SIDShutdown() AutoItSetOption("GUIOnEventMode", 0) _GDIPlus_Shutdown() Func GDIPlus_About($sText, $iFontsize = 16, $dx = 30, $dy = 150, $iSpeed = 33, $sFont = "Courier New") Local Const $iW = 540, $iH = 500, $iWh = $iW / 2, $iHh = $iH / 2, $sTitle = "GDI+ About Window" Local Const $fPi = ACos(-1), $fRad = $fPi / 180, $fDeg = 180 / $fPi $bExit = False $hGUI = GUICreate($sTitle, $iW, $iH) GUISetState(@SW_SHOW, $hGUI) ;create canvas elements Local Const $hDC = _WinAPI_GetDC($hGUI) Local Const $hHBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $iW, $iH) Local Const $hDC_backbuffer = _WinAPI_CreateCompatibleDC($hDC) Local Const $DC_obj = _WinAPI_SelectObject($hDC_backbuffer, $hHBitmap) Local Const $hCanvas = _GDIPlus_GraphicsCreateFromHDC($hDC_backbuffer) _GDIPlus_GraphicsSetSmoothingMode($hCanvas, $GDIP_SMOOTHINGMODE_HIGHQUALITY) _GDIPlus_GraphicsSetPixelOffsetMode($hCanvas, $GDIP_PIXELOFFSETMODE_HIGHQUALITY) Local Const $hBrush_Clr = _GDIPlus_HatchBrushCreate(18, 0xF0B0B0E0, 0xF0F0F0FF), _ $hBrush_FPS = _GDIPlus_BrushCreateSolid(0xF0808080), _ $hFormat_FPS = _GDIPlus_StringFormatCreate(), _ $hFamily_FPS = _GDIPlus_FontFamilyCreate("Arial"), _ $hFont_FPS = _GDIPlus_FontCreate($hFamily_FPS, 8), _ $tLayout_FPS = _GDIPlus_RectFCreate(0, 0, 100, 24) $iFPS = 0 GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit_About") Local $iLen = StringLen($sText), $iColums = StringInStr($sText, "²"), $i, $u, $s, $r, $iChar_Space, $x, $y, $t = 0,$f, $b = 0, $a = 384, $iCharCol = 0x101030 $sText = StringReplace($sText, "²", " ") Local $aChars = StringSplit($sText, "", 2) Local $hFormat_char = _GDIPlus_StringFormatCreate(), $hFamily_char = _GDIPlus_FontFamilyCreate($sFont), $hFont_char = _GDIPlus_FontCreate($hFamily_char, $iFontsize, 1), _ $tLayout_char = _GDIPlus_RectFCreate(), $hBrush_char = _GDIPlus_BrushCreateSolid(0xFF000000 + $iCharCol), _ $hImage_logo = _GDIPlus_BitmapCreateFromMemory(_Logo()) Local Const $hDll_k32 = DllOpen("ntdll.dll"), $iMilliSeconds = 5 AdlibRegister("CalcFPS", 1000) Do DllCall($__g_hGDIPDll, "int", "GdipFillRectangle", "handle", $hCanvas, "handle", $hBrush_Clr, "float", 0, "float", 112, "float", $iW, "float", $iH - 112) ;erase canvas background _GDIPlus_GraphicsDrawImageRect($hCanvas, $hImage_logo, 0, 0, 540, 112) $rr = 0 For $i = 0 To UBound($aChars) - 1 If $aChars[$i] <> " " Then $f = $t - $i / $iSpeed $s = $f > 2 ? 2 : $f $s = $s > 0 ? $s : 0 $r = (2 - $s) * $iColums * $iColums $iChar_Space = $s / 3 * $iColums $rr +=$r $tLayout_char.x = $dx + $r / 2 * Sin($t + $i) + Mod($i, $iColums) * $iChar_Space $tLayout_char.y = $dy + $r / 3 * Cos($t + $i) + Int($i / $iColums) * $iChar_Space ;* 1.2 _GDIPlus_GraphicsDrawStringEx($hCanvas, $aChars[$i], $hFont_char, $tLayout_char, $hFormat_char, $hBrush_char) EndIf Next $t += 0.025 _GDIPlus_GraphicsDrawStringEx($hCanvas, "FPS: " & $iShowFPS, $hFont_FPS, $tLayout_FPS, $hFormat_FPS, $hBrush_FPS) ;draw background message text _WinAPI_BitBlt($hDC, 0, 0, $iW, $iH, $hDC_backbuffer, 0, 0, $SRCCOPY) ;blit drawn bitmap to GUI $iFPS += 1 If $bExit Then ExitLoop If $r = 0 Then $b = 1 If $b Then $a -= 5 If $a < 256 Then _GDIPlus_BrushSetSolidColor($hBrush_char, BitShift($a, -24) + $iCharCol) If $a <= 0 Then $b = 0 $a = 384 _GDIPlus_BrushSetSolidColor($hBrush_char, 0xFF000000 + $iCharCol) $t = 0 EndIf EndIf DllCall($hDll_k32, "dword", "SleepEx", "dword", $iMilliSeconds, "bool", True) Until False AdlibUnRegister("CalcFPS") ;release resources DllClose($hDll_k32) _GDIPlus_FontDispose($hFont_char) _GDIPlus_FontFamilyDispose($hFamily_char) _GDIPlus_StringFormatDispose($hFormat_char) _GDIPlus_BrushDispose($hBrush_char) _GDIPlus_ImageDispose($hImage_logo) _GDIPlus_FontDispose($hFont_FPS) _GDIPlus_FontFamilyDispose($hFamily_FPS) _GDIPlus_StringFormatDispose($hFormat_FPS) _GDIPlus_BrushDispose($hBrush_Clr) _GDIPlus_BrushDispose($hBrush_FPS) _GDIPlus_GraphicsDispose($hCanvas) _WinAPI_SelectObject($hDC_backbuffer, $DC_obj) _WinAPI_DeleteDC($hDC_backbuffer) _WinAPI_DeleteObject($hHBitmap) _WinAPI_ReleaseDC($hGUI, $hDC) GUIDelete($hGUI) EndFunc ;==>GDIPlus_About Func _Exit_About() $bExit = True EndFunc ;==>_Exit_About Func CalcFPS() ;display FPS $iShowFPS = $iFPS $iFPS = 0 EndFunc ;==>CalcFPS Func _GDIPlus_GraphicsGetDPIRatio($iDPIDef = 96) Local $hGfx = _GDIPlus_GraphicsCreateFromHWND(0) If @error Then Return SetError(1, @extended, 0) Local $aResult = DllCall($__g_hGDIPDll, "int", "GdipGetDpiX", "handle", $hGfx, "float*", 0) If @error Then Return SetError(2, @extended, 0) Local $iDPI = $aResult[2] _GDIPlus_GraphicsDispose($hGfx) Local $aResults[2] = [$iDPIDef / $iDPI, $iDPI / $iDPIDef] Return $aResults EndFunc ;==>_GDIPlus_GraphicsGetDPIRatio ;Code below was generated by: 'File to Base64 String' Code Generator v1.20 Build 2020-06-05 Func _Logo($bSaveBinary = False, $sSavePath = @ScriptDir) Local $Logo $Logo &= 'iVBORw0KGgoAAAANSUhEUgAAAhwAAABwCAIAAADaNT4jAACVR0lEQVR4XuzVPwqCcBjH4Y7aFDRFW+BQU3ODQ0SrkycQIxAPUeIh/Dcq/uoM0hI8z/x93/WzCj8CAH8TFQBEBQBRAQBRAUBUABAVABAVAEQFAFEBQFQAQFQAEBUARAUARAUAUQFAVAAQFQAQFQBEBQBRAQBRgXkMYVpwB4gKzH3XVO9XlhfxLd1H8Xp72uzOh+Plek8ez7Kuq6Fvv7MFr4EP+2b2W0eW1/Gz1XrXxfa1b2zHSxzbSZylt4H00CiA2KZpGiSEQEItgQQSmn+Al3nmBcQD4hWEYCTEMmLUTT/RTZOehsl0nMWO7Xi53nKv1+TuS92qcw6/qkpfNUmmY9PpRD2cj6/tU6eqzr0PdfS53/qdYugnG4VC8kqlXCzu5jfuLa8VVjb2t/eaD2rIERFJbEINTHJIIrHhiut7BG2ZpJGJoZNDfWMnohNjudGRwdxAfzKZQJihp6FQKLCfVn6iUCiJuA9KJbDI6vr2Sr64tnV/e7deqiOHW4hGqGYzTSOEYAyHSvjtzgWEwxmBuBDcc7nbRLxpkFYqIgezkbHhzMTYwKmxoRO5gXQ6RaiOniNHnKcYY/RlUCiUVBQKt9O+f//+veL+6trGSn4nf69U3G+Wm6QjbMzAIhZjoUUChRz9gsc4cAwWgWM8tyW9ho5byag80WuOB44ZG8kNDeYymQzTzK9OJBjj45541NMUCiUVhaLZqO3t729tF1fz91Y39jcKpf2SV+9YLmeY2WARShklBB3NIsdyDLyEEJ7ncbcNjmGoGbNEf1obGUycHh2YODV8cniwpydjGNb/WSRAaATgs07UarcbjUa73W614NWCDxAeTAhhjJmmaVlWJGJblm2aOv7fo8E43TG7lkIKhZKKQpHPr/35X/zV8rZTaUc6KBrczrIo0yllBCPUvaP1PMChZoSQnHue6wivRWTbJM2UVTs7nvj2' $Logo &= 'H//h0NDQsXTS9QQ0hJSNev3g8GB///7h4f1SqQRCcRyH+wiMUVcVlFJoM8YMw7BtO56IQnLq68v29vREbDv0hxDi+UhFoWDo64NCMTQ0/M7v/e6nN5duLxXW7jVKzTb3CCEM0cAo6LkZBZAICN9VCiQ5w+2U3R4fSp6fOjNzZjSVSh03oASVHlyv17cK9/L5fHGn2Gq2PJdLIRljsEvXdWiEVoCDu/kjbDgB9x8crK+vE0qikehAth/ElsvlYrFYqJYn6kShUElFoRCHBwfLK+uzt5dvLWyvFZrVtiVojOkRvw7/lUWWMKAIgSCbeE4N81rSdk8NRS+cGb40Mz4xPtzT24cQOV5Awf4PNA4OD5cWF0Enh+USbFJKDd2AXVgiQin0YJ/utIVNEmxDGwOccwJQBIgA7nrQBr0NDw+Pjo7192c/ryL0OAqFkopCIYW3u7e7dDc/e3vl1mJxc7dd70QQizPdYozhLy2YUCQwhgcmcRrYq8ZMZ2TAPD+Zfen8xMy56Q8++PepqemZ8xePW4GHfyTIGVAimpu7s7m5CYWTIJFoYWoRQoahhHOOAeKf2C2o4AC/LXAoE9gKjwnPokSDtuu6cLplWaCWycnJbLaX+COLUDA/1i4KhZKKQiG8TqFYuLO4Nre0NXd3d3PHqXtRRG1NtyhlGMtQMMcRCfc6TQkiMToj/drMZHZmeuTs9EQuN9BdVfzOH3z7N9765bd//c1jSSX0Qalcnr8zDzesatWGpmmMMc551xndg4UI6yiIUPLI7S8JCNxtYyLxZ1DyUE7BCNJ1O5qmj4+PnT0zlUwmu/fc0BejUCipKBTf//678bgdj0V39so372zcvru7ve+2RYxoMU03P3tORTxRJJxzt+MvII6ZfDDDIZFcPDcyPNjHudB16/Tk1COOeOeP/uTNX/qZ3/rNbx2rfAKBY2VtdW5+rlwqg04IZtAPnbDrkdI69Oi6Dv0SccCXSADsogGM6tAIB/d4BwYJ' $Logo &= 'D0OShPohwX/GGOyC4BKL2tNTU5NTU9DzPMKKQhXqhRDoOUIIaXecWqMWtaOM0nKt8njDMkxo+x/s/yWKY32hFtz9+3+5uryjj56InB2LvTxz8q1ffEUIvra5Nzu3Mb+yuVfRHG4QPcqYjoORBecQSYRbtzRnKMVnTvddmjk/MjwgubuxvXftxtrf/NO11c3SG5fif/an33n0s2Hc6XTQ0QiNAgFl9vr17cI92LRtGzoF9xMG2AUBXVswBvGiXm/s7BRhDVi58gDK+K1WC8QQSoUFmIadSCTi8Xg2m01nkvEYiFPvAI4HIACTcMGYYRggMOi8cfPm/sHBxYsXoeLy4r2iUKu/MCYISbhm7y4vLt1dhM1YLCaECDN7iODc9dxuivcA7iEUxHYhYFY8jN4SurDreW3HYZRRSjquqzFNStFqNSGtu51OpVoaGxn95uWf7e0b0HX9i9WiUBDK+vt712rJnQbbut5677/mY8aNkQH28rncr1y58Pu/01Nvdu4srd9a2Frf3q82BUIymaSnTvZcOndm8tSwxtDmtq+f7/7rp9t7nYZrET2u6TnPTCVTT5oNwcMrR3yMkRBSKBZnb8yWy2XTNKEnTB6MYc6FFJgxTdcIl2L/8CC/vl7c3Do8PHQcx/eBGQcDpdIpTWOEMUKJ53qwq9VswrOf9ZVVIbilaz2Z9NjoyMSpsXRvFhPadFyYUyBaLlyEKZxF4B0Mvbi7U/249tLFS7BC7IVX7xVKKkhKxD13fX31o6sfSikz6QwXnATr68N19AJ2ex4cRqhvjmarBRJilD6UjZACXuGSzGA02IRkLgSnlEp/EC4Fh9EqlUq1Un7t1ddGR8dTmV4d6egpKBQ4EdWl16Z6lJoWsmxPoqV9b+798t+++2FPjJ8ZS3zj0vg7v/3zPekEIZQGhYpCYffTWyt/+dfv391sVFoGYnHNyFGbRR5WYpCLZTSWQo9DMIxwxGXIyyvLt2/fFkJEo1EZAO2wFK9r' $Logo &= 'umHYIInV1aX5uTuFnV2OcLJ3cPLi5RODJyCFxJM9lmWFKgJgOC4497jjdOqNWq1e3dvd2dte3ykWPv7v65/88PrJoYHz52fGx8fjVqTZbkN0CeWHAyKRCPRcu3at0WicPn36RS4MUyipdPOKbUcy6R6QRBjhCfYzhxNcu4wxzfCPAhCAqa4Zhq5B/qAuzB6Tc5CIG+4N10V2ALcDw4Y9AAiIu2AgZFoRQghGR0KhyKQTUpaDpq8EjJDGiKYlEEpVhfjPpfZ/3F4x6a2+hBzo0XWNFA/a2wfCkSCSFNOyVqK7ZozDHx+MJXdty0SPQSkzrejTJguGrL6wuLC8skIp1TSNc46D2on0Qb5jBFpYWLh+fXbvYD+eyFx45Q1YU9Z3YjiVTsPxhBKEP/fIvQRg0z/dipJEpk8Ib3xi2nVa5dKDw73d1dXl1aU7//y99070937z9Z86NTUNFqlWq11zCCEg/XDXm5+fB5OdO3cu/D734tWiUA8/UkoNTUOCNxATCMeR20JGi5oESdwo41YdMWYh19V1z4hiZjMpCWOoekhaFcI0jFBoFkFwh5kESwwdhEjodQkcCS9d1w3dCKqRLx4p5VM+iUR+DHtxKNIJG/G9h5m6i9/mBCPTMJFpwdauIwqbrpSSMY1Gw1AiEBJIPnFVi2dQFz2GYactK/LFRuGcz83N5dfzoIfwlhclVAaDQo9hGMVC4erVH+TzG9n+3JVffXticqYvO2yZMYodKXyxCZcH84F8Vh9BhMLZRIBMOApyv29BYUSTvWYykx0em7z46uX88uL8jR/94/feGx25eeXKlcGhoUaz6XY6cL4f0AhmhiGlhOVn8PfMmTMw0Z55iUWhpNItJ9Kn5WAZ/EpGKdONtkANLSmZqYsWJ5pLfKkQ+wFuVAQiRHKPWk0WlVQjGDkwvpGSdqmNqZQIY3+oNtI8pHEkuPD7CEJmrWjWqw4EHE0TQkA9H+TyTBZBht/yjlVcfWSmOU7bT1au' $Logo &= 'C/vDRMaoRhk1DNOfrpgcfeGDlIhS363PwncA+voQGpr40fSZ0pNJIOmiH0M3vjCCmK6hgDCUfAEEyd6+PvQYTrtVr5WeWEfptpeWlra3t0Fm4fVACfEEF5jatoWE98NPfvDxJ7OYmZd/7tfOXngp2dsPR2K/bFllgUUokYQiii1oE+KPHJrFfxchDCqFpFwyKiTyXCQJF4gwM53Jxl9JDY9PLy0sLP7ow+/+3T9cfv2nX3/9MrKsRqPujyM5JhRgjBUKBWiAV76S51cUSirdJ3XRESBSdCSqIL1t9nh2b4s70CnD9BEZkJ7HHZd33A6XLsHdQWm6p53gNdfjQhKMP//GDY9zj1tCppsVzDtIyo7r1puNaqMWjcYIDPAMkMepIeFHplmzWd/a2iiVSrVqRUgviGtaxI7Ztt2T7YPaT8SwukI6Yo3qy81iCT+hn75mYHyEC00e1zqnJ0Zt9pGQmKBngxDYotVz0yOP9K+srNxZfWCay2+/+QuabjxyzYSN1dVViAKQSLqyCZ9qTFl6pVZ/99/eX1nLD0+99tKr38gNjZh2FCHudhxKsaFpQWkfhy8WLg2mMhAKCUcT0CeEJyTnEhOs6/4pnAiMPddDRMhEInXh0sv9udz87LUPPrpa2N741ltvJ1PpWq3M/VjGw9QCHw+evoS/U1NTz/6LiUJJ5X/Yew8oOa7zTLQrV+fpnpwwGAwGg5gDCWaCYI4mKZESJVHJsq20Ppbzyu+tfdZrH0u29lmWbAX7SAySGMUgJokBIAiQABFzDoPJsXOu7n7f/9+aOs0ZABwAFA/fPl0Mm9XVFW7duvcP35/Y63H81KnjkGgm8kDA5kEcIFTbNLtjTsBtu8ZjelsWCexF1QCqVVL0sjCjlMBDihaZ20E1VIj6JSwlF9FOESMAp5ukS7EU/OQSp+QsC6vE1FRyAsAakcsWDPfZdD5HypDbMHGJeCp3/MTR44f35XNZL5s6He6ALU7aqolU5eiZSh4y' $Logo &= 'JMWZpokcrhAP/T5/wB/E/samVtzS0SSmo6CMDA8cPHwQbqAwbMbjsTRnjYX3gdB4sOg1TddUzXCb4HzIFzujpXVe19zW1nZHtXKiECqbIBDdo7Hd3cPpbN6SJM3QxJALblPCIFo0iE46QMi44NQgTF6PEfSZ0CiDbr0+4Knyuv0ew7kyjvjoS5t4KX2jsfX7u4czOYyfT1ezkEBKRCotWEXSWWBRV3Q2r5s/47wu29HReefa9kdeGfBVNcJr5CIj6sEC0vGBf/mL29ra2if99svnX88orW/vjx05enzBgvlTxRFoAMePH3dQLycBl8/rHR3oe/yXvxqO55ZdecvsBSvC4WpZ1yBQaYqLsSm+AjcZTZGw3rBTMBhxEVZUaBBdRWKg+MCyI1VDxhWY+WBnGdpYuap+5pJLPdW1tXu3v/3ww4/ee+89rTNaEokYxsaZ6kDhwFewWGbOnOn6wNvv2u9sKuPjY5vfeWtosN/FOVAx59LpVL5QbO+YHwwE/a0tmLVM+DgiC+SSuENJKhakQhZ8A6QQJntEYhGWJdsJJRSgwqCQhDxIGdj3iyWVfwLdR7AWeFMZfSqrsEioQEXKZBqFn76Vp1mvoilqNpPe+u6WF59/Mh6P1Nc3gLC+hwcoMsg6uoPTCNzQNHQSC80N8c/nVRUJHAVuoQCOOzvntrd3Yo03NDSB05wRORJcM18sxaIoQLvvyJED+w/u6+3vTyaSWPkAKHA7NFuIxrX4X4HwB5wrNzY2Hpm/YEbrrLld85qbm/2+gIiXngQsSHz68aHoL945GM/kC5JkmAYXmyIWi6EvYdCzuSIbmSb8F8A28VH2ufWglxCVoNtoDvnqgt6ZdVXNVd56vwfbTJbAnD+iaQQde8eunpEfbNh7PJoERwmoSrJYhqqKd58pFEeiKTDqv7vr0vNlKmh//OVPqepjj/36dFGrA7m8oGQtEv6y2bTbNfw3X1p17VWrz4izlYp99YFSQ30lMmaHxEOX' $Logo &= 'PXz4sCyYAK2UstgPszx0l6ee+GXJCFy67sbq5naP10dyQ8nirP2q3VE+S+KG3QphVcRR+FMWGg8akDQFs6KMGSEOdjETok6QrKMb2A+UregN1rXNXeoJHd32+kMPPXTffR+fPbsDuZAFn3MmPFgguldTU/OhgWD/f0HbfsdUQP6QJDWZSgNxNUxCcgsWEU4rG7cycRFRZVMFiZpYgySJ5Ymgc2kj9hlWJMtOc0RHIHl3ulCU+VRV7KL1UM4WrBLPLdrAEgKCLdQaaqQkZaETQFgDS8qlYc7IZgv4xCmTIJKsK+eADLm87V2WSqZRx8l+Zmj6qrx9x/bqmjq/33f9DTdfuvKySryisoElDo1FXnn5+U0bXimxuhYKhmqqa9GviVSAaJKDp2Ef80hiqflc7t1t2za/805X55ybb7x5yeIVUF/ONtp46niuYGFACLYokBEqk4FqI3k8FL+Ai6maBSbGT8nOTApulLCs6FgsX8IAuvS+UdMgitQWDqyb2/J7y2Z73YYgix9V3EsSHrUD8UwCcjYeDnMjm8srWgECN1K9Zy2wdJ9Hq/FcCIiFaVQbMr/1p1c+/My7O47kJb1aN0wRSD/NrJG5bEotRa5e7FvW1bZsybwzEr55XTOLmV3LVjZU19RMopJQZAGOYR0J6zc2ePoZXp9x6uSpJx9/tuhrXLT6Sk8g7NY0FSo+gGQXBDWFJpaAuLAhtBNXWcGrV8uKqpCgxDAYfoUUI7zIJFtjxziW7U+JroVJSxdQdLVUcJvudMZrems7V91ycO+rv3j85w/e/7mZXTOhdmONCealc9QkklrCVQzuy1PJ/aRsx7QxtQzMeTbnXGfopqaQmVQYZurpk7qK7bPda/rHOLj3pB5OvZdz1tkuPp0Dph5c2YGpZ03dWbl/GmMy3fGZ+tIvkKkIGRoyjmInp5OFMz5t0KYsskWAAmK52IRLTHWChEmQxjQnhxV0iM6SIEdlLCtr4QecSpZGhQ300Fey' $Logo &= 'FnEUPlciPqGocj7jSo65sglJVmXS4Olm1BvIZQWQ65zE2jooD64luRy/ZDpAVjVF1SfmmhMKIGmqTgX8wIsKUiaXH49G8UB9fT2nT5288fqbg8EwHpNFv5Lj3LV//563try9ceMbieh4oCrk9XjBYvEn5EC0M9NKjs7Br4V0GvjYnj07rQKqE46svfZG4SYk9JWKSVOKpNPjuaKuSioGio5gfiwr2MAYlVRNwhVZbJXtMxmWYTamyUSNABVG07lkzhocT3b3DJ/sG71+2ezVsxrxqnC7j6yLKN4jJIZkPCVh2E0tbYFlsm+6rGQKOcxln9sM+f0XcOX1b7z+la9+pbml/S//9Mt339j08vp9Ow71Jwo+RferqiEI83t0lzLNPZ7SmWI+FnZn166oufOmdb09Pd/4s7/euuXMqb0KBQv0G9N3Kvk7ffo0IhxBpitFFrdHHRwZ+PnTv1QD4QXL1+jugKySZ+OEw7xUnlxiixkI/ckqHwQ1BbKDxmoyVNZCHhZNvGJMWhXhjY5wY09Oh+zQqi17fP5YKu1SPfMWXHN071sPP/Xw5x78XHNTUzIeB7MSN8WySiQSwMEQvHJGyuhQOvG1Eiu+MLWD113pjAS98r6VOTSnQ1gvskizw9imXhxfp/IYQYHOeHGn5+dbGdqhYZUjP7WHH2xRamfwJzGSSfzmQpgKVp1hmGiAg92mCVKKeyAGxTA8kPWhN2BS23YCx/YAFB/wFnQUbDDqJTgKlgK+QkFJWxYBXAI0g9KDTrPuUoABpQJxKGB3LqMnh2UrDUirYOWFEiPcrGRFVcnuUsZyxZqqfHIx9hBINciGJYY72LLpshOJ6xaH0Qi3GUB2WJG7d+0cHBgYHxu78457Gxub8ByOJWLHjq1PPf340WNHEDjW2NRiGgbwtBKvV5iR8H96am5l595ouDHje6bpxgBWBYMjI8P79+8/3XMaj3zHbfcIj2QnDA10ARVxsdTBLA3FwDjb+h8QG4kG' $Logo &= 'Dp+qrtOc5VlRrITpZM3UNYl9gbAfRilTLyZT2b29o4f7Ro8NR7PXLr1mfhtJAHzuR6yxaS0PzpsFY/Ebqs9jFmQZ40fdNUD3c5Ip14YC4WDw/Mt5nfiDP/iDeHQsHh3/3Oe/5PP7b7h+7V998dOJjGv73m4kahmNWdmCUnLZCRoUWpo5j1GuDWlz26tXLVkyt3PG6Hj0u//x8ycee3jN6iWQ3M98o1N9shE+1h1LJWMeb8BZb9CMh4aGQKDxleFhS2RkgSnu8aefz8jeRYsvd+lBKFBu1ZAlFQvEpsk018XbkiolVjTs9piGpkpluiL0OJHZBTixhlli5QrvQXHLvC12sBSHpaQZmJXeZKZYkgMz56/Zv/f1J5584guf+7zf5wMsIepIiuwv6Hx1NUwwtZOYxNnUEbEWLh7+wnXOTWQ/tLL8lZpTJVE+21fBaM5xKbRznD61nbte59k1p3Lla7qYx5/63i8W/qqYjyWxQbYKDmxERGIinfSYpphJjnBFoE8xD/s8tis5Cv6lLAscRZYcuEgCI8lZFDQgTPdQbnA/8XvOysNS7yFpTC0VwcnI4k96jCLRMaxDQUeJJxJEESpZt/2ZK+F8bjK5tRgAoS1uE+uNGpgl1pIvEIjHE08981QwWP2J+x8Q05qfNPvOlk27du+ora2vrWuAQA0FCQyAPXwk9KfE2zjYcRSwmYQFK3rB4e1ouAI42anuk+9u3Tp/7sLm5tZKHKyMZymqhVxRyWclA29Ewz7nBTgb4uoCJwQjlc9An+k0TZaqfGbAXTs6Ejt4evjXu080Vwc660NUseMjGTozGE0hUwqGF9JCqUzKaN4qU0YREkzAfaFfsvp7Pm1gYODWW2+FCy9/IzAyHos8+eTTz//qpSVLlt579+2rbpmDZFmqpmdzlsIGCtPQfV63z2viZu9s3f7a+s3f+tdHDxzYGx0+WixkYLiGdHXGVbJz/2nDXTUYSZw6dXr+goUT7uY5qCkit0pR' $Logo &= 'GFLYKIiu/PrXbwyPpueuWlc2aouyrqlAlsFRhNov44PXAK0ZZ/1NzC1AnnI+l4mMxbOwbuazkN0gXWEuaWaViA62ZS9bia7UVMqs59Mn5C3dY6RL6WLJM3vBNcfeff5Xv/rVJz5+H3ajw2Jd4FKwSp46dQr5xAwOZKmksAcPHgTLBL/BMWTh4f3YgNCGnGYoNzlv3jznlPPy2oedaXBwEOYczqXm0GgaOiQ9w0iuXr16UmcAMKZSaV3XnLGqZE5ix3Soa6UeIMJC4Y+D/txyyy3YFlkPxAEYpSxXdxZ52JzimxN3tOUBu+sTTcSDQ6rwcsNoY5zf16SE/bjR9u3bMSZC+nESHwjej6m+YsUKZMmqvFQiEYfDIdBLC2TTFlBsMiuGVBjqzphYj5Ea+z96JPYMdB4N9HL37t0o+7Z48eIPIvhxgkTa+SHAOXRR3aFYxrLL5rJFo6wXJdWV48MIlcYNGPUCR8ngMKEA2TI1UUaC13CxIns3sXwG1Ae6DEMguI4rlc2hKHeJr8ZYsY0GMJJs0Qrkjk3yEy7iyhZ9IapE+kRBLhUZAFCJeJUdmEECSMcgnCuTTr348nNVoaprrr4Oahk83zZt3rhtx3YC7lQaVTymDYvnc0KeZBTLQvRyPB7FpaCUBIJBvz+AdY4Fj7tNyvik68beA3vf2PD6x+79BAgBBbJIorflSDqXyuahvDgonoRmn0vwYJ4z3wgGBi7qiERlx4eYPyUxbxh/193GWK745DuHuhpCYCrOpPqoRbIMx1Ij8TQ28IScU9EeAPxBBPCqasg0Srnc9C8IenfbbbchLmQq3chl01u3vP3uu1uE/UBRQQeN2Z1zV116eaCqMRpPnOzu379n22g/DCEFfslFMbIgAWdc9mOjw4dOxnS9PpPz7j1wbMHCRWJsh4eHAXxhzWOK0pwhA7pimMaOd9/eefhA69yrFHcdwFFgASoQYrxel46pzZ4pAHOJsQj9G1xWKKvkpqG6UnEQ' $Logo &= 'bfyNw4kGGjeOQcc4laTH9Ic8VY2ASUvZrCBh6H6R/ghJxQYkPhftIwVeI6W9BKS0KPnq5l6xd++m2VveueyyywVTQYcFoQEIhgdxiiKLy2IxnO7pQe6yxobGdDpDUDA3RSXvAzw1KA6YygVY17ABjrJp8zt1dXXpdLpc0fCYmXQSpBNMRfTEYULbtu/EwaDy+DoVnxEfmiY6qfAndjjhyXwpBh9EigGbxGGINO2FF1644YYbiKNMZJWOxKJoSByFF4B8a5AUcV8SVVmydXo7Yd4l9yOx9vGpcgS3AH7wysLhcBU3r9tT2fOpdiPwrbc2bwILpxuhVXh0GjoplEiFIFIvStywsX3Hrt7eXrw+UQqhAgi1kRWhkgpuoXATQ8Gzlau7FSw0nIuDoNxiEHAMco8i48PmzZv/8X/9w8VE1E9Ve11846LoHafahlRZoIyoJXSjVMAqYQKhgAgyxUxbxVRhAvVimzzwLvzhCZjIsX8SjuML4lwcKhOzUeOSz5WTXLCaOPgWTYVigW0qBJKA1ucLgoFV9jhbEHW8aS2rWLh5BTspLN+gqk2OFxD4DLgC22bMGa0zDh7c94vHH8XGgvmLsFo2vvVm30B/fV09Dsd75UfHqXR73I5Gni1JkHC9dfXYgKEGh8G32qCar6RtOFISguNwfFNDw7ETx97atHHl8tXLlq1Alj8cA6KGw8YT6Wi2UNI0sjCweifgQ8Ek4EAHjMgiYxJFTiu8QgTxVcgpiMdwwqmamDS/Fb/PrWjWviM9mw/13H/FQk0hnK1MA6JOgUfxd057vlh359+4l9K5rzaSzo2lc4x5lrMUEOgq2RVCimDaXt3TEvAqIIjTaxAev/CFL+zYseMcIimmBIQ4JCxhCSG3c8e7u3btBFFkEdUCKjrVSWzVqlVnvNax492RFOi6oujB/Uf6hciFaQA3YsdIYANfbnNoaOT1t3YEa+d4g415S3ZrOo85WCme3QISJ/E8ByfBn8IjB4XU' $Logo &= 'oolQdJv6+HB/cnQ4mUyAqeAFagqLuiyWwlLpK0qJlBWqbZBlTSR/4eR5LtrAN/blxwanxccmKfAgcrlU2udrrm7uem3j5tb2prralkwaPIlGWyC0oE0gf5CsK60CWHfsrM9uzhMNB+PaQqK/YPhLhGE6YrXDP2g/t0q1BpR9z569FBOdy00N2ORj7CZsUnZTJgyZZcnurUIHOxAFNgI+/yuvvALvzU9/+tMig/UIwMzhIZTmhDsfeFiRmyA3kA6nmlhYVSnLvAIcQzfyH+JcbCNDKBRZsBboH7XVNZTVLRCwT5zqMcS5qx1kEhCQuBXplLo6VdxB4gaIAuB2QpWh+eSMTNkeJbbQCYZCl3VgfPw68RIVNMBOOFmAt5AYMOC//vWvv/zlL6Pa24UxFZ7vAsh39vB3kPSClWPzPf0mcRPvLk8md7KOkEM96wKEehWKDuqFf9BRQCVtN+KiJcYHnwWiiHyMiMSQNEsOlhS3KtFKJwrO0V9FYigZSo3H+r3FOcAnQZaYZCDxuCmO0TA0uoZtDB6Wk6FroMICapawsHTDXiea7nb7IP2dPHEUTEUUAydQjpuhU8NZdCg/LG6BPkCFnTtv/pyOTlyuu+f0nn37oI1Cw21qbMRZDiDGoZxFwAKmbgJSP3rkUFNLM4QWvKpalWCfTN5Kllx5VTM5EL9IACApYoIoC00uB/YcTyMKVPUChNeFG5ipSIbynuLsjtIN04QhlxuC3pFE9vUD3fMbAzVeDfGnqCCgqdp7mMr7eohJwrno/Jt05p2V1wIKkymVhV6ZJ0QUwBdPDMsCUwE8FPIaHve0sohiPP/2b//22WefPfdh3/zmN1999dWNGzdWcDnO4Hv2tmzZsjPu7+ntB4n3lHQIMemsTXlHRkbAsQSdLXKTVLwu650t70ZyxqyO+XlJk1W5LKlF9s7CtITvvUrL2IW9+CuBubKzZEmiLJZujx4fHx0d6oWffToZh1Mfi5g6oy4khmPxY1Vq' $Logo &= 'ZXm492R1U6dlEerMsJuQoCSsLNwFw5vF2gXb5vtg9stqAVwk2NBxOjr01qYtv3dHM7pc5iaeBVI5tIdZs2ZVWmsElceKsAo2KCSYoUOeLswPUGwL6okVJy7laCoSKxMOtwDR3LVrF+dKz3vcbsezpjL4zJlqLJLbTdXksxnPsY2rgdbv2LYdYj7mEqg5uAhEBKi/2MhkMyWGB9EfR7PhqeswlcqgN3ZUmmhi0MRZ4hhMEkBbsUgUDYoIog5w5SkGEjuaAnzdLhctqU7/TUOLjI87z4vD4A4O7U2gGiJjKYsqdmMhw+YxGjccRp/cnKFg+YBLQRSy+B+6DZoGZeWxxx67+eabb7rhRsGML8iluFQi2g2Tnkb3K7A6UgnQ2jGRFTidIPQYuQyoA04EC8H5hMZIAvXC1ywbSAi0heRMeAcdD3UD3EioHPxkxCkISgPcjEvlSBnjicvCOA+MhX2cP1+qEGewBYaCrjqKAm6fL4DcsKJadNXWwPoYLhRozPAOcEXhpivxqCZTyQOHDqxefSlruVHcARybB7dAj8b9I0JRIA44Z87cK9Zc2TmnS5aIHa5YsWb5stW7dm17++3NCE0wTaBouizAK6hTLEQDhUWfd+za1tnVtWjJslgijtCfaNrqG49HUuAjpRx0EeaFRRGMwk5rCIgExemq9TfObKClo6mxbGEwlkpkC0PxFKxPQY/p0xVMGZb3iSfhxiyZutyaMjge33qkt9ZoqXdXwVMoUU7Ch83Q3kOmAUCNJtJiJNN5C5CUW1ebQn5ICUBWZlT7SRqbRioY7BcShjPRTwyNI/hmLJXVVaW5CmYLrbHKX5kadCSRGUjnMkBRVJpAedanJBHUVyx5da0lDKVLn460+6Mf/ejb3/72uQ/7y7/8yz//8z9/8cUXXefTAMiccf+ll6z6mz/MEsqqKldfeZlwI+7v7xezsciNDF2G3tfTfeDgkXDj4qLqwbPpMvRdjVg/6+6Yj/iDROGYDBXM' $Logo &= 'MwwkrT4yJ0QGev0eLZ1MBQN+zD+aurKOZhNK1YPZAoNQIpke6O+vqW3EiJLIRY2C7cklhQNmyfWS618KdUXVtJySzJXUcEPn0WOHAMTPnj0btytxw5UFj2xoaHCUFUE9OZrYi7UrjhEElJLzQ0e/uIaHwpXBVPD0E1SbmAq6XFm4DBwFFBnDi6BmXpci6YAyyUWqzI16aSM9JOtiS8CDDqTvKNDAoyAXbtu27a//+q/x1LAq4aswn+AwdExA0A5zdTL+lCtaJVNxDmOnbfrnjKHw4Ehn0hhhSMrgMZ2dndCh0bepKhcALpBfAlSLzi8kIjuOc/gJnO/I4cN4CxAdhOqD6ziVQFlepYMnhhGnaCo3jIvDUXgY8BNzE5XIPn6Ftvr8889jFfz+F39fQIUXbKgng7MwHlisAUF3Zmck/lcU7rusQ7hKrMXbloocFD2E6zFEhj+VY1LYjlIEvcfqsb3VylK+THQEJ+ELq/kT1gLaT6fxqa6CHUBpR0YLtQg3BoEW4hgnR5JzjLzDXLF06TwkzsM7cABOULTI2NjJ7u7RcVQ6Sug64Qa4LDor3jJOx9DiMQF5HT9xDBwL5B7PjLuIKuK4mtBSgPMl4tGWluZLVq2+4fqbsXM8EYUJJxyqQrg1qlNAw33m+Wc5YpQev0DAlajjlIOEA4ByaGQIs1SVFF3RpFIhl7d6xhKj8ZRMgT1gQYTx0RRgwxHOHkvlZ9QEb1s86+o5TYlsDkMxmsj0RmAlzB0ZiR8Zjg9GwZ1yflPHCxH4oUK8t4zhLSpqLG+NxDOQSEzDHc8m4YAA+d+S1dFkdiyVScG1OpE5MjAOLkXMQHIls/n+8YTH0GfWBjHCNV6zoz5U43eHELdg6GGf2+9mjZvfqTQ5gxlxPcgAI7HUUCx5dChyaDAaz+ZhjYeG2Fod8ChSR13V7Kbq9toqXAp3HBmN9o/GwILBU4i4Yo4JsxkjreB+M8BUdO19OcpPfvITKObnPuwzn/nM' $Logo &= '//gf/wPIA9nwp91ASs6WPxTT4NOfun+SRQfSPfojKsPbIIxV2rbrYFat8oSb0gjFBdMv4YlIJ6FwWUnBf1hfDPxLRWY1iNRhtLeoWMb4wMkaP47JA9xmS56uUCMAijYEseRA17racPL08Hjcrej+UiFjEZJVwieuJjDnEoHNFqkqNE+YeckGcFvTVz2q+nbu3t46c6asGGXkVAJBVGltgNhBSMcgOMRakWRNUd2GCTovgvtF0XtyjOZ0DxcTBQkoAaIHAC1HTRGmo6JlCuwI+4HsA4oB9SS0QFMlbg6A5iA8gkg69m2hAwkXBowdjSQj2I6a6zYMLPxfPff8Pffcs3LlSvgjwGKBY0BYQOsrNSGHlONXgROIEahgKwINsTmuw6SdntgcVLW5Ah4NR+7cuXPRokXgH5NUATHaEAQr/arFsIjnFaYXMFqghBBrPG6j0meMZ28lxE1jwjMTh+OP5hLGaWLA6ZOz+oICKWW5VFNdA9VtoK//n771LRwrdJcLZCqOhVkMq3hpeQ7k5k2h01GcisycocBzCUBuOk8ossaD4mgxuSJxFDvdCDUwTdLvC6xui8OcAAwR+OVgM071COJkE7Z5MeikwzBIohoGCq8AKG5sbr5u7Q2XX34lEoVRiDGxo3J9bX10fGzru28/+fSTBw8fbmxo0NiIytb3Ei9LdmNhABGvB5/i6QoUdKhLrAM5PQSC4A+gvl4A2KU/GIQGhwWIkkpuj9sfCC1evGzfwX2UVtIR4uyXKWWyWUxruJzhZiKaB0K4r6wnC0WQciFOSezrTK+UCWvaKiVyBbemLmqr62gM9w0MgUvXBbSuBh+8qqPZ0qYTQz9fv+fQWMqoN4QMJaOHYGM8SlmAHFSDQPP5fS7dXZYS5AlXlvpjqTcO9716sHsskSrAYEOgiIRD0QOBwsNG1JtIYZEZ5dKmA8RuQwHfovbmy+e0rO5o5KcRAsHk7GNofZHU45v3bj/aMwY5QtOIWxeItx4a' $Logo &= 'jiGDG3hlU0P4c1ctunfVXIK/4EcIxcg0chbZqySsUpWImfBE0VU54NH194PpgYC/L0e55pprvvOd74ASQTAEqO2adrv00kshwE7nSEwbqClY1cJEj4cW4m1f/+CRU4O+6vYizXme78RPyOBBf1gzcplAsAnNm3OskCylmfroUHfIDTprxJNFXbczMrDUbZueFW5OYeC2GY37jvaG6mYWyHuOVgCYG2n6AAisEqu/aBL2409gwFjW2YLLF64/2X8MPmxtrS2YEzLeQ1EVBmpI6xDbxS0csqBxc9BvoWRgj3xxPr7CoE1drCDTuHA2a0vTeHfCHQAIFeRxGpApLcvNoe5oTr4A6FhgfpI8JQ6D23/9138B6nzggQegtMGehNkCaiBkecdLSoyJqPGMA7DhsC58imtWRqE5D5Jnw75wdqjkoyJbLn4C6wJjgDcX4KZJ7tpCmahEAgQqKO4uctAJvAvnStyccwVfcSib4Fj4dMQRPJ/XG0A3HC7OSgSWI+nEUNeAFf/VX/2VQPXF3S/YpmJXbHSV7XwnDv9lGzEJlNTRXBa2eQ+DwArjGhZrUCpv58lJq8zWZhgjWUchBcWF6S0YBF3NxtEEtyeDLWXGK+SVVDKfTgJ15gp3+WwuTZYvVcGpmVQ2ncnm2abEpYqASpPDAnEvRkVRNKwqHCKmweiboWh+L/75Dh1Bwtb9GfbZECoIxlVgccJfC3ruwGA/RECMvUpSAJV9AciNn3gcyAiPzLKnTp7c8OZ6qBOXX36N2yBshAP8c4S/L11VFQrhClO9u/FCWYNRGuuboFNjmVNWJinXHU0NJLNhr5G3hIOOTaPBhmNpzMJiyOeuD/pwLQ8Efp1IieoiE31zgx+A8qbDvbtGYrFMXlWwU7gzQAgSyQcVrK0EPR5xmdpQ1VA0/astR9883Hcinu5NZqAdYVkYisAOLIl1Qzw43iDGN1sG+YG1zkLHBlLjkWTm6OmBE4PtqzpbZ1QHNMWW13Aw' $Logo &= 'pjzOAsL44r5T7xzp3XqkJwUsj9YT/hVl9sYQ0Bb62X96OP3SuzAcLWxvGMFDyjLJ1CWaNzK/0Ak7QMmtyS1Bw6efax6j5tVnP/tZrMlzpgLr+OlPfwotHts4kvTOaTfQL9CO6Zia8U4hQTs15MUKxAQ6euxkqqQHPWF4bGkmdBHm+hDOoA7IJcgzlOaOZj+VkMTME4vCNNRoJKYV4w01ddl0Wjfc4LqiZJH83iZxU9hvPhDwtzdWHT59ItDQgUWRt0hgAOTMnjHCkUO2WJyiP1rKWFQanDcVb3V0bOD4iVOtjTWUJMciGVxwRzwU9BWMXiWZc2ATpwMYJex0XVxzis04QJawG2tMgvDuHn30USiazht0aFwlpgR5Hx5owpkNBzixBOgh9FT4cQhWVGn/wPWhl4Ai//Ef/zGYFpgKOBaogQHkTRAKboJz4DAwJ6ik0JlgccGGECAqzTPi01F2IZe0tbXB+C9cOSYFoxDRZ4YvkL3LLrtsUlQ8BlYgUZVGGodN4pRHHnkE3RPS/9R0UzgXHVizZg0eCtvCnFGpvb3++ut4EGw73FGwHwwLNDasL6huYtAurp4KDws4FrgLcBtHO7F/YmyrXGI1HwI9pF2plMOWTJKyHV1YJog8T1dwYY4yryCOkhHYLqss4hVMAJAlNieS7qDBLpKO5TNJmEQgSmMy5fI5ShmpUPBwFiazTNYi3ZN7QYQPH7hmAWmDoa3jstF4FJcjCqUgCIZSdYWramACqaoKpJIpdD/g99oCkQD3CoSkAT0dj4yTEZJmLQl0lpVzpovOYoXP40aUNQK24YiMfiGNGKWG5Y6lovHm5haQoXOPO949gDhZlYVBdSSaAKLlBX5lFcRkFMGMYDtR2m9Uew0wb2B7mLkcGkrGVqAYjZ5gY3WgKhwoaSqIuFuXwUtYunMpjFOWi+QyBu87DJjLVTUYt1490Pcfr+080Dvqq/LVVQcAX5uaCi3adsUWirxAgdEfxjO9HPcO' $Logo &= 'v97xROJg/+jh4VjPePLjl3S11dlUxgnYfH7n8f/chNyQ47hmbXUVtFVyisNI4oEA/OPIgNdfsCLx1Kaj/YlU7rIFbUciKdPn5sw0DDuzzZPM1YqGrvhNrQl5DLSzqtuQW++//36Qg3NzBbiHOi4rUCbOF+WfpkcTNFeQIc7wZjdsI6iwp3dAcVdlSzrlRiAezE5ZIAqY8XK5yLYDixNBEshVxEqSi4qUBtyeiC+fXW3lUyx4qQyQT9irK5rDwHC7bCreUhsYiWX7Rod9/mCBoQW+PqGr+OTvriJzcVaVaLQLJYWIjDuMribjUcnjR6iYLT6yORDjDKYyySPG9pzlwxwN5qKzbTsb9jNWejPTOs3nQf6c6JmpPAlQEmg9+IrFCfIc4l5kvAgSPU4HlcelKtUU5seBr3/96/jptddewzJnSIrXApNvB3oCPAWu89xzzyF8BL3CWQ5AOjVsXpwFVU8EtcArd926dQjyKLDTbqW1H5QNLxwCMVg4uCY8uR1FqlwReFQJDDhIEo5Mcptk6he8ULAfTHukSIBHAAZQ8GwnfAoSA5A3HCn6U5kZAZTq9ttvBx5YaVG7yCJdFXkRpniHCnYgGCPmblYqJnMFfApXV0hDIiMLttmZAPCuDFksz2OgMH5lgSexk7etFXEdbSZSKheRUDk1ci6dyuECkP1JxuNFxdKRk6SPZr+i6/lcXig9+K0ydzFPNRrZTCELnMDj8cViQ0L1IyMQJ7ogUAv/K6sM3dFZFr6T9mMr4HaIM+WpJEgNaADY6Nbt2+Em39Y2Y07XnMWLlra1zoTZ0L4tcjBnkhanahZ1+AV7I684i3L/AZIq4SceKxW+BDmSJiv97oRchEhAb0nSJRcmnKvo5gRZjG1hbPLUUYxxhtS0ktfNuolw5GXKJfKPYdLQYYgjymU2H+19fstBmEw6ZtSqusaJCVzwVy5rAJpIz0A3TVXFBi7hBqcUD84oLMbL8PtDpjuSzuw4evrqzhow' $Logo &= 'lcr4XShML+46Fkukav1eADXgJRlJov4x5mmxhiqzdolHrqsLDeWsF3Ydy5QlN76TH6DKj86vRNFgDYK25TE0t+kD53WdqUFCvPHGGyFJndvGDrN8V1eXs+c3v/mN63wanXv25hi0STgYG83RZCqzPpTGp+YyBodH4figBpszOZdslIyigmfFFKCH1rAEJMwHYUe1JEtxqXKZ2ExBNWJjPUtnBzFRYUlnDxHyQCkV6Z9DwVld4FZSMNnIMalcSmULne3NYzv2JhNq2dDgqCjnZYt4Cs4lvkKLDhObTfdArbMYX7CzPN5E9fj4yNDgaFObF0+B2YNPEQgJGWhWsehEobKDEHMo3mZXSZnhB3bguYgm4EAAG7wkC2J4lbIqssQC4fmTP/kTbFcWP67cQE9AlJ/+5S8hhAnvWKfhVzhtYuXC6byVba5T6aPI/w8PGsj1iVgcC6QSgIKCCY6C6D/4QWFeQX4HVgaRRSBOU53ZHOOHsMPDNWv9+vVPPPEEFAuQaVwQmqRYYXhqcXwc70zXDh89gh5WwKpWrsCEUyk7qqGrQiFevnz5v/7rv2L/1KQDjvUFEBa0NMJByc+IiAM6gKFWaUfhzjvvRJcwJpOgOaGtfmAR9WIoxcvDfQVGzIoLq8yMXgn6TjOeMCiaqELUtUTgN+dFwj78R0qMMLaXS7aTEnukQHtxXHUZ/yAPL6gkGGMP18WjqU/HlQRAZtMdRxmyaLEA5WGCTxCCaRiYGbjQJE+2Kr9PIyqqDwwO4R1DtwApJkmNC1LoKog060DpJEclhXFHeJUjiT3egsygNXGaYtEZaPQWjucJaEbxSP9A755du6uqQphz7e2zGhqb8MLngBp1zrftt9FIvpAr5ylBk8OqFVWBUal3PDGWhv29KF5ZkXQ1GkldA5mQgBoGTR2JhzWZ7FeqROxEWP6rfBTbPxRNnuwby8RS1T6TfB+KE1PBlm9KsP97JbmjofrEcOwHr2w7NBTB07oNlYP/' $Logo &= '6Y0puBF5oeSGklkE2oA3QVn0aCrgOIwlRlMRPWOfCyCvw9n8iUjypX09teFwe11YSKsnhqMv7D7+9vF+rxsdl8mjKVcgls8BE3hvFvbwi8YeMBhF1eL5TCqZNUzDLYMwod+qU1gG7BZzjVKfqQqogxePrU221UOQxDI4Z0gK1ej9wQ9+sGTJEvH1wjQVuFGe41cnQgL9GRsdE8Qrl2MxiPNBDA+PQkfRZRXL2HC5aUDYdxKfhAzjT8InCL1LLATKluD2xsf72kJatVsdj8aEa7CgqmXewCcNm6RkMzlyMtVs1kICFvhLMWsq2tzZMzbtPuUON0DexSJhHwggkNhAgzDHGyzMU5fKtB5VRc6W5N7BsQaIyewHD7ou4BE4IMB5EenJnUKWwh1U9MeOI8mpNtB0EQ1XIFgilxN8y/HEFQzGoe/nACHpVzZgOEylyA2/ChBJ13TBP86YLgyUFweDB9CAcWIOB2P0ebzAWp988kkYXT7+8Y9DQZk+oIepCPZz5ZVX3nvvvd/61rcefvhhXARDbLFRWUwbgV9B9cFow5Mb/M/hCrYxhuMcHLLsYOzO45xN7nFMQbi+mEWQQ0lu54ad+PVsF6kE9C6WqYhAGI4iZNQPRCGfFzCUHUzFNJ8SorCuIPxELdaos5gZkH/BSCCpM6mA/wn7cNEXi1Nx5DmAUGBl4n7SRLicxXzICcwTmO2kEAfaw3fnKEj6VdUUjee2bgDOoWBpEFRe9yBJpUwWefsVaBY9Pb11tbWcoiNf4oYVKSxX4IPJUqG+rgGIVl193YmTx8EySPrjxMMuQgwgrFh09zwhkiEy3oQxSulUurdnD5QJTVUDiGmqrUVUysrlKwdW9IM/+auCbq87gAVZLONIjloglqhq8kg8dbB/bDwH+IGtCQwYZgsYK45SY9rjNbWw1w1mWXKpJKWqkkL3L8YLhePdJ36zt+fgQISUwAmzhO3DrlPIPi7V6PV0VAcMw72t+/QbB05V1QSb' $Logo &= 'Q4Cg6PUK9laSyR0APqwdNcE6v0cH8iSVR5LZ4WQumcVSdnl11dFIwFcA0+Xz8pvHRuY0D7fXVWNn91j8mZ3Htp4cwFXhIoZ+5zIEtUjES1wsZ8tQp1JZDtgm8EeCKmOCFEqmPemZ19olMEEWkfUelVSw+k0NhnwNwLbmfm8ax8Jf/MVfAKZwnb3hxf3P//k/77rrLmxPOtd1Ps1/znSWDtqApEEgu8Iey2g+i0fZwsjoeEHyQeLHW9UspSDDvEUiP2WlEYpZ2VmylHlONpREPBJQ4q219aNDkZxkJw5x/GVE9pf9xw5CNV+wYAH2y2pOqCxk4tZNVXPFY+OhQHBOS3DfqUGjqiVbpFiggtBUGGor8AaWJ1xv8FlkgYlcz3Rv/3gc4DJWDhPiktD+Aa3AMF7FTMUJMBCEXmD96JIgWK6La4Lwgc4IW7EwJwjEeFKqq7MxFdElXGEqUxHKgRNLX3mi+FUkp4HxFeYx3m9n7RBm+cF4AhFOf/KNb9xy882OcR5tmsmJRfdg7Pm3f/s3uCzDuwRQGIYaP4vuCfomonCEJzddkJc2wddYHBapF04ED4gkTjzHsFTuwZHkKcANFwStE2OLZYKndrScqaeLe31Aqe85fST+dLJOkxFe8DdYufPFAseeyBhXYJwlSkNk0VQjZ2JLY72aOEpZLJMSATuMcRWInZCOLAafgXwLBAXfaIOIC4RTqnePi0yJmCu7GP6q3Fs5KQzKeilj0sgqXdjn9jJHFM115Mj+19e/9uqrrwCCA/BjGDquB6bEFkk8l0LWe9g1NbAbd319Y0tLq6xsjURjdbU1OL2Qy1WOtcapZ0E8ZCqlrLu93ka3m2Q+ss1Y4+PRyNh4b0/vCy++hBG48orLP3H/J5pqydCSSCUVKFToIKXxl6LpAnK0cJisjHjyAouNaFCaONUzo+8iul7Wi4qRcVmw7kKNiBdL2/tij2zYu/lQb1bT/DVAz8ns6sxivAs8KSqcVbd62+pD' $Logo &= 'hwfG9vaNGB48ukx2GQmXAapGTtvxbAHRLh3V/ruWz75zWSc4ii4VXtx/+sldvadHY4lMDtIRI4I23olO4hjIgRRVw60/ln7r+GA0kwu6dTrKIs2ShImyhHctvCkiySySVmFW0bvW1GAIvEmh2reCo6gabaNnkCI5/SVnOtCqPLpCX6VJktf3v/99rEzXOdvXuWFjkpoCgPu8Euie26DiLFqk8BB+X/YKLOFcFRJYNBaX1CbKwy0peKEUemKBj3NUil2djgQySaiVsgaZQsmMzl1YFY8BTPNJco6JJI2ixeAF9BJYOF544UVcGWWCkGMY8SsiXBdUGC4VeMe6KsdiozObgr3DmcFoVPGA4lsFFlQskuc4mSrNN5EAVqRyIXYrK2Y0FYfW5fZ6SiXbSC4kaICNLc0t4mltTSVHvheO4VewhItMMUr8gJuDfeFeAkEC+Tu3yFz5kzBaiHOdDVxNYB5nOxGME+wEBIQfRBJJ/ETiQQwvDA/XX389OIrw/nKU1Gmm1hdfcS7gsj/90z/9u7/7u4HBQWgwoLIOQOfwqp7eHpiF+IJ0CmJUiWByY6ZiO+TgJ+fi75vI0tFUSEAp5DmBDbEV4TM9netcNPwlFG30nHOxEDokeH6JoVTKXY/VTnZ0cEBQ5JSUsXSYJgn3cDGAkyfVHpsgQERZhOJv8bBRpJ7gJSVS2MGOibjIMm1QnK4CcW5qPVkH/sKJRRwGWJDrPNJrKOTdJhlUE/HEk08+sWPHzlw643BaTIujRw/v3b9nbGy8vrEBukfJYmsJgbPsN4lyxfEEHi4UroJnGYJdPvbxT+7as+eZXz6LcWikU4A94hQ79ltIFiX+dDwxwGAsfCWGSkMVicUgu+LwyNhob3dPV9fce+/7RMfMjkQqgTJfFHSpSwjS7RtPJDMFdCdHmjCQbAtsmMQTScWF3VXesUz+Fxv3b9h5wgMjZIHmEJ4TmSK6U7ldPUPZRMoTDpqGWSxwficXTT2BwxaB' $Logo &= 'hSVzs2r9i1uDL+zr/uGb+9MD0XQig9z4OMANu6yqgqdGBvoWz5/1iUtWr53b1BzycNSReteStrqg7ydvHth4rB9wFhuDGPfEKS4ZwgEcnVMTYum+k4P7jvYphlob8rF8WcqCWpVoTPByUJKnfyTu93luXj67qcoXSWX3940dHYnGSsVav+FS2aWAk7O5xAYJzGxg97ub/R5sTEoS8/TTT8NFx3XOBg/jf/qnf5q6GCCHIuT4vPyJYVydjqYC9xDoJTAQCdQEnAK/pVBgIQ/rvAy9jQsLERopW/SswiqoyDSHLIlcsBjeNHKZ4Utn6vlUPp3GmCS5HJsYVDCAvIpxzcsvvvib9sWXw539uVfeuP+O6zXDyOcsLmKXM/S8ZRrgPABXc8XE0lnB9du7I6UWFlTymD5WXmPJx/YwBhRJs6YogbcXC+gPQucsiM8wPZZYSyEsQKIA3sh4zA5PptwZVoYETouRmbwwq2DmAT/F58WY6WE7SCaAK9t6BgFWctHSiKlgezp1UIQQAMycH7IoGvMYepJKKjy1NgleYh4thwHKozMOoaefCjHMZ4GFytym9mQ6e5j3Wy0tLVddeeWx48fndM3DtMF+R6nCCODioyOjzukgdelUxnHWckAqqXwe5WGYkktc8I+GQkCXlobFTUxFQHnTT0t84fVUeOCIczKhy0/wZ3YYZ97ATlPE/iirDby6fBaYCqL5BCvKMyJJMe1krmZ3fO6mMP9iFHltcR+wLVMNVZaE7eyPU/sjCneJZqda4WgO7ktZZ8+HTCr1q+efRUA8FpXjrABvMdwerKK5tRlsA511QvQ5EpfC0eH3hYU0b+4809Bxk67Zc++88244IGOC9/T2ATHDBW1HdYDXHBeqMGiGFYj9ItJSodKT1NAvw+0BNIaV3tfT/9gTT2DhDgwP/sk3/tzjhaXGjynv9ejRXOzYcCyeLrD5v0hx8AJwoCplxHcCbiOWyr2+56QrngEDxw3s4YI2hprF' $Logo &= 'YV9dXbBMVDwnYckVmTSrbC8hsDKHt9cQ8s5trHrzxHBHfXVb0GfolPsPN/IrCoASPMewx7p7efu9y9tNuRSPj5cpXkXxmXp70PQbcs5CT4sGiB5HGMkyYcDgGRlIfDw9jg9Fth3rA4WBNQXMgKZsmYKWhHAYSwIUzNUE3PesmnPf6rldTaGhWPp1qEFbj2w7OQgxGauErgJvbJ1zYWEDCIbNVLxNAWIqxYqVg8hewNmuc7aPfexj//t//+8zahhYS+cF0cBhBrLk+2ozuCY8gmgesvUbTeaCdZwNDs4qLGZIJYZY7bShklMyQUzUcrpshJGfdF5T2e81EUsDQMli86zDVEq4rK5v3rIjYWm3Xnu7x9SOHdy3Yf2GtUBRyEyoK5YC0YfLgkGXNnO5YnXYNbezbsPOIdVXj7MLBeyjRJIFoakQ5Ubf2AeJzaKstVuQA6pCdgULYRnGBswMGD2sDgGMW0W7CduvcHXDARdvU8HVHCTNsalM31pT4o6DiYihED1lnlIQ/mPnyA0MTYXuy+9RXMpRHaDBwCiCZCoXX6dSzMyuuXOPHjtW4FdcJkySwTrQSQVfAYdLDhojFDWBVlVaOEAfzme0y9Z7m5CMxYrAxodR+VHwQiaeZQBLJPmCEDv1TVUZVvtcNkevC86+UBpkktEzeeqrMJwAHclbpEeI69lFt2muMMoh8C5No42yvUF6DX5SVNqeCn9ZImafthWVEuOjUr2d/kzThHUHlJjzdZuVdQs0lTBfGafAoJpMYp+iYVsmh1srT/C7boDtIX/J8qUr2mfMwgSCoHn9desSkciP/vOHu3YeQGRMfWO9h3JClAxNo5gyCsHVafoWsWHYG4qB54W1xvFOwcyua6iDV9jo8OiTjz+OWfPlr/63uR1zSya6qiQL5e5oEiCCYIEwW2HG2VgQPEPAvTjyK9gQKtdV0QjYQ2EPKIaUfctKlbkhBTaftco5yMuGSmtd837xisW3Leooi8BVgd87' $Logo &= '+SjJqoQIb4h2Rb/bA2aIXwfGYz/bcnz/QFSUGWSxmj17ijRmImsNI2nlg71jxyNJxecG+Ulm8llORy3KqGO+jozFAel8/aYVX1m7GDCp6rLaQsadi1vdupot4twRRSr6TKVoG22EJGz7bsCYBN4m3qCTLA9R8edeAJdccsn3vvc9SHNni08831i86USoCLTaUVwogxY73WQQCVwAnghzlwW4k0O4VXBcCSCYzLndZJwuPB61dCJa70l2NdWPjZNTu+P36ZrQjyHVnDzVs+vQqZs/9vmyZEAWWXvzvU8/9H0My/wFC9ABnMVkoiBRK+DrWGS8qb5pXnNq24k+01cFECFPoqAMdm4bV2gJKAyxkqEUXcP+ZDqL7wRUM1Nh0ZjMKrkcMZVJ3k1MqdGKF1/dBFcV0rqDVl2cZ7JTvKMsNt/37QvzvrDiOo/jOP6CsHCezQ+mPjfcgSCv4EGdwGGxYXHTC9o5Srk47PO8mEGJm7isw33L3D4cpsKu9OAonIcb7FRmYSFDBjSOCMV74kwpIKAEWMESKxmZEnnGEnpMp7MNEKcz/YIqYEMc/F4F0IErTN4QaWBKxpkrxkzKrcsZt8FqhNJEX1UNnSKTpcetKISMifBGlekvDiBxjNYnVxJjJUyUcYR0FE/EkHvniiuunjVr9sjYCI6sqam74/furm1oeOaZX27d+nZvX08ykYKeGA6HwCRwIhs9SKuyija+R769rKUBEnTc/HXD9Af8OOzg/v0v/uqFltYZtZ//UnUVmbgRYDgWp4r3inDwZ8cVHih85ZBrhWAURRZuxBrDg+SbTYpdoSAyulSuIplL2QNZjw9GYDu6/eold6/oBOShqwrCFV1nab2RxK6ewQyonazi9aWSmQ1H+rb2jqURM+Ux0LEMextrFBMqWXnIw0VFVf1EX+Td/eMHhmOQminugUekyFoX2lgkpav6JZ0t1y9sbaoOJqOwvJUNTZkR8n3yko7eSOxw33A6mdYkj0qS' $Logo &= 'hDwxNyiGAzwfaV2Qdozrudl50e+++24oBK5zNkQPAFs4x7pynU9DiDXKuU/aCb8d7J9EjGCHqJTcbQWMtHZZWGIVgn9pYDhPOq0njJ6w1GMjltE95d6V82pyFETFKvtEI7ZDUhRlf3zzrXeWrLqmtqUjm4ghtMcTbl5y9Z071v8CHqjwEKHDFLsmqUiNJKvuRCS6bG742Eh8NJ6wFA+bVSyRbSzPzIBQV6Y12FYlbBNbYj/y8gQZYpc2bjBWordO2mDHaAzmVFmI0Aasp9ccCFGggopKF8cXcRcR8m0ptGeaegCfqDjvmpZ+kc5VuZ0j3kIE8zshgZVB7BrbHyadeJE6GSwZ6KcIQxSVDkTVPqlIgzLpoUSblFxcnDj9wFKBnjkuGPYIM/7x4TCVouDbXNODAtzALrh0QYZs2+xMgakHYFVlC0o6l0sbAGzZ+E3Bwky+8cxCkHZidxS+KVfcxZdJGyKim6NbZCaX4v3TmiS5yRbEKyJXSTOXBUkXbAMbDC6rVOCLJzrbXWxzIrYJvOLlItmLQwOnHB8dmzmz7aabbgJHEU4KIOrj45Fwdc3H7r5v4aKFDz/0k5MnT508cTKTSpckOHGlyEmDxGGZn9LOIF0Q8hqHozkZ6yDEqrpeFQp0dM4GDX3kkYdmtMy4/+NUEAzoSBJ+D1xMgzP1Q2EgJu3STZyLDb4Y5ElsTJQ8E28Ex2NDlokWy/TniFT5bD4RS+GFXbGw7U+vX3ZZR+Pg4JCsyTqhduVowRqD8T1nabo8nMyfHIFbb2EgmkLOR5gCEbOCuPme/lE4pAXCgbDHdKsK+iciVwyVZjH6i3VQ43EHDBWx6f2R+Fgi7TUC1EGWqkG2sgx4ZpO5VXOa/+i6RTNDZjYVAWdC/1l0R2bP2jWdDT/d5M4MxgDE+wJuXFok4BM10BSrBEdq8BULbiAuirFFeAHinKezVl0fXMN4Tg2/h8Q6CXd2MnDY9uESGx1L5GyR51xEJCyxb69U' $Logo &= 'IqASinlewu+AldktAXvTA1evrKs2tdF0UjVYdSBuwgHwfBNTlda/+o4U6pi59GqEUHBy1RLKq8zsWtB3bOmbmzbdfedN2YKOi3EePvwpNJ9klSVr+bpVzY/86lTB1FBFz+LUyOipqGIBiQx95Hh7qDFF1UV6DDMS+p2JnUyVJnOYHVmRCh46LqZTySDKK9Mk1aUcacyGqYmXKKwv00eKcKTQIw1Tp5Wk0NImMk6WV+AaKtjZ9BsjRbSi5CKtjAK7sMB+yIxJOgf8BU8/vD5Nx+1VoeJgSjOkaQmrA0IIUDPpIpUV8bAUrm+aeDQyRIPiCXiUUl5q49m0aZrOLdBtvEixoaDxp6NGT1/JENdRyUaKpSqrZUEyKfPhh8RUmDoQkoOH00yNIUqLfPIAOWVStJDKchaUk1UoAGFSKWKZ9RZEYgnqt5wtk6TheGiR7WTaCUypoB3FdBjMb4iVAGIFISzLE+UUXfYGm+uLrLFojFjn+VYaaQ+Aj9jUWOIgQWHkonnCmCmOUSnnM6lf8NQ6fWrgc5974MFPfYZTUidkif7hsEwyXTAKAX/VA594EMJlf2/35k0b9x3YjyJF8WgcVdwsTrHk93sDQZ9pmLiFcNHhV4jrE8JG3czn0B+k0MA8OHn8FKwsLm4ZUPkcCeIA74iFqJqdL02AHpViiaYLRxCJs7/hYDHF6HBNowPYHTebKSCbl2soumDVnK/esBw5TtKxGEYDK7Uq6EEv3j48/MT24z0jEasE+wfE4kwyYzHoyAFJXHTWCHhaSBnCnmIqX3JkTqC/2JVm3LLFoDOS6STKREBJEXITJUTgGAiu76PhCu213itm14VMLZ0jS7WryM+l0iQ2DS+ChwYjGUwhYqWSIegQjTyEmXTOkGSPYcC/tawQvvTOO++4PhoNYclTYJMp3rQ8ZBaaQHfZ3iJx4SCi06y+SOViFnGnmpaJjFw7272koz4y1u+mmsRFAvWF7mu53PmMz+1BRM6x/tja' $Logo &= 'e+6m0MVcQQbR5AZ9Y9GVN7z8xA+37dh/7RVrElmIOrqT7B0jahh6OlOYWRO+annsuY0RORCCT1rRYtuPEH6IqdAdiY8oAiQhhIIxKJu10FPkbW9s4X9BLvsixQg3keEDRBnQcaWMf150NpVOwzNKqAXOZUUCGORlmn4NfILsdI28XciZp0gbnPBb4zIw53DNQoETYRxyQtPLTOuF0y0G6sSJkwh7uhiwyEndj/wL9ShHls2YblOgUsJuhLtDKRdzzLEqQacRMYxOXmE6ks3b55kCB40qxzpZXjBQlkWQ5ofBVETlxBIrxTkR5QRqSZY6Ax60sCkbhopFMzw07HHrNcWsO92rK+GYVmfJhlTIepB82/Gn5pfm6MTn2MA/Tm4vmYkh3/BBIzuaVc1cPsmWT1nUn3ebImEqn8RgAkuUdm1HLAGh0GFDwgYzEvZ4lqEucCEhXEoBp0JcAVzFBgf6EFbyex//2Gc//4dtbR3j0XGkEBYgknADhydIqCrc3NDMKaRmwXl8+YrVa6+7cWRkaGiw//ix4wMDg8gkgNS3hZwFI3x9Qy3AMXBeFjZdNirOupHH7wP9TiaycEECc5NkKvUPxQI0BJOFeIJTcMtJWYAhJF7KegpjwxZYJp6xCL2ChE3y6iTKUiJOlsnhTqH68PLFs75y3eJr5jTASGNoKhxP+2LJV94++ubB3n2D8e2nhlPJNOVtVPGc5OBtaorpUunmYFm6bBqaqbArJ7gYHoIBBOEMQ1orB9Qgb3GN14AFFEB7inJMkVIKCTfHyd5LIkdlIe83tZagG8+RyluyYy9hWIJSRWnQSPlVygqb1ki2LiqaC6hZuRT2qQYEtBI/OWegcn00GuKop4QC2Ll6K3OxKkSbVC5DZ2GYOQoUGh+eFI9kYTYTxKlIVmKsxZ9ft3pRPhPB7C67TBjsygIq4xLDAY8fBaJeemNH56W36Z4wQp0UiGgMUKGB4mke35Irbt/8+lOL5nXOmDUrk8mZ' $Logo &= 'piFIs/0pKYlY+pplbcdOxDefHjY9AXBtijsmEKBA3YOmYhUm4C7Ct3WuGoLlwiSMVHqH7oDAYRufZc77UGEML+Cd4hM+VMjpgutMHywSRn44y4CsC+9h7BFAlijuCywBn9Ok2jgLkr6g0Y6FBl91TY+MR7DzbDVdglS81Q8dAggqUBkmW3a+SHKR8viQ4gUpvGAOuTBzvXPW/v37RVwRxtDJQiY6iZ6D5eAulY8jVCjxQoXEgP0aV6WdPofDAIps02JIhYUJe0DoPjSmIlFj51QAAFgf2AblwpQFrXF7AAcqTXXVM9vb4fg/NjgAZuN3HUsiakXVPVbam0/ZbsGSJFgFW2HfZ8OuEa269WS/d3S/BV9lq4wV0oXW2aXLeiEvjMQuOz2eQpKVsMGBC7uIFBJGx8lfLfKfYg1RGIfYmM8JIl0EwhCCLCuz2metu+nmz33xK/PndI2NjwG2MNzQwDUSqwWYjABnrk+OGhUgwAsWLlu8cDmL7fnDh/YfOLjvdE8vYhSOHDoKcIYK7yTTosaqi8tEOqAzOBx7Glt+vzsaGd2zd8fCrq5sngzyOB7/QFjL7/W9I4JRKBJ5pj4XeH6pJamASSHnLDwDBgOQkqYqXl2l6lvhQENt8OqFMz596bwFjcHYWJRiTmW1L5p9YfvJf3zundMnBlymLrl1Q9fcXqoTio6aOvWVg+sFkQJeR6ZejYiJHZ9E4SV2uicJtNGQJERQ1gS8CO1J4DdgRGxLES6cJEQXLIpeJE9ZBfZk08R9SE3h2m52ZGs0hapjGQBEqqmTsoVn5HLkiATFI1VVmX4f3l2B8UVyy8EpH0GmUlkqomLl8PzkeCYe0yIj2BZ2smEPz08+9DkL2/mANfLx21aZHi2eMgxIRQXJEsnbMJLstqIW80/96g13y7LG2csSmZSMV2BHHuOa9L9sMlbf0lnfseS536z/yu+3+3yU1M6hy6zHKwXZQNLTu2/oPPjQztFUXpZxeXrlQkdh' $Logo &= 'yJl8PoQZUtSUrDRnOpH8QpwXMdgiuKE00UTtCdBl1BNCrcyz+ThM1WPEBtLtmFhotlYhV1JPEF8QesqXM73mMFQnMZrQA4Skj+0z4pyCfOMuW7e9C/MqjudVbGdN1TRyxcYjI7EYYk7xmNPnIpV+DSKjMB4Hl0I2MDwyv8uSMLxBUQNLxn2RAtW5CHg6SFCBGbzMoL1MobMljenM+WsqmnhSwVR03vMhwV9iBMBQymT/1pWJ9Mune3vg73jJShrTGbPab7/ttocfenjfwWMLFy/Q00PBsV6Izm4NbEElQVekAYZqzFIDnukcG2Wm+DS4oCpSSTW9A2NxhFxV1wRWrVw1s202vNcHh04nUlF2Z2Q7ikqnk2yl0XCLMN+x0QhSRgqvJfvV8j+RVhlsCccDrWhra166fPFdd92z5vKrZ7XOxGHIbdw/0F9VHaSiQFOax3BXfo2MRsJVtSuWX7pipeQzvdlM+u13Nr2x4bWXXnolEom2zZwBkk3exqpGdJpDaiRmb1ybMouK6HAkzhZVUlPcso5JUsgL+Mt2b9O1PIhpPFOKp9mCbYfbutwZnAICwWUcyi7wBp+nq6F6ZWvt9z57fWUPQTOA2fbHky/v7nno5e2nuwd9zSG8C4mHRgfPYKdWOOmBO6GrlFuFEoBiiEDozeqgz2+SLpG3aD+fwmUKLQrXD/sMVdGGYpkCsQrinJbQCC2L0AZmiorfG/R7yF4mMu+qxFeoTBI2XKXhaAovFC8bi0roKCKo3kqlUdLACHns2srscPvy8y+7PjKNaN97m51HXVYnJDEIBGrelVM0t1zmvNvguQUKWbeDHFXQb4y/OxId+9j1MxbMqBmOp926h37UyTmD9BSZhPSg3/3Yk8+cGE1fdsuVyJFKC4SpDE8H8a+sFqSxZLq565LNLxz65TPPfvrTnxIE0S75KzNOr0vJgqs+XPPg1c3/+PgJKRhWSphIEtvgLU55UZSsvCLR+tNUW/+wM4iUFOE+' $Logo &= 'IqKVUP4W6gjkJ5Gd0MX9ZBsQ+yNwtu8jR47A+9bgdkagydkpYiYgmEJuwMACPTN1w6nrLqwXuCboAAnv024iR7dAvWSuqYtPt2GCiJ07cBLsEEVzUZARyhaIvjCFC3fuAswz3JDFC/mGwVfQ4enExvInnYsLAvWCswkeDbIvF8Dn+c/BPZaL6vy/9ebGrk5yZMdg2jCXogBsZOdzW0pgRiVPP9UpmhhGiMsFhdiqwnkd+OKqYDAfiqGea6XAiZCZgpbh6oe6YRw/fuLFF1+oq6ldsmT5skUrgAtFIrGHHn4I9Zs9hhxSXcixEBmMDacYA5VoAUgEwrLZXlErN9i24exRwRIgXcFRyu/zyroJvCRXyK1ateK+++6/9ZY7OVVD5uWXX37l5V/rulJtVovyXjbwJSsiAyTGDkqN3+fPcTJORxYSy6MqUNVQ32iYRri6ekbbjIamhpWrLgn7w85TNzU2HT5yeP+BPbgYSC+4qWVx94ghQYzG6Fvjkejy5auQhSWVzQQBark9IocjMt53zpsbrq7d8MZ6RM6TvuzzsAiLJ+VPWcNKpzFhj6aRVH4McYjJnBL0KpoCokOEFVdi6SaRzpmStLAxfOkVCzsawsRCOZhU59xfoOwMv8omx53UeY1PrFk86Q1WEyybe+3Q0X95aduxnjGXF7ClWeaRx8PwPC7jBQ8lcjDCugwFZvkFDTUzq/0dNZ5kobSzN3ZqODpeKATgLkwSMRk882A8VGJSrQ96ESeTyEVTMKxRThZqXLVJIc4nhF6J8GzbB9p2LKcvODqVQc7jTDKVxzs0dBn7iaixgoa4GMiHuCmYGgi4q5SGAYIiFj8aDTJspWRnRwxwE6WmsfRBh7GpKjKy9Shy2aIJALoGs7zFHFj49ymjieQVs923r5mPoVAJpHL4E7HwPKZrVfDA7u0vrN8558p7YlZphjcbqg3QxZlnOx4rklzIwntcDjTddVtyaB8MPIZhir45Ir+on4iA8ZXL' $Logo &= 'F647MfbslgFfoF4uREgbp+5xDj1OMoFuIFIVvRRKpVOTii0cmuCpSPl86NAhUHkQShbhLdFnXE04wgk3a1BGpzylkzAfn04eM7EBsR2niNQvldVt8SmALIj2oL+46XQs5HwAh2bL9viI/peYS537LPQHLBP5GZEBCM7rokCGwAzApcV1wBhEETZAUqLObmUt3qk6k3hMwTvBiUEWBFooTsSGOAy/AlVDcC4MKl/72tcq+Zzw6mYGabfK1PfTb87plQqoeCMfElPBOLLnIamFsBDQFufAh2izceP6bDb5h1/66upVa+pqGz71qU+hgvYzTz+fBRbf0lgsa0bQUHwlQk64vb8thTcYlSYA3dI80ENi0UhDfc09997z2Qe/hJ8PH0a508NPPP7k9u27lyxbiAhCyhJhFZzBTaXI5IuCwbfeevOKlatGR8cszq9gqyoceQ+OMnvWbHCtcLjubA9+8NC+7/w/34b1Hmi/PxhANB+xVVnGEBiaCokeNSf+6Ctf65o/FyYNONqMplK0yjnH38qlq0NVVTjxmaefi8RjwVAQXkEC9MC0ElH36IyJCaUbw/HUWCxJIJuskFmbPTs5mTFZGhD6Dh5w2Zzmb961pjkcOKeODcec7Nm8l7afGDp2tN/VVFNT5YFLOKEcHNBToixS5APkU6SmtvqO5nCd11zeWrdiZt0lnc17uvv+/PG3sdhjOQs8WGLqAjpQIGUStmMNxhKvqXp1qcjRrWR6YVwRMIEtJ2oqEENEPHD9M9uUAnER2CIMwygKubdvFDqQbmqGrpB3FPuGgeRimpm6goqTYUq6RRXg0KgExUejLVy4cCq4L0qJgOvzigXxLSv80MGAT4NMStlolDIGSbY42odMU3AgrPeUPnfrSiuTsjBqlRIllzXzeLxAQn7ws2cDHZcZwcaQMvapaxZjBnJ6C7qMU/WIw4sV6BO6uiptLYHxaaL2hk07KuXlRDz+wM3LD514+chYNKBLZQvMy8Ks' $Logo &= 'AFZLXneS5VGkqmCAE5NATLbxCQc8oeXKFc/+/u//HjAgHOFAJfkY8YpLAl8SBdjRf2EvEUBWZQbfSVm5BPo0NdevCHvcunUrErAL2jd9dzI0xyVyOtEYTv0rJCrdvHnzG2+8sXbtWmhIYhzx7I6/coEZoChz4LgaT2UqDuEW4JvDR53RcB5ZeJdhJJ955hnE9oKxTWKfTsJjZwDLFW36royC/TtRdE5auQ8L/iK4SBa3RwyjXeqRS6iimsimTW+vve4mMBVAPbNnzb1szZXPP/si4uoxjZB5bsmSpYsXLypi5KHr5AvvPw/YFSYcCg0ODmzfvgP2OtgSYtH4patXLli4IJqMVfmCIyPDTzz9+KEjB+vqKB0kQ2V5iVewounYgLMvJi900o7OuUuXro6MjpcEeCLqgHO8zOz22e87KOBVmF0cC50nCIIL6YuMyYCJMmmwLmn/vr2bN725ctklwVBobHxUKokQRFroAX8Qkbe6sIOVBQDInuCcVwZ9FvOBfB/SOQtzy2cS55MmYh4lCRv0SbEosqFpCWT3K6iy5jn7qzINr3lmBtkXPR3JuNyA80rgIYSwMXkgJ02pNBZPq5K8dsHML61btnRGbZ4Kw+XDQVxK6o1kd57qz1r5gNegNGITjhu5TA7ImxRwazIpcCGPrIsRdnwxeAER5uLzgqloZcvn0aiYLfAgTcVsqEMNSr97+8H+jUf7SKPXDfIdz+fJ11xTMYQ40lC0oK4ZvPCEzxjEN9dHo8GEO1XgFfK1NZGSXRayLYRZX8jnMccj/FoJBeXweoZhkU7u89cv8ZuFgbjsc9PhFdVeRcCH6+FHHh0sVc2fc2kpOXjPutpULtM/mpaFtsf0yOYaRU2CFQtXJ3bOiR64QSstc6usZQvKBdTms3dc8n//12/SVlgjs0yRQ4NKIjsF4HsUJwWC73A4wSfwSXWDWJyfNWsWOAry5SD9Ow4TfMXGALk5sfEiA6boj0MfXRUxZ5VszyGa' $Logo &= 'gviKCEFULgDPvvbaa7Fz+mhPZWy/4x8Nm985CK6jrEAF+epXv/rNb34TShLy9ICvOKYRggRZZqKsOTlqTq/o7U3Jm2K/oopAejEOlYkgHY7yox/9aP78+UiBOtULQKh0AkASVT8uwMWOWCGR5IJQuZy7CxHEYXK/RaZCuWapDzmhQ7N6S21kaASJaJDvROPK4aFQ1eHDB7ZsedvtNcd6xmB96pwz5+7fu+faa9YmUnHy2s9b7+nohJIv8teLDRZdYOLzR2ORyy87+J//+Z+bNm9pbKw/evT425u3tDS3g6mgkuPqVat379x94MBBxKgrXje7eNnOjxIFYTARlyWQ9Sp/lWl6TFg5z7/BObiuprr7+GnEcWIdWaUcR3DahFM33eBqu3fs/I9///f774vcccfv1VXXOZxxaLjvN79++c2NbyHRfTAYEJISrzX2aeMoGehPcDEJ19QdiFvD0DAMTWKKQ392njjGwbIFRSu0VwdR2Z04ygW1rSdGDvRFXJqi2/OaeBtF80hyPJnx6dqK9sZPXdp5z/I2l6y7LLOQy5TZ53LX6bHhkYSC8BNdhT+0cF8mSUekSSiXgX1RKUlI4rIMLE/kqLaft0jxp5JGkMueU6Mv7O69aWF7Y30gn47poTA6sbN7+InNB7tPj/jDfhUovsgpaWfuIdXEZ8BnzCdRism8iwzTEhCJ2bNnX1y0dhlhjIAXpn8K8lEi8dfUiP2pCw9UzyRTapoXJ5MMVcN09LrNOr+GKFI8YKGYI/psWVnDnYkP3H/l/AVzGnoHh023l5Bau7yVbeH3eX2v/+bV9XsG2q9+MBfvvXU51LbgaDRJUVa2jiKLOk0skBGKSCoj+2rmmSk51VYcudipNNU/NtpW57v7ijk/feVw0BfkQBpkB7VgSdGsXLXXZwa8udGo0D80jQq6Q0U13YhaMhyNB+jQN77xDRQcRJE0UCW4xgpPLZETT3gbT5Kp7XPLZyoyK1wbBJXk41SFCm/D' $Logo &= 'vIHqI8gVj2eZfow9hWnnsjbhrmQbOflsfMW5stCHUEcL+eX+4R/+ASrXVVddJdA5l2xXlnRC2QmSZp3RUQbBmiuuiT125nWHadEDWrbmJwrQiKpfGElYoXBTB7JzRgwHwU0U1BjbMH4J/ItrRVOb/vzPU6x6Dm/K4eL8VmzlSdzrtx38WBJJvHVNZ3WbeAzGE76zCxYu/OIXv7B61SWkTScTP/7PHz70yE9bWmZg/s1sm/nAJz914w23NDU2J7NpiQX4sgN0CcGTaw6fcaOjU1+94tLDB4/u3rM3EPRv27Ebg1ZXU3fDzbcsnL9o/rx5I8OjsJIhBAncmjx3s1mC7jlRC/4EToJ0jRjxC+Mo8XRi9pw58As4euTE6Pg4bmFpqvPmQBPoRqHAyePd27a+C+oBrrls8coMgpU8ntHx4YP7dz/++GP79h+srq4OcT1jgZGX7Xmn0HiUS/W1tXVNrb/uP9kbidvvskiolEs3MO60UVJgrJa9pdaQp9Z/gRzl+ED/yfFYXzSpyHawsojYpw0aKKsx7F8yq/7SjgbE6Y1ERpSSZOgqkt7v2jfw6p4TZAdkNYIyDkpgQ7w6GKFiYqWJWBONsCCiZbwomTsyh1HyOdXUd/dFv/PK7pKsr+tq7B1JNtRqW06N/mTDnm1H+qCXGKYGzoHhsbU0y+IMPSWvoTdUebCAsshAXqKbojST6+IadGhU65v+8eATuOl0jMOcx8gEaYgnKFvwROUPSpeHYUJl7x3HxxSVlpOimgATs9Howtbqu9YugbchsjFy6lwNn052cLfhOXFgzyNPvVS1+M6crFzSoC1vD/eORCU06JqVblmCJLPF1QGRBNUTkqnDVCrwfaounOw5ve6SeUeP9m46HoddAJFBSjGvGoqVTTc2tmHJ47ITYe2qiBkU9gNc2amT+Dd/8zd/9md/hnTRqBECmQ+0AhSjMhdOZX74qfUQJxF0pxQj7ot74SJPPfUUXG+RzRfyxPQ5irhp' $Logo &= 'gdsUfzNG+M55upPrDNgXPsFXIIjceuuteLOg7KKTovPOgFdaZSqZCqaA2O8c7FzfqZ0FRo0aLc8++yzq9UI3ghUK+6eqKU6hgcqqjpZmnVcYJoDrHLdJBhtcHD35MOAvbiLnIjWQkWQiD5wUIDgcJNatvam+vuFU98nNWzbu2r2raJHYZHq0+QvmXr/2RlSpQlkqQoOYDAlqQ1+LlUyFLv/eDRBcRJfKy1YsW7lqxbEjx4N+byaXfuhnD3XMnlNXXQ8VfcHihfjp8MEjmO1QBaB8kkAm2B6HmNG1cIsLZbkY8Rkt7YsWLvcHXurp64F7EklqzGIVVcMtgIABWm5obgDadmD/oZ5T30GhFGJsVAOngPFJJuPgKEgZCVIOsEs4I8icRwDwCAJH8YyG24AEOBRPRRJpuSLGl/5YZICwRN63gK3UIs5zXVDmV8y4aC6fKFg04oJvWQWufKXyq5Hi2dxIJhcIBsAdgu4cV2BR9wwlHt10aP3B7iAMJppckgkrY4oPbsSlvzRVM/R0Lm2bEEl6lXKpnE6x0FKZozLLnN7W76OchrtODv7Li+/s7Z5R4zEHd55cf7Dn4OlR6L/BKg8sOgAHyeG8gLNkkUQA/dRVxW8CQWQYEF2VL1qA4qT3qNI6/eNByMAnpn88cNeenj4nPTuWv9DDwZbkt/YgMEUpg3mgjmkxJGc/f+eNhXSEcRV4S1s4S6gFQnBJZGM//PlzmfC8cFVznTJ63bJ5Q0MDhbIJpjCJhDmfDoETlgoR18gOJjZbEcu4xEylQLbIlOkefuC2NQf+/blYOmuosgofMDJB5ttnNuA49q+xi0uqmgKBHVwEO0QqEeEvBMv5P//zP8O4gvSday6/DNokYBwnKMSxZDj9nMRgpiJFwmyDc5Fr58033wz6A9BRgLPZovS0G5VO5ubw2kpmI02POeGmqHeCuLR//Md//Jd/+Rfgb4DiMSlBgsV1nAesRPMw5BWgfqky/YczFMKzGZ8o' $Logo &= 'mrJp41snTpwAV/6DP/gDETsyKfOK0I2gKon7Vg6aqLw2faaCdzcpfSQ2hCCOF/fh2FTsNNcCHQacCqUEgX633n7bF37/D+rqqIDMyRPHfvyjHx05fAQDcbq75847bv/DL32lqakVjw5jilJWBAvhsXVGQmxJZ9woZ7D4lNvvuAvP+a1//icEFWI039r41i+feQrqEVbcXXfcg9ja7373X6GvuN1QDwCCUdQ65+2xHfPLNlp1IZRIB4NS9Tlz5sIneP+BvdHxaF1DvaIpsM9LnDGMlXSXCcZO4XixE6dOFixSS9llC32Rq2uqkYUJGyLWhBYxJgpVMTJHhkfAimZ3zlq0YD5klO5IciyatIsAq0yvKUhThUiWASymKtW1geoqP72mC2puw43athkwFX4JNsLGChzYnc9UcgVr+7GBH725b21XUyKVzlrFw4Oxt48OvrjjWDmT02sDUFMEcucSig6hICVgIDPCAZ1ZLazN8xpDv2kMZ+Hsh0EhawFjdwwN6IYOMjUeT63fewp5JxuD3v5IYjiShAkiAFuD6sqnMyCirN/AndoQCwirGSQ2CKaiyJyWymapF6+poKDeeXl5TYepOOZT+NcKgisEfHLiUBTErjc3N1VXBcbiWVXW8yDneeuzD66b1eTt7knohhvzKpvlMpETQYawjj/3zC8PjKutV1zjK8YeWNNsZRMRy+1WOITWEZeEsDYh9E0gYYwqUyYEAmbYsbgElEV4FouuFi3KJQkYdzSRaW9r/MO7L/+Xn75QKldBM4HeXR10z2ithxUa3eF3LgwqRRGeUvngAuyChek73/nOY2hPPL5p06aOWbPmzOmqb6gHkQJ7cPgc2hk9oxzUSHhVgciiMgESwuMrlIMHP/0ZYbLGkecXsi6Rmu0obQ7Tnb5c73BB+GV897vfBTb1zLPPbHjzTfAVBLLAGYdMuQy5i4hRh21U1pyV5Ape4nIUFMr3DBdqxOWc7j49d+5cME5gqqKHZwxm' $Logo &= 'xH6hBVaqF7bGc14uxdw4sbskZBDHcfzDCn7kJoAvTDJR7XxWe/s9d9/X1dEFD5N0OrFp01sH9x9CEF51dVhTtLvvum/RomVYukVywqcIDMFR7OQcsvClFVMSO5nyq5UbJMuDGIWCVWvXXr//0P7XXnt1sH8QOVBe+fXLKMV42813zp0774brb+nt6/3Zo48ODgzNaG/jWGxLVOfVDE04xlwoT3EhhJDNKoFrrrkWzPLE8ZM+vw+syzZtsVQCJpHlOIAGJIBtaXIEkDKtWJaDJBl2CIkohEYPx6nHsmXQtSim4x233XbtVdfErdLIKPyJs1q131ancaJVZBFXpqQmulpf7Q/4/BdMUwMe34xQoNZrDI2zbCKcfTE60DnIE1pD1f4TfWPffn7ziztqYD8fyuR2dw9lxhK4dbAuBE7CnJ5RKU1nhIoko+aq4BL4kqEafxF0IHXDnIYD3c3Pbj8GNzlT1W2EzUW3gwHG0DQ95E8nM0PjiaFIiiJ4/R7EXeIhs+SmwAejYYNbiavseAy12uc2FAoXra2rdX0QjWr5nU8DEAGyOP0Y6eqaGlVTMbiargFIBGRkWfiz6urMrln1G7cc1DzuSGx87bLOxe0Nhw8cyFKVErAUBBMTAGgoHNWmGaiR/uudpxtW3imlRi7rUAqJ8YPDoxBrMUl4JuC1lLkKgSpuLbgImycxd0hfdxQF4boqArYYirEb+YRoJD0djI/Pbmm4clH7+u0nXUGfKxObPaMjFKwdGurnjN6SCE4rWcS1aqtrKnUjB0+DfP3ggw/ecMMNKGUIj6lXXn4Zt8bohdGgsnu9sLM6qlil0Vig6wluKDsGvQ0XBBe58/Y7br7l5jmdcwQzwM7zdZzFBaGZioi0Iv+zDV2yhIh6dOIcRump+h/savDxRSUVuGZt2LABuDdCv+vr6sFloZ5CdwF7OWPGUqeYIzvQ5jAD8YyIUwHxBC0FO/nMf//v8KMDA66sBDOpkiMaUr2hjIXw' $Logo &= 'enB6LkDX6QcFo2PDg0PoCnLhuITShknCns24COSnD8NQ7/hlyPyJgnkzWmfcdOONHW0zhVfGLx575GeP/Qxkr6+vv66j895775kzt1PgAAg+R+OYI+bhRYFgAOWwab29IZ1hAwejgqwv4P/Cg1+KReJPnHwsHKpGFcW3N7+9dNGSWR3tcPO9795P9nT3/PwXj8LfjEAi0yQzFATvAgsmDKRMtd1xcm87F+m5JZRQKHznXfdufvvtbVt3y8oAhM1gOGjh8vkcR+br7EpicSH1guBfdv48oQ1MlDrmPKCq7tFRI2B8dHxwYHjmzBk33HCrXtVoRZLp4QjSFLt9JoDecjZLZ5FvsQrWwhH4ilvXLuYNg4PPrg60Bn0DownqJKNexCE4RR/EP8MEwgF3cWt/9+hxLQqBGSvPF3KrBpG4MudRmBhJ5hOMLIS9ZldDyK9pebgS6MoVXQ2v7u9+Zn3GQrEmt65AQiQ/b9a9IARhE2gZ8D+vTvnFFFmXSU9KxLPQUVBn2cXkDwdT4lFZKZqaS0+GPFpdFYiR5kf92g+ooWzf+Xp5ndfxNdBQA36BJAiEAWRUWH2XL134zrYDVtkyVNfBfVu+8uZziOXAuwZxL3Gor53JW1ZKZaqlHVxyixmsTvYdfvbpzQ9FBiRyaCffMVmkwsPhrJmUK8rpcTpO0tGhGjvQUllmKY3nJ9QVESqJJmJcWPqyVFPRgzMl2aORKaywfMlC4S4hsxwsUonE0lEE3ADUPbPQyQ3BgPAEg9EeYY8HufWgnT4NSgrOcUZlBRcXiUNATJYuXYrSNYhUh4KIr1Pr406/4YKg2o8//rgJNIm1HOdSgD2QuQvRCKLn09dXcDrgUJRrBPvcvXs30Lmj3PC6xdOdW+ZAE/m7wJ/AS6D9wIKACwp1SkSqnq26F86Kx+JvrH8DLGQSYIi7X3bZZbA/va/cI4YFHBGvA/xMuDDwfrt6MUZeHPnbTigJsZtECQ1ikqLgPS1buvym' $Logo &= 'G29ubmkVXQHNPbjv2MKlXRDN6uprr77mKkyIkiDfgC24h0EPDFFepyLK2ZE21MjKFF0slZTAHvLhUBgeXLM7OyHNeH3uY4cTB/YdGB0ZGhwemNHc3t4+a9HiJQ//7Kfon0bznsOIGEklGEqRLqAwhtOg0kKMqwvXfuWPvpqKxze99dZhxHm1t3vgyiMiNkgAkWUR0WmrtHbaYzt+nkP9cYBYw9FIDMDXQN/I6kuX/+VffPOSleTgMBBJAG5yGZpuUOJYkAL2Klb5suTDG3QbDT63qamuC21uTf295bM3HT69deeRpFQ2dU3G1STmD7IiSuDIbqOkIGuklYDFGHeX4DScL8VzkteoDbg5WFoS2JfQmml2mnoD7C0aBe6AQYDFXrug9fVlszfvOj5+ajjQWqOTCYmMMexZYrksqkOoe8jmj1CN8UgCaUqrwwGvx4xm84pEYjMIsOwiZlpgxlYdcHc2AGJzfYANhOC8jr/88svPK5kxoCtI2SCp+MSihWwuKAWWcVdHW1tL/dG+iGkoPeNSTmlW/IbOuYop+ami2jRcUTHgAX+gqrq2mEmagZp041Jf22qN1p/CqgUJ+7bdXbJXFLtagTMJS4mF/zvJuPBNYnyGUBrO7IXDOG9JHoY9kUtSQehSQqmrDSFj9oyG6nlzZqWS45JKua/ViZSOkG1ntrWBAk5FoiZJ1iB8i7kJ82SSGwRhkL9JVbYwPiCXoHSQkd3cnCs7PODCkmvhyqj7edttt4maNE6wiAgwBPMDFT4vduWY7kUu0XXcQIjj3PB02K48eCpTESltgtzwvPjqTBun9NbZHge9/drXv3b3PXcLOFHcwtH24DCGMT/H4ziqHtjGt7/9bXRVfHUu5VTO/zC8v7j+PCRs5AqhHNQYC4zg9u07ddMb8JMosXTJUkRBQseEq2E6m9741lv1dc2trTMxzBDXFS5Lls6XE8UcVAiSlSbiEKk5wcPslufV1SpE0Qt3Q/uo8tDoUPfp' $Logo &= 'U2Bp2UyuKuybM6czFKqG1pLOZ2OxyJGjh1WFkt5JhNDkFbbVE11mqn/uWhrvk1lBtgd65fLV3/zv/9cPf/wfL730EooNYzC8fpB5E2tXwAdWOcdeZ6qVJ59O3lbIfoSFzAZmcMc0zA7JtNt0z5nX/uUvf/WO2+7MpBJDo2P7+8fzGCJdRVwp+zOwT20Bse7ktlvOFQAThU1dQp8vtHFJDwmJ53++5eDweBo57WEbtwsxgKCAwGO4NM0wFTA2qgwNNlAo+lXVpytFWUrmKV27HVWAY8miRKE4g+OJ3T3DnQ2+No9vLJZBUs7OhtB/u2mZkS+8seNYKpEp+kyDLyWLFJnQ5xSVtC+rANEB3g61deHlXc3RRGbzvm6oY16fWspTaEshncunsq5UVte1kNck5O2Da0Aezut4hGKcV651YYbZt3efSMIoXGM5H2sBosFVl19y9OfPgpBWB2ssPSSpXgP2J+LqquArzO8VgrlkBem11XJRMz31XSsM8B0FqiOlaDKxRZNeVTUymzgpuawS6Xu5LFlhs5Yrz8iSRfkPGAcT4evFLKGzwsKXz2Ab37DEVexwJRUpI+WSV152MzBHlEVGR8DfnFhrQHTvOxpOdJ5DyAxu0G+mz5grgTXXRbQ2blP3T7WZn1ciyEp3L5NbXV3dBXTPYXXvO6NEa+f2vhE2aOdQJcHV4EnxviVtfvsJJUl+shEweEEcP3EC7oP19U0d7bMjiSjiTlH99Ec//jEMf0je+fBDj3bO6gJTKXNdDF0mO/3m4/3P7e0dTGTcmlTj1TkbGD8DV7KG71bKKgFjXDen+Wu3XgYRWCBUXKJ55Ic/+N62d7eAHEfGoi2tTWsuv7S5pc3nCYyMjvz4R//+yssvqoqOCsFUf3BiKoMT8jDTl6kImBA33ndaV865jtldX/v6nzS2tPzskUdOnexOn+itb4Afv0cA6BDDbVdmhdJqC91FFg4H6Uw0GkdYPnIS19QHb7jphnXrblx7' $Logo &= '9XVk8JfKA8nMzpPw6Im4RuMRHeykovgbzi8UsT/npmqSSbIEVLkuqIlZcuWc1r+8bc3fPb05crgvUqoBnfCCi+CmmipRjhx0NYc/wp0Taa2x5oZls+9b1blp1/F/e3Kjy9QRm8lMmjuGY6Kp4/HUY4Z84+KZsu4ryxmkNQhq6tLWqruvnHcslurpHkqlsjk/vRfTCwRCAyCfz+Qh7ZKDdSQ+f1nHF69eAlvqExv2WqMxy9ByWQ9dGSyWOEqOij8Xi/YdP6AGeYiiu6fbJmOk01z8LU3NkL0gf0BZAVmXVYkCzSQlGk+uWbnw9Q3rTw4BATeL6ahLh2neJIVAsaQSc19wGFWDAiETE9EIypKLhRxyo8kuQ1XxM0JvKTYR2qQKXi+YvdA+qOIAl6YAMyG+AVtCngqRAs+k2hAFfFBmUTB1PrqAecVfs5jA6ULeo+Gk9IzG0KUrF8cTSWCjpmQnDQMng7UD9AgS8XSoMM46owPx2YhdpQHjIhlJZffK3M5hLDkvNWXq9tSnq7z11Md0th3cz9lTufG+FH/Sxac5bpWq5NRncUCwDyf3V5mUadalcwWoI55s/8DJEycefuQn7bPaZ8xsD/mrbrrllvUb18MRq79vEHP6pw//V31T/dKlKzHpo9ExxVA7G0O5HSefXb8T4pO3NpjnVLiSLUcrGVCQaLK2JXzP8tnYX/lsL7/ywi9+/vPRsRGvzx+JDD9w/QO///t/BMqNn1577ZWfP/royVPds2d3qnaZZvowTF1wQCgKZzPUT3/4hKaPAsMoVg+XNqQ4O3r4yP79+/oH+5OpBMBiuGPItquPTHmTFHJ0K1CJdRIKIPtXh4Pz586tqa4FhHrlNVevvmSNJqnDQ0Nen16iCA+tc2Z9X9BbG/ah844Cx5VgrBGve2lH49ymsFouXWRx1qDH/NK1Sz2q9JM39x4fTg7HUrF4kuwtBLbI4iDD7+moCzcHPVfMbbp8fst1XTN9ZdfPN+6Hvac6' $Logo &= '5GMPBdto5Gq0hhJJfBlPM1ivSIBSAM63hDyfuGoBjArPvXv48EDkQN9IJpLMoFaYgO/yFjKPzW2rnb2q4/NXzLu8sxWFCHcdqx1JZMFdfEDG2G8Y+opUKEYsqw22/VTaUMuKQad/IP7EMIBP/3h4+BCyfz5NGFHmdnUhpwhSKijcGNAnmALm6ltvXPfdHz+qezyUoa5scRpHieOjebXjn50n2iYAFXkKZDu7BQkwHCnF34TnmYvYTlkulrlcA3F+0Z+Ky/Cl2Lzpoj/aJHyAE7rpistQMPKFG9ddi9fX358ANxWYjNA24HcDMwCk8um7Tk2PYvL+3067MOgM7eKfDl8/8MesTLTzgY+Js/NDYyqcG4AtCEBlockixvU3r7/S2Nz4V3/+N3pVVXVd3Sc++clf/OwX+/bubZs1Y8PGDQ0NjW0zZtXV1luUlrXU2Vj3tXXL9p8eePdwfypN2LrkshPhQZxy4U/V/vCaZV+8fqVUwYNfe+OVp375RCYLq7gER4slyxbfcvPt1aFa0PGXXvnVY0/8AjlUmltaQtWhbDrFudZVgdKyowtzLekDmDQOb0fp389+5guIRd29d9eGjeu7u0/v3b0XJS6wuO0VK4rcMU/QDb2mNlxTHYJv5YoVqxYuWNTaMhMIIITlYoFBHqtU7davmttcFfImM7lqXWUjuGNdlxBiOhzPzKoLrmirDZoX5U4rGIHHUL+0bsWlHfU/2nh4Z//YicGIapVEnB2lzfcbXa21a2Y1r5vbuqjBh1wA+Kmuxv+FW1f4TB3lhCHXVrJk6CFgpG5VGo7G8PwY8nTegvmoJhT4zOXzL+toeP3A6Se3HeoZjacyBcrCiSMMbU5r3bVdTR9bNmN2fTAylqwy1euWz+qYWae7yj4VJNHpMBVlWVgfSKaSBUMJGh+M+zzIIrxuXL/9BuQaTAUGSJhkCQdTFIvTPYyPDF9xycq3t2zfuv+kx/Sm8hl6MQzWkh8yrzHOOVmSFKqh' $Logo &= 'whRfGLdlVuyFYUux/8m2P25JYE0i55iEJnjJRKhdkasX8ydporgatqkqJTCxAj7x59bLhUx0SVf7VZevHB2hIRK8UESoINIb5pBFixZVUKXftd+1i0p9L8PdHpTE5PILGuG5vt6evp07dq7f+Oolqy+fO3seDNqHDhzctXu7QtEVeeRQWb/h1SuuutbvC2YIuinNa6r+23uu+uYv3tyx56R3Vr0i0aXApSLjCa/PXL2k/crFszT5PaQTgSlvbtgIb/fu7t7W1hlf+sKXVq9axUHO+oF9Bzes39Dc1OjxecnDSDdgUJE4QoQiRTl6XVLZ++uDbgATAP3dccvdWHSWRZVcx0aH4/GYSF4N3qabBhLEVIdr/FBGdC5aoKrwVYODCNgJiARncaCS+qYidVV7WsMmFrtaYlRUoUcoc7UcXA5GV1NRAqbaWH9hDrWVUF5JcLvOpro/vtGXyhdhYMde/k2UlNQg3qouK2xKiI8hCdYVb/Krn1w5S9EUst0Xy3YKNR5bHCBZsB/qIElCwxAxRlCwVE1vrfZf01W3sDlgGl7hw8/e3rhMSZOsgKGkk1ncIeTVLmsLLW8I4M0rCg0Lg2yS8DV3qzLuSFVg/7/ThEUB+g20HJjrgbZjStBenpMFYFLZ5AMfv/vgP/1btlDUFRhOYDoxCCkGD6HkzDwEONp2meRPbpUypfjn4i2xy9lm1y4heDL0j8Y2ML4O60FFscfmORh0Dfy+mPG71Qfuv8fKpigSgptTxQRxeSjsAd9Z8R4vCnb/XfsdUxFRF5xxwYIlAF9JQlJUeKAjd8L3v/89UzMbb7oNNPQzn3oQZRA3btyMOXfy1Knvfe974XDNurU3pmGhTmfhvXDzko5t3SM7uocL8YzkNQyPSeUOk9n2hW1/cc8Va+c1w5ibyuaRmh0uws89//TLr7wUiyXh+dfQUL127bV33XE3XAMw4199/TdPPf0k5NzWVnKDgQkcn+glF1UtgSCC7ZH31zQw' $Logo &= '3/NFNlioJ93MXW+CYTg/ISkM1q+oV0qR5u+tuZJMpwB0c14EEQDFWXeLhItX+/RmTRGlnQyqSF+m3D7sey1xZUrZ7b+YyuqVXwVVcRtGR71xljOsfAbVTQpUNEzGwKb9utbUEqa4x8qgH3Z9lUmGRpQqIHsQRN6Lxsn8VTyLps1prptjl4iobEVQ1WQWUyCPedSIoIf/45oguKtXr4bXKVAj0GI42+iaRnZySRuLxtpmzPjsPTf9+389ZXrCMHmQUqbIGGSJFyJFk0qiQC+5RZBRsuTi2CL8YzmJNygiVegk9J/4k/AnEuKz1iyLAEhiJ0V8UmFHDnC3YJeRStikkyDDADBGMvD7Pn13R1tjb/dpx2NNqCl4BKjXeJzfqSm/ax8Q/FUsIeKGJRQKcnNMOlXh4PDg8Nub3nl79eZLLrnUssqrVq35xH2f2rvnANDaXC67fduOt958c8XyFVT9RbNvcf2yji1H+t5451C8YHnBD2Jprdp307L2tV3NMIv0IbxLVcBUtr679bvf/153T/fMma3wzr7p5hvv/+QnvT5K/L7xrQ1//7/+btfuHa1tjbkcGSZt0inyWlEBdUvXVBLDivTxwSkrDJdjmRkm5HGkvIQQDSaDRUwZetnNS5TizWUKk5iKz+NFkDBRC5nz0MiIIKt1fsVP6KhOxmwTXw3V/Vukd5x90CpZ4HPZfFYiJsAjpBC8T05zCtgdayRkuVJg/RrL5ESyA9pZuVFi+icUFIm/8nUc0RpDBWKaSIwjvK++pt4B9jQzGDJd/wc3oayAl8CnFmEx119/vaDRTqZFmHauu27Nse7+53+zxR+oSeXypJtSXXilxO8DG9BdFHyFwkIxjQQM0jY+KU+2UDN4g14AIWR8WLlksxaZ/jibuKi6IvzsixZWM4UWk7mRDSqaVPRprmR08Nar19x8w9qBvlPoJi7hRHWAwezbtw/mQPjgCgXl/2XvWqCbKvP8Te5NbpImafqkpZTWAgXK' $Logo &= 'UwqCQqkgQ2GWijCWx05FLNTHiKCz7OB4juPuzDg+OLM4Hkb2eHY4ux4FV0flNaAMVFcRKSCgSKEtfUgLSdO0Tdo8mvf+vu9jY5YcmZYpFOr3O+Fye7n39tLTL7/8X7+f8HeCg5MKFCagNn/xYrMM42xq+OwlrSxExrELhtfO4JZ/3xyfYHx49eM4GWJfBTOnf/zxJ+ZLFpQ69ny4Jysn56EVq6jiZKdBb5yWmbJw8vBDNU1uh6sLk9Vd7tIFk56aPQYyLN4wJt5kSVbV1J/b/9e9LWYLlgj9DQ9MmTIV8vLE0vns6df/tOXL41/C0tdrcHd22aO6L0jNH5mxFkuHKAk6g9bj8+A5ry1fdPUBIlkjY0W6vG78NIg0EtX5YcXPZFOSEAPW2I7t9/0TvPxMhmud7+t9QCaJEv128de7gKmhEH6owJg0VAIxAIj2fwzcSZLExA3R64uJpbKVJW3t9mNf1mDqz+0DBPRzCZjsoX0PiDiw0IjssyQFqUNfCK+wkvQN4y8SboTBG6KgwJk4QComVDsI7BLENkzC3QBetIMYeVra84VXkA3ck3hHGdSrFf7O1jsnjHiotMRqacZnQVHU4J9wniAQ7Uhk8PDM+I8IfQUOTioZGUOWLPvpzBYLJEtRfA4QEMkHGfv+IDJbVqsFWSn0R+HknGHD1zy+rrPTuaP5A4wtnjr59fZtb40eOWr02LEhmgXCZ/aSqaMuOj3/9t7nXRds2WOzfjp15ODE5FabFW2QRoMeWYLdu3a+te1NZNPRiZuSPPInZRjSXypQYMJo+LDc8vJHIDwF9WLMsSIuIdE+tXjBU+FytPBi9WYOycgdPtLV7Y7T6K6ZSK4yRoQmZiznoCTjSx9KJX7iTDXINEi4JsCJUhgo4EAswoIVzPTNmzdv27ZtbNSOjUzT31ilsxOCpB1PPrHyxZdeO17TGGccFERqmcwMERE4nEMdy0XsQdEghLQqvqYm8xIljOiIRGDe5pRaCJfQ' $Logo &= 'MryXKNHi5cMr7KOZLpwQJCfR4IXplKo8nZZxw4asfWRlt8vR7e5CZhvnUcE64kaFgc3Tp08vWrQIw3q9EnPk4JCuUlBBw+6TT66nZoyKSFqdVf0UFOh/J87JFMjq4LWg+N66hvPwh4fgDzo4N2/5A/qAp08vbGuzoSRo0mo3zM0//XXjZ4HQunn5Q5NM7k6kkpTGeB3ildras0c+/6Lpghl6i1hCELpf+8R6mPuyPpbxYyeOHTNBDXFfBWMCJsROUi6XS5R0I1PfEGTtkFMSrgMYCUEkgEmHQk4G6SAirHTDEZlt5rjZaioM0NZFZQUGgkVFRUy1CdSAMUTQQ4etIzlZ/OX6Rzf+ceuJry4Y9KkevxskAstUpA5JPEniDvAELFgkWKVACsgTUsoBRZxalHzwVVWIgDLA5HjBR/6QCK0dZF99XmqijUvwDRFTM8uVoKAKoQmNmE5qVKSH2GOzTRyT9fM1/4hf4dZ2u5quYkXUADYeG/V5+FP1XcspByeVcJi1xcesm6gj6isvL16wEJJcmzb9nghB+L2HPj28qPgnErGLJklhAGJWP8ofkZeTtjB/RKqByB5jLaUkJINU3njrjZq6msQkk81qGzUq9545hVA0iIhr/j99G/GK57kSPWeUSAZZ6C1omw1hFw35HCrcWIDZhZsVHJEuqcWLF7/88svHjh3DuzOTswQXMAtFTBRCg/WZteVbtr770aHTKmOSFFB6ibAw9UBFJgyMoGCjx7SyEgxRZTtBCQ9JL/JhNK657AUbwuqieS7sMul1QmAhBa2PEcVexCnkEjgMiZimtdtmzRixauUSv6fLYbPjYZg4bkQU5MSJE0jZ4eFjp7WvHRycVK6tym2IM8yf/+MjRw6dPHUSZXaky9CslZE5JG/seNRlMPIrSarFd+WBs1INugB0z0V1QrwBi+X9ne/t2LGzvd1mijd53C6sxtLSlbJad6PeAkK9GmyJTKYhMRhRFbthYDNsPHy5+Sv2' $Logo &= 'MCCBPSK8RtBnDPVAdLuw46iigF2s1lZ/XNfjDy9LH5L+7s4KhP1GrckDboAmMIlUJDpHoiJUpCTD9sTOR6kmvkZqFRiC9kdgC7YIYvSedeCFGP/QvmwFrguL1PsWNpQhrTIUcLWJAUfpfbPvKy5obzM7Oro0KgO1ArpcMgSjwJAKvZ3Qzoq0EfcdqXDwlmKK3nbijh83oWzVQ6/9sfvQ54eHZGbsP/CRrNNt2PDLoVnZyEqhvyvVoGU3d7p9GjWgeve9t//zv/5EHCB8REZ7wsSxc+4puiGMwqo1ToOBDo33HtG2232e3fq+qvtVGCVG36xHZaTrwUMcTBMIyrvLly+HjTHaFlBfQbyiBESRRQAYD3X6zy+eN31MdvZ/vLOr9ttLGsNgQaXtpnlmNqII0aawIOKFkgeZ3lGyrmEmZEo6ENmET1iJfTb7SAdKSLkRVKQGNUmYYvb4fI6LwzISHipZPC43s77R7A+4QFOwAoKSGFOjwhNCbAna9UuWLMG0Y+815xk4OKlcB8AUsqLik48//QRCkM5O99kzZ/Z9uOcfFiy8bWiOy9Glj9NJVFVJVEnI89rt7UePVJ75pgquqxgShKbWipWrMVYp3CiAURhrRtcq2E60/Mb3OdZdp7V3lXtGHg+g+9HH6VxJFHngYE8kNZk9eL8k0Knv1Hf6BXiwAcYrBQUFGObfvXs3SvfQBHN5iI89sSAgShAi5oKqz9cPycr49YbyPfs/3/vJSbvLozIm0+b4kDJMGvtDfkEUqTpxEH/Q+S1SMfzLTQFgGKrUgnBDEkAyAqzmJcgf08q9J4jJoPbmRFmYU3RH0dy7g6HuqroaUBT1siMS+CAupi5stbX+df/+OffMQSf0NfcQc3CQlXw9PsyeOHX8xZd+V3GgAqlkqOKbEhKe3vD08qUPQDgr3oiGMV2YhO3K89/WffDnd/57+/YzVVXwYjIY41aVlT++5ilZUgscfyuIjGY7ZxfmfwLxCQkYOIll' $Logo &= 'PsYiN7LyzxHRGWQ7sA48ePAgnKwGpaexeIWZEuI0ZvmuN5jS04dYWzsOHvzs6DeNDtjNGNIkfaKaCEiqw5Ia7jchmdg8CNinFteR4Xk/HWYR/AGi8uKTYJ4m+NF1bw13mA2yf3Le0KJZd6QkpmA8wOly4GoqlSRENOExzow5R0hxFxbMLCsriwm++xscPFLBTN+kiZPLyx6rra61tFzCurnQeKHy8OFpU6fpDDBKI4TBOqa+/vqrN958o8ViThuc7na6l9xfsnzJsp4wCmtG+8EiNtOtNxivOKG3qcs+ZBTe8BYb85WWlmKLeKVw1t2QMQevKCiY9wkSYp0Ou9PRkZKUUFoyZ+5sd+Wps0fPNFo66t1SnFqfoFInCqIiTqGRFHIYeyEVk6sk2S7krsIAJhs9AUgiuM3dnVbRZx9qkvMnjM6/fXRygqaj3XL2nBl5NyTFAmQG5jLhReooyHohQFlR+sDfaf/HwaHs+XrulQ8rtrm5wxctXpiUlNze1h6fEP/Rwf17/vKXQUmpyOR6Az5QQnVt1Yd7d9vb7NAqxtJKSIqfcPuk9MFZPSyVo7wvcFyVJAZSvQSMcitGKpE8ErbglZKSErjvQToP6SbGKEwPmLi9BbwgiGar9ZvzdaGws2j27f/82KJ1D8y6d0p6bnyn1lUdbv3K1XrO2XrO017rtZ/32eu7O+o8bbVuW63PfMrddNRrPqbsPDNUZy26PXXt0tm/WHHvnIJxIZ+z+lxdi9UN5R+aciMF/MiKxmNUVVVVVFQU31v84IoH8SR9GKNw8PRX36PFevHZXz27bdtbMGOoOddQUHjnr//1t5On3KHTxQV8/o0bf/fq5j/A+a2hril31LBV5WW/+PkzQg9AfREFJZPSG9DgiC0F3erZMLyDb926FUV71FpUshp6NiGKYIBaONIKfJD6NsKaxWQiuWLE+ohsOuwOc5fH4XS5PUSkyBtkls2SrFab1EqjXpeYCAUlo1FLvEfd1A7d' $Logo &= '091Ny1QiiVxD5M5MwBh/y7KM2x6trLRYLGhRQ14Ox/uBUTg4qfQ8jmHrf/s7b77yyu9bzDDWsmVkDh47fsyax9bdOXX68S8rN23atPfDvbflZDfU1c//cfH7f97Rq293q6R0ODipXGGOhODg9ddfx6jKtDunDc3KIi6NxAZbyUosQQqcFtEhAnMgSRUHyIIoSUS+FC8qSgwIZHCFuMP5vB6X04lGANwQR1WSJIrSd9PKgsgeA3eDlw+45NChQ+gbfri8fNz48TdXyouD11RiHRUjXLWg+L7z9XWvbd6skAQM+1YervzR7HMmk3HHzvcumpu0Wo35oiU/f9KyJff3kE4UN18thYMnvnpovce2eXl5zz333Pbt2ys+rhiSmQmTV/AFzA6AaMfZSOgAkkBAQ+RHcR8qBSai+0vwM1ohpSayRdMXHV8RpctWKwQ+dhM20oKDskaDIKbyyFeXLjXPmjV72bJlMEli/c03XcmKg6e/YnmFJKlEEcItmzZtrKg42NLSKsuamTNnYFT+iy++6OzswimSKK5fv/6xR9f29lsM4GCFw93tUZDP2io2gj4wQk8WDUQ6DrA9crTy7bffbmpqgu7kyNzRhFoocCY7jdEM+5KEJwLNkMHGi8qvhCMtKxhJwR7GGHFcDLPzo6lCBUgymAkmrbW1telpqUuXLr3rrruYfHKE8zip9Cc4qfR8sA4WKdXVVS+88MK+j/bljcnz+uDW6JIkFZwTEX0XFBb87NE1E8dP6vn9BzyvcLS0WZHgMUBxWtbEzIEOqIZjVD4OHDiwd99eh92Rk5MzYsQI1FFQXkF0QoIVIESI4f945Tt3H7rLNgAoKkjpgUQpjL1wOTVAEyVJguzKtw2NDQ0NaKKZP38+KigwprwFBoM4OKlEeCV2Uu+ljc+/+uorer0RcbhGo8bA2zenq++Ylv+b3z4/d1ZRr+48YHiFgw8bKShQ4cAUC/p622HtlZKSnXNb6qBUnVaHE5AWYwgz' $Logo &= 'RWJ6IYNASitXjiWxdjJswS6ebjcqN4iEMIaSlJBYWFiIvmH0CLD0GsuSCf0LDj78GMsZV788MqBX11j74ovP7961RxQVKSnJbW12gyFu1eryRx5do9fE/TBJhYPzSnTeCW/9lZWVqJ+fr6uDaBFClsGDM0zxCUiLofc3whwhigiFRI8xAqj5wycCJvktLS2Ozg7cGQHQjBkzpuRPBp3EakT2D69wcFKJRc8FpiK/97v27Xr+N//S1NwkKSW3y7NyxYM/W/OEzqBPS07rIaMMVFLh4BYskYFWVD7gyX3i5Ak0iTU2NMKjCJEHeAWZK2xlWQbBoETCrmYqxciVQa0S1r9Ic2EHh3B2VlbWmDGjJ0ycMHzYcI0sR8dGAkU/eM5zcFLpK15hp10yX/zgg3e3bNlyrrpmypRJT637p/tLllF9PIGTCgfHFZMioAqz2dzc3FxfX3/hwgVEHghBcNDrJSbfEUpgdXhwjdFoSE1NzczMzM7OxhZxCegn5s43PTg4qTDC6GFxxensfOaZp4+fPLZq9ep77p6bnXVbzxmlz0nF0mJJG5Qm3Ezg4IiujkQvAcw/IgpBLOJ0OhmvAGT4UZa1Wi2LYzDOAo6JXTi3joI9ByeV3vPK+zvesdqsxcWL4vUmrIO/qfHFvB37nFScXRgTcylVIizChOuDVrsNz89IEd2xifEJkRM4WttaBeKGTirGcRQu0hXoEonRekin0+q1epaf+WFGnGGKa6CEWMeKfpDz4uCkciNh77CZ8D7e3/B53U6XU0FdKcFdwUDQoDeoI7b24aDT7YQBjFIgRkdIaKtVWhz2eF1IQagUdPgM1wXC1FtPCHoD8YZ4SSM7uux+r1elVAkSLZwGw1TcPQRBDqOek4rgaLeRH7iogJ4ufi7YQUVar9PLmjjSau52iqIEiUWtRqfR6YUo8KglUhGJTmfFRjb9XIHn4Pjf9uqgCAAABgHQ+pd2JTxfUIKUAMBlBgCpAIBUAJAKAFIB' $Logo &= 'gAcIIS5QiH1PVwAAAABJRU5ErkJggg==' Local $bString = _WinAPI_Base64Decode($Logo) If @error Then Return SetError(1, 0, 0) $bString = Binary($bString) If $bSaveBinary Then Local Const $hFile = FileOpen($sSavePath & "\pspad4autoit.png", 18) If @error Then Return SetError(2, 0, $bString) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_Logo Func _Chip_Sound($bSaveBinary = False, $sSavePath = @ScriptDir) Local $Chip_Sound $Chip_Sound &= 'UFNJRAACAHwAABAAEAMAAQABAAAAAENvbW1vZG9yZSA2NAAAAAAAAAAAAAAAAAAAAAAAAAAAU/hyZW4gTHVuZCAoSmVmZikAAAAAAAAAAAAAAAAAAAAyMDA0IFZpcnV6L0NhbWVsb3QAAAAAAAAAAAAAAAAAAAAUAAAAAAAQTH0RTOoRTA0SrZaJkpWarS0oAykgCgUGBi8WCRIVGi0BAAAAAAAAAAABAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFic4S19ziqG61PAOLU5xlr3nE0J0qeAbWpviLHvOJ4XoUcE3tDfEV/WcTgnQo4JuaG6Ir+s5nBOhRgTc0NwQXtZyOCZCjAi4oLggvKzkcEyEGBBwQHBAeFjI4JgIMCAuAQEBAQEBAQEBAQECAgICAgICAwMDAwMEBAQEBQUFBgYGBwcICAkJCgoLDA0NDg8QERITFBUXGBobHR8gIiQnKSsuMTQ3Oj5BRUlOUldcYmhudXyDi5Ocpa+5xNDd6vj9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzRkAAAAAACAaAAAAAABlGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqKkPjfMRuSUQCqq9BheNexG9BxeNfBG5KRCNIxCtJBCNMhaNZxK5LRCNTxG5MRCNVhG5NRCNXRGiACDBEaIHIMERog6pAZ0+EZ05EZ1lEakCnQ8RqQSdEhGpAJ04EZ0TEZ1NEZ08ESAtEkxcFKX7SKX8SKkACQCNGNSiDiCpE6IHIKkTogAgqRNohfxohftgpftIpfxIog4gJRKiByAlEqIAICUSTAYSvTsR8OJMyhSp/506EZ0lEbwTEbmWGJ1jEbm2GJ0QEakAnSMRnRQRnTsRnSgRnSkRuTYZnScRuVYZnSYRqQOdEhHgANAZuRYZjRfU' $Chip_Sound &= 'ufYYKfCN8RG51hiNaBGpAI1vEb04EcnA8CO5dhidBtSdPxC5VhidBdSdPhCpCZ0E1L1NEZ1OEakAnTgRYLxiEbmwGZ0G1J0/ELmTGUyWEqn/nToRTEMTKR+dDhH+PBHITC4T8OrJ/fAhsGipA50SEamAnSURjHoRvBMRuTYZnScRuVYZnSYRrHoR/jwRyEwuEyl/nRMR/jwRyEwuE71mEZ0PEb0+EdAJIMoUvU0RnU4RvTkQhfu9OhCF/Lw8EbH7yfuwn8mwsE/JgLDFyWCwh50kEf48Eb0OEZ05Ecix+8n/0Aj+TxGpAJ08Eb0+EdAQvTgRyRDwJ8kg8C/JUPBKYEwtEr0PEfCVyQLwCJADTMoUTJYUTCEU/jwRyEwuE71iEZ0lEakAnTgRYLxiEbmTGZ1jEakAnTgRYN4PEb05EfDCvQ8R8BhMyhS8YhG5sBmdPxC5kxmdPhCpAJ04EWC9ZRFJAZ1lEai5exGdDxHeORFMyhTwEsn+8AmpAJ0+EchMOxSp/p06EakAnT4RTEUUyMmwkDeMehE46bCdYhGouXYZnTgRMAWpAJ0+Eax6EUw7FLw8EfA2qf+dOhGdPhG9ORCF+706EIX8vDwRsfvJ+7CiyWCwur0+EfAPqf6dOhGpAJ0/EKn/nT4QTMoUvVARhfu9URGF/LxPEbH7MBmoua0anTkQuccanToQTCYUsfudTxGoTGkUyMn/8PIpf51NEf5PEUxpFL1lEUkBnWURqLl7EZ1mESDKFL04EclA0BSpAJ0SEZ0oEZ0pEZ04Eb1iEZ09EWDeFBFMCBWpAZ07Eb0UEdDwvBMRufYYKQ+dFBG8YxG5DhfJ/vAfkAyYOPl2F51jEahM4hSdZxEp9509ELl2F51kEf5jEbwlETATvSYRGHmwGZ0mEb0nEXmTGZ0nEb1nESkI0Dq9JBEYfU4RfWQRhfuouU4QGH0mEY14EbmuEH0nEY15Eb0SEfAryQLwJJBirXgRnQDUrXkRnQHU' $Chip_Sound &= 'TDEWvSYRnQDUvWQRGH0nEZ0B1EwxFkz0FaT7uU8QOPlOEIX7ua8Q+a4Qhfy8PRG5kxlKaQCdIxG5sBnwCaiIRvxm+4gQ+f4SEaX7nVIRpfydUxFMMRa9KBEYfVIRnSgRvSkRfVMRnSkRrXgRGH0oEZ0A1K15EX0pEZ0B1L0jEd4jEdBPvD0RuZMZGGkBnSMR/hIRTDEWvSgROP1SEZ0oEb0pEf1TEZ0pEa14ERh9KBGdANSteRF9KRGdAdS9IxHeIxHQD7w9EbmTGRhpAZ0jEd4SEeAA0FisaBHwU7kOGNAbuSAYjXYRjRbUuUQY8ECNaBGouQ4YjXcRTI0WrGgR8C65IBgYbW8RjW8RuTIYbXYRjXYRjRbUuQ4YzXcRzncR0A25RBiNaBGouQ4YjXcRvBAR8F653hfQI7nqF508EJ0D1CnwnTsQnQLUuQIY8EOdEBGoud4XnRERTPAWvBAR8DG56hcYfTsQnTsQnQLUufYXfTwQnTwQnQPUud4X3RER3hER0A25AhidEBGoud4XnRERvT8QnQbUvT4QnQXUvT0QPToRnQTUYAQE////////Cf5B/okZGRkYGP6JSYiIiP+JGfn4/kFBQUERERER/0FBQUERERER/0FBQUERERER/0FBQUERERER/0FBQUERERER/4n+Ef4RQf4T/hkZGRkZGRn+if4T/hP+iRkZGBgYGBgY/xH+Ff4AAAAAzwkHBgQDAM8NVFBUApgeHh4AAAAAAAAAAAAIAAMHDAADBwwIAAUIDAAFCAwIAAUJDAAFCQwIAAUKDAAFCgwIzwAAAAAAABgAEAcGBQQEAwDPAAwADAAyDQkHBgUEBAQIAAAAAAAAEBAAADAwABAgIAAEQMAIBiDgBhAQ8AAAAP8AAAD/AAAA/wACAwIABgcGCQoLCgAABwAAAAcAMACAgACAgIAAAACwANzAqAAQgFCgYIjAgIB4aAAA6AAAAOwABAAA/wD//wAAAAACAAICBgAI' $Chip_Sound &= 'AAoLCg0ODw4KCgAHBwcNBgkAAQcBAQEBtwECxwYHAcYGDQDhwQSnBgMFd4eHh/W3tSMldzs7OztzRTZze41FfWv1JUVDaXWZNVUAAgICBAsFERYCHygxOkMWC0VHRxZKR0wWFlRWWFpkZgABAQEABAAABAQFBQUFAAQEAAgIBAQIAAQEBAAAAAAAAAEDBAAAAAAJBQAAAAAHCQAHEQwRDBAAERERAAAAAAAQEBAQAAAAADAQAgICAhAwABAwMDAwMAAwMDAAAAAAAPHx8fEAAAAA8/EAAAAA8fMA8fPz8/PzAPPz8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAMDAwEDAQBBAQFAQEFBQEBAQEBAQEBAQwBAQEBAQzNzsBQAIAAgI1P8A5AEA/5AwqKCQgPuw+gD++hzKysoCXwUIAwRN+BBLRTD4AAAAAACAABiAgCAAAAkNBAQEBAQEBAQEBAQEBAQEBgYGDwYGBg8GBgYPBgYGDwEBBwgBAQcIAQEHCAEBBwgGBgYPBgYGDwYGBg8GBgYPBgYGDwYGBg8QExUTEBMVE/8BCowDBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBIAFBQUFGBmMAwQEBAQEBAQEBAQEBAQEBIARFBYUERQWFP8BCwIMAgwCDAIMAgwCDAIMAgwCDAIMAgwCDAIMAgwCDAIMAgwCDIwXFxcXEgQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBP8B4eQBGz1fkK3K5+vy+RQ2WHWeyuz8Ez1qi74aGhsbGxsbGxsbGxsbHBwcHBwcHBwdHR0dHW/+/4JgD7Ni+4FgG7Ni+7BgD7P7iWEbsWAPs/u0G/v/hGEA/gD+hQD+hwD+AIYAhAD+hQD+hwCGAP+IYCf8LPwi/Cf8Lvwi/Cn8Lvwl/Cn8Kvwl/Cf8Kvws' $Chip_Sound &= '/Cf//GAn/Cz8Ivwn/C78Ivwp/C78Jfwp/Cr8Jfwn/Cr8LPwn/4pgM7X7Y/5gM7X7Y/6LYDW1Yvtv/oxgMbX7Y/5gMbX7Y/6NYDW1+2P+i2A1tftr/v+CYA2zYvuBYA+zYvuwYA+z+4lhG7FgD7P7tBv7/4JgErNi+4FgHrNi+7BgErP7iWEesWASs/u0Hvv/gmAWs2L7gWAis2L7sGAWs/uJYSKxYBaz+7Qi+/+OZwD/kWAMtmb7/2H+hgD+AP+EYQD+AP6FAP6HAP4AhgCEAP6FAIYAhwCGAP+PYCf8LPwi/Cf8Lvwi/Cn8Lvwl/Cn8Kvwl/Cf8Kvws/Cf/iGAn/Cz8Ivwn/C78Ivwp/C78Jfwp/Cr8Jfwn/Cr8LPwn/4JgErNi+4FgFLNi+7BgFLP7iWEgsWAUs/u0IPv/kmAnt2L7Y/5gI7di+2P+YCK3Yvtj/mAet2L7Y/6TYBu3avty/rlg/v+bYDG+YvuSYCe3Yvtj/mAjt2L7Y/5gIrdi+2P+YB63Yvtj/pNgG7dy+2f+/5lgJ/ws/CL8J/wu/CL8Kfwu/CX8Kfwq/CX8J/wq/Cy9J//8YA+4aPt1/mv7vGP7b/7/l2MAZ/6VYAq6bvtr/rtn/rxj/pprAP+SYCe3Yvtj/mAjt2L7Y/6WYC63Yvtj/mAqt2L7Y/6TYCe3avty/rlg/v+bYCe+YvuSYCe3Yvtj/mAjt2L7Y/6WYC63Yvtj/mAqt2L7Y/6TYCe3cvtn/v+XYQCYYCL8J/wu/CL8KfwulwD8+5gq/CX8J/wq/Cz8J/+eYBjAYvvBY/vC+8Nn+8Rj+8X7xvtgSshi+8dgSsj+Sshi+8dgSsj+nxvJavvKYD9m+/+eYBjAYvvBY/vC+8Nn+8Rj+8X7y2H7zPtgSshi+8dgSsj+Sshi+8dgSsj+nz/KYvuXYwCHYQCQYwAAhWEA/w==' Local $bString = _WinAPI_Base64Decode($Chip_Sound) If @error Then Return SetError(1, 0, 0) $bString = Binary($bString) If $bSaveBinary Then Local Const $hFile = FileOpen($sSavePath & "\Commodore_64.sid", 18) If @error Then Return SetError(2, 0, $bString) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_Chip_Sound Func _WinAPI_Base64Decode($sB64String) Local $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "ptr", 0, "dword*", 0, "ptr", 0, "ptr", 0) If @error Or Not $aCrypt[0] Then Return SetError(1, 0, "") Local $bBuffer = DllStructCreate("byte[" & $aCrypt[5] & "]") $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "struct*", $bBuffer, "dword*", $aCrypt[5], "ptr", 0, "ptr", 0) If @error Or Not $aCrypt[0] Then Return SetError(2, 0, "") Return DllStructGetData($bBuffer, 1) EndFunc ;==>_WinAPI_Base64Decode #Region TichySID Func _SIDClose() Local $aRet = MemoryDllCall($hTitchysidDll, 'int', 'SIDClose') If @error Then Return SetError(@error, 0, 0) Return $aRet[0] EndFunc ;==>_SIDClose Func _SIDOpen($Sid, $iSubsong = 1) If Not IsBinary($Sid) Then If Not FileExists($Sid) Then Return SetError(2, 0, 0) Local $hFileOpen = FileOpen($Sid, 0) If $hFileOpen = -1 Then Return SetError(-1, 0, 0) Local $bSid = FileRead($hFileOpen) FileClose($hFileOpen) Else $bSid = $Sid EndIf Local $tSid = DllStructCreate('byte[' & BinaryLen($bSid) & ']') DllStructSetData($tSid, 1, $bSid) Local $sType = BinaryToString(BinaryMid($bSid, 1, 4), 1) ConsoleWrite('-->-- Sid File Type : ' & $sType & @CRLF) Local $iVersion = Execute(BinaryMid($bSid, 5, 2)) ConsoleWrite('-->-- Sid File Version : ' & $iVersion & @CRLF) $iSubsongCount = Int(StringTrimLeft(BinaryMid($bSid, 15, 2), 2)) ConsoleWrite('-->-- SubsongCount : ' & $iSubsongCount & @CRLF) $iSubsong = $iSubsong - 1 If $iSubsong < 0 Then $iSubsong = 0 If $iSubsong > $iSubsongCount Then $iSubsong = 0 ConsoleWrite('-->-- Subsong : ' & $iSubsong & @CRLF) Local $aRet = MemoryDllCall($hTitchysidDll, 'int', 'SIDOpen', 'ptr', DllStructGetPtr($tSid), 'int', DllStructGetSize($tSid), 'int', $SID_MEMORY, 'int', $SID_NON_DEFAULT, 'int', $iSubsong) If @error Then Return SetError(@error, 0, 0) $tSid = 0 $bSid = 0 Return $aRet[0] EndFunc ;==>_SIDOpen Func _SIDShutdown() MemoryDllClose($hTitchysidDll) $hTitchysidDll = 0 EndFunc ;==>_SIDShutdown Func _SIDStartup() $hTitchysidDll = MemoryDllOpen(TitchySIDdll()) If $hTitchysidDll = -1 Then Return SetError(1, 0, 0) Return SetError(0, 0, $hTitchysidDll) EndFunc ;==>_SIDStartup Func _SIDStop() Local $aRet = MemoryDllCall($hTitchysidDll, 'int', 'SIDStop') If @error Then Return SetError(@error, 0, 0) Return $aRet[0] EndFunc ;==>_SIDStop Func TitchySIDdll() Local $sFileBin = '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' $sFileBin &= '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' $sFileBin = Binary(_WinAPI_Base64Decode($sFileBin)) $sFileBin = Binary(_LzntDecompress($sFileBin)) Return SetError(0, 0, $sFileBin) EndFunc ;==>TitchySIDdll Func _LzntDecompress($bBinary) $bBinary = Binary($bBinary) Local $tInput = DllStructCreate('byte[' & BinaryLen($bBinary) & ']') DllStructSetData($tInput, 1, $bBinary) Local $tBuffer = DllStructCreate('byte[' & 16 * DllStructGetSize($tInput) & ']') Local $a_Call = DllCall('ntdll.dll', 'int', 'RtlDecompressBuffer', 'ushort', 2, 'ptr', DllStructGetPtr($tBuffer), 'dword', DllStructGetSize($tBuffer), 'ptr', DllStructGetPtr($tInput), 'dword', DllStructGetSize($tInput), 'dword*', 0) If @error Or $a_Call[0] Then Return SetError(1, 0, '') Local $tOutput = DllStructCreate('byte[' & $a_Call[6] & ']', DllStructGetPtr($tBuffer)) Return SetError(0, 0, DllStructGetData($tOutput, 1)) EndFunc ;==>_LzntDecompress Func API_FreeLibrary($Module) Local $Ret = DllCall($_KERNEL32DLL, 'bool', 'FreeLibrary', 'handle', $Module) If @error Then Return SetError(@error, @extended, 0) Return $Ret[0] EndFunc ;==>API_FreeLibrary Func API_GetProcAddress($Module, $Procname) If IsNumber($Procname) Then Local $Ret = DllCall($_KERNEL32DLL, 'ptr', 'GetProcAddress', 'handle', $Module, 'int', $Procname) Else Local $Ret = DllCall($_KERNEL32DLL, 'ptr', 'GetProcAddress', 'handle', $Module, 'str', $Procname) EndIf If @error Then Return SetError(@error, @extended, 0) Return $Ret[0] EndFunc ;==>API_GetProcAddress Func API_IsBadReadPtr($Ptr, $Len) Local $Ret = DllCall($_KERNEL32DLL, 'int', 'IsBadReadPtr', 'ptr', $Ptr, 'UINT_PTR', $Len) If @error Then Return SetError(@error, @extended, 0) Return $Ret[0] EndFunc ;==>API_IsBadReadPtr Func API_LoadLibrary($Filename) Local $Ret = DllCall($_KERNEL32DLL, 'handle', 'LoadLibraryW', 'wstr', $Filename) If @error Then Return SetError(@error, @extended, 0) Return $Ret[0] EndFunc ;==>API_LoadLibrary Func API_lstrlenA($Address) Local $Ret = DllCall($_KERNEL32DLL, 'int', 'lstrlenA', 'ptr', $Address) If @error Then Return SetError(@error, @extended, 0) Return $Ret[0] EndFunc ;==>API_lstrlenA Func API_lstrlenW($Address) Local $Ret = DllCall($_KERNEL32DLL, 'int', 'lstrlenW', 'ptr', $Address) If @error Then Return SetError(@error, @extended, 0) Return $Ret[0] EndFunc ;==>API_lstrlenW Func API_VirtualProtect($Address, $Size, $Protection) Local $Ret = DllCall($_KERNEL32DLL, 'bool', 'VirtualProtect', 'ptr', $Address, 'dword_ptr', $Size, 'dword', $Protection, 'dword*', 0) If @error Then Return SetError(@error, @extended, 0) Return $Ret[0] EndFunc ;==>API_VirtualProtect Func API_ZeroMemory($Address, $Size) Local $Ret = DllCall($_KERNEL32DLL, 'none', 'RtlZeroMemory', 'ptr', $Address, 'dword_ptr', $Size) If @error Then Return SetError(@error, @extended, 0) Return $Ret[0] EndFunc ;==>API_ZeroMemory Func MemLib_BuildImportTable($CodeBase, $PEHeader) Local Const $IMAGE_DIRECTORY_ENTRY_IMPORT = 1 Local Const $SizeOfPtr = DllStructGetSize(DllStructCreate('ptr', 1)) Local $IMAGE_NT_HEADER = DllStructCreate($tagIMAGE_NT_HEADER, $PEHeader) Local $SizeOfDataDirectory = DllStructGetSize(DllStructCreate($tagIMAGE_DATA_DIRECTORY)) Local $ImportDirectoryPtr = $PEHeader + DllStructGetSize($IMAGE_NT_HEADER) + $IMAGE_DIRECTORY_ENTRY_IMPORT * $SizeOfDataDirectory Local $ImportDirectory = DllStructCreate($tagIMAGE_DATA_DIRECTORY, $ImportDirectoryPtr) Local $ImportSize = DllStructGetData($ImportDirectory, 'Size') Local $ImportVirtualAddress = DllStructGetData($ImportDirectory, 'VirtualAddress') Local $SizeOfImportDir = DllStructGetSize(DllStructCreate($tagIMAGE_IMPORT_DESCRIPTOR)) Local $ImportList = '' If $ImportSize > 0 Then Local $ImportDescPtr = $CodeBase + $ImportVirtualAddress While 1 If API_IsBadReadPtr($ImportDescPtr, $SizeOfImportDir) Then ExitLoop Local $ImportDesc = DllStructCreate($tagIMAGE_IMPORT_DESCRIPTOR, $ImportDescPtr) Local $NameOffset = DllStructGetData($ImportDesc, 'Name') If $NameOffset = 0 Then ExitLoop Local $Name = Peek('str', $CodeBase + $NameOffset) Local $OriginalFirstThunk = DllStructGetData($ImportDesc, 'OriginalFirstThunk') Local $FirstThunk = DllStructGetData($ImportDesc, 'FirstThunk') Local $Handle = API_LoadLibrary($Name) If $Handle Then $ImportList &= $Handle & ',' Local $FuncRef = $CodeBase + $FirstThunk Local $ThunkRef = $CodeBase + $OriginalFirstThunk If $OriginalFirstThunk = 0 Then $ThunkRef = $FuncRef While 1 Local $Ref = Peek('ptr', $ThunkRef) If $Ref = 0 Then ExitLoop If BitAND(Peek('byte', $ThunkRef + $SizeOfPtr - 1), 0x80) Then Local $Ptr = API_GetProcAddress($Handle, BitAND($Ref, 0xffff)) Else Local $IMAGE_IMPORT_BY_NAME = DllStructCreate($tagIMAGE_IMPORT_BY_NAME, $CodeBase + $Ref) Local $NamePtr = DllStructGetPtr($IMAGE_IMPORT_BY_NAME, 2) Local $FuncName = Peek('str', $NamePtr) Local $Ptr = API_GetProcAddress($Handle, $FuncName) EndIf If $Ptr = 0 Then Return SetError(1, 0, False) Poke('ptr', $FuncRef, $Ptr) $ThunkRef += $SizeOfPtr $FuncRef += $SizeOfPtr WEnd Else Return SetError(1, 0, False) EndIf $ImportDescPtr += $SizeOfImportDir WEnd EndIf Return $ImportList EndFunc ;==>MemLib_BuildImportTable Func MemLib_CopySections($CodeBase, $PEHeader, $DllDataPtr) Local $IMAGE_NT_HEADER = DllStructCreate($tagIMAGE_NT_HEADER, $PEHeader) Local $SizeOfFileHeader = DllStructGetPtr($IMAGE_NT_HEADER, 'Magic') - $PEHeader Local $SizeOfOptionalHeader = DllStructGetData($IMAGE_NT_HEADER, 'SizeOfOptionalHeader') Local $NumberOfSections = DllStructGetData($IMAGE_NT_HEADER, 'NumberOfSections') Local $SectionAlignment = DllStructGetData($IMAGE_NT_HEADER, 'SectionAlignment') Local $SectionPtr = $PEHeader + $SizeOfFileHeader + $SizeOfOptionalHeader For $i = 1 To $NumberOfSections Local $Section = DllStructCreate($tagIMAGE_SECTION_HEADER, $SectionPtr) Local $VirtualAddress = DllStructGetData($Section, 'VirtualAddress') Local $SizeOfRawData = DllStructGetData($Section, 'SizeOfRawData') Local $PointerToRawData = DllStructGetData($Section, 'PointerToRawData') If $SizeOfRawData = 0 Then Local $Dest = _MemVirtualAlloc($CodeBase + $VirtualAddress, $SectionAlignment, $MEM_COMMIT, $PAGE_READWRITE) API_ZeroMemory($Dest, $SectionAlignment) Else Local $Dest = _MemVirtualAlloc($CodeBase + $VirtualAddress, $SizeOfRawData, $MEM_COMMIT, $PAGE_READWRITE) _MemMoveMemory($DllDataPtr + $PointerToRawData, $Dest, $SizeOfRawData) EndIf DllStructSetData($Section, 'VirtualSize', $Dest - $CodeBase) $SectionPtr += DllStructGetSize($Section) Next EndFunc ;==>MemLib_CopySections Func MemLib_FinalizeSections($CodeBase, $PEHeader) Local Const $IMAGE_SCN_MEM_EXECUTE = 0x20000000 Local Const $IMAGE_SCN_MEM_READ = 0x40000000 Local Const $IMAGE_SCN_MEM_WRITE = 0x80000000 Local Const $IMAGE_SCN_MEM_NOT_CACHED = 0x4000000 Local Const $IMAGE_SCN_CNT_INITIALIZED_DATA = 64 Local Const $IMAGE_SCN_CNT_UNINITIALIZED_DATA = 128 Local Const $PAGE_WRITECOPY = 0x0008 Local Const $PAGE_EXECUTE_WRITECOPY = 0x0080 Local $IMAGE_NT_HEADER = DllStructCreate($tagIMAGE_NT_HEADER, $PEHeader) Local $SizeOfFileHeader = DllStructGetPtr($IMAGE_NT_HEADER, 'Magic') - $PEHeader Local $SizeOfOptionalHeader = DllStructGetData($IMAGE_NT_HEADER, 'SizeOfOptionalHeader') Local $NumberOfSections = DllStructGetData($IMAGE_NT_HEADER, 'NumberOfSections') Local $SectionAlignment = DllStructGetData($IMAGE_NT_HEADER, 'SectionAlignment') Local $SectionPtr = $PEHeader + $SizeOfFileHeader + $SizeOfOptionalHeader For $i = 1 To $NumberOfSections Local $Section = DllStructCreate($tagIMAGE_SECTION_HEADER, $SectionPtr) Local $Characteristics = DllStructGetData($Section, 'Characteristics') Local $SizeOfRawData = DllStructGetData($Section, 'SizeOfRawData') Local $Executable = (BitAND($Characteristics, $IMAGE_SCN_MEM_EXECUTE) <> 0) Local $Readable = (BitAND($Characteristics, $IMAGE_SCN_MEM_READ) <> 0) Local $Writeable = (BitAND($Characteristics, $IMAGE_SCN_MEM_WRITE) <> 0) Local $ProtectList[8] = [$PAGE_NOACCESS, $PAGE_EXECUTE, $PAGE_READONLY, $PAGE_EXECUTE_READ, $PAGE_WRITECOPY, $PAGE_EXECUTE_WRITECOPY, $PAGE_READWRITE, $PAGE_EXECUTE_READWRITE] Local $Protect = $ProtectList[$Executable + $Readable * 2 + $Writeable * 4] If BitAND($Characteristics, $IMAGE_SCN_MEM_NOT_CACHED) Then $Protect = BitOR($Protect, $PAGE_NOCACHE) Local $Size = $SizeOfRawData If $Size = 0 Then If BitAND($Characteristics, $IMAGE_SCN_CNT_INITIALIZED_DATA) Then $Size = DllStructGetData($IMAGE_NT_HEADER, 'SizeOfInitializedData') ElseIf BitAND($Characteristics, $IMAGE_SCN_CNT_UNINITIALIZED_DATA) Then $Size = DllStructGetData($IMAGE_NT_HEADER, 'SizeOfUninitializedData') EndIf EndIf If $Size > 0 Then Local $PhysicalAddress = $CodeBase + DllStructGetData($Section, 'VirtualSize') API_VirtualProtect($PhysicalAddress, $Size, $Protect) EndIf $SectionPtr += DllStructGetSize($Section) Next EndFunc ;==>MemLib_FinalizeSections Func MemLib_FreeLibrary($ModulePtr) If Not MemLib_Vaild($ModulePtr) Then Return 0 Local $Module = DllStructCreate($tagModule, $ModulePtr) Local $CodeBase = DllStructGetData($Module, 'CodeBase') Local $DllEntry = DllStructGetData($Module, 'DllEntry') Local $Initialized = DllStructGetData($Module, 'Initialized') Local $ImportListPtr = DllStructGetData($Module, 'ImportList') Local $ExportListPtr = DllStructGetData($Module, 'ExportList') If $Initialized And $DllEntry Then Local $Success = MemoryFuncCall('bool', $DllEntry, 'ptr', $CodeBase, 'dword', 0, 'ptr', 0) DllStructSetData($Module, 'Initialized', 0) EndIf If $ExportListPtr Then _MemGlobalFree($ExportListPtr) If $ImportListPtr Then Local $ImportList = StringSplit(Peek('str', $ImportListPtr), ',') For $i = 1 To $ImportList[0] If $ImportList[$i] Then API_FreeLibrary($ImportList[$i]) Next _MemGlobalFree($ImportListPtr) EndIf If $CodeBase Then _MemVirtualFree($CodeBase, 0, $MEM_RELEASE) DllStructSetData($Module, 'CodeBase', 0) DllStructSetData($Module, 'ExportList', 0) _MemGlobalFree($ModulePtr) Return 1 EndFunc ;==>MemLib_FreeLibrary Func MemLib_GetExportList($CodeBase, $PEHeader) Local Const $IMAGE_DIRECTORY_ENTRY_EXPORT = 0 Local $IMAGE_NT_HEADER = DllStructCreate($tagIMAGE_NT_HEADER, $PEHeader) Local $SizeOfDataDirectory = DllStructGetSize(DllStructCreate($tagIMAGE_DATA_DIRECTORY)) Local $ExportDirectoryPtr = $PEHeader + DllStructGetSize($IMAGE_NT_HEADER) + $IMAGE_DIRECTORY_ENTRY_EXPORT * $SizeOfDataDirectory Local $ExportDirectory = DllStructCreate($tagIMAGE_DATA_DIRECTORY, $ExportDirectoryPtr) Local $ExportSize = DllStructGetData($ExportDirectory, 'Size') Local $ExportVirtualAddress = DllStructGetData($ExportDirectory, 'VirtualAddress') Local $ExportList = '' If $ExportSize > 0 Then Local $IMAGE_EXPORT_DIRECTORY = DllStructCreate($tagIMAGE_EXPORT_DIRECTORY, $CodeBase + $ExportVirtualAddress) Local $NumberOfNames = DllStructGetData($IMAGE_EXPORT_DIRECTORY, 'NumberOfNames') Local $NumberOfFunctions = DllStructGetData($IMAGE_EXPORT_DIRECTORY, 'NumberOfFunctions') Local $AddressOfFunctions = DllStructGetData($IMAGE_EXPORT_DIRECTORY, 'AddressOfFunctions') If $NumberOfNames = 0 Or $NumberOfFunctions = 0 Then Return '' Local $NameRef = $CodeBase + DllStructGetData($IMAGE_EXPORT_DIRECTORY, 'AddressOfNames') Local $Ordinal = $CodeBase + DllStructGetData($IMAGE_EXPORT_DIRECTORY, 'AddressOfNameOrdinals') For $i = 1 To $NumberOfNames Local $Ref = Peek('dword', $NameRef) Local $Idx = Peek('word', $Ordinal) Local $FuncName = Peek('str', $CodeBase + $Ref) If $Idx <= $NumberOfFunctions Then Local $Addr = $CodeBase + Peek('dword', $CodeBase + $AddressOfFunctions + $Idx * 4) $ExportList &= $FuncName & Chr(1) & $Addr & Chr(1) EndIf $NameRef += 4 $Ordinal += 2 Next EndIf Return $ExportList EndFunc ;==>MemLib_GetExportList Func MemLib_GetProcAddress($ModulePtr, $FuncName) Local $ExportPtr = Peek('ptr', $ModulePtr) If Not $ExportPtr Then Return 0 Local $ExportList = Peek('str', $ExportPtr) Local $Match = StringRegExp($ExportList, '(?i)' & $FuncName & '\001([^\001]*)\001', 3) If Not @error Then Return Ptr($Match[0]) Return 0 EndFunc ;==>MemLib_GetProcAddress Func MemLib_LoadLibrary($DllBinary) $DllBinary = Binary($DllBinary) Local $DllData = DllStructCreate('byte[' & BinaryLen($DllBinary) & ']') Local $DllDataPtr = DllStructGetPtr($DllData) DllStructSetData($DllData, 1, $DllBinary) Local $IMAGE_DOS_HEADER = DllStructCreate($tagIMAGE_DOS_HEADER, $DllDataPtr) If DllStructGetData($IMAGE_DOS_HEADER, 'e_magic') <> 0x5A4D Then Return SetError(1, 0, 0) EndIf Local $PEHeader = $DllDataPtr + DllStructGetData($IMAGE_DOS_HEADER, 'e_lfanew') Local $IMAGE_NT_HEADER = DllStructCreate($tagIMAGE_NT_HEADER, $PEHeader) If DllStructGetData($IMAGE_NT_HEADER, 'Signature') <> 0x4550 Then Return SetError(1, 0, 0) EndIf Switch DllStructGetData($IMAGE_NT_HEADER, 'Magic') Case 0x10B If @AutoItX64 Then Return SetError(2, 0, 0) Case 0x20B If Not @AutoItX64 Then Return SetError(2, 0, 0) EndSwitch Local $ImageBase = DllStructGetData($IMAGE_NT_HEADER, 'ImageBase') Local $SizeOfImage = DllStructGetData($IMAGE_NT_HEADER, 'SizeOfImage') Local $SizeOfHeaders = DllStructGetData($IMAGE_NT_HEADER, 'SizeOfHeaders') Local $AddressOfEntryPoint = DllStructGetData($IMAGE_NT_HEADER, 'AddressOfEntryPoint') Local $ModulePtr = _MemGlobalAlloc(DllStructGetSize(DllStructCreate($tagModule)), $GPTR) If $ModulePtr = 0 Then Return SetError(3, 0, 0) Local $Module = DllStructCreate($tagModule, $ModulePtr) Local $CodeBase = _MemVirtualAlloc($ImageBase, $SizeOfImage, $MEM_RESERVE, $PAGE_READWRITE) If $CodeBase = 0 Then $CodeBase = _MemVirtualAlloc(0, $SizeOfImage, $MEM_RESERVE, $PAGE_READWRITE) If $CodeBase = 0 Then Return SetError(3, 0, 0) DllStructSetData($Module, 'CodeBase', $CodeBase) _MemVirtualAlloc($CodeBase, $SizeOfImage, $MEM_COMMIT, $PAGE_READWRITE) Local $Base = _MemVirtualAlloc($CodeBase, $SizeOfHeaders, $MEM_COMMIT, $PAGE_READWRITE) _MemMoveMemory($DllDataPtr, $Base, $SizeOfHeaders) MemLib_CopySections($CodeBase, $PEHeader, $DllDataPtr) Local $LocationDelta = $CodeBase - $ImageBase If $LocationDelta <> 0 Then MemLib_PerformBaseRelocation($CodeBase, $PEHeader, $LocationDelta) Local $ImportList = MemLib_BuildImportTable($CodeBase, $PEHeader) If @error Then MemLib_FreeLibrary($ModulePtr) Return SetError(2, 0, 0) EndIf Local $ExportList = MemLib_GetExportList($CodeBase, $PEHeader) Local $ImportListPtr = _MemGlobalAlloc(StringLen($ImportList) + 2, $GPTR) Local $ExportListPtr = _MemGlobalAlloc(StringLen($ExportList) + 2, $GPTR) DllStructSetData($Module, 'ImportList', $ImportListPtr) DllStructSetData($Module, 'ExportList', $ExportListPtr) If $ImportListPtr = 0 Or $ExportListPtr = 0 Then MemLib_FreeLibrary($ModulePtr) Return SetError(3, 0, 0) EndIf Poke('str', $ImportListPtr, $ImportList) Poke('str', $ExportListPtr, $ExportList) MemLib_FinalizeSections($CodeBase, $PEHeader) Local $DllEntry = $CodeBase + $AddressOfEntryPoint DllStructSetData($Module, 'DllEntry', $DllEntry) DllStructSetData($Module, 'Initialized', 0) If $AddressOfEntryPoint Then Local $Success = MemoryFuncCall('bool', $DllEntry, 'ptr', $CodeBase, 'dword', 1, 'ptr', 0) If Not $Success[0] Then MemLib_FreeLibrary($ModulePtr) Return SetError(4, 0, 0) EndIf DllStructSetData($Module, 'Initialized', 1) EndIf Return $ModulePtr EndFunc ;==>MemLib_LoadLibrary Func MemLib_PerformBaseRelocation($CodeBase, $PEHeader, $LocationDelta) Local Const $IMAGE_DIRECTORY_ENTRY_BASERELOC = 5 Local Const $IMAGE_REL_BASED_HIGHLOW = 3 Local Const $IMAGE_REL_BASED_DIR64 = 10 Local $IMAGE_NT_HEADER = DllStructCreate($tagIMAGE_NT_HEADER, $PEHeader) Local $SizeOfDataDirectory = DllStructGetSize(DllStructCreate($tagIMAGE_DATA_DIRECTORY)) Local $RelocDirectoryPtr = $PEHeader + DllStructGetSize($IMAGE_NT_HEADER) + $IMAGE_DIRECTORY_ENTRY_BASERELOC * $SizeOfDataDirectory Local $RelocDirectory = DllStructCreate($tagIMAGE_DATA_DIRECTORY, $RelocDirectoryPtr) Local $RelocSize = DllStructGetData($RelocDirectory, 'Size') Local $RelocVirtualAddress = DllStructGetData($RelocDirectory, 'VirtualAddress') If $RelocSize > 0 Then Local $Relocation = $CodeBase + $RelocVirtualAddress While 1 Local $IMAGE_BASE_RELOCATION = DllStructCreate($tagIMAGE_BASE_RELOCATION, $Relocation) Local $VirtualAddress = DllStructGetData($IMAGE_BASE_RELOCATION, 'VirtualAddress') Local $SizeOfBlock = DllStructGetData($IMAGE_BASE_RELOCATION, 'SizeOfBlock') If $VirtualAddress = 0 Then ExitLoop Local $Dest = $CodeBase + $VirtualAddress Local $Entries = ($SizeOfBlock - 8) / 2 Local $RelInfo = DllStructCreate('word[' & $Entries & ']', $Relocation + 8) For $i = 1 To $Entries Local $Info = DllStructGetData($RelInfo, 1, $i) Local $Type = BitShift($Info, 12) If $Type = $IMAGE_REL_BASED_HIGHLOW Or $Type = $IMAGE_REL_BASED_DIR64 Then Local $Addr = DllStructCreate('ptr', $Dest + BitAND($Info, 0xFFF)) DllStructSetData($Addr, 1, DllStructGetData($Addr, 1) + $LocationDelta) EndIf Next $Relocation += $SizeOfBlock WEnd EndIf EndFunc ;==>MemLib_PerformBaseRelocation Func MemLib_Vaild($ModulePtr) Local $ModuleSize = DllStructGetSize(DllStructCreate($tagModule)) If API_IsBadReadPtr($ModulePtr, $ModuleSize) Then Return False Local $Module = DllStructCreate($tagModule, $ModulePtr) Local $CodeBase = DllStructGetData($Module, 'CodeBase') If Not $CodeBase Then Return False Return True EndFunc ;==>MemLib_Vaild Func MemoryDllCall($Module, $RetType, $FuncName, $Type1 = '', $Param1 = 0, $Type2 = '', $Param2 = 0, $Type3 = '', $Param3 = 0, $Type4 = '', $Param4 = 0, $Type5 = '', $Param5 = 0, $Type6 = '', $Param6 = 0, $Type7 = '', $Param7 = 0, $Type8 = '', $Param8 = 0, $Type9 = '', $Param9 = 0, $Type10 = '', $Param10 = 0, $Type11 = '', $Param11 = 0, $Type12 = '', $Param12 = 0, $Type13 = '', $Param13 = 0, $Type14 = '', $Param14 = 0, $Type15 = '', $Param15 = 0, $Type16 = '', $Param16 = 0, $Type17 = '', $Param17 = 0, $Type18 = '', $Param18 = 0, $Type19 = '', $Param19 = 0, $Type20 = '', $Param20 = 0) Local $Ret, $OpenFlag = False Local Const $MaxParams = 20 If (@NumParams < 3) Or (@NumParams > $MaxParams * 2 + 3) Or (Mod(@NumParams, 2) = 0) Then Return SetError(4, 0, 0) If Not IsPtr($Module) Then $OpenFlag = True $Module = MemoryDllOpen($Module) If @error Then Return SetError(1, 0, 0) EndIf Local $Addr = MemLib_GetProcAddress($Module, $FuncName) If Not $Addr Then Return SetError(3, 0, 0) Poke('ptr', $_MFHookPtr + 1 + @AutoItX64, $Addr) Switch @NumParams Case 3 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi) Case 5 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1) Case 7 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1, $Type2, $Param2) Case 9 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1, $Type2, $Param2, $Type3, $Param3) Case 11 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1, $Type2, $Param2, $Type3, $Param3, $Type4, $Param4) Case 13 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1, $Type2, $Param2, $Type3, $Param3, $Type4, $Param4, $Type5, $Param5) Case Else Local $DllCallStr = 'DllCall ( $_KERNEL32DLL, $RetType, $_MFHookApi', $n = 1 For $i = 5 To @NumParams Step 2 $DllCallStr &= ', $Type' & $n & ', $Param' & $n $n += 1 Next $DllCallStr &= ' )' $Ret = Execute($DllCallStr) EndSwitch Local $Err = @error If $OpenFlag Then MemoryDllClose($Module) Return SetError($Err, 0, $Ret) EndFunc ;==>MemoryDllCall Func MemoryDllClose($Module) MemLib_FreeLibrary($Module) EndFunc ;==>MemoryDllClose Func MemoryDllOpen($DllBinary) If Not IsDllStruct($_MFHookBak) Then MemoryFuncInit() Local $Module = MemLib_LoadLibrary($DllBinary) If @error Then Return SetError(@error, 0, -1) Return $Module EndFunc ;==>MemoryDllOpen Func MemoryFuncCall($RetType, $Address, $Type1 = '', $Param1 = 0, $Type2 = '', $Param2 = 0, $Type3 = '', $Param3 = 0, $Type4 = '', $Param4 = 0, $Type5 = '', $Param5 = 0, $Type6 = '', $Param6 = 0, $Type7 = '', $Param7 = 0, $Type8 = '', $Param8 = 0, $Type9 = '', $Param9 = 0, $Type10 = '', $Param10 = 0, $Type11 = '', $Param11 = 0, $Type12 = '', $Param12 = 0, $Type13 = '', $Param13 = 0, $Type14 = '', $Param14 = 0, $Type15 = '', $Param15 = 0, $Type16 = '', $Param16 = 0, $Type17 = '', $Param17 = 0, $Type18 = '', $Param18 = 0, $Type19 = '', $Param19 = 0, $Type20 = '', $Param20 = 0) If Not IsDllStruct($_MFHookBak) Then MemoryFuncInit() Poke('ptr', $_MFHookPtr + 1 + @AutoItX64, $Address) Local $Ret Switch @NumParams Case 2 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi) Case 4 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1) Case 6 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1, $Type2, $Param2) Case 8 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1, $Type2, $Param2, $Type3, $Param3) Case 10 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1, $Type2, $Param2, $Type3, $Param3, $Type4, $Param4) Case 12 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1, $Type2, $Param2, $Type3, $Param3, $Type4, $Param4, $Type5, $Param5) Case Else Local $DllCallStr = 'DllCall($_KERNEL32DLL, $RetType, $_MFHookApi', $n = 1 For $i = 4 To @NumParams Step 2 $DllCallStr &= ', $Type' & $n & ', $Param' & $n $n += 1 Next $DllCallStr &= ')' $Ret = Execute($DllCallStr) EndSwitch Return SetError(@error, 0, $Ret) EndFunc ;==>MemoryFuncCall Func MemoryFuncInit() Local $KernelHandle = API_LoadLibrary('kernel32.dll') API_FreeLibrary($KernelHandle) Local $HookPtr = API_GetProcAddress($KernelHandle, $_MFHookApi) Local $HookSize = 7 + @AutoItX64 * 5 $_MFHookPtr = $HookPtr $_MFHookBak = DllStructCreate('byte[' & $HookSize & ']') If Not API_VirtualProtect($_MFHookPtr, $HookSize, $PAGE_EXECUTE_READWRITE) Then Return False DllStructSetData($_MFHookBak, 1, Peek('byte[' & $HookSize & ']', $_MFHookPtr)) If @AutoItX64 Then Poke('word', $_MFHookPtr, 0xB848) Poke('word', $_MFHookPtr + 10, 0xE0FF) Else Poke('byte', $_MFHookPtr, 0xB8) Poke('word', $_MFHookPtr + 5, 0xE0FF) EndIf Return True EndFunc ;==>MemoryFuncInit Func Peek($Type, $Ptr) If $Type = 'str' Then $Type = 'char[' & API_lstrlenA($Ptr) & ']' ElseIf $Type = 'wstr' Then $Type = 'wchar[' & API_lstrlenW($Ptr) & ']' EndIf Return DllStructGetData(DllStructCreate($Type, $Ptr), 1) EndFunc ;==>Peek Func Poke($Type, $Ptr, $Value) If $Type = 'str' Then $Type = 'char[' & (StringLen($Value) + 1) & ']' ElseIf $Type = 'wstr' Then $Type = 'wchar[' & (StringLen($Value) + 1) & ']' EndIf DllStructSetData(DllStructCreate($Type, $Ptr), 1, $Value) EndFunc ;==>Poke #EndRegion
    4 points
  3. Here a fast hack: ;Coded by UEZ build 2021-04-11 #include <GDIPlus.au3> #include <GuiConstantsEx.au3> #include <WindowsConstants.au3> _GDIPlus_Startup() Global $hGUI, $iFPS = 0, $iShowFPS = 0, $bExit AutoItSetOption("GUIOnEventMode", 1) Global $sText = _ "This is an About Window ²" & _ ;² is the marker for the column width which all lines below must follow "coded with Autoit using " & _ "GDI+ library to produce " & _ "this flying chars effect. " & _ "------------------------ " & _ "Greetings fly out to: " & _ "All Autoit users around " & _ "the world! " & _ " " & _ " " & _ "Coded by UEZ 2021 ;-) " & _ " " & _ " " & _ " " & _ "Press ESC to exit. " GDIPlus_About($sText) AutoItSetOption("GUIOnEventMode", 0) _GDIPlus_Shutdown() Func GDIPlus_About($sText, $iFontsize = 16, $dx = 35, $dy = 150, $iSpeed = 33, $sFont = "Courier New") Local Const $iW = 540, $iH = 500, $iWh = $iW / 2, $iHh = $iH / 2, $sTitle = "GDI+ About Window" Local Const $fPi = ACos(-1), $fRad = $fPi / 180, $fDeg = 180 / $fPi $bExit = False $hGUI = GUICreate($sTitle, $iW, $iH) ;, 0, 0, $WS_POPUP) GUISetState(@SW_SHOW, $hGUI) ;~ GUISetCursor(16, 1) ;create canvas elements Local Const $hDC = _WinAPI_GetDC($hGUI) Local Const $hHBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $iW, $iH) Local Const $hDC_backbuffer = _WinAPI_CreateCompatibleDC($hDC) Local Const $DC_obj = _WinAPI_SelectObject($hDC_backbuffer, $hHBitmap) Local Const $hCanvas = _GDIPlus_GraphicsCreateFromHDC($hDC_backbuffer) _GDIPlus_GraphicsSetSmoothingMode($hCanvas, $GDIP_SMOOTHINGMODE_HIGHQUALITY) _GDIPlus_GraphicsSetPixelOffsetMode($hCanvas, $GDIP_PIXELOFFSETMODE_HIGHQUALITY) Local Const $hBrush_Clr = _GDIPlus_HatchBrushCreate(18, 0xF0B0B0E0, 0xF0F0F0FF), _ $hBrush_FPS = _GDIPlus_BrushCreateSolid(0xF0808080), _ $hFormat_FPS = _GDIPlus_StringFormatCreate(), _ $hFamily_FPS = _GDIPlus_FontFamilyCreate("Arial"), _ $hFont_FPS = _GDIPlus_FontCreate($hFamily_FPS, 8), _ $tLayout_FPS = _GDIPlus_RectFCreate(0, 0, 60, 16) $iFPS = 0 GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit_About") Local $iLen = StringLen($sText), $iColums = StringInStr($sText, "²"), $i, $u, $s, $r, $iChar_Space, $x, $y, $t = 0,$f, $b = 0, $a = 255, $iCharCol = 0x101030 $sText = StringReplace($sText, "²", " ") Local $aChars = StringSplit($sText, "", 2) Local $hFormat_char = _GDIPlus_StringFormatCreate(), $hFamily_char = _GDIPlus_FontFamilyCreate($sFont), $hFont_char = _GDIPlus_FontCreate($hFamily_char, $iFontsize, 1), _ $tLayout_char = _GDIPlus_RectFCreate(), $hBrush_char = _GDIPlus_BrushCreateSolid(0xFF000000 + $iCharCol), _ $hImage_logo = _GDIPlus_BitmapCreateFromMemory(_Logo()) AdlibRegister("CalcFPS", 1000) Do DllCall($__g_hGDIPDll, "int", "GdipFillRectangle", "handle", $hCanvas, "handle", $hBrush_Clr, "float", 0, "float", 112, "float", $iW, "float", $iH - 112) ;erase canvas background _GDIPlus_GraphicsDrawImageRect($hCanvas, $hImage_logo, 0, 0, 540, 112) $rr = 0 For $i = 0 To UBound($aChars) - 1 If $aChars[$i] <> " " Then $f = $t - $i / $iSpeed $s = $f > 2 ? 2 : $f $s = $s > 0 ? $s : 0 $r = (2 - $s) * $iColums * $iColums $iChar_Space = $s / 3 * $iColums $rr +=$r $tLayout_char.x = $dx + $r / 2 * Sin($t + $i) + Mod($i, $iColums) * $iChar_Space $tLayout_char.y = $dy + $r / 3 * Cos($t + $i) + Int($i / $iColums) * $iChar_Space ;* 1.2 _GDIPlus_GraphicsDrawStringEx($hCanvas, $aChars[$i], $hFont_char, $tLayout_char, $hFormat_char, $hBrush_char) EndIf Next $t += 0.04 _GDIPlus_GraphicsDrawStringEx($hCanvas, "FPS: " & $iShowFPS, $hFont_FPS, $tLayout_FPS, $hFormat_FPS, $hBrush_FPS) ;draw background message text _WinAPI_BitBlt($hDC, 0, 0, $iW, $iH, $hDC_backbuffer, 0, 0, $SRCCOPY) ;blit drawn bitmap to GUI $iFPS += 1 If $bExit Then ExitLoop If $r = 0 Then $b = 1 If $b Then $a -= 2 _GDIPlus_BrushSetSolidColor($hBrush_char, BitShift($a, -24) + $iCharCol) If $a <= 0 Then $b = 0 $a = 255 _GDIPlus_BrushSetSolidColor($hBrush_char, BitShift($a, -24) + $iCharCol) $t = 0 EndIf EndIf Until Not Sleep(10) AdlibUnRegister("CalcFPS") ;release resources _GDIPlus_FontDispose($hFont_char) _GDIPlus_FontFamilyDispose($hFamily_char) _GDIPlus_StringFormatDispose($hFormat_char) _GDIPlus_BrushDispose($hBrush_char) _GDIPlus_ImageDispose($hImage_logo) _GDIPlus_FontDispose($hFont_FPS) _GDIPlus_FontFamilyDispose($hFamily_FPS) _GDIPlus_StringFormatDispose($hFormat_FPS) _GDIPlus_BrushDispose($hBrush_Clr) _GDIPlus_BrushDispose($hBrush_FPS) _GDIPlus_GraphicsDispose($hCanvas) _WinAPI_SelectObject($hDC_backbuffer, $DC_obj) _WinAPI_DeleteDC($hDC_backbuffer) _WinAPI_DeleteObject($hHBitmap) _WinAPI_ReleaseDC($hGUI, $hDC) GUIDelete($hGUI) EndFunc ;==>GDIPlus_About Func _Exit_About() $bExit = True EndFunc ;==>_Exit_About Func CalcFPS() ;display FPS $iShowFPS = $iFPS $iFPS = 0 EndFunc ;==>CalcFPS ;Code below was generated by: 'File to Base64 String' Code Generator v1.20 Build 2020-06-05 Func _Logo($bSaveBinary = False, $sSavePath = @ScriptDir) Local $Logo $Logo &= 'iVBORw0KGgoAAAANSUhEUgAAAhwAAABwCAIAAADaNT4jAACVR0lEQVR4XuzVPwqCcBjH4Y7aFDRFW+BQU3ODQ0SrkycQIxAPUeIh/Dcq/uoM0hI8z/x93/WzCj8CAH8TFQBEBQBRAQBRAUBUABAVABAVAEQFAFEBQFQAQFQAEBUARAUARAUAUQFAVAAQFQAQFQBEBQBRAQBRgXkMYVpwB4gKzH3XVO9XlhfxLd1H8Xp72uzOh+Plek8ez7Kuq6Fvv7MFr4EP+2b2W0eW1/Gz1XrXxfa1b2zHSxzbSZylt4H00CiA2KZpGiSEQEItgQQSmn+Al3nmBcQD4hWEYCTEMmLUTT/RTZOehsl0nMWO7Xi53nKv1+TuS92qcw6/qkpfNUmmY9PpRD2cj6/tU6eqzr0PdfS53/qdYugnG4VC8kqlXCzu5jfuLa8VVjb2t/eaD2rIERFJbEINTHJIIrHhiut7BG2ZpJGJoZNDfWMnohNjudGRwdxAfzKZQJihp6FQKLCfVn6iUCiJuA9KJbDI6vr2Sr64tnV/e7deqiOHW4hGqGYzTSOEYAyHSvjtzgWEwxmBuBDcc7nbRLxpkFYqIgezkbHhzMTYwKmxoRO5gXQ6RaiOniNHnKcYY/RlUCiUVBQKt9O+f//+veL+6trGSn4nf69U3G+Wm6QjbMzAIhZjoUUChRz9gsc4cAwWgWM8tyW9ho5byag80WuOB44ZG8kNDeYymQzTzK9OJBjj45541NMUCiUVhaLZqO3t729tF1fz91Y39jcKpf2SV+9YLmeY2WARShklBB3NIsdyDLyEEJ7ncbcNjmGoGbNEf1obGUycHh2YODV8cniwpydjGNb/WSRAaATgs07UarcbjUa73W614NWCDxAeTAhhjJmmaVlWJGJblm2aOv7fo8E43TG7lkIKhZKKQpHPr/35X/zV8rZTaUc6KBrczrIo0yllBCPUvaP1PMChZoSQnHue6wivRWTbJM2UVTs7nvj2' $Logo &= 'H//h0NDQsXTS9QQ0hJSNev3g8GB///7h4f1SqQRCcRyH+wiMUVcVlFJoM8YMw7BtO56IQnLq68v29vREbDv0hxDi+UhFoWDo64NCMTQ0/M7v/e6nN5duLxXW7jVKzTb3CCEM0cAo6LkZBZAICN9VCiQ5w+2U3R4fSp6fOjNzZjSVSh03oASVHlyv17cK9/L5fHGn2Gq2PJdLIRljsEvXdWiEVoCDu/kjbDgB9x8crK+vE0qikehAth/ElsvlYrFYqJYn6kShUElFoRCHBwfLK+uzt5dvLWyvFZrVtiVojOkRvw7/lUWWMKAIgSCbeE4N81rSdk8NRS+cGb40Mz4xPtzT24cQOV5Awf4PNA4OD5cWF0Enh+USbFJKDd2AXVgiQin0YJ/utIVNEmxDGwOccwJQBIgA7nrQBr0NDw+Pjo7192c/ryL0OAqFkopCIYW3u7e7dDc/e3vl1mJxc7dd70QQizPdYozhLy2YUCQwhgcmcRrYq8ZMZ2TAPD+Zfen8xMy56Q8++PepqemZ8xePW4GHfyTIGVAimpu7s7m5CYWTIJFoYWoRQoahhHOOAeKf2C2o4AC/LXAoE9gKjwnPokSDtuu6cLplWaCWycnJbLaX+COLUDA/1i4KhZKKQiG8TqFYuLO4Nre0NXd3d3PHqXtRRG1NtyhlGMtQMMcRCfc6TQkiMToj/drMZHZmeuTs9EQuN9BdVfzOH3z7N9765bd//c1jSSX0Qalcnr8zDzesatWGpmmMMc551xndg4UI6yiIUPLI7S8JCNxtYyLxZ1DyUE7BCNJ1O5qmj4+PnT0zlUwmu/fc0BejUCipKBTf//678bgdj0V39so372zcvru7ve+2RYxoMU03P3tORTxRJJxzt+MvII6ZfDDDIZFcPDcyPNjHudB16/Tk1COOeOeP/uTNX/qZ3/rNbx2rfAKBY2VtdW5+rlwqg04IZtAPnbDrkdI69Oi6Dv0SccCXSADsogGM6tAIB/d4BwYJ' $Logo &= 'D0OShPohwX/GGOyC4BKL2tNTU5NTU9DzPMKKQhXqhRDoOUIIaXecWqMWtaOM0nKt8njDMkxo+x/s/yWKY32hFtz9+3+5uryjj56InB2LvTxz8q1ffEUIvra5Nzu3Mb+yuVfRHG4QPcqYjoORBecQSYRbtzRnKMVnTvddmjk/MjwgubuxvXftxtrf/NO11c3SG5fif/an33n0s2Hc6XTQ0QiNAgFl9vr17cI92LRtGzoF9xMG2AUBXVswBvGiXm/s7BRhDVi58gDK+K1WC8QQSoUFmIadSCTi8Xg2m01nkvEYiFPvAI4HIACTcMGYYRggMOi8cfPm/sHBxYsXoeLy4r2iUKu/MCYISbhm7y4vLt1dhM1YLCaECDN7iODc9dxuivcA7iEUxHYhYFY8jN4SurDreW3HYZRRSjquqzFNStFqNSGtu51OpVoaGxn95uWf7e0b0HX9i9WiUBDK+vt712rJnQbbut5677/mY8aNkQH28rncr1y58Pu/01Nvdu4srd9a2Frf3q82BUIymaSnTvZcOndm8tSwxtDmtq+f7/7rp9t7nYZrET2u6TnPTCVTT5oNwcMrR3yMkRBSKBZnb8yWy2XTNKEnTB6MYc6FFJgxTdcIl2L/8CC/vl7c3Do8PHQcx/eBGQcDpdIpTWOEMUKJ53qwq9VswrOf9ZVVIbilaz2Z9NjoyMSpsXRvFhPadFyYUyBaLlyEKZxF4B0Mvbi7U/249tLFS7BC7IVX7xVKKkhKxD13fX31o6sfSikz6QwXnATr68N19AJ2ex4cRqhvjmarBRJilD6UjZACXuGSzGA02IRkLgSnlEp/EC4Fh9EqlUq1Un7t1ddGR8dTmV4d6egpKBQ4EdWl16Z6lJoWsmxPoqV9b+798t+++2FPjJ8ZS3zj0vg7v/3zPekEIZQGhYpCYffTWyt/+dfv391sVFoGYnHNyFGbRR5WYpCLZTSWQo9DMIxwxGXIyyvLt2/fFkJEo1EZAO2wFK9r' $Logo &= 'umHYIInV1aX5uTuFnV2OcLJ3cPLi5RODJyCFxJM9lmWFKgJgOC4497jjdOqNWq1e3dvd2dte3ykWPv7v65/88PrJoYHz52fGx8fjVqTZbkN0CeWHAyKRCPRcu3at0WicPn36RS4MUyipdPOKbUcy6R6QRBjhCfYzhxNcu4wxzfCPAhCAqa4Zhq5B/qAuzB6Tc5CIG+4N10V2ALcDw4Y9AAiIu2AgZFoRQghGR0KhyKQTUpaDpq8EjJDGiKYlEEpVhfjPpfZ/3F4x6a2+hBzo0XWNFA/a2wfCkSCSFNOyVqK7ZozDHx+MJXdty0SPQSkzrejTJguGrL6wuLC8skIp1TSNc46D2on0Qb5jBFpYWLh+fXbvYD+eyFx45Q1YU9Z3YjiVTsPxhBKEP/fIvQRg0z/dipJEpk8Ib3xi2nVa5dKDw73d1dXl1aU7//y99070937z9Z86NTUNFqlWq11zCCEg/XDXm5+fB5OdO3cu/D734tWiUA8/UkoNTUOCNxATCMeR20JGi5oESdwo41YdMWYh19V1z4hiZjMpCWOoekhaFcI0jFBoFkFwh5kESwwdhEjodQkcCS9d1w3dCKqRLx4p5VM+iUR+DHtxKNIJG/G9h5m6i9/mBCPTMJFpwdauIwqbrpSSMY1Gw1AiEBJIPnFVi2dQFz2GYactK/LFRuGcz83N5dfzoIfwlhclVAaDQo9hGMVC4erVH+TzG9n+3JVffXticqYvO2yZMYodKXyxCZcH84F8Vh9BhMLZRIBMOApyv29BYUSTvWYykx0em7z46uX88uL8jR/94/feGx25eeXKlcGhoUaz6XY6cL4f0AhmhiGlhOVn8PfMmTMw0Z55iUWhpNItJ9Kn5WAZ/EpGKdONtkANLSmZqYsWJ5pLfKkQ+wFuVAQiRHKPWk0WlVQjGDkwvpGSdqmNqZQIY3+oNtI8pHEkuPD7CEJmrWjWqw4EHE0TQkA9H+TyTBZBht/yjlVcfWSmOU7bT1au' $Logo &= 'C/vDRMaoRhk1DNOfrpgcfeGDlIhS363PwncA+voQGpr40fSZ0pNJIOmiH0M3vjCCmK6hgDCUfAEEyd6+PvQYTrtVr5WeWEfptpeWlra3t0Fm4fVACfEEF5jatoWE98NPfvDxJ7OYmZd/7tfOXngp2dsPR2K/bFllgUUokYQiii1oE+KPHJrFfxchDCqFpFwyKiTyXCQJF4gwM53Jxl9JDY9PLy0sLP7ow+/+3T9cfv2nX3/9MrKsRqPujyM5JhRgjBUKBWiAV76S51cUSirdJ3XRESBSdCSqIL1t9nh2b4s70CnD9BEZkJ7HHZd33A6XLsHdQWm6p53gNdfjQhKMP//GDY9zj1tCppsVzDtIyo7r1puNaqMWjcYIDPAMkMepIeFHplmzWd/a2iiVSrVqRUgviGtaxI7Ztt2T7YPaT8SwukI6Yo3qy81iCT+hn75mYHyEC00e1zqnJ0Zt9pGQmKBngxDYotVz0yOP9K+srNxZfWCay2+/+QuabjxyzYSN1dVViAKQSLqyCZ9qTFl6pVZ/99/eX1nLD0+99tKr38gNjZh2FCHudhxKsaFpQWkfhy8WLg2mMhAKCUcT0CeEJyTnEhOs6/4pnAiMPddDRMhEInXh0sv9udz87LUPPrpa2N741ltvJ1PpWq3M/VjGw9QCHw+evoS/U1NTz/6LiUJJ5X/Yew8oOa7zTLQrV+fpnpwwGAwGg5gDCWaCYI4mKZESJVHJsq20Ppbzyu+tfdZrH0u29lmWbAX7SAySGMUgJokBIAiQABFzDoPJsXOu7n7f/9+aOs0ZABwAFA/fPl0Mm9XVFW7duvcP35/Y63H81KnjkGgm8kDA5kEcIFTbNLtjTsBtu8ZjelsWCexF1QCqVVL0sjCjlMBDihaZ20E1VIj6JSwlF9FOESMAp5ukS7EU/OQSp+QsC6vE1FRyAsAakcsWDPfZdD5HypDbMHGJeCp3/MTR44f35XNZL5s6He6ALU7aqolU5eiZSh4y' $Logo &= 'JMWZpokcrhAP/T5/wB/E/samVtzS0SSmo6CMDA8cPHwQbqAwbMbjsTRnjYX3gdB4sOg1TddUzXCb4HzIFzujpXVe19zW1nZHtXKiECqbIBDdo7Hd3cPpbN6SJM3QxJALblPCIFo0iE46QMi44NQgTF6PEfSZ0CiDbr0+4Knyuv0ew7kyjvjoS5t4KX2jsfX7u4czOYyfT1ezkEBKRCotWEXSWWBRV3Q2r5s/47wu29HReefa9kdeGfBVNcJr5CIj6sEC0vGBf/mL29ra2if99svnX88orW/vjx05enzBgvlTxRFoAMePH3dQLycBl8/rHR3oe/yXvxqO55ZdecvsBSvC4WpZ1yBQaYqLsSm+AjcZTZGw3rBTMBhxEVZUaBBdRWKg+MCyI1VDxhWY+WBnGdpYuap+5pJLPdW1tXu3v/3ww4/ee+89rTNaEokYxsaZ6kDhwFewWGbOnOn6wNvv2u9sKuPjY5vfeWtosN/FOVAx59LpVL5QbO+YHwwE/a0tmLVM+DgiC+SSuENJKhakQhZ8A6QQJntEYhGWJdsJJRSgwqCQhDxIGdj3iyWVfwLdR7AWeFMZfSqrsEioQEXKZBqFn76Vp1mvoilqNpPe+u6WF59/Mh6P1Nc3gLC+hwcoMsg6uoPTCNzQNHQSC80N8c/nVRUJHAVuoQCOOzvntrd3Yo03NDSB05wRORJcM18sxaIoQLvvyJED+w/u6+3vTyaSWPkAKHA7NFuIxrX4X4HwB5wrNzY2Hpm/YEbrrLld85qbm/2+gIiXngQsSHz68aHoL945GM/kC5JkmAYXmyIWi6EvYdCzuSIbmSb8F8A28VH2ufWglxCVoNtoDvnqgt6ZdVXNVd56vwfbTJbAnD+iaQQde8eunpEfbNh7PJoERwmoSrJYhqqKd58pFEeiKTDqv7vr0vNlKmh//OVPqepjj/36dFGrA7m8oGQtEv6y2bTbNfw3X1p17VWrz4izlYp99YFSQ30lMmaHxEOX' $Logo &= 'PXz4sCyYAK2UstgPszx0l6ee+GXJCFy67sbq5naP10dyQ8nirP2q3VE+S+KG3QphVcRR+FMWGg8akDQFs6KMGSEOdjETok6QrKMb2A+UregN1rXNXeoJHd32+kMPPXTffR+fPbsDuZAFn3MmPFgguldTU/OhgWD/f0HbfsdUQP6QJDWZSgNxNUxCcgsWEU4rG7cycRFRZVMFiZpYgySJ5Ymgc2kj9hlWJMtOc0RHIHl3ulCU+VRV7KL1UM4WrBLPLdrAEgKCLdQaaqQkZaETQFgDS8qlYc7IZgv4xCmTIJKsK+eADLm87V2WSqZRx8l+Zmj6qrx9x/bqmjq/33f9DTdfuvKySryisoElDo1FXnn5+U0bXimxuhYKhmqqa9GviVSAaJKDp2Ef80hiqflc7t1t2za/805X55ybb7x5yeIVUF/ONtp46niuYGFACLYokBEqk4FqI3k8FL+Ai6maBSbGT8nOTApulLCs6FgsX8IAuvS+UdMgitQWDqyb2/J7y2Z73YYgix9V3EsSHrUD8UwCcjYeDnMjm8srWgECN1K9Zy2wdJ9Hq/FcCIiFaVQbMr/1p1c+/My7O47kJb1aN0wRSD/NrJG5bEotRa5e7FvW1bZsybwzEr55XTOLmV3LVjZU19RMopJQZAGOYR0J6zc2ePoZXp9x6uSpJx9/tuhrXLT6Sk8g7NY0FSo+gGQXBDWFJpaAuLAhtBNXWcGrV8uKqpCgxDAYfoUUI7zIJFtjxziW7U+JroVJSxdQdLVUcJvudMZrems7V91ycO+rv3j85w/e/7mZXTOhdmONCealc9QkklrCVQzuy1PJ/aRsx7QxtQzMeTbnXGfopqaQmVQYZurpk7qK7bPda/rHOLj3pB5OvZdz1tkuPp0Dph5c2YGpZ03dWbl/GmMy3fGZ+tIvkKkIGRoyjmInp5OFMz5t0KYsskWAAmK52IRLTHWChEmQxjQnhxV0iM6SIEdlLCtr4QecSpZGhQ300Fey' $Logo &= 'FnEUPlciPqGocj7jSo65sglJVmXS4Olm1BvIZQWQ65zE2jooD64luRy/ZDpAVjVF1SfmmhMKIGmqTgX8wIsKUiaXH49G8UB9fT2nT5288fqbg8EwHpNFv5Lj3LV//563try9ceMbieh4oCrk9XjBYvEn5EC0M9NKjs7Br4V0GvjYnj07rQKqE46svfZG4SYk9JWKSVOKpNPjuaKuSioGio5gfiwr2MAYlVRNwhVZbJXtMxmWYTamyUSNABVG07lkzhocT3b3DJ/sG71+2ezVsxrxqnC7j6yLKN4jJIZkPCVh2E0tbYFlsm+6rGQKOcxln9sM+f0XcOX1b7z+la9+pbml/S//9Mt339j08vp9Ow71Jwo+RferqiEI83t0lzLNPZ7SmWI+FnZn166oufOmdb09Pd/4s7/euuXMqb0KBQv0G9N3Kvk7ffo0IhxBpitFFrdHHRwZ+PnTv1QD4QXL1+jugKySZ+OEw7xUnlxiixkI/ckqHwQ1BbKDxmoyVNZCHhZNvGJMWhXhjY5wY09Oh+zQqi17fP5YKu1SPfMWXHN071sPP/Xw5x78XHNTUzIeB7MSN8WySiQSwMEQvHJGyuhQOvG1Eiu+MLWD113pjAS98r6VOTSnQ1gvskizw9imXhxfp/IYQYHOeHGn5+dbGdqhYZUjP7WHH2xRamfwJzGSSfzmQpgKVp1hmGiAg92mCVKKeyAGxTA8kPWhN2BS23YCx/YAFB/wFnQUbDDqJTgKlgK+QkFJWxYBXAI0g9KDTrPuUoABpQJxKGB3LqMnh2UrDUirYOWFEiPcrGRFVcnuUsZyxZqqfHIx9hBINciGJYY72LLpshOJ6xaH0Qi3GUB2WJG7d+0cHBgYHxu78457Gxub8ByOJWLHjq1PPf340WNHEDjW2NRiGgbwtBKvV5iR8H96am5l595ouDHje6bpxgBWBYMjI8P79+8/3XMaj3zHbfcIj2QnDA10ARVxsdTBLA3FwDjb+h8QG4kG' $Logo &= 'Dp+qrtOc5VlRrITpZM3UNYl9gbAfRilTLyZT2b29o4f7Ro8NR7PXLr1mfhtJAHzuR6yxaS0PzpsFY/Ebqs9jFmQZ40fdNUD3c5Ip14YC4WDw/Mt5nfiDP/iDeHQsHh3/3Oe/5PP7b7h+7V998dOJjGv73m4kahmNWdmCUnLZCRoUWpo5j1GuDWlz26tXLVkyt3PG6Hj0u//x8ycee3jN6iWQ3M98o1N9shE+1h1LJWMeb8BZb9CMh4aGQKDxleFhS2RkgSnu8aefz8jeRYsvd+lBKFBu1ZAlFQvEpsk018XbkiolVjTs9piGpkpluiL0OJHZBTixhlli5QrvQXHLvC12sBSHpaQZmJXeZKZYkgMz56/Zv/f1J5584guf+7zf5wMsIepIiuwv6Hx1NUwwtZOYxNnUEbEWLh7+wnXOTWQ/tLL8lZpTJVE+21fBaM5xKbRznD61nbte59k1p3Lla7qYx5/63i8W/qqYjyWxQbYKDmxERGIinfSYpphJjnBFoE8xD/s8tis5Cv6lLAscRZYcuEgCI8lZFDQgTPdQbnA/8XvOysNS7yFpTC0VwcnI4k96jCLRMaxDQUeJJxJEESpZt/2ZK+F8bjK5tRgAoS1uE+uNGpgl1pIvEIjHE08981QwWP2J+x8Q05qfNPvOlk27du+ora2vrWuAQA0FCQyAPXwk9KfE2zjYcRSwmYQFK3rB4e1ouAI42anuk+9u3Tp/7sLm5tZKHKyMZymqhVxRyWclA29Ewz7nBTgb4uoCJwQjlc9An+k0TZaqfGbAXTs6Ejt4evjXu080Vwc660NUseMjGTozGE0hUwqGF9JCqUzKaN4qU0YREkzAfaFfsvp7Pm1gYODWW2+FCy9/IzAyHos8+eTTz//qpSVLlt579+2rbpmDZFmqpmdzlsIGCtPQfV63z2viZu9s3f7a+s3f+tdHDxzYGx0+WixkYLiGdHXGVbJz/2nDXTUYSZw6dXr+goUT7uY5qCkit0pR' $Logo &= 'GFLYKIiu/PrXbwyPpueuWlc2aouyrqlAlsFRhNov44PXAK0ZZ/1NzC1AnnI+l4mMxbOwbuazkN0gXWEuaWaViA62ZS9bia7UVMqs59Mn5C3dY6RL6WLJM3vBNcfeff5Xv/rVJz5+H3ajw2Jd4FKwSp46dQr5xAwOZKmksAcPHgTLBL/BMWTh4f3YgNCGnGYoNzlv3jznlPPy2oedaXBwEOYczqXm0GgaOiQ9w0iuXr16UmcAMKZSaV3XnLGqZE5ix3Soa6UeIMJC4Y+D/txyyy3YFlkPxAEYpSxXdxZ52JzimxN3tOUBu+sTTcSDQ6rwcsNoY5zf16SE/bjR9u3bMSZC+nESHwjej6m+YsUKZMmqvFQiEYfDIdBLC2TTFlBsMiuGVBjqzphYj5Ea+z96JPYMdB4N9HL37t0o+7Z48eIPIvhxgkTa+SHAOXRR3aFYxrLL5rJFo6wXJdWV48MIlcYNGPUCR8ngMKEA2TI1UUaC13CxIns3sXwG1Ae6DEMguI4rlc2hKHeJr8ZYsY0GMJJs0Qrkjk3yEy7iyhZ9IapE+kRBLhUZAFCJeJUdmEECSMcgnCuTTr348nNVoaprrr4Oahk83zZt3rhtx3YC7lQaVTymDYvnc0KeZBTLQvRyPB7FpaCUBIJBvz+AdY4Fj7tNyvik68beA3vf2PD6x+79BAgBBbJIorflSDqXyuahvDgonoRmn0vwYJ4z3wgGBi7qiERlx4eYPyUxbxh/193GWK745DuHuhpCYCrOpPqoRbIMx1Ij8TQ28IScU9EeAPxBBPCqasg0Srnc9C8IenfbbbchLmQq3chl01u3vP3uu1uE/UBRQQeN2Z1zV116eaCqMRpPnOzu379n22g/DCEFfslFMbIgAWdc9mOjw4dOxnS9PpPz7j1wbMHCRWJsh4eHAXxhzWOK0pwhA7pimMaOd9/eefhA69yrFHcdwFFgASoQYrxel46pzZ4pAHOJsQj9G1xWKKvkpqG6UnEQ' $Logo &= 'bfyNw4kGGjeOQcc4laTH9Ic8VY2ASUvZrCBh6H6R/ghJxQYkPhftIwVeI6W9BKS0KPnq5l6xd++m2VveueyyywVTQYcFoQEIhgdxiiKLy2IxnO7pQe6yxobGdDpDUDA3RSXvAzw1KA6YygVY17ABjrJp8zt1dXXpdLpc0fCYmXQSpBNMRfTEYULbtu/EwaDy+DoVnxEfmiY6qfAndjjhyXwpBh9EigGbxGGINO2FF1644YYbiKNMZJWOxKJoSByFF4B8a5AUcV8SVVmydXo7Yd4l9yOx9vGpcgS3AH7wysLhcBU3r9tT2fOpdiPwrbc2bwILpxuhVXh0GjoplEiFIFIvStywsX3Hrt7eXrw+UQqhAgi1kRWhkgpuoXATQ8Gzlau7FSw0nIuDoNxiEHAMco8i48PmzZv/8X/9w8VE1E9Ve11846LoHafahlRZoIyoJXSjVMAqYQKhgAgyxUxbxVRhAvVimzzwLvzhCZjIsX8SjuML4lwcKhOzUeOSz5WTXLCaOPgWTYVigW0qBJKA1ucLgoFV9jhbEHW8aS2rWLh5BTspLN+gqk2OFxD4DLgC22bMGa0zDh7c94vHH8XGgvmLsFo2vvVm30B/fV09Dsd75UfHqXR73I5Gni1JkHC9dfXYgKEGh8G32qCar6RtOFISguNwfFNDw7ETx97atHHl8tXLlq1Alj8cA6KGw8YT6Wi2UNI0sjCweifgQ8Ek4EAHjMgiYxJFTiu8QgTxVcgpiMdwwqmamDS/Fb/PrWjWviM9mw/13H/FQk0hnK1MA6JOgUfxd057vlh359+4l9K5rzaSzo2lc4x5lrMUEOgq2RVCimDaXt3TEvAqIIjTaxAev/CFL+zYseMcIimmBIQ4JCxhCSG3c8e7u3btBFFkEdUCKjrVSWzVqlVnvNax492RFOi6oujB/Uf6hciFaQA3YsdIYANfbnNoaOT1t3YEa+d4g415S3ZrOo85WCme3QISJ/E8ByfBn8IjB4XU' $Logo &= 'oolQdJv6+HB/cnQ4mUyAqeAFagqLuiyWwlLpK0qJlBWqbZBlTSR/4eR5LtrAN/blxwanxccmKfAgcrlU2udrrm7uem3j5tb2prralkwaPIlGWyC0oE0gf5CsK60CWHfsrM9uzhMNB+PaQqK/YPhLhGE6YrXDP2g/t0q1BpR9z569FBOdy00N2ORj7CZsUnZTJgyZZcnurUIHOxAFNgI+/yuvvALvzU9/+tMig/UIwMzhIZTmhDsfeFiRmyA3kA6nmlhYVSnLvAIcQzfyH+JcbCNDKBRZsBboH7XVNZTVLRCwT5zqMcS5qx1kEhCQuBXplLo6VdxB4gaIAuB2QpWh+eSMTNkeJbbQCYZCl3VgfPw68RIVNMBOOFmAt5AYMOC//vWvv/zlL6Pa24UxFZ7vAsh39vB3kPSClWPzPf0mcRPvLk8md7KOkEM96wKEehWKDuqFf9BRQCVtN+KiJcYHnwWiiHyMiMSQNEsOlhS3KtFKJwrO0V9FYigZSo3H+r3FOcAnQZaYZCDxuCmO0TA0uoZtDB6Wk6FroMICapawsHTDXiea7nb7IP2dPHEUTEUUAydQjpuhU8NZdCg/LG6BPkCFnTtv/pyOTlyuu+f0nn37oI1Cw21qbMRZDiDGoZxFwAKmbgJSP3rkUFNLM4QWvKpalWCfTN5Kllx5VTM5EL9IACApYoIoC00uB/YcTyMKVPUChNeFG5ipSIbynuLsjtIN04QhlxuC3pFE9vUD3fMbAzVeDfGnqCCgqdp7mMr7eohJwrno/Jt05p2V1wIKkymVhV6ZJ0QUwBdPDMsCUwE8FPIaHve0sohiPP/2b//22WefPfdh3/zmN1999dWNGzdWcDnO4Hv2tmzZsjPu7+ntB4n3lHQIMemsTXlHRkbAsQSdLXKTVLwu650t70ZyxqyO+XlJk1W5LKlF9s7CtITvvUrL2IW9+CuBubKzZEmiLJZujx4fHx0d6oWffToZh1Mfi5g6oy4khmPxY1Vq' $Logo &= 'ZXm492R1U6dlEerMsJuQoCSsLNwFw5vF2gXb5vtg9stqAVwk2NBxOjr01qYtv3dHM7pc5iaeBVI5tIdZs2ZVWmsElceKsAo2KCSYoUOeLswPUGwL6okVJy7laCoSKxMOtwDR3LVrF+dKz3vcbsezpjL4zJlqLJLbTdXksxnPsY2rgdbv2LYdYj7mEqg5uAhEBKi/2MhkMyWGB9EfR7PhqeswlcqgN3ZUmmhi0MRZ4hhMEkBbsUgUDYoIog5w5SkGEjuaAnzdLhctqU7/TUOLjI87z4vD4A4O7U2gGiJjKYsqdmMhw+YxGjccRp/cnKFg+YBLQRSy+B+6DZoGZeWxxx67+eabb7rhRsGML8iluFQi2g2Tnkb3K7A6UgnQ2jGRFTidIPQYuQyoA04EC8H5hMZIAvXC1ywbSAi0heRMeAcdD3UD3EioHPxkxCkISgPcjEvlSBnjicvCOA+MhX2cP1+qEGewBYaCrjqKAm6fL4DcsKJadNXWwPoYLhRozPAOcEXhpivxqCZTyQOHDqxefSlruVHcARybB7dAj8b9I0JRIA44Z87cK9Zc2TmnS5aIHa5YsWb5stW7dm17++3NCE0wTaBouizAK6hTLEQDhUWfd+za1tnVtWjJslgijtCfaNrqG49HUuAjpRx0EeaFRRGMwk5rCIgExemq9TfObKClo6mxbGEwlkpkC0PxFKxPQY/p0xVMGZb3iSfhxiyZutyaMjge33qkt9ZoqXdXwVMoUU7Ch83Q3kOmAUCNJtJiJNN5C5CUW1ebQn5ICUBWZlT7SRqbRioY7BcShjPRTwyNI/hmLJXVVaW5CmYLrbHKX5kadCSRGUjnMkBRVJpAedanJBHUVyx5da0lDKVLn460+6Mf/ejb3/72uQ/7y7/8yz//8z9/8cUXXefTAMiccf+ll6z6mz/MEsqqKldfeZlwI+7v7xezsciNDF2G3tfTfeDgkXDj4qLqwbPpMvRdjVg/6+6Yj/iDROGYDBXM' $Logo &= 'MwwkrT4yJ0QGev0eLZ1MBQN+zD+aurKOZhNK1YPZAoNQIpke6O+vqW3EiJLIRY2C7cklhQNmyfWS618KdUXVtJySzJXUcEPn0WOHAMTPnj0btytxw5UFj2xoaHCUFUE9OZrYi7UrjhEElJLzQ0e/uIaHwpXBVPD0E1SbmAq6XFm4DBwFFBnDi6BmXpci6YAyyUWqzI16aSM9JOtiS8CDDqTvKNDAoyAXbtu27a//+q/x1LAq4aswn+AwdExA0A5zdTL+lCtaJVNxDmOnbfrnjKHw4Ehn0hhhSMrgMZ2dndCh0bepKhcALpBfAlSLzi8kIjuOc/gJnO/I4cN4CxAdhOqD6ziVQFlepYMnhhGnaCo3jIvDUXgY8BNzE5XIPn6Ftvr8889jFfz+F39fQIUXbKgng7MwHlisAUF3Zmck/lcU7rusQ7hKrMXbloocFD2E6zFEhj+VY1LYjlIEvcfqsb3VylK+THQEJ+ELq/kT1gLaT6fxqa6CHUBpR0YLtQg3BoEW4hgnR5JzjLzDXLF06TwkzsM7cABOULTI2NjJ7u7RcVQ6Sug64Qa4LDor3jJOx9DiMQF5HT9xDBwL5B7PjLuIKuK4mtBSgPMl4tGWluZLVq2+4fqbsXM8EYUJJxyqQrg1qlNAw33m+Wc5YpQev0DAlajjlIOEA4ByaGQIs1SVFF3RpFIhl7d6xhKj8ZRMgT1gQYTx0RRgwxHOHkvlZ9QEb1s86+o5TYlsDkMxmsj0RmAlzB0ZiR8Zjg9GwZ1yflPHCxH4oUK8t4zhLSpqLG+NxDOQSEzDHc8m4YAA+d+S1dFkdiyVScG1OpE5MjAOLkXMQHIls/n+8YTH0GfWBjHCNV6zoz5U43eHELdg6GGf2+9mjZvfqTQ5gxlxPcgAI7HUUCx5dChyaDAaz+ZhjYeG2Fod8ChSR13V7Kbq9toqXAp3HBmN9o/GwILBU4i4Yo4JsxkjreB+M8BUdO19OcpPfvITKObnPuwzn/nM' $Logo &= '//gf/wPIA9nwp91ASs6WPxTT4NOfun+SRQfSPfojKsPbIIxV2rbrYFat8oSb0gjFBdMv4YlIJ6FwWUnBf1hfDPxLRWY1iNRhtLeoWMb4wMkaP47JA9xmS56uUCMAijYEseRA17racPL08Hjcrej+UiFjEZJVwieuJjDnEoHNFqkqNE+YeckGcFvTVz2q+nbu3t46c6asGGXkVAJBVGltgNhBSMcgOMRakWRNUd2GCTovgvtF0XtyjOZ0DxcTBQkoAaIHAC1HTRGmo6JlCuwI+4HsA4oB9SS0QFMlbg6A5iA8gkg69m2hAwkXBowdjSQj2I6a6zYMLPxfPff8Pffcs3LlSvgjwGKBY0BYQOsrNSGHlONXgROIEahgKwINsTmuw6SdntgcVLW5Ah4NR+7cuXPRokXgH5NUATHaEAQr/arFsIjnFaYXMFqghBBrPG6j0meMZ28lxE1jwjMTh+OP5hLGaWLA6ZOz+oICKWW5VFNdA9VtoK//n771LRwrdJcLZCqOhVkMq3hpeQ7k5k2h01GcisycocBzCUBuOk8ossaD4mgxuSJxFDvdCDUwTdLvC6xui8OcAAwR+OVgM071COJkE7Z5MeikwzBIohoGCq8AKG5sbr5u7Q2XX34lEoVRiDGxo3J9bX10fGzru28/+fSTBw8fbmxo0NiIytb3Ei9LdmNhABGvB5/i6QoUdKhLrAM5PQSC4A+gvl4A2KU/GIQGhwWIkkpuj9sfCC1evGzfwX2UVtIR4uyXKWWyWUxruJzhZiKaB0K4r6wnC0WQciFOSezrTK+UCWvaKiVyBbemLmqr62gM9w0MgUvXBbSuBh+8qqPZ0qYTQz9fv+fQWMqoN4QMJaOHYGM8SlmAHFSDQPP5fS7dXZYS5AlXlvpjqTcO9716sHsskSrAYEOgiIRD0QOBwsNG1JtIYZEZ5dKmA8RuQwHfovbmy+e0rO5o5KcRAsHk7GNofZHU45v3bj/aMwY5QtOIWxeItx4a' $Logo &= 'jiGDG3hlU0P4c1ctunfVXIK/4EcIxcg0chbZqySsUpWImfBE0VU54NH194PpgYC/L0e55pprvvOd74ASQTAEqO2adrv00kshwE7nSEwbqClY1cJEj4cW4m1f/+CRU4O+6vYizXme78RPyOBBf1gzcplAsAnNm3OskCylmfroUHfIDTprxJNFXbczMrDUbZueFW5OYeC2GY37jvaG6mYWyHuOVgCYG2n6AAisEqu/aBL2409gwFjW2YLLF64/2X8MPmxtrS2YEzLeQ1EVBmpI6xDbxS0csqBxc9BvoWRgj3xxPr7CoE1drCDTuHA2a0vTeHfCHQAIFeRxGpApLcvNoe5oTr4A6FhgfpI8JQ6D23/9138B6nzggQegtMGehNkCaiBkecdLSoyJqPGMA7DhsC58imtWRqE5D5Jnw75wdqjkoyJbLn4C6wJjgDcX4KZJ7tpCmahEAgQqKO4uctAJvAvnStyccwVfcSib4Fj4dMQRPJ/XG0A3HC7OSgSWI+nEUNeAFf/VX/2VQPXF3S/YpmJXbHSV7XwnDv9lGzEJlNTRXBa2eQ+DwArjGhZrUCpv58lJq8zWZhgjWUchBcWF6S0YBF3NxtEEtyeDLWXGK+SVVDKfTgJ15gp3+WwuTZYvVcGpmVQ2ncnm2abEpYqASpPDAnEvRkVRNKwqHCKmweiboWh+L/75Dh1Bwtb9GfbZECoIxlVgccJfC3ruwGA/RECMvUpSAJV9AciNn3gcyAiPzLKnTp7c8OZ6qBOXX36N2yBshAP8c4S/L11VFQrhClO9u/FCWYNRGuuboFNjmVNWJinXHU0NJLNhr5G3hIOOTaPBhmNpzMJiyOeuD/pwLQ8Efp1IieoiE31zgx+A8qbDvbtGYrFMXlWwU7gzQAgSyQcVrK0EPR5xmdpQ1VA0/astR9883Hcinu5NZqAdYVkYisAOLIl1Qzw43iDGN1sG+YG1zkLHBlLjkWTm6OmBE4PtqzpbZ1QHNMWW13Aw' $Logo &= 'pjzOAsL44r5T7xzp3XqkJwUsj9YT/hVl9sYQ0Bb62X96OP3SuzAcLWxvGMFDyjLJ1CWaNzK/0Ak7QMmtyS1Bw6efax6j5tVnP/tZrMlzpgLr+OlPfwotHts4kvTOaTfQL9CO6Zia8U4hQTs15MUKxAQ6euxkqqQHPWF4bGkmdBHm+hDOoA7IJcgzlOaOZj+VkMTME4vCNNRoJKYV4w01ddl0Wjfc4LqiZJH83iZxU9hvPhDwtzdWHT59ItDQgUWRt0hgAOTMnjHCkUO2WJyiP1rKWFQanDcVb3V0bOD4iVOtjTWUJMciGVxwRzwU9BWMXiWZc2ATpwMYJex0XVxzis04QJawG2tMgvDuHn30USiazht0aFwlpgR5Hx5owpkNBzixBOgh9FT4cQhWVGn/wPWhl4Ai//Ef/zGYFpgKOBaogQHkTRAKboJz4DAwJ6ik0JlgccGGECAqzTPi01F2IZe0tbXB+C9cOSYFoxDRZ4YvkL3LLrtsUlQ8BlYgUZVGGodN4pRHHnkE3RPS/9R0UzgXHVizZg0eCtvCnFGpvb3++ut4EGw73FGwHwwLNDasL6huYtAurp4KDws4FrgLcBtHO7F/YmyrXGI1HwI9pF2plMOWTJKyHV1YJog8T1dwYY4yryCOkhHYLqss4hVMAJAlNieS7qDBLpKO5TNJmEQgSmMy5fI5ShmpUPBwFiazTNYi3ZN7QYQPH7hmAWmDoa3jstF4FJcjCqUgCIZSdYWramACqaoKpJIpdD/g99oCkQD3CoSkAT0dj4yTEZJmLQl0lpVzpovOYoXP40aUNQK24YiMfiGNGKWG5Y6lovHm5haQoXOPO949gDhZlYVBdSSaAKLlBX5lFcRkFMGMYDtR2m9Uew0wb2B7mLkcGkrGVqAYjZ5gY3WgKhwoaSqIuFuXwUtYunMpjFOWi+QyBu87DJjLVTUYt1490Pcfr+080Dvqq/LVVQcAX5uaCi3adsUWirxAgdEfxjO9HPcO' $Logo &= 'v97xROJg/+jh4VjPePLjl3S11dlUxgnYfH7n8f/chNyQ47hmbXUVtFVyisNI4oEA/OPIgNdfsCLx1Kaj/YlU7rIFbUciKdPn5sw0DDuzzZPM1YqGrvhNrQl5DLSzqtuQW++//36Qg3NzBbiHOi4rUCbOF+WfpkcTNFeQIc7wZjdsI6iwp3dAcVdlSzrlRiAezE5ZIAqY8XK5yLYDixNBEshVxEqSi4qUBtyeiC+fXW3lUyx4qQyQT9irK5rDwHC7bCreUhsYiWX7Rod9/mCBoQW+PqGr+OTvriJzcVaVaLQLJYWIjDuMribjUcnjR6iYLT6yORDjDKYyySPG9pzlwxwN5qKzbTsb9jNWejPTOs3nQf6c6JmpPAlQEmg9+IrFCfIc4l5kvAgSPU4HlcelKtUU5seBr3/96/jptddewzJnSIrXApNvB3oCPAWu89xzzyF8BL3CWQ5AOjVsXpwFVU8EtcArd926dQjyKLDTbqW1H5QNLxwCMVg4uCY8uR1FqlwReFQJDDhIEo5Mcptk6he8ULAfTHukSIBHAAZQ8GwnfAoSA5A3HCn6U5kZAZTq9ttvBx5YaVG7yCJdFXkRpniHCnYgGCPmblYqJnMFfApXV0hDIiMLttmZAPCuDFksz2OgMH5lgSexk7etFXEdbSZSKheRUDk1ci6dyuECkP1JxuNFxdKRk6SPZr+i6/lcXig9+K0ydzFPNRrZTCELnMDj8cViQ0L1IyMQJ7ogUAv/K6sM3dFZFr6T9mMr4HaIM+WpJEgNaADY6Nbt2+Em39Y2Y07XnMWLlra1zoTZ0L4tcjBnkhanahZ1+AV7I684i3L/AZIq4SceKxW+BDmSJiv97oRchEhAb0nSJRcmnKvo5gRZjG1hbPLUUYxxhtS0ktfNuolw5GXKJfKPYdLQYYgjymU2H+19fstBmEw6ZtSqusaJCVzwVy5rAJpIz0A3TVXFBi7hBqcUD84oLMbL8PtDpjuSzuw4evrqzhow' $Logo &= 'lcr4XShML+46Fkukav1eADXgJRlJov4x5mmxhiqzdolHrqsLDeWsF3Ydy5QlN76TH6DKj86vRNFgDYK25TE0t+kD53WdqUFCvPHGGyFJndvGDrN8V1eXs+c3v/mN63wanXv25hi0STgYG83RZCqzPpTGp+YyBodH4figBpszOZdslIyigmfFFKCH1rAEJMwHYUe1JEtxqXKZ2ExBNWJjPUtnBzFRYUlnDxHyQCkV6Z9DwVld4FZSMNnIMalcSmULne3NYzv2JhNq2dDgqCjnZYt4Cs4lvkKLDhObTfdArbMYX7CzPN5E9fj4yNDgaFObF0+B2YNPEQgJGWhWsehEobKDEHMo3mZXSZnhB3bguYgm4EAAG7wkC2J4lbIqssQC4fmTP/kTbFcWP67cQE9AlJ/+5S8hhAnvWKfhVzhtYuXC6byVba5T6aPI/w8PGsj1iVgcC6QSgIKCCY6C6D/4QWFeQX4HVgaRRSBOU53ZHOOHsMPDNWv9+vVPPPEEFAuQaVwQmqRYYXhqcXwc70zXDh89gh5WwKpWrsCEUyk7qqGrQiFevnz5v/7rv2L/1KQDjvUFEBa0NMJByc+IiAM6gKFWaUfhzjvvRJcwJpOgOaGtfmAR9WIoxcvDfQVGzIoLq8yMXgn6TjOeMCiaqELUtUTgN+dFwj78R0qMMLaXS7aTEnukQHtxXHUZ/yAPL6gkGGMP18WjqU/HlQRAZtMdRxmyaLEA5WGCTxCCaRiYGbjQJE+2Kr9PIyqqDwwO4R1DtwApJkmNC1LoKog060DpJEclhXFHeJUjiT3egsygNXGaYtEZaPQWjucJaEbxSP9A755du6uqQphz7e2zGhqb8MLngBp1zrftt9FIvpAr5ylBk8OqFVWBUal3PDGWhv29KF5ZkXQ1GkldA5mQgBoGTR2JhzWZ7FeqROxEWP6rfBTbPxRNnuwby8RS1T6TfB+KE1PBlm9KsP97JbmjofrEcOwHr2w7NBTB07oNlYP/' $Logo &= '6Y0puBF5oeSGklkE2oA3QVn0aCrgOIwlRlMRPWOfCyCvw9n8iUjypX09teFwe11YSKsnhqMv7D7+9vF+rxsdl8mjKVcgls8BE3hvFvbwi8YeMBhF1eL5TCqZNUzDLYMwod+qU1gG7BZzjVKfqQqogxePrU221UOQxDI4Z0gK1ej9wQ9+sGTJEvH1wjQVuFGe41cnQgL9GRsdE8Qrl2MxiPNBDA+PQkfRZRXL2HC5aUDYdxKfhAzjT8InCL1LLATKluD2xsf72kJatVsdj8aEa7CgqmXewCcNm6RkMzlyMtVs1kICFvhLMWsq2tzZMzbtPuUON0DexSJhHwggkNhAgzDHGyzMU5fKtB5VRc6W5N7BsQaIyewHD7ou4BE4IMB5EenJnUKWwh1U9MeOI8mpNtB0EQ1XIFgilxN8y/HEFQzGoe/nACHpVzZgOEylyA2/ChBJ13TBP86YLgyUFweDB9CAcWIOB2P0ebzAWp988kkYXT7+8Y9DQZk+oIepCPZz5ZVX3nvvvd/61rcefvhhXARDbLFRWUwbgV9B9cFow5Mb/M/hCrYxhuMcHLLsYOzO45xN7nFMQbi+mEWQQ0lu54ad+PVsF6kE9C6WqYhAGI4iZNQPRCGfFzCUHUzFNJ8SorCuIPxELdaos5gZkH/BSCCpM6mA/wn7cNEXi1Nx5DmAUGBl4n7SRLicxXzICcwTmO2kEAfaw3fnKEj6VdUUjee2bgDOoWBpEFRe9yBJpUwWefsVaBY9Pb11tbWcoiNf4oYVKSxX4IPJUqG+rgGIVl193YmTx8EySPrjxMMuQgwgrFh09zwhkiEy3oQxSulUurdnD5QJTVUDiGmqrUVUysrlKwdW9IM/+auCbq87gAVZLONIjloglqhq8kg8dbB/bDwH+IGtCQwYZgsYK45SY9rjNbWw1w1mWXKpJKWqkkL3L8YLhePdJ36zt+fgQISUwAmzhO3DrlPIPi7V6PV0VAcMw72t+/QbB05V1QSb' $Logo &= 'Q4Cg6PUK9laSyR0APqwdNcE6v0cH8iSVR5LZ4WQumcVSdnl11dFIwFcA0+Xz8pvHRuY0D7fXVWNn91j8mZ3Htp4cwFXhIoZ+5zIEtUjES1wsZ8tQp1JZDtgm8EeCKmOCFEqmPemZ19olMEEWkfUelVSw+k0NhnwNwLbmfm8ax8Jf/MVfAKZwnb3hxf3P//k/77rrLmxPOtd1Ps1/znSWDtqApEEgu8Iey2g+i0fZwsjoeEHyQeLHW9UspSDDvEUiP2WlEYpZ2VmylHlONpREPBJQ4q219aNDkZxkJw5x/GVE9pf9xw5CNV+wYAH2y2pOqCxk4tZNVXPFY+OhQHBOS3DfqUGjqiVbpFiggtBUGGor8AaWJ1xv8FlkgYlcz3Rv/3gc4DJWDhPiktD+Aa3AMF7FTMUJMBCEXmD96JIgWK6La4Lwgc4IW7EwJwjEeFKqq7MxFdElXGEqUxHKgRNLX3mi+FUkp4HxFeYx3m9n7RBm+cF4AhFOf/KNb9xy882OcR5tmsmJRfdg7Pm3f/s3uCzDuwRQGIYaP4vuCfomonCEJzddkJc2wddYHBapF04ED4gkTjzHsFTuwZHkKcANFwStE2OLZYKndrScqaeLe31Aqe85fST+dLJOkxFe8DdYufPFAseeyBhXYJwlSkNk0VQjZ2JLY72aOEpZLJMSATuMcRWInZCOLAafgXwLBAXfaIOIC4RTqnePi0yJmCu7GP6q3Fs5KQzKeilj0sgqXdjn9jJHFM115Mj+19e/9uqrrwCCA/BjGDquB6bEFkk8l0LWe9g1NbAbd319Y0tLq6xsjURjdbU1OL2Qy1WOtcapZ0E8ZCqlrLu93ka3m2Q+ss1Y4+PRyNh4b0/vCy++hBG48orLP3H/J5pqydCSSCUVKFToIKXxl6LpAnK0cJisjHjyAouNaFCaONUzo+8iul7Wi4qRcVmw7kKNiBdL2/tij2zYu/lQb1bT/DVAz8ns6sxivAs8KSqcVbd62+pD' $Logo &= 'hwfG9vaNGB48ukx2GQmXAapGTtvxbAHRLh3V/ruWz75zWSc4ii4VXtx/+sldvadHY4lMDtIRI4I23olO4hjIgRRVw60/ln7r+GA0kwu6dTrKIs2ShImyhHctvCkiySySVmFW0bvW1GAIvEmh2reCo6gabaNnkCI5/SVnOtCqPLpCX6VJktf3v/99rEzXOdvXuWFjkpoCgPu8Euie26DiLFqk8BB+X/YKLOFcFRJYNBaX1CbKwy0peKEUemKBj3NUil2djgQySaiVsgaZQsmMzl1YFY8BTPNJco6JJI2ixeAF9BJYOF544UVcGWWCkGMY8SsiXBdUGC4VeMe6KsdiozObgr3DmcFoVPGA4lsFFlQskuc4mSrNN5EAVqRyIXYrK2Y0FYfW5fZ6SiXbSC4kaICNLc0t4mltTSVHvheO4VewhItMMUr8gJuDfeFeAkEC+Tu3yFz5kzBaiHOdDVxNYB5nOxGME+wEBIQfRBJJ/ETiQQwvDA/XX389OIrw/nKU1Gmm1hdfcS7gsj/90z/9u7/7u4HBQWgwoLIOQOfwqp7eHpiF+IJ0CmJUiWByY6ZiO+TgJ+fi75vI0tFUSEAp5DmBDbEV4TM9netcNPwlFG30nHOxEDokeH6JoVTKXY/VTnZ0cEBQ5JSUsXSYJgn3cDGAkyfVHpsgQERZhOJv8bBRpJ7gJSVS2MGOibjIMm1QnK4CcW5qPVkH/sKJRRwGWJDrPNJrKOTdJhlUE/HEk08+sWPHzlw643BaTIujRw/v3b9nbGy8vrEBukfJYmsJgbPsN4lyxfEEHi4UroJnGYJdPvbxT+7as+eZXz6LcWikU4A94hQ79ltIFiX+dDwxwGAsfCWGSkMVicUgu+LwyNhob3dPV9fce+/7RMfMjkQqgTJfFHSpSwjS7RtPJDMFdCdHmjCQbAtsmMQTScWF3VXesUz+Fxv3b9h5wgMjZIHmEJ4TmSK6U7ldPUPZRMoTDpqGWSxwficXTT2BwxaB' $Logo &= 'hSVzs2r9i1uDL+zr/uGb+9MD0XQig9z4OMANu6yqgqdGBvoWz5/1iUtWr53b1BzycNSReteStrqg7ydvHth4rB9wFhuDGPfEKS4ZwgEcnVMTYum+k4P7jvYphlob8rF8WcqCWpVoTPByUJKnfyTu93luXj67qcoXSWX3940dHYnGSsVav+FS2aWAk7O5xAYJzGxg97ub/R5sTEoS8/TTT8NFx3XOBg/jf/qnf5q6GCCHIuT4vPyJYVydjqYC9xDoJTAQCdQEnAK/pVBgIQ/rvAy9jQsLERopW/SswiqoyDSHLIlcsBjeNHKZ4Utn6vlUPp3GmCS5HJsYVDCAvIpxzcsvvvib9sWXw539uVfeuP+O6zXDyOcsLmKXM/S8ZRrgPABXc8XE0lnB9du7I6UWFlTymD5WXmPJx/YwBhRJs6YogbcXC+gPQucsiM8wPZZYSyEsQKIA3sh4zA5PptwZVoYETouRmbwwq2DmAT/F58WY6WE7SCaAK9t6BgFWctHSiKlgezp1UIQQAMycH7IoGvMYepJKKjy1NgleYh4thwHKozMOoaefCjHMZ4GFytym9mQ6e5j3Wy0tLVddeeWx48fndM3DtMF+R6nCCODioyOjzukgdelUxnHWckAqqXwe5WGYkktc8I+GQkCXlobFTUxFQHnTT0t84fVUeOCIczKhy0/wZ3YYZ97ATlPE/iirDby6fBaYCqL5BCvKMyJJMe1krmZ3fO6mMP9iFHltcR+wLVMNVZaE7eyPU/sjCneJZqda4WgO7ktZZ8+HTCr1q+efRUA8FpXjrABvMdwerKK5tRlsA511QvQ5EpfC0eH3hYU0b+4809Bxk67Zc++88244IGOC9/T2ATHDBW1HdYDXHBeqMGiGFYj9ItJSodKT1NAvw+0BNIaV3tfT/9gTT2DhDgwP/sk3/tzjhaXGjynv9ejRXOzYcCyeLrD5v0hx8AJwoCplxHcCbiOWyr2+56QrngEDxw3s4YI2hprF' $Logo &= 'YV9dXbBMVDwnYckVmTSrbC8hsDKHt9cQ8s5trHrzxHBHfXVb0GfolPsPN/IrCoASPMewx7p7efu9y9tNuRSPj5cpXkXxmXp70PQbcs5CT4sGiB5HGMkyYcDgGRlIfDw9jg9Fth3rA4WBNQXMgKZsmYKWhHAYSwIUzNUE3PesmnPf6rldTaGhWPp1qEFbj2w7OQgxGauErgJvbJ1zYWEDCIbNVLxNAWIqxYqVg8hewNmuc7aPfexj//t//+8zahhYS+cF0cBhBrLk+2ozuCY8gmgesvUbTeaCdZwNDs4qLGZIJYZY7bShklMyQUzUcrpshJGfdF5T2e81EUsDQMli86zDVEq4rK5v3rIjYWm3Xnu7x9SOHdy3Yf2GtUBRyEyoK5YC0YfLgkGXNnO5YnXYNbezbsPOIdVXj7MLBeyjRJIFoakQ5Ubf2AeJzaKstVuQA6pCdgULYRnGBswMGD2sDgGMW0W7CduvcHXDARdvU8HVHCTNsalM31pT4o6DiYihED1lnlIQ/mPnyA0MTYXuy+9RXMpRHaDBwCiCZCoXX6dSzMyuuXOPHjtW4FdcJkySwTrQSQVfAYdLDhojFDWBVlVaOEAfzme0y9Z7m5CMxYrAxodR+VHwQiaeZQBLJPmCEDv1TVUZVvtcNkevC86+UBpkktEzeeqrMJwAHclbpEeI69lFt2muMMoh8C5No42yvUF6DX5SVNqeCn9ZImafthWVEuOjUr2d/kzThHUHlJjzdZuVdQs0lTBfGafAoJpMYp+iYVsmh1srT/C7boDtIX/J8qUr2mfMwgSCoHn9desSkciP/vOHu3YeQGRMfWO9h3JClAxNo5gyCsHVafoWsWHYG4qB54W1xvFOwcyua6iDV9jo8OiTjz+OWfPlr/63uR1zSya6qiQL5e5oEiCCYIEwW2HG2VgQPEPAvTjyK9gQKtdV0QjYQ2EPKIaUfctKlbkhBTaftco5yMuGSmtd837xisW3Leooi8BVgd87' $Logo &= '+SjJqoQIb4h2Rb/bA2aIXwfGYz/bcnz/QFSUGWSxmj17ijRmImsNI2nlg71jxyNJxecG+Ulm8llORy3KqGO+jozFAel8/aYVX1m7GDCp6rLaQsadi1vdupot4twRRSr6TKVoG22EJGz7bsCYBN4m3qCTLA9R8edeAJdccsn3vvc9SHNni08831i86USoCLTaUVwogxY73WQQCVwAnghzlwW4k0O4VXBcCSCYzLndZJwuPB61dCJa70l2NdWPjZNTu+P36ZrQjyHVnDzVs+vQqZs/9vmyZEAWWXvzvU8/9H0My/wFC9ABnMVkoiBRK+DrWGS8qb5pXnNq24k+01cFECFPoqAMdm4bV2gJKAyxkqEUXcP+ZDqL7wRUM1Nh0ZjMKrkcMZVJ3k1MqdGKF1/dBFcV0rqDVl2cZ7JTvKMsNt/37QvzvrDiOo/jOP6CsHCezQ+mPjfcgSCv4EGdwGGxYXHTC9o5Srk47PO8mEGJm7isw33L3D4cpsKu9OAonIcb7FRmYSFDBjSOCMV74kwpIKAEWMESKxmZEnnGEnpMp7MNEKcz/YIqYEMc/F4F0IErTN4QaWBKxpkrxkzKrcsZt8FqhNJEX1UNnSKTpcetKISMifBGlekvDiBxjNYnVxJjJUyUcYR0FE/EkHvniiuunjVr9sjYCI6sqam74/furm1oeOaZX27d+nZvX08ykYKeGA6HwCRwIhs9SKuyija+R769rKUBEnTc/HXD9Af8OOzg/v0v/uqFltYZtZ//UnUVmbgRYDgWp4r3inDwZ8cVHih85ZBrhWAURRZuxBrDg+SbTYpdoSAyulSuIplL2QNZjw9GYDu6/eold6/oBOShqwrCFV1nab2RxK6ewQyonazi9aWSmQ1H+rb2jqURM+Ux0LEMextrFBMqWXnIw0VFVf1EX+Td/eMHhmOQminugUekyFoX2lgkpav6JZ0t1y9sbaoOJqOwvJUNTZkR8n3yko7eSOxw33A6mdYkj0qS' $Logo &= 'hDwxNyiGAzwfaV2Qdozrudl50e+++24oBK5zNkQPAFs4x7pynU9DiDXKuU/aCb8d7J9EjGCHqJTcbQWMtHZZWGIVgn9pYDhPOq0njJ6w1GMjltE95d6V82pyFETFKvtEI7ZDUhRlf3zzrXeWrLqmtqUjm4ghtMcTbl5y9Z071v8CHqjwEKHDFLsmqUiNJKvuRCS6bG742Eh8NJ6wFA+bVSyRbSzPzIBQV6Y12FYlbBNbYj/y8gQZYpc2bjBWordO2mDHaAzmVFmI0Aasp9ccCFGggopKF8cXcRcR8m0ptGeaegCfqDjvmpZ+kc5VuZ0j3kIE8zshgZVB7BrbHyadeJE6GSwZ6KcIQxSVDkTVPqlIgzLpoUSblFxcnDj9wFKBnjkuGPYIM/7x4TCVouDbXNODAtzALrh0QYZs2+xMgakHYFVlC0o6l0sbAGzZ+E3Bwky+8cxCkHZidxS+KVfcxZdJGyKim6NbZCaX4v3TmiS5yRbEKyJXSTOXBUkXbAMbDC6rVOCLJzrbXWxzIrYJvOLlItmLQwOnHB8dmzmz7aabbgJHEU4KIOrj45Fwdc3H7r5v4aKFDz/0k5MnT508cTKTSpckOHGlyEmDxGGZn9LOIF0Q8hqHozkZ6yDEqrpeFQp0dM4GDX3kkYdmtMy4/+NUEAzoSBJ+D1xMgzP1Q2EgJu3STZyLDb4Y5ElsTJQ8E28Ex2NDlokWy/TniFT5bD4RS+GFXbGw7U+vX3ZZR+Pg4JCsyTqhduVowRqD8T1nabo8nMyfHIFbb2EgmkLOR5gCEbOCuPme/lE4pAXCgbDHdKsK+iciVwyVZjH6i3VQ43EHDBWx6f2R+Fgi7TUC1EGWqkG2sgx4ZpO5VXOa/+i6RTNDZjYVAWdC/1l0R2bP2jWdDT/d5M4MxgDE+wJuXFok4BM10BSrBEdq8BULbiAuirFFeAHinKezVl0fXMN4Tg2/h8Q6CXd2MnDY9uESGx1L5GyR51xEJCyxb69U' $Logo &= 'IqASinlewu+AldktAXvTA1evrKs2tdF0UjVYdSBuwgHwfBNTlda/+o4U6pi59GqEUHBy1RLKq8zsWtB3bOmbmzbdfedN2YKOi3EePvwpNJ9klSVr+bpVzY/86lTB1FBFz+LUyOipqGIBiQx95Hh7qDFF1UV6DDMS+p2JnUyVJnOYHVmRCh46LqZTySDKK9Mk1aUcacyGqYmXKKwv00eKcKTQIw1Tp5Wk0NImMk6WV+AaKtjZ9BsjRbSi5CKtjAK7sMB+yIxJOgf8BU8/vD5Nx+1VoeJgSjOkaQmrA0IIUDPpIpUV8bAUrm+aeDQyRIPiCXiUUl5q49m0aZrOLdBtvEixoaDxp6NGT1/JENdRyUaKpSqrZUEyKfPhh8RUmDoQkoOH00yNIUqLfPIAOWVStJDKchaUk1UoAGFSKWKZ9RZEYgnqt5wtk6TheGiR7WTaCUypoB3FdBjMb4iVAGIFISzLE+UUXfYGm+uLrLFojFjn+VYaaQ+Aj9jUWOIgQWHkonnCmCmOUSnnM6lf8NQ6fWrgc5974MFPfYZTUidkif7hsEwyXTAKAX/VA594EMJlf2/35k0b9x3YjyJF8WgcVdwsTrHk93sDQZ9pmLiFcNHhV4jrE8JG3czn0B+k0MA8OHn8FKwsLm4ZUPkcCeIA74iFqJqdL02AHpViiaYLRxCJs7/hYDHF6HBNowPYHTebKSCbl2soumDVnK/esBw5TtKxGEYDK7Uq6EEv3j48/MT24z0jEasE+wfE4kwyYzHoyAFJXHTWCHhaSBnCnmIqX3JkTqC/2JVm3LLFoDOS6STKREBJEXITJUTgGAiu76PhCu213itm14VMLZ0jS7WryM+l0iQ2DS+ChwYjGUwhYqWSIegQjTyEmXTOkGSPYcC/tawQvvTOO++4PhoNYclTYJMp3rQ8ZBaaQHfZ3iJx4SCi06y+SOViFnGnmpaJjFw7272koz4y1u+mmsRFAvWF7mu53PmMz+1BRM6x/tja' $Logo &= 'e+6m0MVcQQbR5AZ9Y9GVN7z8xA+37dh/7RVrElmIOrqT7B0jahh6OlOYWRO+annsuY0RORCCT1rRYtuPEH6IqdAdiY8oAiQhhIIxKJu10FPkbW9s4X9BLvsixQg3keEDRBnQcaWMf150NpVOwzNKqAXOZUUCGORlmn4NfILsdI28XciZp0gbnPBb4zIw53DNQoETYRxyQtPLTOuF0y0G6sSJkwh7uhiwyEndj/wL9ShHls2YblOgUsJuhLtDKRdzzLEqQacRMYxOXmE6ks3b55kCB40qxzpZXjBQlkWQ5ofBVETlxBIrxTkR5QRqSZY6Ax60sCkbhopFMzw07HHrNcWsO92rK+GYVmfJhlTIepB82/Gn5pfm6MTn2MA/Tm4vmYkh3/BBIzuaVc1cPsmWT1nUn3ebImEqn8RgAkuUdm1HLAGh0GFDwgYzEvZ4lqEucCEhXEoBp0JcAVzFBgf6EFbyex//2Gc//4dtbR3j0XGkEBYgknADhydIqCrc3NDMKaRmwXl8+YrVa6+7cWRkaGiw//ix4wMDg8gkgNS3hZwFI3x9Qy3AMXBeFjZdNirOupHH7wP9TiaycEECc5NkKvUPxQI0BJOFeIJTcMtJWYAhJF7KegpjwxZYJp6xCL2ChE3y6iTKUiJOlsnhTqH68PLFs75y3eJr5jTASGNoKhxP+2LJV94++ubB3n2D8e2nhlPJNOVtVPGc5OBtaorpUunmYFm6bBqaqbArJ7gYHoIBBOEMQ1orB9Qgb3GN14AFFEB7inJMkVIKCTfHyd5LIkdlIe83tZagG8+RyluyYy9hWIJSRWnQSPlVygqb1ki2LiqaC6hZuRT2qQYEtBI/OWegcn00GuKop4QC2Ll6K3OxKkSbVC5DZ2GYOQoUGh+eFI9kYTYTxKlIVmKsxZ9ft3pRPhPB7C67TBjsygIq4xLDAY8fBaJeemNH56W36Z4wQp0UiGgMUKGB4mke35Irbt/8+lOL5nXOmDUrk8mZ' $Logo &= 'piFIs/0pKYlY+pplbcdOxDefHjY9AXBtijsmEKBA3YOmYhUm4C7Ct3WuGoLlwiSMVHqH7oDAYRufZc77UGEML+Cd4hM+VMjpgutMHywSRn44y4CsC+9h7BFAlijuCywBn9Ok2jgLkr6g0Y6FBl91TY+MR7DzbDVdglS81Q8dAggqUBkmW3a+SHKR8viQ4gUpvGAOuTBzvXPW/v37RVwRxtDJQiY6iZ6D5eAulY8jVCjxQoXEgP0aV6WdPofDAIps02JIhYUJe0DoPjSmIlFj51QAAFgf2AblwpQFrXF7AAcqTXXVM9vb4fg/NjgAZuN3HUsiakXVPVbam0/ZbsGSJFgFW2HfZ8OuEa269WS/d3S/BV9lq4wV0oXW2aXLeiEvjMQuOz2eQpKVsMGBC7uIFBJGx8lfLfKfYg1RGIfYmM8JIl0EwhCCLCuz2metu+nmz33xK/PndI2NjwG2MNzQwDUSqwWYjABnrk+OGhUgwAsWLlu8cDmL7fnDh/YfOLjvdE8vYhSOHDoKcIYK7yTTosaqi8tEOqAzOBx7Glt+vzsaGd2zd8fCrq5sngzyOB7/QFjL7/W9I4JRKBJ5pj4XeH6pJamASSHnLDwDBgOQkqYqXl2l6lvhQENt8OqFMz596bwFjcHYWJRiTmW1L5p9YfvJf3zundMnBlymLrl1Q9fcXqoTio6aOvWVg+sFkQJeR6ZejYiJHZ9E4SV2uicJtNGQJERQ1gS8CO1J4DdgRGxLES6cJEQXLIpeJE9ZBfZk08R9SE3h2m52ZGs0hapjGQBEqqmTsoVn5HLkiATFI1VVmX4f3l2B8UVyy8EpH0GmUlkqomLl8PzkeCYe0yIj2BZ2smEPz08+9DkL2/mANfLx21aZHi2eMgxIRQXJEsnbMJLstqIW80/96g13y7LG2csSmZSMV2BHHuOa9L9sMlbf0lnfseS536z/yu+3+3yU1M6hy6zHKwXZQNLTu2/oPPjQztFUXpZxeXrlQkdh' $Logo &= 'yJl8PoQZUtSUrDRnOpH8QpwXMdgiuKE00UTtCdBl1BNCrcyz+ThM1WPEBtLtmFhotlYhV1JPEF8QesqXM73mMFQnMZrQA4Skj+0z4pyCfOMuW7e9C/MqjudVbGdN1TRyxcYjI7EYYk7xmNPnIpV+DSKjMB4Hl0I2MDwyv8uSMLxBUQNLxn2RAtW5CHg6SFCBGbzMoL1MobMljenM+WsqmnhSwVR03vMhwV9iBMBQymT/1pWJ9Mune3vg73jJShrTGbPab7/ttocfenjfwWMLFy/Q00PBsV6Izm4NbEElQVekAYZqzFIDnukcG2Wm+DS4oCpSSTW9A2NxhFxV1wRWrVw1s202vNcHh04nUlF2Z2Q7ikqnk2yl0XCLMN+x0QhSRgqvJfvV8j+RVhlsCccDrWhra166fPFdd92z5vKrZ7XOxGHIbdw/0F9VHaSiQFOax3BXfo2MRsJVtSuWX7pipeQzvdlM+u13Nr2x4bWXXnolEom2zZwBkk3exqpGdJpDaiRmb1ybMouK6HAkzhZVUlPcso5JUsgL+Mt2b9O1PIhpPFOKp9mCbYfbutwZnAICwWUcyi7wBp+nq6F6ZWvt9z57fWUPQTOA2fbHky/v7nno5e2nuwd9zSG8C4mHRgfPYKdWOOmBO6GrlFuFEoBiiEDozeqgz2+SLpG3aD+fwmUKLQrXD/sMVdGGYpkCsQrinJbQCC2L0AZmiorfG/R7yF4mMu+qxFeoTBI2XKXhaAovFC8bi0roKCKo3kqlUdLACHns2srscPvy8y+7PjKNaN97m51HXVYnJDEIBGrelVM0t1zmvNvguQUKWbeDHFXQb4y/OxId+9j1MxbMqBmOp926h37UyTmD9BSZhPSg3/3Yk8+cGE1fdsuVyJFKC4SpDE8H8a+sFqSxZLq565LNLxz65TPPfvrTnxIE0S75KzNOr0vJgqs+XPPg1c3/+PgJKRhWSphIEtvgLU55UZSsvCLR+tNUW/+wM4iUFOE+' $Logo &= 'IqKVUP4W6gjkJ5Gd0MX9ZBsQ+yNwtu8jR47A+9bgdkagydkpYiYgmEJuwMACPTN1w6nrLqwXuCboAAnv024iR7dAvWSuqYtPt2GCiJ07cBLsEEVzUZARyhaIvjCFC3fuAswz3JDFC/mGwVfQ4enExvInnYsLAvWCswkeDbIvF8Dn+c/BPZaL6vy/9ebGrk5yZMdg2jCXogBsZOdzW0pgRiVPP9UpmhhGiMsFhdiqwnkd+OKqYDAfiqGea6XAiZCZgpbh6oe6YRw/fuLFF1+oq6ldsmT5skUrgAtFIrGHHn4I9Zs9hhxSXcixEBmMDacYA5VoAUgEwrLZXlErN9i24exRwRIgXcFRyu/zyroJvCRXyK1ateK+++6/9ZY7OVVD5uWXX37l5V/rulJtVovyXjbwJSsiAyTGDkqN3+fPcTJORxYSy6MqUNVQ32iYRri6ekbbjIamhpWrLgn7w85TNzU2HT5yeP+BPbgYSC+4qWVx94ghQYzG6Fvjkejy5auQhSWVzQQBark9IocjMt53zpsbrq7d8MZ6RM6TvuzzsAiLJ+VPWcNKpzFhj6aRVH4McYjJnBL0KpoCokOEFVdi6SaRzpmStLAxfOkVCzsawsRCOZhU59xfoOwMv8omx53UeY1PrFk86Q1WEyybe+3Q0X95aduxnjGXF7ClWeaRx8PwPC7jBQ8lcjDCugwFZvkFDTUzq/0dNZ5kobSzN3ZqODpeKATgLkwSMRk882A8VGJSrQ96ESeTyEVTMKxRThZqXLVJIc4nhF6J8GzbB9p2LKcvODqVQc7jTDKVxzs0dBn7iaixgoa4GMiHuCmYGgi4q5SGAYIiFj8aDTJspWRnRwxwE6WmsfRBh7GpKjKy9Shy2aIJALoGs7zFHFj49ymjieQVs923r5mPoVAJpHL4E7HwPKZrVfDA7u0vrN8558p7YlZphjcbqg3QxZlnOx4rklzIwntcDjTddVtyaB8MPIZhir45Ir+on4iA8ZXL' $Logo &= 'F647MfbslgFfoF4uREgbp+5xDj1OMoFuIFIVvRRKpVOTii0cmuCpSPl86NAhUHkQShbhLdFnXE04wgk3a1BGpzylkzAfn04eM7EBsR2niNQvldVt8SmALIj2oL+46XQs5HwAh2bL9viI/peYS537LPQHLBP5GZEBCM7rokCGwAzApcV1wBhEETZAUqLObmUt3qk6k3hMwTvBiUEWBFooTsSGOAy/AlVDcC4MKl/72tcq+Zzw6mYGabfK1PfTb87plQqoeCMfElPBOLLnIamFsBDQFufAh2izceP6bDb5h1/66upVa+pqGz71qU+hgvYzTz+fBRbf0lgsa0bQUHwlQk64vb8thTcYlSYA3dI80ENi0UhDfc09997z2Qe/hJ8PH0a508NPPP7k9u27lyxbiAhCyhJhFZzBTaXI5IuCwbfeevOKlatGR8cszq9gqyoceQ+OMnvWbHCtcLjubA9+8NC+7/w/34b1Hmi/PxhANB+xVVnGEBiaCokeNSf+6Ctf65o/FyYNONqMplK0yjnH38qlq0NVVTjxmaefi8RjwVAQXkEC9MC0ElH36IyJCaUbw/HUWCxJIJuskFmbPTs5mTFZGhD6Dh5w2Zzmb961pjkcOKeODcec7Nm8l7afGDp2tN/VVFNT5YFLOKEcHNBToixS5APkU6SmtvqO5nCd11zeWrdiZt0lnc17uvv+/PG3sdhjOQs8WGLqAjpQIGUStmMNxhKvqXp1qcjRrWR6YVwRMIEtJ2oqEENEPHD9M9uUAnER2CIMwygKubdvFDqQbmqGrpB3FPuGgeRimpm6goqTYUq6RRXg0KgExUejLVy4cCq4L0qJgOvzigXxLSv80MGAT4NMStlolDIGSbY42odMU3AgrPeUPnfrSiuTsjBqlRIllzXzeLxAQn7ws2cDHZcZwcaQMvapaxZjBnJ6C7qMU/WIw4sV6BO6uiptLYHxaaL2hk07KuXlRDz+wM3LD514+chYNKBLZQvMy8Ks' $Logo &= 'AFZLXneS5VGkqmCAE5NATLbxCQc8oeXKFc/+/u//HjAgHOFAJfkY8YpLAl8SBdjRf2EvEUBWZQbfSVm5BPo0NdevCHvcunUrErAL2jd9dzI0xyVyOtEYTv0rJCrdvHnzG2+8sXbtWmhIYhzx7I6/coEZoChz4LgaT2UqDuEW4JvDR53RcB5ZeJdhJJ955hnE9oKxTWKfTsJjZwDLFW36royC/TtRdE5auQ8L/iK4SBa3RwyjXeqRS6iimsimTW+vve4mMBVAPbNnzb1szZXPP/si4uoxjZB5bsmSpYsXLypi5KHr5AvvPw/YFSYcCg0ODmzfvgP2OtgSYtH4patXLli4IJqMVfmCIyPDTzz9+KEjB+vqKB0kQ2V5iVewounYgLMvJi900o7OuUuXro6MjpcEeCLqgHO8zOz22e87KOBVmF0cC50nCIIL6YuMyYCJMmmwLmn/vr2bN725ctklwVBobHxUKokQRFroAX8Qkbe6sIOVBQDInuCcVwZ9FvOBfB/SOQtzy2cS55MmYh4lCRv0SbEosqFpCWT3K6iy5jn7qzINr3lmBtkXPR3JuNyA80rgIYSwMXkgJ02pNBZPq5K8dsHML61btnRGbZ4Kw+XDQVxK6o1kd57qz1r5gNegNGITjhu5TA7ImxRwazIpcCGPrIsRdnwxeAER5uLzgqloZcvn0aiYLfAgTcVsqEMNSr97+8H+jUf7SKPXDfIdz+fJ11xTMYQ40lC0oK4ZvPCEzxjEN9dHo8GEO1XgFfK1NZGSXRayLYRZX8jnMccj/FoJBeXweoZhkU7u89cv8ZuFgbjsc9PhFdVeRcCH6+FHHh0sVc2fc2kpOXjPutpULtM/mpaFtsf0yOYaRU2CFQtXJ3bOiR64QSstc6usZQvKBdTms3dc8n//12/SVlgjs0yRQ4NKIjsF4HsUJwWC73A4wSfwSXWDWJyfNWsWOAry5SD9Ow4TfMXGALk5sfEiA6boj0MfXRUxZ5VszyGa' $Logo &= 'gviKCEFULgDPvvbaa7Fz+mhPZWy/4x8Nm985CK6jrEAF+epXv/rNb34TShLy9ICvOKYRggRZZqKsOTlqTq/o7U3Jm2K/oopAejEOlYkgHY7yox/9aP78+UiBOtULQKh0AkASVT8uwMWOWCGR5IJQuZy7CxHEYXK/RaZCuWapDzmhQ7N6S21kaASJaJDvROPK4aFQ1eHDB7ZsedvtNcd6xmB96pwz5+7fu+faa9YmUnHy2s9b7+nohJIv8teLDRZdYOLzR2ORyy87+J//+Z+bNm9pbKw/evT425u3tDS3g6mgkuPqVat379x94MBBxKgrXje7eNnOjxIFYTARlyWQ9Sp/lWl6TFg5z7/BObiuprr7+GnEcWIdWaUcR3DahFM33eBqu3fs/I9///f774vcccfv1VXXOZxxaLjvN79++c2NbyHRfTAYEJISrzX2aeMoGehPcDEJ19QdiFvD0DAMTWKKQ392njjGwbIFRSu0VwdR2Z04ygW1rSdGDvRFXJqi2/OaeBtF80hyPJnx6dqK9sZPXdp5z/I2l6y7LLOQy5TZ53LX6bHhkYSC8BNdhT+0cF8mSUekSSiXgX1RKUlI4rIMLE/kqLaft0jxp5JGkMueU6Mv7O69aWF7Y30gn47poTA6sbN7+InNB7tPj/jDfhUovsgpaWfuIdXEZ8BnzCdRism8iwzTEhCJ2bNnX1y0dhlhjIAXpn8K8lEi8dfUiP2pCw9UzyRTapoXJ5MMVcN09LrNOr+GKFI8YKGYI/psWVnDnYkP3H/l/AVzGnoHh023l5Bau7yVbeH3eX2v/+bV9XsG2q9+MBfvvXU51LbgaDRJUVa2jiKLOk0skBGKSCoj+2rmmSk51VYcudipNNU/NtpW57v7ijk/feVw0BfkQBpkB7VgSdGsXLXXZwa8udGo0D80jQq6Q0U13YhaMhyNB+jQN77xDRQcRJE0UCW4xgpPLZETT3gbT5Kp7XPLZyoyK1wbBJXk41SFCm/D' $Logo &= 'vIHqI8gVj2eZfow9hWnnsjbhrmQbOflsfMW5stCHUEcL+eX+4R/+ASrXVVddJdA5l2xXlnRC2QmSZp3RUQbBmiuuiT125nWHadEDWrbmJwrQiKpfGElYoXBTB7JzRgwHwU0U1BjbMH4J/ItrRVOb/vzPU6x6Dm/K4eL8VmzlSdzrtx38WBJJvHVNZ3WbeAzGE76zCxYu/OIXv7B61SWkTScTP/7PHz70yE9bWmZg/s1sm/nAJz914w23NDU2J7NpiQX4sgN0CcGTaw6fcaOjU1+94tLDB4/u3rM3EPRv27Ebg1ZXU3fDzbcsnL9o/rx5I8OjsJIhBAncmjx3s1mC7jlRC/4EToJ0jRjxC+Mo8XRi9pw58As4euTE6Pg4bmFpqvPmQBPoRqHAyePd27a+C+oBrrls8coMgpU8ntHx4YP7dz/++GP79h+srq4OcT1jgZGX7Xmn0HiUS/W1tXVNrb/uP9kbidvvskiolEs3MO60UVJgrJa9pdaQp9Z/gRzl+ED/yfFYXzSpyHawsojYpw0aKKsx7F8yq/7SjgbE6Y1ERpSSZOgqkt7v2jfw6p4TZAdkNYIyDkpgQ7w6GKFiYqWJWBONsCCiZbwomTsyh1HyOdXUd/dFv/PK7pKsr+tq7B1JNtRqW06N/mTDnm1H+qCXGKYGzoHhsbU0y+IMPSWvoTdUebCAsshAXqKbojST6+IadGhU65v+8eATuOl0jMOcx8gEaYgnKFvwROUPSpeHYUJl7x3HxxSVlpOimgATs9Howtbqu9YugbchsjFy6lwNn052cLfhOXFgzyNPvVS1+M6crFzSoC1vD/eORCU06JqVblmCJLPF1QGRBNUTkqnDVCrwfaounOw5ve6SeUeP9m46HoddAJFBSjGvGoqVTTc2tmHJ47ITYe2qiBkU9gNc2amT+Dd/8zd/9md/hnTRqBECmQ+0AhSjMhdOZX74qfUQJxF0pxQj7ot74SJPPfUUXG+RzRfyxPQ5irhp' $Logo &= 'gdsUfzNG+M55upPrDNgXPsFXIIjceuuteLOg7KKTovPOgFdaZSqZCqaA2O8c7FzfqZ0FRo0aLc8++yzq9UI3ghUK+6eqKU6hgcqqjpZmnVcYJoDrHLdJBhtcHD35MOAvbiLnIjWQkWQiD5wUIDgcJNatvam+vuFU98nNWzbu2r2raJHYZHq0+QvmXr/2RlSpQlkqQoOYDAlqQ1+LlUyFLv/eDRBcRJfKy1YsW7lqxbEjx4N+byaXfuhnD3XMnlNXXQ8VfcHihfjp8MEjmO1QBaB8kkAm2B6HmNG1cIsLZbkY8Rkt7YsWLvcHXurp64F7EklqzGIVVcMtgIABWm5obgDadmD/oZ5T30GhFGJsVAOngPFJJuPgKEgZCVIOsEs4I8icRwDwCAJH8YyG24AEOBRPRRJpuSLGl/5YZICwRN63gK3UIs5zXVDmV8y4aC6fKFg04oJvWQWufKXyq5Hi2dxIJhcIBsAdgu4cV2BR9wwlHt10aP3B7iAMJppckgkrY4oPbsSlvzRVM/R0Lm2bEEl6lXKpnE6x0FKZozLLnN7W76OchrtODv7Li+/s7Z5R4zEHd55cf7Dn4OlR6L/BKg8sOgAHyeG8gLNkkUQA/dRVxW8CQWQYEF2VL1qA4qT3qNI6/eNByMAnpn88cNeenj4nPTuWv9DDwZbkt/YgMEUpg3mgjmkxJGc/f+eNhXSEcRV4S1s4S6gFQnBJZGM//PlzmfC8cFVznTJ63bJ5Q0MDhbIJpjCJhDmfDoETlgoR18gOJjZbEcu4xEylQLbIlOkefuC2NQf+/blYOmuosgofMDJB5ttnNuA49q+xi0uqmgKBHVwEO0QqEeEvBMv5P//zP8O4gvSday6/DNokYBwnKMSxZDj9nMRgpiJFwmyDc5Fr58033wz6A9BRgLPZovS0G5VO5ubw2kpmI02POeGmqHeCuLR//Md//Jd/+Rfgb4DiMSlBgsV1nAesRPMw5BWgfqky/YczFMKzGZ8o' $Logo &= 'mrJp41snTpwAV/6DP/gDETsyKfOK0I2gKon7Vg6aqLw2faaCdzcpfSQ2hCCOF/fh2FTsNNcCHQacCqUEgX633n7bF37/D+rqqIDMyRPHfvyjHx05fAQDcbq75847bv/DL32lqakVjw5jilJWBAvhsXVGQmxJZ9woZ7D4lNvvuAvP+a1//icEFWI039r41i+feQrqEVbcXXfcg9ja7373X6GvuN1QDwCCUdQ65+2xHfPLNlp1IZRIB4NS9Tlz5sIneP+BvdHxaF1DvaIpsM9LnDGMlXSXCcZO4XixE6dOFixSS9llC32Rq2uqkYUJGyLWhBYxJgpVMTJHhkfAimZ3zlq0YD5klO5IciyatIsAq0yvKUhThUiWASymKtW1geoqP72mC2puw43athkwFX4JNsLGChzYnc9UcgVr+7GBH725b21XUyKVzlrFw4Oxt48OvrjjWDmT02sDUFMEcucSig6hICVgIDPCAZ1ZLazN8xpDv2kMZ+Hsh0EhawFjdwwN6IYOMjUeT63fewp5JxuD3v5IYjiShAkiAFuD6sqnMyCirN/AndoQCwirGSQ2CKaiyJyWymapF6+poKDeeXl5TYepOOZT+NcKgisEfHLiUBTErjc3N1VXBcbiWVXW8yDneeuzD66b1eTt7knohhvzKpvlMpETQYawjj/3zC8PjKutV1zjK8YeWNNsZRMRy+1WOITWEZeEsDYh9E0gYYwqUyYEAmbYsbgElEV4FouuFi3KJQkYdzSRaW9r/MO7L/+Xn75QKldBM4HeXR10z2ithxUa3eF3LgwqRRGeUvngAuyChek73/nOY2hPPL5p06aOWbPmzOmqb6gHkQJ7cPgc2hk9oxzUSHhVgciiMgESwuMrlIMHP/0ZYbLGkecXsi6Rmu0obQ7Tnb5c73BB+GV897vfBTb1zLPPbHjzTfAVBLLAGYdMuQy5i4hRh21U1pyV5Ape4nIUFMr3DBdqxOWc7j49d+5cME5gqqKHZwxm' $Logo &= 'xH6hBVaqF7bGc14uxdw4sbskZBDHcfzDCn7kJoAvTDJR7XxWe/s9d9/X1dEFD5N0OrFp01sH9x9CEF51dVhTtLvvum/RomVYukVywqcIDMFR7OQcsvClFVMSO5nyq5UbJMuDGIWCVWvXXr//0P7XXnt1sH8QOVBe+fXLKMV42813zp0774brb+nt6/3Zo48ODgzNaG/jWGxLVOfVDE04xlwoT3EhhJDNKoFrrrkWzPLE8ZM+vw+syzZtsVQCJpHlOIAGJIBtaXIEkDKtWJaDJBl2CIkohEYPx6nHsmXQtSim4x233XbtVdfErdLIKPyJs1q131ancaJVZBFXpqQmulpf7Q/4/BdMUwMe34xQoNZrDI2zbCKcfTE60DnIE1pD1f4TfWPffn7ziztqYD8fyuR2dw9lxhK4dbAuBE7CnJ5RKU1nhIoko+aq4BL4kqEafxF0IHXDnIYD3c3Pbj8GNzlT1W2EzUW3gwHG0DQ95E8nM0PjiaFIiiJ4/R7EXeIhs+SmwAejYYNbiavseAy12uc2FAoXra2rdX0QjWr5nU8DEAGyOP0Y6eqaGlVTMbiargFIBGRkWfiz6urMrln1G7cc1DzuSGx87bLOxe0Nhw8cyFKVErAUBBMTAGgoHNWmGaiR/uudpxtW3imlRi7rUAqJ8YPDoxBrMUl4JuC1lLkKgSpuLbgImycxd0hfdxQF4boqArYYirEb+YRoJD0djI/Pbmm4clH7+u0nXUGfKxObPaMjFKwdGurnjN6SCE4rWcS1aqtrKnUjB0+DfP3ggw/ecMMNKGUIj6lXXn4Zt8bohdGgsnu9sLM6qlil0Vig6wluKDsGvQ0XBBe58/Y7br7l5jmdcwQzwM7zdZzFBaGZioi0Iv+zDV2yhIh6dOIcRump+h/savDxRSUVuGZt2LABuDdCv+vr6sFloZ5CdwF7OWPGUqeYIzvQ5jAD8YyIUwHxBC0FO/nMf//v8KMDA66sBDOpkiMaUr2hjIXw' $Logo &= 'enB6LkDX6QcFo2PDg0PoCnLhuITShknCns24COSnD8NQ7/hlyPyJgnkzWmfcdOONHW0zhVfGLx575GeP/Qxkr6+vv66j895775kzt1PgAAg+R+OYI+bhRYFgAOWwab29IZ1hAwejgqwv4P/Cg1+KReJPnHwsHKpGFcW3N7+9dNGSWR3tcPO9795P9nT3/PwXj8LfjEAi0yQzFATvAgsmDKRMtd1xcm87F+m5JZRQKHznXfdufvvtbVt3y8oAhM1gOGjh8vkcR+br7EpicSH1guBfdv48oQ1MlDrmPKCq7tFRI2B8dHxwYHjmzBk33HCrXtVoRZLp4QjSFLt9JoDecjZLZ5FvsQrWwhH4ilvXLuYNg4PPrg60Bn0DownqJKNexCE4RR/EP8MEwgF3cWt/9+hxLQqBGSvPF3KrBpG4MudRmBhJ5hOMLIS9ZldDyK9pebgS6MoVXQ2v7u9+Zn3GQrEmt65AQiQ/b9a9IARhE2gZ8D+vTvnFFFmXSU9KxLPQUVBn2cXkDwdT4lFZKZqaS0+GPFpdFYiR5kf92g+ooWzf+Xp5ndfxNdBQA36BJAiEAWRUWH2XL134zrYDVtkyVNfBfVu+8uZziOXAuwZxL3Gor53JW1ZKZaqlHVxyixmsTvYdfvbpzQ9FBiRyaCffMVmkwsPhrJmUK8rpcTpO0tGhGjvQUllmKY3nJ9QVESqJJmJcWPqyVFPRgzMl2aORKaywfMlC4S4hsxwsUonE0lEE3ADUPbPQyQ3BgPAEg9EeYY8HufWgnT4NSgrOcUZlBRcXiUNATJYuXYrSNYhUh4KIr1Pr406/4YKg2o8//rgJNIm1HOdSgD2QuQvRCKLn09dXcDrgUJRrBPvcvXs30Lmj3PC6xdOdW+ZAE/m7wJ/AS6D9wIKACwp1SkSqnq26F86Kx+JvrH8DLGQSYIi7X3bZZbA/va/cI4YFHBGvA/xMuDDwfrt6MUZeHPnbTigJsZtECQ1ikqLgPS1buvym' $Logo &= 'G29ubmkVXQHNPbjv2MKlXRDN6uprr77mKkyIkiDfgC24h0EPDFFepyLK2ZE21MjKFF0slZTAHvLhUBgeXLM7OyHNeH3uY4cTB/YdGB0ZGhwemNHc3t4+a9HiJQ//7Kfon0bznsOIGEklGEqRLqAwhtOg0kKMqwvXfuWPvpqKxze99dZhxHm1t3vgyiMiNkgAkWUR0WmrtHbaYzt+nkP9cYBYw9FIDMDXQN/I6kuX/+VffPOSleTgMBBJAG5yGZpuUOJYkAL2Klb5suTDG3QbDT63qamuC21uTf295bM3HT69deeRpFQ2dU3G1STmD7IiSuDIbqOkIGuklYDFGHeX4DScL8VzkteoDbg5WFoS2JfQmml2mnoD7C0aBe6AQYDFXrug9fVlszfvOj5+ajjQWqOTCYmMMexZYrksqkOoe8jmj1CN8UgCaUqrwwGvx4xm84pEYjMIsOwiZlpgxlYdcHc2AGJzfYANhOC8jr/88svPK5kxoCtI2SCp+MSihWwuKAWWcVdHW1tL/dG+iGkoPeNSTmlW/IbOuYop+ami2jRcUTHgAX+gqrq2mEmagZp041Jf22qN1p/CqgUJ+7bdXbJXFLtagTMJS4mF/zvJuPBNYnyGUBrO7IXDOG9JHoY9kUtSQehSQqmrDSFj9oyG6nlzZqWS45JKua/ViZSOkG1ntrWBAk5FoiZJ1iB8i7kJ82SSGwRhkL9JVbYwPiCXoHSQkd3cnCs7PODCkmvhyqj7edttt4maNE6wiAgwBPMDFT4vduWY7kUu0XXcQIjj3PB02K48eCpTESltgtzwvPjqTBun9NbZHge9/drXv3b3PXcLOFHcwtH24DCGMT/H4ziqHtjGt7/9bXRVfHUu5VTO/zC8v7j+PCRs5AqhHNQYC4zg9u07ddMb8JMosXTJUkRBQseEq2E6m9741lv1dc2trTMxzBDXFS5Lls6XE8UcVAiSlSbiEKk5wcPslufV1SpE0Qt3Q/uo8tDoUPfp' $Logo &= 'U2Bp2UyuKuybM6czFKqG1pLOZ2OxyJGjh1WFkt5JhNDkFbbVE11mqn/uWhrvk1lBtgd65fLV3/zv/9cPf/wfL730EooNYzC8fpB5E2tXwAdWOcdeZ6qVJ59O3lbIfoSFzAZmcMc0zA7JtNt0z5nX/uUvf/WO2+7MpBJDo2P7+8fzGCJdRVwp+zOwT20Bse7ktlvOFQAThU1dQp8vtHFJDwmJ53++5eDweBo57WEbtwsxgKCAwGO4NM0wFTA2qgwNNlAo+lXVpytFWUrmKV27HVWAY8miRKE4g+OJ3T3DnQ2+No9vLJZBUs7OhtB/u2mZkS+8seNYKpEp+kyDLyWLFJnQ5xSVtC+rANEB3g61deHlXc3RRGbzvm6oY16fWspTaEshncunsq5UVte1kNck5O2Da0Aezut4hGKcV651YYbZt3efSMIoXGM5H2sBosFVl19y9OfPgpBWB2ssPSSpXgP2J+LqquArzO8VgrlkBem11XJRMz31XSsM8B0FqiOlaDKxRZNeVTUymzgpuawS6Xu5LFlhs5Yrz8iSRfkPGAcT4evFLKGzwsKXz2Ab37DEVexwJRUpI+WSV152MzBHlEVGR8DfnFhrQHTvOxpOdJ5DyAxu0G+mz5grgTXXRbQ2blP3T7WZn1ciyEp3L5NbXV3dBXTPYXXvO6NEa+f2vhE2aOdQJcHV4EnxviVtfvsJJUl+shEweEEcP3EC7oP19U0d7bMjiSjiTlH99Ec//jEMf0je+fBDj3bO6gJTKXNdDF0mO/3m4/3P7e0dTGTcmlTj1TkbGD8DV7KG71bKKgFjXDen+Wu3XgYRWCBUXKJ55Ic/+N62d7eAHEfGoi2tTWsuv7S5pc3nCYyMjvz4R//+yssvqoqOCsFUf3BiKoMT8jDTl6kImBA33ndaV865jtldX/v6nzS2tPzskUdOnexOn+itb4Afv0cA6BDDbVdmhdJqC91FFg4H6Uw0GkdYPnIS19QHb7jphnXrblx7' $Logo &= '9XVk8JfKA8nMzpPw6Im4RuMRHeykovgbzi8UsT/npmqSSbIEVLkuqIlZcuWc1r+8bc3fPb05crgvUqoBnfCCi+CmmipRjhx0NYc/wp0Taa2x5oZls+9b1blp1/F/e3Kjy9QRm8lMmjuGY6Kp4/HUY4Z84+KZsu4ryxmkNQhq6tLWqruvnHcslurpHkqlsjk/vRfTCwRCAyCfz+Qh7ZKDdSQ+f1nHF69eAlvqExv2WqMxy9ByWQ9dGSyWOEqOij8Xi/YdP6AGeYiiu6fbJmOk01z8LU3NkL0gf0BZAVmXVYkCzSQlGk+uWbnw9Q3rTw4BATeL6ahLh2neJIVAsaQSc19wGFWDAiETE9EIypKLhRxyo8kuQ1XxM0JvKTYR2qQKXi+YvdA+qOIAl6YAMyG+AVtCngqRAs+k2hAFfFBmUTB1PrqAecVfs5jA6ULeo+Gk9IzG0KUrF8cTSWCjpmQnDQMng7UD9AgS8XSoMM46owPx2YhdpQHjIhlJZffK3M5hLDkvNWXq9tSnq7z11Md0th3cz9lTufG+FH/Sxac5bpWq5NRncUCwDyf3V5mUadalcwWoI55s/8DJEycefuQn7bPaZ8xsD/mrbrrllvUb18MRq79vEHP6pw//V31T/dKlKzHpo9ExxVA7G0O5HSefXb8T4pO3NpjnVLiSLUcrGVCQaLK2JXzP8tnYX/lsL7/ywi9+/vPRsRGvzx+JDD9w/QO///t/BMqNn1577ZWfP/royVPds2d3qnaZZvowTF1wQCgKZzPUT3/4hKaPAsMoVg+XNqQ4O3r4yP79+/oH+5OpBMBiuGPItquPTHmTFHJ0K1CJdRIKIPtXh4Pz586tqa4FhHrlNVevvmSNJqnDQ0Nen16iCA+tc2Z9X9BbG/ah844Cx5VgrBGve2lH49ymsFouXWRx1qDH/NK1Sz2q9JM39x4fTg7HUrF4kuwtBLbI4iDD7+moCzcHPVfMbbp8fst1XTN9ZdfPN+6Hvac6' $Logo &= '5GMPBdto5Gq0hhJJfBlPM1ivSIBSAM63hDyfuGoBjArPvXv48EDkQN9IJpLMoFaYgO/yFjKPzW2rnb2q4/NXzLu8sxWFCHcdqx1JZMFdfEDG2G8Y+opUKEYsqw22/VTaUMuKQad/IP7EMIBP/3h4+BCyfz5NGFHmdnUhpwhSKijcGNAnmALm6ltvXPfdHz+qezyUoa5scRpHieOjebXjn50n2iYAFXkKZDu7BQkwHCnF34TnmYvYTlkulrlcA3F+0Z+Ky/Cl2Lzpoj/aJHyAE7rpistQMPKFG9ddi9fX358ANxWYjNA24HcDMwCk8um7Tk2PYvL+3067MOgM7eKfDl8/8MesTLTzgY+Js/NDYyqcG4AtCEBlockixvU3r7/S2Nz4V3/+N3pVVXVd3Sc++clf/OwX+/bubZs1Y8PGDQ0NjW0zZtXV1luUlrXU2Vj3tXXL9p8eePdwfypN2LrkshPhQZxy4U/V/vCaZV+8fqVUwYNfe+OVp375RCYLq7gER4slyxbfcvPt1aFa0PGXXvnVY0/8AjlUmltaQtWhbDrFudZVgdKyowtzLekDmDQOb0fp389+5guIRd29d9eGjeu7u0/v3b0XJS6wuO0VK4rcMU/QDb2mNlxTHYJv5YoVqxYuWNTaMhMIIITlYoFBHqtU7davmttcFfImM7lqXWUjuGNdlxBiOhzPzKoLrmirDZoX5U4rGIHHUL+0bsWlHfU/2nh4Z//YicGIapVEnB2lzfcbXa21a2Y1r5vbuqjBh1wA+Kmuxv+FW1f4TB3lhCHXVrJk6CFgpG5VGo7G8PwY8nTegvmoJhT4zOXzL+toeP3A6Se3HeoZjacyBcrCiSMMbU5r3bVdTR9bNmN2fTAylqwy1euWz+qYWae7yj4VJNHpMBVlWVgfSKaSBUMJGh+M+zzIIrxuXL/9BuQaTAUGSJhkCQdTFIvTPYyPDF9xycq3t2zfuv+kx/Sm8hl6MQzWkh8yrzHOOVmSFKqh' $Logo &= 'whRfGLdlVuyFYUux/8m2P25JYE0i55iEJnjJRKhdkasX8ydporgatqkqJTCxAj7x59bLhUx0SVf7VZevHB2hIRK8UESoINIb5pBFixZVUKXftd+1i0p9L8PdHpTE5PILGuG5vt6evp07dq7f+Oolqy+fO3seDNqHDhzctXu7QtEVeeRQWb/h1SuuutbvC2YIuinNa6r+23uu+uYv3tyx56R3Vr0i0aXApSLjCa/PXL2k/crFszT5PaQTgSlvbtgIb/fu7t7W1hlf+sKXVq9axUHO+oF9Bzes39Dc1OjxecnDSDdgUJE4QoQiRTl6XVLZ++uDbgATAP3dccvdWHSWRZVcx0aH4/GYSF4N3qabBhLEVIdr/FBGdC5aoKrwVYODCNgJiARncaCS+qYidVV7WsMmFrtaYlRUoUcoc7UcXA5GV1NRAqbaWH9hDrWVUF5JcLvOpro/vtGXyhdhYMde/k2UlNQg3qouK2xKiI8hCdYVb/Krn1w5S9EUst0Xy3YKNR5bHCBZsB/qIElCwxAxRlCwVE1vrfZf01W3sDlgGl7hw8/e3rhMSZOsgKGkk1ncIeTVLmsLLW8I4M0rCg0Lg2yS8DV3qzLuSFVg/7/ThEUB+g20HJjrgbZjStBenpMFYFLZ5AMfv/vgP/1btlDUFRhOYDoxCCkGD6HkzDwEONp2meRPbpUypfjn4i2xy9lm1y4heDL0j8Y2ML4O60FFscfmORh0Dfy+mPG71Qfuv8fKpigSgptTxQRxeSjsAd9Z8R4vCnb/XfsdUxFRF5xxwYIlAF9JQlJUeKAjd8L3v/89UzMbb7oNNPQzn3oQZRA3btyMOXfy1Knvfe974XDNurU3pmGhTmfhvXDzko5t3SM7uocL8YzkNQyPSeUOk9n2hW1/cc8Va+c1w5ibyuaRmh0uws89//TLr7wUiyXh+dfQUL127bV33XE3XAMw4199/TdPPf0k5NzWVnKDgQkcn+glF1UtgSCC7ZH31zQw' $Logo &= '3/NFNlioJ93MXW+CYTg/ISkM1q+oV0qR5u+tuZJMpwB0c14EEQDFWXeLhItX+/RmTRGlnQyqSF+m3D7sey1xZUrZ7b+YyuqVXwVVcRtGR71xljOsfAbVTQpUNEzGwKb9utbUEqa4x8qgH3Z9lUmGRpQqIHsQRN6Lxsn8VTyLps1prptjl4iobEVQ1WQWUyCPedSIoIf/45oguKtXr4bXKVAj0GI42+iaRnZySRuLxtpmzPjsPTf9+389ZXrCMHmQUqbIGGSJFyJFk0qiQC+5RZBRsuTi2CL8YzmJNygiVegk9J/4k/AnEuKz1iyLAEhiJ0V8UmFHDnC3YJeRStikkyDDADBGMvD7Pn13R1tjb/dpx2NNqCl4BKjXeJzfqSm/ax8Q/FUsIeKGJRQKcnNMOlXh4PDg8Nub3nl79eZLLrnUssqrVq35xH2f2rvnANDaXC67fduOt958c8XyFVT9RbNvcf2yji1H+t5451C8YHnBD2Jprdp307L2tV3NMIv0IbxLVcBUtr679bvf/153T/fMma3wzr7p5hvv/+QnvT5K/L7xrQ1//7/+btfuHa1tjbkcGSZt0inyWlEBdUvXVBLDivTxwSkrDJdjmRkm5HGkvIQQDSaDRUwZetnNS5TizWUKk5iKz+NFkDBRC5nz0MiIIKt1fsVP6KhOxmwTXw3V/Vukd5x90CpZ4HPZfFYiJsAjpBC8T05zCtgdayRkuVJg/RrL5ESyA9pZuVFi+icUFIm/8nUc0RpDBWKaSIwjvK++pt4B9jQzGDJd/wc3oayAl8CnFmEx119/vaDRTqZFmHauu27Nse7+53+zxR+oSeXypJtSXXilxO8DG9BdFHyFwkIxjQQM0jY+KU+2UDN4g14AIWR8WLlksxaZ/jibuKi6IvzsixZWM4UWk7mRDSqaVPRprmR08Nar19x8w9qBvlPoJi7hRHWAwezbtw/mQPjgCgXl/2XvWqCbKvP8Te5NbpImafqkpZTWAgXK' $Logo &= 'UwqCQqkgQ2GWijCWx05FLNTHiKCz7OB4juPuzDg+OLM4Hkb2eHY4ux4FV0flNaAMVFcRKSCgSKEtfUgLSdO0Tdo8mvf+vu9jY5YcmZYpFOr3O+Fye7n39tLTL7/8X7+f8HeCg5MKFCagNn/xYrMM42xq+OwlrSxExrELhtfO4JZ/3xyfYHx49eM4GWJfBTOnf/zxJ+ZLFpQ69ny4Jysn56EVq6jiZKdBb5yWmbJw8vBDNU1uh6sLk9Vd7tIFk56aPQYyLN4wJt5kSVbV1J/b/9e9LWYLlgj9DQ9MmTIV8vLE0vns6df/tOXL41/C0tdrcHd22aO6L0jNH5mxFkuHKAk6g9bj8+A5ry1fdPUBIlkjY0W6vG78NIg0EtX5YcXPZFOSEAPW2I7t9/0TvPxMhmud7+t9QCaJEv128de7gKmhEH6owJg0VAIxAIj2fwzcSZLExA3R64uJpbKVJW3t9mNf1mDqz+0DBPRzCZjsoX0PiDiw0IjssyQFqUNfCK+wkvQN4y8SboTBG6KgwJk4QComVDsI7BLENkzC3QBetIMYeVra84VXkA3ck3hHGdSrFf7O1jsnjHiotMRqacZnQVHU4J9wniAQ7Uhk8PDM+I8IfQUOTioZGUOWLPvpzBYLJEtRfA4QEMkHGfv+IDJbVqsFWSn0R+HknGHD1zy+rrPTuaP5A4wtnjr59fZtb40eOWr02LEhmgXCZ/aSqaMuOj3/9t7nXRds2WOzfjp15ODE5FabFW2QRoMeWYLdu3a+te1NZNPRiZuSPPInZRjSXypQYMJo+LDc8vJHIDwF9WLMsSIuIdE+tXjBU+FytPBi9WYOycgdPtLV7Y7T6K6ZSK4yRoQmZiznoCTjSx9KJX7iTDXINEi4JsCJUhgo4EAswoIVzPTNmzdv27ZtbNSOjUzT31ilsxOCpB1PPrHyxZdeO17TGGccFERqmcwMERE4nEMdy0XsQdEghLQqvqYm8xIljOiIRGDe5pRaCJfQ' $Logo &= 'MryXKNHi5cMr7KOZLpwQJCfR4IXplKo8nZZxw4asfWRlt8vR7e5CZhvnUcE64kaFgc3Tp08vWrQIw3q9EnPk4JCuUlBBw+6TT66nZoyKSFqdVf0UFOh/J87JFMjq4LWg+N66hvPwh4fgDzo4N2/5A/qAp08vbGuzoSRo0mo3zM0//XXjZ4HQunn5Q5NM7k6kkpTGeB3ildras0c+/6Lpghl6i1hCELpf+8R6mPuyPpbxYyeOHTNBDXFfBWMCJsROUi6XS5R0I1PfEGTtkFMSrgMYCUEkgEmHQk4G6SAirHTDEZlt5rjZaioM0NZFZQUGgkVFRUy1CdSAMUTQQ4etIzlZ/OX6Rzf+ceuJry4Y9KkevxskAstUpA5JPEniDvAELFgkWKVACsgTUsoBRZxalHzwVVWIgDLA5HjBR/6QCK0dZF99XmqijUvwDRFTM8uVoKAKoQmNmE5qVKSH2GOzTRyT9fM1/4hf4dZ2u5quYkXUADYeG/V5+FP1XcspByeVcJi1xcesm6gj6isvL16wEJJcmzb9nghB+L2HPj28qPgnErGLJklhAGJWP8ofkZeTtjB/RKqByB5jLaUkJINU3njrjZq6msQkk81qGzUq9545hVA0iIhr/j99G/GK57kSPWeUSAZZ6C1omw1hFw35HCrcWIDZhZsVHJEuqcWLF7/88svHjh3DuzOTswQXMAtFTBRCg/WZteVbtr770aHTKmOSFFB6ibAw9UBFJgyMoGCjx7SyEgxRZTtBCQ9JL/JhNK657AUbwuqieS7sMul1QmAhBa2PEcVexCnkEjgMiZimtdtmzRixauUSv6fLYbPjYZg4bkQU5MSJE0jZ4eFjp7WvHRycVK6tym2IM8yf/+MjRw6dPHUSZXaky9CslZE5JG/seNRlMPIrSarFd+WBs1INugB0z0V1QrwBi+X9ne/t2LGzvd1mijd53C6sxtLSlbJad6PeAkK9GmyJTKYhMRhRFbthYDNsPHy5+Sv2' $Logo &= 'MCCBPSK8RtBnDPVAdLuw46iigF2s1lZ/XNfjDy9LH5L+7s4KhP1GrckDboAmMIlUJDpHoiJUpCTD9sTOR6kmvkZqFRiC9kdgC7YIYvSedeCFGP/QvmwFrguL1PsWNpQhrTIUcLWJAUfpfbPvKy5obzM7Oro0KgO1ArpcMgSjwJAKvZ3Qzoq0EfcdqXDwlmKK3nbijh83oWzVQ6/9sfvQ54eHZGbsP/CRrNNt2PDLoVnZyEqhvyvVoGU3d7p9GjWgeve9t//zv/5EHCB8REZ7wsSxc+4puiGMwqo1ToOBDo33HtG2232e3fq+qvtVGCVG36xHZaTrwUMcTBMIyrvLly+HjTHaFlBfQbyiBESRRQAYD3X6zy+eN31MdvZ/vLOr9ttLGsNgQaXtpnlmNqII0aawIOKFkgeZ3lGyrmEmZEo6ENmET1iJfTb7SAdKSLkRVKQGNUmYYvb4fI6LwzISHipZPC43s77R7A+4QFOwAoKSGFOjwhNCbAna9UuWLMG0Y+815xk4OKlcB8AUsqLik48//QRCkM5O99kzZ/Z9uOcfFiy8bWiOy9Glj9NJVFVJVEnI89rt7UePVJ75pgquqxgShKbWipWrMVYp3CiAURhrRtcq2E60/Mb3OdZdp7V3lXtGHg+g+9HH6VxJFHngYE8kNZk9eL8k0Knv1Hf6BXiwAcYrBQUFGObfvXs3SvfQBHN5iI89sSAgShAi5oKqz9cPycr49YbyPfs/3/vJSbvLozIm0+b4kDJMGvtDfkEUqTpxEH/Q+S1SMfzLTQFgGKrUgnBDEkAyAqzmJcgf08q9J4jJoPbmRFmYU3RH0dy7g6HuqroaUBT1siMS+CAupi5stbX+df/+OffMQSf0NfcQc3CQlXw9PsyeOHX8xZd+V3GgAqlkqOKbEhKe3vD08qUPQDgr3oiGMV2YhO3K89/WffDnd/57+/YzVVXwYjIY41aVlT++5ilZUgscfyuIjGY7ZxfmfwLxCQkYOIll' $Logo &= 'PsYiN7LyzxHRGWQ7sA48ePAgnKwGpaexeIWZEuI0ZvmuN5jS04dYWzsOHvzs6DeNDtjNGNIkfaKaCEiqw5Ia7jchmdg8CNinFteR4Xk/HWYR/AGi8uKTYJ4m+NF1bw13mA2yf3Le0KJZd6QkpmA8wOly4GoqlSRENOExzow5R0hxFxbMLCsriwm++xscPFLBTN+kiZPLyx6rra61tFzCurnQeKHy8OFpU6fpDDBKI4TBOqa+/vqrN958o8ViThuc7na6l9xfsnzJsp4wCmtG+8EiNtOtNxivOKG3qcs+ZBTe8BYb85WWlmKLeKVw1t2QMQevKCiY9wkSYp0Ou9PRkZKUUFoyZ+5sd+Wps0fPNFo66t1SnFqfoFInCqIiTqGRFHIYeyEVk6sk2S7krsIAJhs9AUgiuM3dnVbRZx9qkvMnjM6/fXRygqaj3XL2nBl5NyTFAmQG5jLhReooyHohQFlR+sDfaf/HwaHs+XrulQ8rtrm5wxctXpiUlNze1h6fEP/Rwf17/vKXQUmpyOR6Az5QQnVt1Yd7d9vb7NAqxtJKSIqfcPuk9MFZPSyVo7wvcFyVJAZSvQSMcitGKpE8ErbglZKSErjvQToP6SbGKEwPmLi9BbwgiGar9ZvzdaGws2j27f/82KJ1D8y6d0p6bnyn1lUdbv3K1XrO2XrO017rtZ/32eu7O+o8bbVuW63PfMrddNRrPqbsPDNUZy26PXXt0tm/WHHvnIJxIZ+z+lxdi9UN5R+aciMF/MiKxmNUVVVVVFQU31v84IoH8SR9GKNw8PRX36PFevHZXz27bdtbMGOoOddQUHjnr//1t5On3KHTxQV8/o0bf/fq5j/A+a2hril31LBV5WW/+PkzQg9AfREFJZPSG9DgiC0F3erZMLyDb926FUV71FpUshp6NiGKYIBaONIKfJD6NsKaxWQiuWLE+ohsOuwOc5fH4XS5PUSkyBtkls2SrFab1EqjXpeYCAUlo1FLvEfd1A7d' $Logo &= '091Ny1QiiVxD5M5MwBh/y7KM2x6trLRYLGhRQ14Ox/uBUTg4qfQ8jmHrf/s7b77yyu9bzDDWsmVkDh47fsyax9bdOXX68S8rN23atPfDvbflZDfU1c//cfH7f97Rq293q6R0ODipXGGOhODg9ddfx6jKtDunDc3KIi6NxAZbyUosQQqcFtEhAnMgSRUHyIIoSUS+FC8qSgwIZHCFuMP5vB6X04lGANwQR1WSJIrSd9PKgsgeA3eDlw+45NChQ+gbfri8fNz48TdXyouD11RiHRUjXLWg+L7z9XWvbd6skAQM+1YervzR7HMmk3HHzvcumpu0Wo35oiU/f9KyJff3kE4UN18thYMnvnpovce2eXl5zz333Pbt2ys+rhiSmQmTV/AFzA6AaMfZSOgAkkBAQ+RHcR8qBSai+0vwM1ohpSayRdMXHV8RpctWKwQ+dhM20oKDskaDIKbyyFeXLjXPmjV72bJlMEli/c03XcmKg6e/YnmFJKlEEcItmzZtrKg42NLSKsuamTNnYFT+iy++6OzswimSKK5fv/6xR9f29lsM4GCFw93tUZDP2io2gj4wQk8WDUQ6DrA9crTy7bffbmpqgu7kyNzRhFoocCY7jdEM+5KEJwLNkMHGi8qvhCMtKxhJwR7GGHFcDLPzo6lCBUgymAkmrbW1telpqUuXLr3rrruYfHKE8zip9Cc4qfR8sA4WKdXVVS+88MK+j/bljcnz+uDW6JIkFZwTEX0XFBb87NE1E8dP6vn9BzyvcLS0WZHgMUBxWtbEzIEOqIZjVD4OHDiwd99eh92Rk5MzYsQI1FFQXkF0QoIVIESI4f945Tt3H7rLNgAoKkjpgUQpjL1wOTVAEyVJguzKtw2NDQ0NaKKZP38+KigwprwFBoM4OKlEeCV2Uu+ljc+/+uorer0RcbhGo8bA2zenq++Ylv+b3z4/d1ZRr+48YHiFgw8bKShQ4cAUC/p622HtlZKSnXNb6qBUnVaHE5AWYwgz' $Logo &= 'RWJ6IYNASitXjiWxdjJswS6ebjcqN4iEMIaSlJBYWFiIvmH0CLD0GsuSCf0LDj78GMsZV788MqBX11j74ovP7961RxQVKSnJbW12gyFu1eryRx5do9fE/TBJhYPzSnTeCW/9lZWVqJ+fr6uDaBFClsGDM0zxCUiLofc3whwhigiFRI8xAqj5wycCJvktLS2Ozg7cGQHQjBkzpuRPBp3EakT2D69wcFKJRc8FpiK/97v27Xr+N//S1NwkKSW3y7NyxYM/W/OEzqBPS07rIaMMVFLh4BYskYFWVD7gyX3i5Ak0iTU2NMKjCJEHeAWZK2xlWQbBoETCrmYqxciVQa0S1r9Ic2EHh3B2VlbWmDGjJ0ycMHzYcI0sR8dGAkU/eM5zcFLpK15hp10yX/zgg3e3bNlyrrpmypRJT637p/tLllF9PIGTCgfHFZMioAqz2dzc3FxfX3/hwgVEHghBcNDrJSbfEUpgdXhwjdFoSE1NzczMzM7OxhZxCegn5s43PTg4qTDC6GFxxensfOaZp4+fPLZq9ep77p6bnXVbzxmlz0nF0mJJG5Qm3Ezg4IiujkQvAcw/IgpBLOJ0OhmvAGT4UZa1Wi2LYzDOAo6JXTi3joI9ByeV3vPK+zvesdqsxcWL4vUmrIO/qfHFvB37nFScXRgTcylVIizChOuDVrsNz89IEd2xifEJkRM4WttaBeKGTirGcRQu0hXoEonRekin0+q1epaf+WFGnGGKa6CEWMeKfpDz4uCkciNh77CZ8D7e3/B53U6XU0FdKcFdwUDQoDeoI7b24aDT7YQBjFIgRkdIaKtVWhz2eF1IQagUdPgM1wXC1FtPCHoD8YZ4SSM7uux+r1elVAkSLZwGw1TcPQRBDqOek4rgaLeRH7iogJ4ufi7YQUVar9PLmjjSau52iqIEiUWtRqfR6YUo8KglUhGJTmfFRjb9XIHn4Pjf9uqgCAAABgHQ+pd2JTxfUIKUAMBlBgCpAIBUAJAKAFIB' $Logo &= 'gAcIIS5QiH1PVwAAAABJRU5ErkJggg==' Local $bString = _WinAPI_Base64Decode($Logo) If @error Then Return SetError(1, 0, 0) $bString = Binary($bString) If $bSaveBinary Then Local Const $hFile = FileOpen($sSavePath & "\pspad4autoit.png", 18) If @error Then Return SetError(2, 0, $bString) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_Logo Func _WinAPI_Base64Decode($sB64String) Local $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "ptr", 0, "dword*", 0, "ptr", 0, "ptr", 0) If @error Or Not $aCrypt[0] Then Return SetError(1, 0, "") Local $bBuffer = DllStructCreate("byte[" & $aCrypt[5] & "]") $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "struct*", $bBuffer, "dword*", $aCrypt[5], "ptr", 0, "ptr", 0) If @error Or Not $aCrypt[0] Then Return SetError(2, 0, "") Return DllStructGetData($bBuffer, 1) EndFunc ;==>_WinAPI_Base64Decode
    2 points
  4. An about dialog is a nice little thing, often hardly bigger than a message box and usually just a minor thing. But almost every program has an about dialog, if only to put its "stamp" on it, insert a contact address or a copyright. Then there are the thank you notes, which in the 00's liked to be spiced up with some great effects, like vertical ticker, like in the credits of a movie. But who likes to watch the credits of a movie? I think it's nicer if you can scroll the credits yourself, as fast and as slow as you want. So that's what it should be: An about dialog, where you can nicely display the name of the program with your own name, maybe show a version number, and with buttons and link labels you can click on, which will then open the web or email address. Oh yeah, and an area where you can express your thanks to everyone involved. So I searched the DE forum here and the EN forum for example codes for an about dialog with credits area. You would think that there should be a lot of them, because about dialogs already existed in the computer stone age. But far from it: I found only 2 code examples. Both dialogs lacked a credits area, but - yay! - there were LinkLabels. So I was one step further. Here in the forum I created a thread asking if someone could provide me with a nice About dialog. Even the first reply was promising and suggested using a RichEdit and loading an RTF file into it. Nice stuff. Unfortunately I had probably put my request too vague, because instead of the code for the about dialog I was only provided with a picture of the dialog. Based on the tips and suggestions I developed my own code and provide it here. The About dialog is relatively large and consists of a RichEdit that takes up the left and middle areas of the dialog. In the right area there are labels and buttons. In the RichEdit you can show an about text as well as the credits, which you can scroll through manually. Preview Settings I tried to keep the configuration simple. Probably it would have become rather complex to gather all configuration options in one place. Now it became 3 different places, which I marked with double lines well visibly and the code remained clear. To set your own settings, it is sufficient to make changes in these areas. So settings for the title bar and the right area with the labels and buttons can be made. Settings for the text in RichEdit are made in the RTF file, also links for web and e-mail addresses are set up in the RTF file. The finished file is then simply loaded into RichEdit. The path to the RTF file can be customized in the code in the first settings area. Relative paths are possible, e.g. "..\..\About.rtf". I have added an example RTF file: "About.rtf". My example RTF file was created with "LibreOffice Writer". Probably you can open it with any higher office program and design it according to your own ideas. Unfortunately, I don't have MS Office available at the moment to check this. Important: With MS WordPad you cannot edit the existing example RTF file! (The data will be unreadable). But you can create your own RTF file with MS WordPad and use it in the about dialog. The same applies to MS Office: If the existing RTF file cannot be edited, simply create a new one and design it according to your own wishes. Feedback is welcome. Version 0.0.12.2 First published Version. Version 0.0.12.5 Added: Ability to display the RichEdit with or without borders. Bugfix: When you scrolled the RichEdit with the scrollbar, the text and the scrollbar flickered. - Thanks to UEZ for finding this issue. 👍 Version 0.0.12.6 Added: Hide caret when the RichEdit is scrolled with the scrollbar. Nevertheless, the caret sometimes flashes a little when scrolling. Bugfix: Converted the background color value for the RichEdit from RGB to BGR. About Dialog 0.0.12.6 (Professor Bernd).zip
    1 point
  5. Nine

    Help with DllCall

    If you want (may be not) my appreciation of the situation. You are forcing the usage of a DLL while there is multiple UDF (in AutoIt) that can address your users requirements. I would strongly suggest to take a step back to understand the true needs and then decide of the appropriate solution.
    1 point
  6. LarsJ

    Help with DllCall

    I'm pretty sure your dll file is a .NET assembly dll file implemented in managed code e.g. C#, It's indicated simply by the name. It cannot be used immediately in AutoIt. Your best chance of using a .NET assembly dll file in AutoIt is through the code in this thread.
    1 point
  7. LarsJ

    Help with DllCall

    And you're sure that your dll file is a standard Windows dll file implemented in unmanaged code e.g. C or C++ which can be used in AutoIt?
    1 point
  8. Nine

    Help with DllCall

    From help file. It is quite obvious. Either there is an error in spelling the function name or the function is not exported correctly. Not an AutoIt issue anymore...
    1 point
  9. What's New in Version v1.8.0 v1.8.0 (2021-04-12) Added asymmetric (public/private key) RSA encryption/decryption functions _CryptoNG_RSA_EncryptData _CryptoNG_RSA_DecryptData Modified _CryptoNG_CreateRSAKeyPair to be able to select the export format (CryptoAPI-Compatible/LEGACY or RSA) Added create_legacy_rsa_key_pair_example to the CryptoNG_Examples.au3 file Added rsa_public_private_key_encrypt_decrypt_data_example to the example file Updated the help file to reflect the modifications above (including new constants). Thanks @IanN1990 for asking the question that lead to me to adding the asymmetric encryption/decryption functions.
    1 point
  10. Nine

    Help with DllCall

    You are using @error wrongly, it should immediately follow the dllcall as it is erased with dllclose. Please modify script and report on @error as I am pretty sure, it will be non-zero.
    1 point
  11. Well, thanks for that. That seems to work just fine. Here is what I wound up with: ; Trigger Print ControlFocus($hWnd, "", "[CLASS:BCGPToolBar:400000:8:10003:10; INSTANCE:2]") Sleep(1000) ControlSend($hWnd, "", "[CLASS:BCGPToolBar:400000:8:10003:10; INSTANCE:2]", "{!}") Sleep(1000) ControlSend($hWnd, "", "[CLASS:BCGPToolBar:400000:8:10003:10; INSTANCE:2]", "{a}") Sleep(1000) ControlSend($hWnd, "", "[CLASS:BCGPToolBar:400000:8:10003:10; INSTANCE:2]", "{p}") Sleep(1000)
    1 point
  12. Nine

    Help with DllCall

    You should test @error first. I don't think you need "Master.Test.Decryption" prefix. and passing "Master.Test.Decryption.Encrypt.HIDDEN_Key" will not be converted in the dll as it is expecting the true key (I believe). You may need to use 'cdecl' method. Have you look at the dll with dllexp ? It may give you more information about the function visibility.
    1 point
  13. I seem @Melba23 used this to force determine the User directory: If EnvGet("SCITE_USERHOME") <> "" And FileExists(EnvGet("SCITE_USERHOME")) Then $SciTEUserDir = EnvGet("SCITE_USERHOME") ElseIf EnvGet("SCITE_HOME") <> "" And FileExists(EnvGet("SCITE_HOME")) Then $SciTEUserDir = EnvGet("SCITE_HOME") Else $SciTEUserDir = @UserProfileDir ; original sciTE default location EndIf ... which in my mind needs to change and use the logic of the other utilities by using the SciTE program dir when SCITE_USERHOME & SCITE_HOME are not defined, like the core SciTE does. Jos
    1 point
  14. What's New in Version 0.2021.02.28 fixed: GUI styles constants by @pixelsearch. compiled script on 3.3.15.3-beta Files download are in the files section.
    1 point
  15. By replacing this line                 ;_GDIPlus_ImageSaveToFile($hClone, $newImg) With this     $iJPGQual = 99     $sCLSID = _GDIPlus_EncodersGetCLSID("JPG")     $tParams = _GDIPlus_ParamInit(1)     $tData = DllStructCreate("int Quality")     DllStructSetData($tData, "Quality", $iJPGQual)     $pData = DllStructGetPtr($tData)     _GDIPlus_ParamAdd($tParams, $GDIP_EPGQUALITY, 1, $GDIP_EPTLONG, $pData)     $pParams = DllStructGetPtr($tParams)     _GDIPlus_ImageSaveToFileEx($hClone, $newImg, $sCLSID, $pParams) The JPG quality can be changed, also the generated PDF-s are smaller than expected, I think because its built with 72 dpi, the paper size have to be increased accordingly for print jobs
    1 point
×
×
  • Create New...