Jump to content
  1. kurtykurtyboy

    kurtykurtyboy

  2. argumentum

    argumentum

  3. Danyfirex

    Danyfirex

  4. funkey

    funkey

  5. mutleey

    mutleey

  6. KaFu

    KaFu

  7. mLipok

    mLipok

  8. Gianni

    Gianni

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By UEZ
      I don't think I ever posted The Matrix here, so here's the upload:

       
      The Matrix v1.31.au3
      ;coded by UEZ build 2018-10-20 #pragma compile(Icon, "c:\Program Files (x86)\AutoIt3\Icons\au3.ico") #AutoIt3Wrapper_UseX64=n #AutoIt3Wrapper_Run_Au3Stripper=y #Au3Stripper_Parameters=/so /pe ;/rm #AutoIt3Wrapper_Run_After=del /f /q "%scriptdir%\%scriptfile%_stripped.au3" #include <GDIPlus.au3> #include <GuiConstantsEx.au3> #include <WindowsConstants.au3> #include "The Matrix Sound.au3" _GDIPlus_Startup() Global $hGUI, $iFPS = 0, $iShowFPS = 0, $bExit Global Const $iW = @DesktopWidth / 2, $iH = @DesktopHeight / @DesktopWidth * $iW, $sTitle = "GDI / GDI+ The MATRIX v1.31" AutoItSetOption("GUIOnEventMode", 1) ProcessSetPriority (@AutoItPID, $PROCESS_HIGH) TheMatrix_v1() AutoItSetOption("GUIOnEventMode", 0) _GDIPlus_Shutdown() Func TheMatrix_v1() Local $bFullscreen = True, $iMsg = MsgBox(BitOR($MB_ICONQUESTION, $MB_TOPMOST, $MB_YESNO), "Question", "Enable fullscreen?", 5) If $iMsg = 7 Then $bFullscreen = False Local $binMusic = _Music() Local Const $iLen = BinaryLen($binMusic) Local $tMem = DllStructCreate("byte[" & $iLen & "]") DllStructSetData($tMem, 1, $binMusic) FSOUND_Init() Local Const $hMod = LoadSongEx($tMem, 0, $iLen) FMUSIC_MasterVolume($hMod, 50) FMUSIC_PlaySong($hMod) FMUSIC_SetLooping($hMod, 1) $binMusic = 0 $bExit = False If $bFullscreen Then Local Const $hFullScreen = WinGetHandle("[TITLE:Program Manager;CLASS:Progman]") Local Const $aFullScreen = WinGetPos($hFullScreen), $iPosMainScreen = Abs($aFullScreen[0]) $hGUI = GUICreate($sTitle, $aFullScreen[2], $aFullScreen[3], $aFullScreen[0], $aFullScreen[1], $WS_POPUP, $WS_EX_TOPMOST) Else $hGUI = GUICreate($sTitle, $iW, $iH, -1, -1) EndIf GUISetBkColor(0) GUISetState(@SW_SHOW, $hGUI) GUISetCursor(16, 1) ;create canvas elements Local Const $hDC = _WinAPI_GetDC($hGUI) Local Const $hHBitmap = _WinAPI_BitmapCreateDIB($iW, $iH) Local Const $hDC_backbuffer = _WinAPI_CreateCompatibleDC($hDC) Local Const $hDC_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 $hHBitmap2 = _WinAPI_BitmapCreateDIB($iW, $iH) Local Const $hDC_backbuffer2 = _WinAPI_CreateCompatibleDC($hDC) Local Const $hDC_obj2 = _WinAPI_SelectObject($hDC_backbuffer2, $hHBitmap2) Local Const $hCanvas2 = _GDIPlus_GraphicsCreateFromHDC($hDC_backbuffer2) _GDIPlus_GraphicsSetSmoothingMode($hCanvas2, $GDIP_SMOOTHINGMODE_HIGHQUALITY) _GDIPlus_GraphicsSetPixelOffsetMode($hCanvas2, $GDIP_PIXELOFFSETMODE_HIGHQUALITY) Local Const $hImage_Bg = _GDIPlus_BitmapCreateFromMemory(_BG_Image()) Local Const $hHBitmap3 = _WinAPI_BitmapCreateDIB($iW, $iH) Local Const $hDC_backbuffer3 = _WinAPI_CreateCompatibleDC($hDC) Local Const $hDC_obj3 = _WinAPI_SelectObject($hDC_backbuffer3, $hHBitmap3) Local Const $hCanvas3 = _GDIPlus_GraphicsCreateFromHDC($hDC_backbuffer3) Local $tColorMatrix = _GDIPlus_ColorMatrixCreate() DllStructSetData($tColorMatrix, "m", 2, 2) DllStructSetData($tColorMatrix, "m", -1, 12) DllStructSetData($tColorMatrix, "m", 0.0175, 19) Local $hIA = _GDIPlus_ImageAttributesCreate() _GDIPlus_ImageAttributesSetColorMatrix($hIA, 0, True, $tColorMatrix) Local $iPosY = $iH - _GDIPlus_ImageGetHeight($hImage_Bg) $iPosY = $iPosY < 0 ? 0 : $iPosY _GDIPlus_GraphicsDrawImageRectRect($hCanvas3, $hImage_Bg, 0, 0, $iW, $iH, 0, $iPosY, $iW, $iH, $hIA) Local Const $hBrush_Clr = _GDIPlus_BrushCreateSolid(0x0B000000), _ $hBrush_FPS = _GDIPlus_BrushCreateSolid(0xF0C0FFC0), _ $hFormat_FPS = _GDIPlus_StringFormatCreate(), _ $hFamily_FPS = _GDIPlus_FontFamilyCreate("Arial"), _ $hFont_FPS = _GDIPlus_FontCreate($hFamily_FPS, 8), _ $tLayout_FPS = _GDIPlus_RectFCreate(0, 0, 60, 16) _GDIPlus_GraphicsClear($hCanvas) $iFPS = 0 Local Const $fFontSize = 8, $iW_Char = Int($fFontSize * 1.5), $iH_Char = Int($fFontSize * 1.5), $iMaxSpeed = 8, $iMinSpeed = 2, _ $iAmountChars = ($bFullscreen ? 75 : 100) Local $aTable[$iAmountChars][4], $aChars[56], $i, $sChar, $iChar = 0 For $i = 0 To UBound($aChars) - 1 $aChars[$i] = ChrW($i + 65382) Next $sChar = $aChars[0] Local Const $hFamily = _GDIPlus_FontFamilyCreate("Times New Roman") Local Const $hFont = _GDIPlus_FontCreate($hFamily, $fFontSize, 1) Local Const $hFont_Glow = _GDIPlus_FontCreate($hFamily, $iW_Char, 1) Local Const $tLayout2 = _GDIPlus_RectFCreate(0, 0, $iW_Char, $iH_Char) Local $tLayout3 = _GDIPlus_RectFCreate(0, 0, $iW_Char, $iH_Char) Local Const $hStringFormat = _GDIPlus_StringFormatCreate() Local Const $hBrush_Char = _GDIPlus_BrushCreateSolid(0xE8E0FFE0) , _ $hBrush_CharGlow = _GDIPlus_LineBrushCreateFromRectWithAngle($tLayout3, 0x4000FF00, 0xE0A0FFA0, 0, False, 1), _ $hBrush_CharGlow2 = _GDIPlus_BrushCreateSolid(0xF000FF00), _ $hBrush_Bg = _GDIPlus_HatchBrushCreate(9, 0xFF002800, 0xF0000000) _GDIPlus_LineBrushSetSigmaBlend($hBrush_CharGlow, 0.5, 1) _GDIPlus_LineBrushSetGammaCorrection($hBrush_CharGlow) _GDIPlus_StringFormatSetAlign($hStringFormat, 1) _GDIPlus_StringFormatSetLineAlign($hStringFormat, 1) For $i = 0 To UBound($aTable) - 1 $aTable[$i][0] = Random(0, $iW - $iW_Char) ;x $aTable[$i][1] = -1 * Random(3, 200) ;Y $aTable[$i][2] = Random($iMinSpeed, $iMaxSpeed) ;vy $aTable[$i][3] = $aTable[$i][1] - $iH_Char - 1 ;delta y counter Next Local $hGfx, $aChars_pre[UBound($aChars)][3] Local Const $hEffect = _GDIPlus_EffectCreateBlur(2) For $i = 0 To UBound($aChars_pre) - 1 $aChars_pre[$i][0] = _GDIPlus_BitmapCreateFromScan0($iW_Char, $iH_Char) $hGfx = _GDIPlus_ImageGetGraphicsContext($aChars_pre[$i][0]) _GDIPlus_GraphicsSetSmoothingMode($hGfx, 4) _GDIPlus_GraphicsSetPixelOffsetMode($hGfx, 4) _GDIPlus_GraphicsSetTextRenderingHint($hGfx, 3) _GDIPlus_GraphicsDrawStringEx($hGfx, $aChars[$i], $hFont_Glow, $tLayout2, $hStringFormat, $hBrush_CharGlow) _GDIPlus_GraphicsDispose($hGfx) $aChars_pre[$i][1] = _GDIPlus_BitmapCreateFromScan0($iW_Char, $iH_Char) $hGfx = _GDIPlus_ImageGetGraphicsContext($aChars_pre[$i][1]) _GDIPlus_GraphicsSetSmoothingMode($hGfx, 4) _GDIPlus_GraphicsSetPixelOffsetMode($hGfx, 4) _GDIPlus_GraphicsSetTextRenderingHint($hGfx, 3) _GDIPlus_GraphicsDrawStringEx($hGfx, $aChars[$i], $hFont, $tLayout2, $hStringFormat, $hBrush_Char) _GDIPlus_GraphicsDispose($hGfx) $aChars_pre[$i][2] = _GDIPlus_BitmapCreateFromScan0($iW_Char, $iH_Char) $hGfx = _GDIPlus_ImageGetGraphicsContext($aChars_pre[$i][2]) _GDIPlus_GraphicsSetSmoothingMode($hGfx, 4) _GDIPlus_GraphicsSetPixelOffsetMode($hGfx, 4) _GDIPlus_GraphicsSetTextRenderingHint($hGfx, 3) _GDIPlus_GraphicsDrawStringEx($hGfx, $aChars[$i], $hFont_Glow, $tLayout2, $hStringFormat, $hBrush_CharGlow2) _GDIPlus_BitmapApplyEffect($aChars_pre[$i][2], $hEffect) _GDIPlus_GraphicsDispose($hGfx) Next _GDIPlus_EffectDispose($hEffect) GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit_About") AdlibRegister("CalcFPS", 1000) Local $c = 500, $bDisplay = -1 Do DllCall($__g_hGDIPDll, "int", "GdipFillRectangle", "handle", $hCanvas2, "handle", $hBrush_Bg, "float", 0, "float", 0, "float", $iW, "float", $iH) DllCall($__g_hGDIPDll, "int", "GdipFillRectangle", "handle", $hCanvas, "handle", $hBrush_Clr, "float", 0, "float", 0, "float", $iW, "float", $iH) For $i = 0 To UBound($aTable) - 1 If $aTable[$i][1] - $aTable[$i][3] > $iH_Char Then DllCall($__g_hGDIPDll, "int", "GdipDrawImageRect", "handle", $hCanvas, "handle", $aChars_pre[$iChar][0], "float", $aTable[$i][0], "float", $aTable[$i][1], "float", $iW_Char, "float", $iH_Char) $aTable[$i][3] = $aTable[$i][1] EndIf $iChar = Random(0, UBound($aChars) - 1, 1) DllCall($__g_hGDIPDll, "int", "GdipDrawImageRect", "handle", $hCanvas2, "handle", $aChars_pre[$iChar][2], "float", $aTable[$i][0], "float", $aTable[$i][1], "float", $iW_Char, "float", $iH_Char) DllCall($__g_hGDIPDll, "int", "GdipDrawImageRect", "handle", $hCanvas2, "handle", $aChars_pre[$iChar][1], "float", $aTable[$i][0], "float", $aTable[$i][1], "float", $iW_Char, "float", $iH_Char) $aTable[$i][1] += $aTable[$i][2] If $aTable[$i][1] > $iH Then $aTable[$i][0] = Random(0, $iW - $iW_Char, 1) ;x $aTable[$i][1] = -1 ;Y $aTable[$i][2] = Random($iMinSpeed, $iMaxSpeed) ;vy $aTable[$i][3] = $aTable[$i][1] - $iH_Char - 1 ;delta y EndIf Next _GDIPlus_GraphicsDrawStringEx($hCanvas2, "FPS: " & $iShowFPS, $hFont_FPS, $tLayout_FPS, $hFormat_FPS, $hBrush_FPS) If Not Mod($c, 1000) Then $bDisplay *= -1 EndIf $c += 1 If $bDisplay = 1 Then _WinAPI_BitBlt($hDC_backbuffer, 0, 0, $iW, $iH, $hDC_backbuffer3, 0, 0, $SRCPAINT) _WinAPI_BitBlt($hDC_backbuffer2, 0, 0, $iW, $iH, $hDC_backbuffer, 0, 0, $SRCPAINT) Switch $bFullscreen Case True _WinAPI_StretchBlt($hDC, $iPosMainScreen, 0, @DesktopWidth, @DesktopHeight, $hDC_backbuffer2, 0, 0, $iW, $iH, $SRCCOPY) Case Else _WinAPI_BitBlt($hDC, 0, 0, $iW, $iH, $hDC_backbuffer2, 0, 0, $SRCCOPY) EndSwitch $iFPS += 1 If $bExit Then ExitLoop DllCall($_MDKernel32Dll, "none", "Sleep", "uint", 5) Until False AdlibUnRegister("CalcFPS") ;release resources For $i = 0 To UBound($aChars_pre) - 1 _GDIPlus_ImageDispose($aChars_pre[$i][0]) _GDIPlus_ImageDispose($aChars_pre[$i][1]) _GDIPlus_ImageDispose($aChars_pre[$i][2]) Next _GDIPlus_ImageAttributesDispose($hIA) _GDIPlus_FontFamilyDispose($hFamily) _GDIPlus_FontDispose($hFont) _GDIPlus_FontDispose($hFont_Glow) _GDIPlus_StringFormatDispose($hStringFormat) _GDIPlus_BrushCreateSolid($hBrush_Char) _GDIPlus_BrushCreateSolid($hBrush_CharGlow) _GDIPlus_BrushCreateSolid($hBrush_CharGlow2) _GDIPlus_BrushCreateSolid($hBrush_Bg) _GDIPlus_FontDispose($hFont_FPS) _GDIPlus_FontFamilyDispose($hFamily_FPS) _GDIPlus_StringFormatDispose($hFormat_FPS) _GDIPlus_BrushDispose($hBrush_Clr) _GDIPlus_BrushDispose($hBrush_FPS) _GDIPlus_ImageDispose($hImage_Bg) _GDIPlus_GraphicsDispose($hCanvas3) _WinAPI_SelectObject($hDC_backbuffer3, $hDC_obj3) _WinAPI_DeleteDC($hDC_backbuffer3) _GDIPlus_GraphicsDispose($hCanvas2) _WinAPI_SelectObject($hDC_backbuffer2, $hDC_obj2) _WinAPI_DeleteDC($hDC_backbuffer2) _WinAPI_DeleteObject($hHBitmap2) _GDIPlus_GraphicsDispose($hCanvas) _WinAPI_SelectObject($hDC_backbuffer, $hDC_obj) _WinAPI_DeleteDC($hDC_backbuffer) _WinAPI_DeleteObject($hHBitmap) _WinAPI_ReleaseDC($hGUI, $hDC) GUIDelete($hGUI) FMUSIC_StopSong($hMod) FSOUND_Close() MemoryDllClose($F_DLL) MemoryDllExit() DllClose($_MDKernel32Dll) EndFunc ;==>TheMatrix_v1 Func _Exit_About() $bExit = True EndFunc ;==>_Exit_About Func CalcFPS() ;display FPS $iShowFPS = $iFPS $iFPS = 0 EndFunc ;==>CalcFPS Func _WinAPI_BitmapCreateDIB($iWidth, $iHeight) Local $tBMI = DllStructCreate($tagBITMAPINFO) $tBMI.biSize = DllStructGetSize($tBMI) $tBMI.biWidth = $iWidth $tBMI.biHeight = -$iHeight $tBMI.biPlanes = 1 $tBMI.biBitCount = 32 $tBMI.biCompression = $BI_RGB Local $aResult = DllCall("gdi32.dll", "ptr", "CreateDIBSection", "hwnd", 0, "struct*", $tBMI, "uint", 0, "ptr*", 0, "ptr", 0, "uint", 0) Return $aResult[0] EndFunc ;Code below was generated by: 'File to Base64 String' Code Generator v1.20 Build 2018-02-02 Func _BG_Image($bSaveBinary = False, $sSavePath = @ScriptDir) Local $BG_Image $BG_Image &= 'iVBORw0KGgoAAAANSUhEUgAAAyAAAAH0CAMAAADynrlKAAAARVBMVEVHcEzdzLzCmnaee2J2XkxnQTG0nY5SQjZFJxgwIx43MSoUDw4lGxocGBcvKicgHRwqIiKCWkbWknfiuJP1z6uQUkGycFteeNywAAAAAXRSTlMAQObYZgAAen9JREFUeNrswQkNACAQAKD7+0c2hxsQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwlq2d2uvsy8x47d5aoWArGALisg/4nIYH0/jfboD2swbp8hOEOj8ZZt8ev4/jhVhVWJV6tbtzP6/fj9+/nvXHX5DTk+NkeV9WqR3X5bu336krtpqy06/UpyJrH8TO9qu0alMBn27ccvaPfz3ZtZVZb9dnObcnx8zyudq16tBv3qgFhLFK3PMi677pa1bWchhw/sR+1LvfXDdytPW91WOrqfa+ewn1XFXc/fh3HT/Oo63pdrYiO2JYdWNb0IgcIQrbrOk9nHT/Oo9XCKsBwtw0l8iZpyo4MZHKX5HE6cvzxHo//j1XXpyLo6MYeCXq37DnjaRm2lYCsdm5Ijj+3F4/3+snjc/vB61GsKndZ3VYAf8wlMmzssZOEZDsVOf48j9f71fFlXb5f12PX5OL1amCNLkU2bBJGlxElVuaUZasrWAiuVDslOf4sj+tqrRWrvep6vLgbctXraoWbgAXZ1iDQbRmJFFvygj0yyKq2VJF1Xacjxx/j4gLcJDrramu+VkHaVSShDFtxSHRYnvCc09ObuhVwKVbV9VH1x7xN6ziuqva8q+0bkruDRF21chWLMAYsebRyh4140UqX5QQjCmQHk2RVtVat6vNOlOP4ci/W63W1AtKuBssi2XY9qgjUUE/MxtiwFcebujURSbYlDZJjcKm21LI6ct6Gcny3V2uvNesmWcQNeCVVYK0xipBEXkS3syJvsjQz7WlJwR4CEHKl6mq1ll/bacjxtR6vate1cjUWibdu' $BG_Image &= 'J0AVd4BoVKM7vIf8JiWalu0gsmcWO3HPf49KTjeOr/ZotV1VTBAFIADNYNSnIQGz9085YrvLtjTX8Eqi7kGOETjGYEbI4iTrNOT4Yo+LVVxmonAAAUckhaiPDIKt0YatwIvsyG+BIA0WbUUgB5KpsXag2q/j+FaPVyMAMuhSMEisCAnAqpUiOGZVo7sR+UNzTi+KpT7JYRkgi0QGRiAFvbOd25DjW70u2oClCIhQJAcwMEjWShVJgK0qsDX36mllygtsRUls8K2K0ALIAszrNOT4To+r0AV7QEGATyMGAL7P3MClqgI4lu3pmeyD4gl7n0UCAmtAH8gnvH4dxxd6tNnRZahLMpDBYtX4NOWdBSzVQgBakbKSaXtuawuyWGD0+bWnpAlZPg/Uj+90BR1etCAzIFlVDPDeWdgD/Pw4RqRAiBLNXYS9JVYiOBiG8zGjQAbi+fp1HF/nlR6jw9ACIAOs2vm3KVUoPEFwn0kCH4I0pUjyShDDY8QKDG/IEAR0mOcm5Pg6L+Lulu2ZSIMRl1qIvbVPQQhg7GORN+5xkwVgQHvMKXkkTjQgw0BkOcnnv9SR05Dj2zwq6B2GgwQKhzBQZC2fgizYc3diI3nXXfW87xUAEgQFiQYgKUOLZcnJICF0YZyGHF/mErZEnpA0BgncKLDeWn2wyDVruWv5nPYZNyAIIwowBJDAvwXZBkkAYr1+HccXeSUAGRgREGCAa4Io7nJ83PWsJ9b29tx5Pp/t+V7uBdANCVkJSSAZGQvm1GA1Ere+6ksdjuPB2yBgI0EwMDgGQECF2tq7EKW93cU11+lec/vr+qutmlTdvEEgWFgY8YCkAGMQGCwWCL5OQY4v0ng7seXpZIwgCwKA2FVof7N3RkuOqzoUnRhjaSsywfF0/v9TL5Iojnse7rNTxQI7yen0PPWqjQxwIikc7nciv6/5OFLDJDmy2QMWKEQkcmP3NY1aixhmF2OdY6zJNwUIGrpXm8pogniM1NLu' $BG_Image &= 'BhnreqzH4RZkg1pj8yOvq/ux+Lly69o0inIEUmqtZtzewKvuzTzEJkPmKcjke0g7sOuO1l7+rKmgvkIPppxNj9Vj4r01D47jyPnomjQ/zI5tO5flXNrb9tnyhVXEpWuYIdoaKmoRt22uN5l8EQSI+VFfrxgJlYqqCoEXIHl1C9K2bO92pYaFSZPj8PjYtuU8/57nYzF9miOWLyxsQmi1jVWOvlChithf+Gcy+aYR1g70FSEVgDYAZspHIzUWS4iz8fagOOxqgpg2i9nxt3Gei4fIkQ1mAJYd7Ypjrp+7lqJFkNJckDX5GhJsCl1r9X0dpZSq0NYjPCwsNkuP5RxsXnE4y/I4H25Hux4uTyhiJTyg9WX/MLCHLBVQVEmzSp98DVIV2BVqgtRair60suSc1/STPumd3pEfQxHLCiMtaduaGUb/79vijhyWIiRAwUtRUSCNUl87VEVSmkXI5Et4iOoTWveq+jJDdFdVK819dLU1DYyuh4swgsRy5XH+tRYhcppHW3/sa4qMqXSoqdefHVOaCTL5ElJRxCDoVRvw4oNzbnZ8UjI9nDOaMzS5fjZD+k+W5JgirFAWgcIssQsoZZ5vMvkaNuz1VVt/Garw8iP34nzIEXYsw44hSajhrd+8WF+aXp/1yMQSC+ZLQ2tVVYhMQybfwlYVWlCr1l1RALXyw+zw/Nh6gJzDEHPDe687ehuWdEWWFHMmjMziQKQAUC1TkMnXsAFFa0VsBQEgTDa/YWymyD8jrIsh4xZSDF16EZ/eyWbeLUIYDQGJInbzziJ98iWkilJq0wMeICzZ/QjCjz7AuhoyLPGBVRByhDQRNz7xzjkzVCGAZYg+UbWufyaTr2CFoPTD34DKlG3uw3ryacDNDdlCjn8NMYYddo+PvVYPQzIxZybXo7auu6LOmcLJ1+wlLIinvFAwZXI3eg1yGWGZJINRknfOcb8Ms6ISsSkRZiJSFTFJZFctsv2ZTL6ATaDi5yzoC/ClhHF6' $BG_Image &= 'tQtiLfBE2H4bYi//0nNlKBKVes5EJBr7qPBUzOWKk68RpKjuPsASQc5ef+QuSB9ieQHi9IQYNgwGbs5lkGWK5ExshgigVUR3xSxCJt8iCLRqbR0CohwBchwp+Pcp1jAl2m+GGldFUhiSicRAQ4F5SO/kWwRRrepThMxMh4+vrDc+XoVsIYh3T5BGd8F4eB+cvYVGXqh/0s9KjAwRkqKKBs0iZPItgtSie2uAkE8RHml1O9LmdgxDQpDrzODgXz+iQgm8UDdDWFSkVNVSeM6ETL6CVPtpP1GiRwmydkeWNPTwFoQCER4jQx52N3rC9Ba5Y4tOiLmSoohgVzDoz2Ryex6EhlXpqi5IjqdYpslnPMjauh6DXmm4G+M+FIke9KVZh2+hEqhWQAGZh1hPvoHHKoDp4YJkE+RIq7Vhh/VRhdjO2v8iYngRvd8uE+qP9v3+sDeTsAj0VaAKFpmCTL4hQawqeKq+APEEOVZ3o88Ujjrk7IY4j/6oKsSIa9jRm1fohrEca2YyQWpF1QbXWaVP7s8mJNhfqgoQZRfEzyY5jnTdD/K7AvknQkKOQdhx/W6fUGcSUYWaItjnTMjk/mzmh9aKhiBzbqTDm/FZwpGxHmvQDRhyPLw1xnLFCJkgZgtZiOCo6lyONfkCNhHYOnc0suTGcaTV9IgEGUXIaa3xsD4IJ/6l6xGi9An1IyKEIKVAtWqZRcjk/iRBQxUKBks2whBjsb6NFYseIXZtI0J6dlgfDDEuCbKM2XTx/CiKOmdCJrdnFcCrZq/RM0eEeDtijLW4JkbY8Zv/GyDWLD7GGEsY0jA7oDqLkMndeRADO1wQBluNfk2Qj7uR+hirMeJjpMNlyvAx/GhcI8QsSSnlNWcRCKAoCp1FyOT+ggjgkyAKoeyCHMc6KpC09BZyjAHW4LoV5Mqv8VXfGJLXlQjiggCqc0/I5O48hAFUrYCAJTvHeMTrd4uQUYY4W//jX66G2DtvvwdZy3+r3n1XiJCI' $BG_Image &= 'QqtdU5DJFzzE0h0VgCDmCcdjrHBkuexM9zYIAy6GXOWICPE+BFnXWPJOqkCB7rNKn9xeEDRKrUVHDTISxFkadrsqsoQg9jIKjj67PqqQ+DS+HGMsyhxFugpUn1OQybcIUgESohx6HGsUIUsaVfqw41cVsvTyY6gy9LjWINY8QVZhwAUpovMx1uT2JDQE1W56TZDgM6p0J8qPK12DhzlxUWQIMgLEVVtzhgAQVX+lP5PJrVlrJAigQuIBEhHicnQ3hiJn6yHJZaAVdvx9eA9ObyM+rPcEIXCBCAydz3knd2eFUytQvQY5cjfk0wMkeiekiHvgckT9EdMhQw+7jS+GII3uhmqBQqYgky/YLoWqgEJ6CZItQJzQY+THhXFIb+jhZgxCl/41b0MQIlGIQAGozASZ3JuHiKD1WgsEDLYS5McM8Qrd+J0fpsXjlyOP8OS6Zeq8bLx1oggxQ0hEBQ01I9cpyOT2gihQWi8goVGEuCGfbdQg2wiQ9/Uv/xFePNyJwb9J02uQdc2ZWKSvdleVNAWZ3H+IZQlSLEJEYoiVTZCoP0yRrTXjeiKWdftokfE2SwZjkeJg1CDHaoLAqQDKFGRyd0EsNiAo5gd+JYiHR/R/dtw++qTgFltuvV24FCD2frFmfiTzgwDTUQHoFGRydxKJ1QUCmB7c/RizhO/f0+jbeb4ffQXJw8NkYG9dl3MYcmFpWIBkIkYBKmqFzg0hk7uzCmgVkSosTNkYE4WuxsDrj5Ye7789Qewl0iMSJK6oR65u/B3TIDlThrgeWtGYgkxuDqEKiRSBUH/K24+vNjviuibIe+y6be3d+vVELOe8nh63XJ9hJQsQgguCUoAyBZncHDIzhAplg9ZsHGMO/cJ7Od+mx9sy5Pwbogw34vX3sQ3BYq3RS5CeIDBDpiCTu7OiEhXpR/50VhckxbjK1BgZ8j7DkbOxvU/jfZUkHDHOgcWIC3JYgKiguCCi0CnI5Oas4pTStKCVKGfym72s' $BG_Image &= 'jZTiIe/QJAw5r7REGRkyuCRIoycIC4FQoVpFAKx/JpNbsyIEEcpra0TEygplA2zk47A08ULCIySa50mX5e/78a8hp19jkNUPbQAJUKMCUdQpyOTmrEIkIiiZaCUwFKoABGpwd4SyR8l72SxDFvfCnOk8LhMi9mbpk4jW/e3SMEEYgKBRRAClP5PJrUlCRAIIDsoE1dBDFXolguSz2VArLsuFiJDl/Q47mg3bltJ6ZGf14LlumMqUgYpSYSgwFytOvkOQIuQr0d0LQBt7Q59P/wi1zjkf29b1MEKTbWsRsjU1qMEkxAwWZo7Hxqk74hHCQG29FLNEpyCTu7OJEJWYR1fn1dW4ok91mPNnczGsv9tlLR3HT/bCRRneGawKix3DHIkEyQwzo8C6AjIFmdybBwmRlAIBdH+99qfuz31/2tXuhr04uztybOnT48Nv6cjawEWpHjwVAuauiBmy5pgmdAqmIJP7sxKRNFS1QvfqPrQb2hWOXG4mSE4phRzBymo8rZlE9hIf4c0U4Xy0ELEihMMchTEFmdyeZHqsG+2q1v3aew5ElthL/9i68toEGQmyrbxfoyMIQyxyENtMKK9p22KMVVEjQVSx/ZlMbr8jpKTkVQZ0V8+KIYb1SBKNHNEnOLPvOvykz+c4sroN2pVoxFu1l11fqoKcrV5PiwnCUDdEUXgKMvkCQYqAVjRqDUHMjvCi9UYoomGNKvvjW+vHT86skRgeMerf2v21tfYOqgyibKwpK2vpQyydgky+AYIUEZRaVd0EJ/LDr16LuDwagnzeS0ytH5kjOuwWctmlDahqMwWAGUKZslUj5D9BQ0V5rnef3B4CCoAKxLMo3QdPNyaaWoYUggnSDPFDrT82s8HP+KmFx8iPoL+BUsZBrJzXRD0/UAQ8E2RydzaCoAhUQ5GnDidMj/4p6m8I6VM5Hz/90PfPYQEC2b0OaXezw9AO/AIok7LaMGsjVdSQEjIFmdybbRUuda+qihp+aI+C' $BG_Image &= '8QzL3xha61NNEJsJsYWI6WB+7iIlShDrroc1raqvHbsqKCODfY2wpFVUoxCB0BRkcms2sEJQ4bMWeFr38lq7FVGNGFFquCAWH36E4mIJslfxn1sPmfaXaucFqCIjE5hyygSiWgFoKUXmPMjk1jxWZjCkVDS0YXp48wCJBOmq2EdVF2Tp/3/bJgirC7TH2EwjPhqqWtVFQYMoW1sJIqXWAkVRKXOINbk3iZgZ8tIqUI2uLsgIDxfA5HC6IG2EZbggXqaMDNkD3VVftbomUBCyr1ykLAAiQSAyBZncGysilKEK9jpdESnSi3Mj2OvuwijY5kH8UMW/5zuxagRIa0MR9STRXV8IBNlJmRRRf6gy0VzNO7m7IEdmFtVKBG1U06Sqasxn9AhpDVGUKCTbRKFvGHwsKSubEl6c2D2+HpmjTkyEICMEYdPDUaI5DTK5NykfP9kEKX0OD9X10L0RRjyN+GgaEOfDdt6aIe/zk1kRFj330CO+ZpniXQEBQDlnHJt93Yi18GkGyOTepJ8mCLFCaLUXdV5RaZsSjn0ATAMFOI8a5DxT7oV9LHQcaxz919XwvKhhSIotU4h/5ji2WYJM7k3KPz9Hhqoc2QwxMV59bNUnC2OaHC6PUFbOP5+lJ8jf98GqcH20qn09nmiZYyYNjCog+HbElJi1oEE/Ztk2I2Ryc0GyLziEZFozoZohDbXuxACrvuAQKB9H8uOx/NSSlFkIO7wed0HUf8HzJAQRGJl/NtsRojCI0tvOPJmCTG7NJ+e8EqDZD87NUGN/vV67aizK3aH98RYocz7iECBPEDtlsfmVGXuF4XHTJ0MasbK9wa0f7Ze2lUjhU4ZNj/f7ff6ZTG6M/XmTAMjNEMpEPq3xetlf+dic3m7QWiHCLsgn2fFxDy9CLEJyFtQdzjN+B7sG1X4PUG5KPJYlZRNE9ThNr5+f5c9kcmOOzBkEsOmRyWVR9TGWxUh9Gfte60uZ7SuHC/JufrxbDWItc2aB' $BG_Image &= 'J4xegI/KKgzus+/LlrIoc+bj8ff8/ExBJl8gCAtemQ5ThC1E3JDn6/kK9sarVlCm9UhHPn7SZ3v7WYrNkvP8yWxe8a95eAMKRxUwPxbPG3NpPT5/l/TTmBMhkzvzOJgZpJp7gjBxJmZ2Rzr7jiqw2uOT0vFjgvQEsfMVt7dJlhmKWlt/avcEDX/HzMfx7uePHqw2TDvPT/r85CnI5NY8skFABAhlYbEUERI0VHVXqBYhsoHVth0/NsR6b++3C/Kwp1nLkaOSUUWF1TC1EYJ4y0czy/JjObeDGb4j8X/sneGO4ygQhOMuINnT6qTGod//UY/qEvbtPEGy4mvAyU40v+67ApshsP7xU6zNFuRVHeXXjI1SJy8WqbyIynfVgW49fMzysH7mFEuHt3cZcq9D0gzBxx+OCLP8cOPvpS3drPc9xdp8viADhf+TLzWPVmAnnGnp9bPyijAzIAUJ0I/OANHh7jb4Md4Dkxd6ij6zotZa3Ad646ds9jIFicbnKO/eYwuy+WjwqrXw//1enl4Tr+6ZEiPGRUSex4twAlhbCdLSEYtKhtwideJj8FfBQDcybcBFj9mbXtGQvRtr88mUZ/V80EdN6EqRHAAC1htTY7auM911CO/w0fr5fvf8vs6MAqbDGDIkR9c44NFMdhibGbNJtrxTkPdjs/nkGVb1yo2DpdTC9BhON4JemG483QPgSQaCEkS8J92CiTE8BoLVZvV22pm89SusvChI79rJ1W0nyOZzaa9KMkHKvPoEjknoWzvpiIogDake6FOP/l6GdKXJefTW29H1HTp8UnK+tWFLKEFeL2/neQmyE2TzuSAF+T2roNTiNCQwqxmM/KFID7gwO/ubJtwRImjGLI7ilB72Xr/JXy/0HtE7vep7t+Lms49sqKz6q0IJElqA2Gw/6FeA6C7Wm+QKncgJ2XEbcq6SJ2Z5Om87bYww5s5OkM0Hc3DFLD+exb3OctCPYLO45ZhCrHtYdTi6cWmegoj3' $BG_Image &= 'xaGSPgoQwgCZPbc29haj0pD+3gmy+WDai1TyRPHqBDELaQism1GGbgSQRLkGWQmiCFl2SIwLrUEWNqEgrU8/BqjdFmTzweBXlR+v+nTUsvbqsiiHGklHwlOQGugmJ/qbepD3zaHxTg8FCNvRUKuffTBBgpZtQTafC34zQISj1DtD1p3elSCnkeHDSbTeOz2gHTZrsuTQpVMPNS3S5Yi1UiveFjFG5EJ9C7L5bEGWIQWeCTI8MkMYITLkShBQHlCg3mXEtcDQWykiuupegiTNq09teg/SP/ku1maD1x0hjuIURAARuQRRguiKgWid8jBBJIHsOLuW7EsRPUScTShBrJmZu/Hf+9m/IEE2++RqcieI1+FXgoQFtaAcMgSOZg0edObUfdwLrcjvRyBnpzVUwViimY6cIzLkvQXZfCxH+S1BRq0uQdy10EBgYmFyhA2IFs3gfyRIP+8E4bNzDnpzpYcaAQdGSxrU46OnWJtNK1WGlFohQUjMQqBj/TfdmSGBhD8ySylyiSH6NcHSq670UHwI6NcpbGRIP3eCbD4ZXHvTPRchvgDuZ4XdEmjqBf6Ud7E4iVKCXBlCjkyIOztsNgI2vskPSZDPTpDNpl2GlHUbS5MsZgjCUhGmABPERwaIw0MP15tNqAZdoRaCesyx/6lHQ4NNMkB0j5hLkC3I5oM5SqmVgnh1rN0mIrRQn/RsAffAhILAVipMPSgEPWGlHgtjJR2GBgmlnEmDPj1BNlsQhE9FqntxUJCFNKABCgHDcAdcszFE6/QDYJZwmrVO69X93T7HLj0ulZo1+rEEoR/z+thsPhhUhA+fFC+FglS+JStBTrZuwwdGffFvzX0AMYtG1UFFjD502jEbK6EOJpAB0pgp6cehXVx9C7L5aNpTq47wAnjxSc3S8xDci/TBf+N0jIakHuGpyxhhEkQ3s5KeehhR0MAmTUsQJg0/3Ht7bDafzPGsPhBQhsgMjStCtJAAcm5V628KorU8/eD6' $BG_Image &= 'hYacMkRTLJF+iEZJNMMS7zb70cMem81Hgzx9pI6qBPG6BAlEYMVHD0wTqvO7dvhihIf7i+Q7013bXHvQkjtBerrBlmj2JZE+/0yTzaY9q3CHl7oMKT5ZinQzjJeOuXrmEQ8OJkiVLWNErjtM20vkgASRGMhK7s3xJ1f3j83mw3nWezOWU5FKTXLeRT1EpAw6TZSGaI3ioypB7NQ5vZN1tdkSZG+8co2uG16zIlrbAbL5eFqRIA4Ur1681FLrcIcD60QsICdXs83vwqEh/MQAMkZqzOCQIayfSxCaQUvanSD81+848mezQXnWMbxkhFQKUr1WZQiCguiG7jSB6ZGzqtkGIAIMEApid4RIDwF26B6WaY+JsXaAbL6BoxX3OqgHX5QsbccyWKKoeM6a8fGb36DmDhiZ4/9OOFkJYjkIpB33GiQ/mK48NpvvUARtdnjJAFm7esO1GQsIeFJJxofnxsPjJPcRJgwPYRdgg4lcf2ibfGuPzeZ7OFBKYYCw1+oDExoyASNkFj8wUbq0c5LDlCMbUXz8CBAZcgvCoNkrkM23zbRkSEkHintgYup3ihSXHpZyHAyO+wxFO7sMsUVThCzGiDzX/dwLkM2XwQSps7K57mJF6hGpB7tnAxoNsUOGsH5s42X/mSBLkOiN9dhsvk2Qp5fKqlU5EdkMwgORevz/uTgNkSIcr6N8LTstwqzF6aO2htZ2fmy+jjYFkR8crr9LD3UHUaS0WQazw+784FLkTg+WwFXUZYzxfhzbjs0X0p6FbmRpM9atCAUR1tYKY23MNdphs0sRm5VN3PMr2Amv2HZsvpNWaMhsLC8yxN1x0Ww23b3KEHkLy25nYqxrrztY4JW0+Nrvfd5sDs6w/liCODSySLRO2nl0hgaXH2S+TkGErRIKkNmJu7fHZvOlgixDigxZhQKOMVvE7HmkydmuY93nkF4QpYfe/riF1ax5rVuQzfcKogW6r0V6dsxWQD9i+CARnbQeAGgDoRuq' $BG_Image &= 'dSFg0Q3htWxBNl/KgeeyQ182JUMK1MOdgohgmORFe7Jmipg42ZUjRAsQ0eCOx2bzpYB6+JMzLZ9ID5aTwVZ9sIiuTJXAlRo/80O1APYMa/O9oDgD5FkmtAHuhQ2O4SPtGTrHt/IyZiM+W+A0IUluRe5rM0M5HpvN9z4IoSCl8DqBV3hBRgnVmfzWV1K9ZpH1pyETmAFYhgjAWIu2Bdl8M62U9KBM7jmW9CC/XzXrGtYLesJPLkN+BEjLV+CIx2bzrRwUpDJAnp7Ay2xMit+zGBrjIiJaTObLKk8oCXAvQpAlmhk4tMdm87Wg0IZyJwh4rYwI2YHRotGM3vqR1SNmG+szDjBBVmyot2VK2/tMNt8+xyqFhlQJAvohhnswNugGmwzRq1CQUJD7MF+wYAsZsgXZfLcgJadYd4LA66xJpgdmRZMkXXZE79HTivAxC7ZAFoc7Qh6bzReDMqmMESdwL7OL4QMxadHZstQ4hE2AACjLed/EStB0n3cHyOaraSi3Io4CeDIw4BqXIz3RJXpYnxUgV35gZYhk2TOszbdzIPWYOAVhg3MMDJniGBjBNqtRkZAFosO6JbJDYoC1Z1ib76elHKrrGSEcAb0M7TgZXnObSQiuQa57uwtciqxxC7L5dg6AhsyOIjdYDgTC3YuLOrzqpxNaQT26FBFQXYbsNfrmr6ABCpCih+hr6aH6QTg8ANxPz+lK54VY1kSD7TX65us5GkrqkXYUlyIIwDFYPvxCGbKsEGC/s0NsQTZ/CweUIUX5sVirELChrDwBsaT/3xBi6uIvWoJs9iQLKE4JXB0+KyYIn33QlqxAUIwuMRaXG1YMhBfbgmz+ChoNqShrSQ6NrAGP2TTt0spdOnAgmI2FAORJYWNvhuOx2Xw9DQaUUlC9zLoTJEusq0Fa0BO9Sz1uCspscMC2IJu/glaaAbX4FSEaIPq10ujZsMbsfCN/qAztoB4T2rMF2fwFHM/S4KU4i+2SQwr88SUHzW5h' $BG_Image &= 'BFgFSD9YDq+evmxBNn8BR6kOSI7iRBMsg5GTjYeMHvnFOTRlSXIrsizR1x56+lFfz/LYbL6dA6XCQDsqB7gXTMLENOJtOtWdZJb80IM+CGpG3+B1fov0PztDNt8PaimA8mNtyNKyYkFFpiHvY1oijCUgFCD64vWSerx+/YvHZvPttKe7NzBDSnEHO4l7kvWe42HvnGjZKhNQ6Q5WZXs+pxyT17/Px2bz7bRaizdMSjrCMMHPCLH/2DujNIdZG4p2Gif4ykLceej+t1oJQZOZDXT8fzrIgP1+PiFMHJckqpBMIPnwpyDfh1/PZzvPE4mI1LvC4vZ8ze+TvDIFRBERq6yIx/oEw9e/M+Yn3V+uR8RUJP0IQqzj2Z4niM4AJia1xir+ER+xTkNilfXMLd99nOqdQjxxzH+Y2nrElX6EIk+P5+nAYYCgVZle3J7jGV68whB3xdv3IxWZBrgkr1AjN7R8tpJHkuV51B5NABBKGscwB0CtsYr784g11uEmZBmSisxC/fVZhHzNibdfCSQTz/NUKEAqSBOLDidqjVXcnkd86ccNec1CJBSJYn3W6a/8bfnS45XJ4zOBHGvz6jyva4xOggrQADPDWWus4v68jvkR68eqJqYg/iQfbEN+sxLIMZV6nqpjcDAAAQiE3p0lSPEPEGSusY48f3VM4jYfRIQiEb+I5DHLD0T64MZEzCg+oIqQ4v58ZQbJjLEVSUHyUaaSn2T58e1qNdHeM3/MiwYLQSAAWUVIcX9B8j9yQpEg5Igr2ifpSUTqkZ++bqJXpxm3HhSaIwICrAOLxe3xRJB1+hYiBNndLz7OXoUfrWmQbtBoiZhPAYiVIMXd+cptrJBkG+Gj4913TBN//DbmiPRxPuXEdV1dmVhclpqIkDC2fxXF7UsQ59vbu/R4i7F+KfI8NlOTZxwraQ16aYd9LrAGYTAjBCCsBCluzqHnsx0hiGeRx3M5Mgd/8v6jaJ84R0Qkj1OaRPpA7+Rm0IbR' $BG_Image &= 'm5gHAKl93uLefEHDkHcO+d55Ikg3vtOMDc6zeYOmHkYlwIl5GHcdAhEpQYpb81IHrWWh7rgV3k9B5pNQIy1xjRzxq52n6eV0JvC2AGwDk1YvQopb8zqvMARhwXfmkf/ljuxyjbWRqD2ep2ro0Tm2IAsjYdFyjWWjXoQUt+ZLVK8wpLUWRuyFVrR0JAbvw542rxN6BdpJDC5UlYGBZpCYmIhUlV7cXpBQxDlbJJBsmUdy+2o681y0c2YPvXrv2ocN/sQIA0TMcqwipLi5IH3lA0eyWJ9rqzQlt3jX36m3JieupA8lmXqojkFwATODQAQwqS83FP8MQdKQlqki1NjrLCclaQ26XLp6QCoD5RhUh7YzCGQGzOpdenFzQbKi6GlI2hHh3WQpI2nHphMdpoBClYkqjDYRQ6YRs3oTUtyZL8DdGJfTVRXLkNzfXQkkfm6+c0cynGmEAmDebZDFBxKrE+/FzTPIhav3K5iLrCALEdcjJk3CoY1effRBpaND1eekj1CaAwsEJkbAZ1WEFHfmAYQd3dulV25lBUfLBOKCpB9vet8ZYwQ6RhpCADRCvBmJJUqlkOLGHJeiO9fOIe0IPWYK+Y7p+av4mH6wc5OCvI+Z0DDFMANDj3qbXtyZdmnYMZYfl8rKIM8E508/nDE4lDp8jHCUE4vAWmYhDYGPZUhx600s5AorOWNtFS26dgp+ZA8PpSr7rkBm+phdYrSI1IMmFO+k6pDivkexYtF0jW2InunH05mHrvTDDyd06CP62elQDiaW1zIkBhgImLAMKW7J49K5xrriSlTmJu9/XBD5kT9m+sj1VAyZNnoMn4bQLCYK26eyADErQ4o7ItApx/DeWxAbWe5HpJAG/Kw/xlBlKDEt6cPp1PE2xKJz4JgJJAwxj1F1SHE/vuRSb33sjaxA0Z7H/PmH4Epw9YSDujevGBG6vBlMQbyDB8yBeAOlDCluxwt6aY/sod45e693/gC3we8T3X70kXqwe++t' $BG_Image &= '7/xhyZ6sRzCZfhhQ53qL2/FA10gcIyuM8CRQRP44ml6Trnk+MaTQzmCMud6a07xW8RHNmbdxA4gDA+oLJ8XtOFyJKcbowZXopfBCpEGvRXfoMSvyLNDzuImmLj82erFEmb0JJCTxqEK9uJ8gOhdXY6wSJG4nCqz6vTvaJ+nByF7p9LwxD/vcx/KWPUUEaUh96724G7mI6hHZnHykgIYtfcPOQY/c4lWNm5QlDXFyhAEWjaBfjhiCOpVV3I3WVcOOqEHSk6SHID4i23uF5ZAEqX3QY+FPwWSaYR9f/xGACOplSHE32nVpD0H6LtK9TdSJG/SJjp6luA5NSZzhkd1G6QCEwSacHQgBOo9aYxW34rg2fS+xfjzxSzu8aR4vmdfI8+47laQeZszRI+/lY7eXAyAo0l7lSHEfmurHMasrI5lTXRU6ta+Tu+w5zgeZPX5jWGqEI1zzTvityL0OvxeVQXTbkOHdpgfoytFTjxSEQSgS96TyNzttMIKJAWIGhRC10CruQjtDhLQhLYl++4EUo698EcG1vppi+POcME341OIzfQyaBABCFMrxeL2+SpPiz9P60mMLMofF8DuqsiuV1FWDuCD7N1PgZPDjTUgKkpJsPWICmIghJkQ8F2nH41GeFH+Yr6aRM9KQjM8Mwk4d3nx8V+c50xjfmLdPzHYfWJB+QEQwm0MS0tyTqtyLP8lLLr22Ibvpx+l29k6ObCFKVx/zyZuswt95g2mHWK7Kwg0PIcwbRGCC5IQAQqAd5Ujx93icmTCy/1mEdGUn9V2da9QiOq7c8f0EU4vPk4obVW5pLMwAzCAA5O3IeQL4g7tbRSF4y/He7s2bWaBrlOjTC43kQXqveUxx0BHjxjK2EEINO0BzYCaI8EsCOAYxMRCOBEcpUvwpXoBeE01N1pAXh44+kwU6MbrP+/5BYbImZjk4+TDvdYQn0w7j7CUiLfELHraTicQorXa3ir+VQIIRWnzU6ppTkponS5YTyp4Z' $BG_Image &= 'JCxIbEUOZuuZukupjETH2fJOxCCwJI2RGHDiFCNNqmgv/gavC7o2edVbxMep3tzLJYZyaO+qVAUZ49sOiWGSaSP73ruSJulMOEIuH5C1iMh2JgwB6N05A7IkKUeK/zPtv+ydh5LEOgpFN8+gRsD/f+36+pRoeffllEbXMmDUXXFOIWy5Z5oKxibevCXJ7av3Dnd36og1HYEP5eRBhI/paoQkV3GfgwxvT+mQCmvBeqvGZe5K83EKydHv24G8WEzJeHcgmMu595ZdOc+y8i4T+LHft8Kl9wz/IcSoLnHL6NcNWJoPPjqGubVE0u+23Do6+rC1qsK/YGNVlVmIFsSqgAMCMkBi0F4sklAoM6xo0UdYQUJRTq5BJ6IpTVYBzBWPy+u08cnNrd8TkqPzo6P9m3Hevcd7ieXNQ2W6c23QULh+OijlpaJUUD+iyoZRWESG6RQISg+7TYR8WdS4ZBXDuAH8+XmNvr11GDn6jfWfcHDQqYM2HV6k3O/kio4wRRpgQZjUhlpwyHLQlo9Hs9FBDbKUDE4+CXR3BEKaKBvnYfvRb/yjow4Pa42Fo4LIZxRyBVyY4cHjsuSdxnzojAE/TLWNEUvEhYeKdfOXeEimSSoIu1M+zttWR7+dPvz9YNAblKkYzdw7chQVJstYyizX1E4NNYAk8bi/utTEjMJDBiVHMUut62Q5BjIfZ6119Btp+Oo7eAwCKxMveVIn0Fv92CPWS7he0mBGE/FeazFKrlVSPEUpkXAVAoJd8iAiDekwcvTr6+8GExMgfI39hcJCWRHf8M45fjrpd8euuInAF9hYr6vIPbnAr1BgINNA+sTHqPFxHiMe/cr6j/vLvfe396536YUyk7/1DY12OSuzEBgwuIOlXCPDNDIc6u/s5WPQ18vDBbu25JitGFW/8s7Go/OqVN5EmOwED9igkEjzXRuiCN4uZ15ja8ZhSYMMcS+1hkKurNdgpGjhNaSmQ+NdQIoKMgxWrui07Ee/mv45' $BG_Image &= 'Xu5bb84/KpT2l9Iza4k6IPmleZ3bVE8rbDQ6zSVEKLZwA6e3Bs16N++EJkZsUFWwQKKkxSkjR7+K/vNRj9u6dp2Kp06IAZAmJAvn6T5ffqnf/sDeIzqhYLuEFzN5cmR0wsNoXgbn6MDYvSXLhA0JSk43cvRL6++UDx39UND6BtYEEQCRCjqweX/PCwFClw2CBcqljkoReECNhRGrLKAxivqxBhIaxvyjbedQ8p+njBz9kngkhYOnhLQeXHKh8ULJ7zTAhmdeU66jCoEEMBAQ0YEQLyasIAZv5Ts8YIIItww9iCbkRov0sBpnb/zRL1c9ug/v/Vd2HbNbdmk1Ia5GnN2KRX+y6Ehcr64udUajF1ddRcZYGSvVhPIABlxpdKbwsrTsrK+AguJxD4ipX2Sv1tHRf0Y2Hk8ZhaR//OdNSKU7Naae6h269WaDLPHepNSgfESZlVXJ2/NpCKJW6AxkMUgak4CCDHsdVXZ2/R79TP39X9XbrkwGIHy+11rtlqZPJ1UVqdFwVL5XV3hc9yUbIVItIpQykpSWNyKF2zSgQuJT1BNrOEzhp5E5PfvRT9Z/6m6w+3dG/VE/OFC3IcpBxy1ehaJtp0ZsXTm+tkhxe++OZJUW4tEkaKBW7zihL5dWjVky09DW+MuY/eRfDzo6P6L46S4sfPXnm7yXVvJMTfeZ6ZWV/WB8ZKSCBgMbVBMNJoPjTULhDcunYm87CKuK632BxZCxrijYTbzPLp0icvRTuo/xak1x8hQtu8n59JrwYLjc7+KCixdQMDC4BAamiJGVAQ+xBYuutXSClyHTKs3ZCNMZA+EpKC0yOiJOETn60TevvCYrK3HglAwdrZbYAIt1C8uTlFy+MVHUcHAoVlCo11RLzBGE6YAHedwm7lUpZzwo7F5FlEDI55CwJnOjdIrI0Y9cXq3dVpgJLE9GHDx8NeA1L/G/D8RDnyjcKuhKnpt5CxHBDDMdLG6sdFqwuYopigYqlla3D8JbCmjP' $BG_Image &= '5aVmBEys7PwzxKMfrn8Oexm9BWdb1lo0JWiuVzxm5jXtyb8khIvUQPbAQqZkSCni5HrRwgxzxkvrtlZYTMlxjkAEEPJsRyzGQ8ZpMnlWWUc/UH8f9XLjfu702XpNDCcFBkDu06tKU3kNqaADVkIDBQY1BpWragBHdyP4InwiwSC9A0IaDThR9B1STTqLrKMfWD78RechEFq+MDERgkyG+lG38CAhk1kouncfDzJk0Io2KvhAE2JWgUY7Pl2gZSQ16llIZIZ9FyA2ziLr6Ift2xUDqg6IMuJQscmucadcgKj3KPrxd4d+B74BUvTsKStRA3ZeSDz+7LutZzQgLbKDudZAwaGEkUOt+2nI0DiLrKMfsPPKLwkKRLBUiw0jEBqX3KdsXcqbI6d0YL9LNBwrKgjAVCeKTwFBBTLcaEKGTuUpGv0OiA592PYHIcBiY8+dEnL0/c8+zJ1d7bkWUNPTa0elJtaqFJdzW5cuJF+virxU0KEoYQBYynPHo0sEhkR0Ay+RZE8WN2wvryPCmFn0GGDJQ8AwAKDEiJVNhlmK04Ucfd/Oq3Hj4TcMeUPh8tBRokH5vFxlZSpFC2I+wcGrQr7gAb8rvuOyCZEhAI6nESVyb1UJmlbf4+WTyKChFRikOYt//e3o6Duac62PhMhLWPDPonRg4GLWJbiYxc2s+4N1G3DYbvJyyVUvpVASc01LTxXZOm9cEZoFWY1h9eg/KCetUs7kdmz+H5A9Y3ZKyNF3ra6mmwrIrbzk02v6rGukl0NKigwBoXhym/fiKivEAaPeT0KyfDUTPS0T1Qpst+KdJUk0mpM23yB7w4Ab9r4nDBTYb958EqcLOfr21dX97NxzTh6Fu9cECwXp6//XXuollgDJYk9K8dVKCKkGRDFhSyhgnoBkdx1kZIYS7xxfLeNKIkWAxfFmFIm+RoR3ymIrJqeEHH0zHvUye7mASIqHe/E3n5PAZ5W4mPChCQApr5J/cVuL7/fffWokASLV' $BG_Image &= '4cYLwtfWplfhNwhGVK+grB6Q5L6bUdEovmKD81b3KSuBP3d6j75xdWV+aU5XVSgAIZ6VdwG5o5uNzCwiSS1IBUWEkuFizOFCB6Z88RDY2vTsRjC4WPiMAg2FI5TqLkRJZH0hjXU3y2wRQucODgRQQsbOnd6jb9qXaG5+jZe5CGFHlbuV033MBIcqdiJOGnaadLDIigCC3Ft1Qi9zf3QeiUFR2NC0nOw9UL+ubrdjZtRjPga+SuFKsKXXwizuAAiAg1JCm3In8R9/Ozp66J+j1HromE55SJfUipQLD0UPVYmNSt4UcXEhUzKEqRNESk5D10g+ZAMn9RORjhVuq6wRLbKktyszJtWOYyQyCyLwGN9wRwudNdbR88l5mdkUGiof0qxyCTfdhQkqJ0SZSQV578Py22QuOlxqKPCryAQmoqcJK4ji8bxwlMk3GAOE3l+x8Bp2KYbx2EMWxiTSW/ch95SNUWeNdfToPvidXcFRVI+kcKRjaTjABVYWNvqgHpzwCQkkqBmuqyR6dulRrcjtOlcYELI16CUgjEv4URj9wVLF4KZU2WUl4yMyiPl1lDUUmx57eo/OzSu75FMVJH2yOup7s92ru3ziZC8/p2Lx8cpGI4sPlm+VQnYjqFEJLFdbZ57EYbeNAS4yoxYtkNFF5M1QOWwMXhphqt57FYNw1Ddv7rV9jXV0VlfxsnkNgwr3ykmpyKoCDtZVmXWFDDQ1SQGpjACIot2QYANbnO2ik6mYShOEsdNCGMVN3aGIqUs16tGGiB/bfsShmDY85cOiwyH4njuxUJ3tJkesrj6mTb/GnJPeOn1tzq1c7QOQVCmQkWayxuoFVmOwseD4TCyuloIYPaYiaEwMGvjrX06mGcGAUS+s+jMxOL1MxGiW1l1B8YDQHmx82FCROWuso3t1FV4mPOw66DRYFDmrqVqLq0nh0AkYiI6eFRbFY2/Gk1R2JBUSAKiVmIeaBQUV1qluTN6ojNWVG6TUEBRUGitd' $BG_Image &= 'h5CQ5dDoXyWFEWRnu8kR75zbp7aWmM2iOfd+idwri1YjnWbEp+I5J/XEp84SIPpuVHYBas6SMuLbSiugkD4jCrW2LEjs2+HHIKkzK4YiQdB3cflwFZf0GIV6XxbPPmhEaljs6ysZps6jkKP/fIy7FPDCh9Nz+JTJSaO9akVi4IIgZbsF6acWXp6xcHAnyOwKI+FDyYUCs1wy+z5AhnOZkLp+DIymLKzMrKgO/R1ifgklEP97CjNMZ7DGGnHeCjnSS4Pm5u42k16DLqEmt54KGOCDc2neJyZrssKCgQ4Y+453QiYIWvl80zZLFkpIZgYEGn6VFi5Kw9hUstih11jfuqwN5UwI1b7R5PFKITkZO2usr76zZEy2lkza8P4DzkvFskpS+k1HdnSvt/ATQEDC4WJvNiqfXHT22bBzMtds2ErGLbKc76KSMpcGfDw1opxt7iU8BqSESgcbs6wBQcRnjfXFHw1Os0kBKYpEsQX3BkKeVVTf6L0vUxGBxBfYoLgQ4avrWlqNe1NUOwsZASdPdWXY0GkgurDQgvTN3GZn3yP/bkpo0IeRpn70z/buD9XNdH3WWF96Z8n0ac6+9RIiq0GfpVC0yKfgmO4FG7p6iRBy+t6cfZcXvpR9Lqq6pHDcIx71hJDRCmyCBLYw+KJHJ1vgYaOCg69I06r/ryc/4VAjFh6qIArt+Ybh115jnY27qh5WVSYcFh78OSvW5aQhr6KCtFr6Cq9XZWVRbqrkBApxCjPFnKSiJGwSolQcmASFd4PNNW4F2/uGAoPI4GdN2/oMy6kK2FgF4/ZEARqoxscpIV+1O3ezF1sT13O8XM1HKXB/FwwFBRBqOxD5qaF3pLofvyfeXbrA67mlJHw2KKGQTOjjj/2KiZNow/tqtfWjlDYLzZu8sg3JCGTDLhGTW/0HmIzW55fdbnL0L977mB7ptW8/N27xTpfJVMSfPE83JtDUFbwUykm6iZVZbMKaJbGRl44dQUnb7sT9wQ2j' $BG_Image &= 'xESM3BrySlew7UyUq31/lulSePDDvdUtTHVDYpqLWISU2pB36ZCppsO+6g9knYcfltPnFCEplXdvzusd/WtWPBTsp+fAkhoz31r/9dmLrv1VNOZvwcvzbVtgISAsJyTl/RpIynKSIiwIGPj9Hpe6CdipsT4qVb9DxTe5rEF0mSVb5qyxvp7+/vnpNqcLBXOv8mLPlXlmzfLrrER9oxdHUJ4P3T9c7SymIAm8ujOX2Xr22/S5uTXXCo1WXML0Ft7uxVERDQsbNaqzVeuLXPZaKhRgOrfr/FO2r/mTiSKDztWnXDcJs6as4icgmHmfziQ2pyqIAOHvm6ciTHZns75BlgPljkUWNmRkYYFc6CSqYSyoimlQqB794rpRP+ZCbRSduXzxCCSQYOFsfck11tE/TXuvLnmae03acfZdsdlKkUTTDhUUhn7sAR7FB6ZqCAxVpUtMIEVeqPsOGOnxmGtRH9IJ+wkhfrBvl0uygan3r5xsd4/JvKtKUDEApQFpLlpnz/tX+9Eru985t2mpMuJVZZ5ePODjv//XwqMoGxqpgUqTEjb51yDuPEIvCNrrhSzBqhALQBIZ2y75IInTBDb3l29hgIlREngMAmbXp1EjAxyAwdDZ93xRy04T8qX4GG737V1X5RAPZXO+d7gLF9/+/F1sUD1oz3WpABVOj0GEjb9vQLUoM5qTsFmI7xNBB1ErsLGfIT8eNaWjIC8VpgDkkeYlkCYDVoqlV/fnnF/vRu/Zmzh9WnpNHXkP7l950nzMhBCMS1Wyvc6iHKBqQLK83xJsdQEBqeqqgX/uPekI9UPCep+YvYQ8jv6UyeZNUlCPnhqFgxAC+ECtz9OEfCU+3NzsbqJn6fC6Ii/PWoT47MZaWg/L788hLiVZBB++VYBVO3BJ+8IEs1zsBrDaoi4B+BFUC5MtLjBFQGJUbF/ONQMERLW/VqhzEHX9wNtX2rB4llef7v56L6lq1qXkd0lSYa2f3k10xV4yl6Yv5d5k' $BG_Image &= 'sFORTjzpFXgKvigi6fiS4dyvaUoet7RaC4F+K0RX9oRpp0SH2VZPvNNo0+CUTAFY7BXEzpOQL/Tm4PsNWdeBm3VZ+o37MjeBRn+tL5mtRFphlb9mVtAfeBRNv+zeozsASEpshlT7jvZFFXh0acCQgJHuUmqbyGQOMQsV3YgUwTc26SNOE/Il+Cjzl7lP5092TsfBSKVUE3BatB53lZnrVfQ7ibqCTPfSbhP+Il/Obi5JuVJQveTaTD179GIUikIjsrt1gvGEQ0dfcNj7Awh4WtWbeaXRbu/PQ/5r/EfPo4+y6fbf9q52yXEkuUU41jFNJSDk+z+tPUIlokSz7/xXOqJbZJFia/aHsFnIz9qTSyj0dKJOWION7hiIKf3QbkWASPju2WIJjWJRAGtMVGvIZKKEDJL07Asdon6aUaZa3srXXUtm+DK/Yz8SIPQfRww5g9fNrq0+IkraCyPsSCHuf0jV1B39IMjXa5V3qNlLjFBCCgGbVOyDGXKCn9tMCFmAusvgdOVVQ8hEaHWIuPy9T6/T8eRCnmTz1EEsQ47TF6s7+SfHMU1IW1oJWceKfhwRIP7pvz8mTsKFwc/Pf0I61l37gePAwWpJhOPnXPOhxJZtRPLSvchdhwBFdNN8SSRxDAit4OsvlqhwNfsKrgi7sJDOeyslxTfYzcueTxVB4pNiSnaWdLgEmCmv8qfj6VzeYI+EpDT95Od93pGQ/4R5tYWDJcNmghJJaSzIKqS1ZTG4BElDNh3J51UrDKmyBUlLd3VngzZ0gHp+MA+cnVlq5XK3GX6tYQi7Y8s3TwzxGNzHug2pXUFlgjyfpkhHom/WxNXqG0n+PI7/gEjIzY8fAOCWoNtDDlEOoZPeX/WYD7+ZpooAQQjtv0gohKKqyrspTMK6GpO5mF7vHV/VW4HhuTOpWtNWMfJas9WSrzuIct9H4r4GgZgz2vOALTiO1ZfUQ3RctL7XGAZtg3K3IP320nOgeJCEDIrrHIMidYts' $BG_Image &= 'idwUOpADEdDy22wDqwqckHjkuDkiKfHH1jsjtG6k31wYlGMQN25Hafh6y0DxKnsxQ/Tt5Cf6b6Y/XK/4oN+JBunHjuctQr66a3umnVuBJFmXZgq9fkcIkSz3tSQ6/ePGf1tVe+JImz2dwOHcyGWgzu2wR33G+8zbNQj9YnB0pzYkKsVEXAQJktM7Gt0XJs1Zgvw873Ssb64dbOJAYbxTFEmORrfN0A47eYFqCfI6pbYA1RAK3Sg0WJbmIUICGVg7rMQC1/lcP+WfbM0uSPTeSjR1hFluUz6TD59HpNUB+xdp3kl5H2TiVHCLkK/dXf3zOBw+NyuAVVm+jMe8Uv6BsSaO8jF9FUmIoG82UGqATvGtoqW4sQUDk5CF3hkUXmTpw553MlnxMSK7yAhVHkOQxEZCFLPEn3macbgTJWfzZBbR6d9cE3KL8+dB4CgA7JVZshGEFNmKEdmRMpBU23IYQ6obJQClllhVMjWEVkeDA/A9szJpVj7tU3RCFq+ekSDohWye1M+zu9fYeqDknOBjKGIqTUDRiPWwJJ+R0MbxvSLkzr3igcm+Ir27kpW462rJFmkLEkSfk92TX2I0CC0v7d7QughFfwvolKdnBA81ZMghDImo92kXItjtx2mezpbCe44n5pEG/UkbNSLXjZkzFdth59aO4xYh32g/jgMFb4t0NCC2QDYB0VQhm7rGdCLVcAOS2kLELHFssEAUkKhIwxSbcAmcRx8D8jaJTSHWBE+UN092IVNuO7R4p004s7t+JSr7rjeG5BjhYZgb/wEi5M5tP7y7Yh2NZkOUHBAnaX3e5ojlez+lAAWAVCpArKFHlvTiCoFCFUd8OJDYUA+NJqze6FP4/LLjKPYH5FXKarOxCiFMg21xzuSFfHWYEEdY4C3WmSaXRbffGAm58d8vAwKgRR6UlYHIVvf4sqh2tklAGQ3IlkMz+1x27DpVJXK9WVWQUgGFxSC0mZJwx55mEjGvfViCTxKUmDl83hGL' $BG_Image &= 'sNWZ5w1FgywLIm3UynDcHUl7T4v3FUIMjuedjvV1G6yfRMA9WY2Te0VSdC4We15DjQCi/1ad1qNTOiUJ3AbrpCUWpLVtSvajrcdQQNEafjJuXGiI4Dh/NPxZWURcpFpw329tXuAOHU9+rAsnVq4yrDAIT26CfF1r0Z9a+yPy8E5KTXtTGf3RluhkAuwGAQiypdimhBDqxnBDXIF0l1zZYgBqbCm6wmm+lNQ5JMnXl7mg1iDoiAoNVVJa2IHfiPXouLdA6nX/2KupFlJtG0yGSXgRHLcI+S48fg6gylKbhJpJTaTNhyFSZELqc0S8V46JW4WgCwZhLiQMMgmIDqD4aLuztH5cvLKeQTgiky6X77pk0+KzPcoDuYxYD3yboOSHzJFYkVAjlHGu4nNvbBI870jIt4VAALe/EtRLkKvpLccQQxQ1wXRelNoSUkHzpZedWWNPZHrUBAznyw9yBlK19uxEJeChXYq0ydYR6ZopbDhHOSJA9hTERD3Cn5iRiqN4WskdCRcOcr2GILiKcPDnFVa/C9O/LQZC4JgAuMTFA7V5MJQYSeIrxXyMGwuTbjUkQWfdIOlELJgZ6+1M4uHYH9uIkEIZhXhOYNSIcqmNU4hjbj/6LEv2HJNAVENaExMeOy8uOzikZa+nUAXfJ0LuAluwkYR22Zc7zX5I5doy3T9BWlBPMHBcuNJYCkdCCBYK6l6KRIkz+u1u9QTUzYCZIBIaaB+VMBQIQaSrQPlTuZdzPL4BGqS07c22qMcFzAtPvj0ex5/H408m3t6hwi9r8EN2bIJtRYui182BGaNhkhEPFvzTSgqv31FHupctCNXTehTqSBVEiduU9DakZ1fyiOZ48wOHKI+I87+H1BNqa10tPd8ZAzQkQnqbUjXL9kU404shQUZ7vk64Vfp3EcSbIEMSKZkW4+dlk1sFiB8LTUop+KA2s1AOp2fkbaFQkeHhjhrEdNui2ZAeEG3aJKckjLmcQbWrEF+EGY/lzHqY' $BG_Image &= 'Lfnix4slJDiZopGHFyFL4oMpKtzbNfj0jZ0b7ihIj2HY1Ua3pHivhiuhRtJ81ymAOiknDh5qXVZhS2pMBi/qdbYkacmCPUXqUR4y48yIIJm9gVIOZWS1L/dCkJ5tn+R35mU++feiPsR8+fIe1nceFggBigYhl9GIKPcdZy5qfjZWkFKuEy7MTmswUZA4gttX4yHm+usZuz6ciEfLvFKyENUnT+8VlunwIQpjmLAokv83LCQHeIaC9EzOiT6JBDnh+DoRcluQRDAoslMnNSH0RZUQYV5eDLKExnJAINqCfVJ5R4MQmRRiH28SVdSNzCtEAuWKajm7tNDvyPc+UUHLj1N0PXYmFqS0S/zV92eX7Ol0YoIcbwbkz9iPu33cVxFkfUetM5pJSjTWjWy5IuVF0FfUO6wdoBLCDXm8LaDVWseShICi5BuuzfXROiQ57sOatXieyxK1u6ZMmdyQV3veb5S4hjACQe0DFDqWoxP+8MjoBdPDi+DbiqbuMAgIHBBBo8datGjIr2aHDeDwRCq9o9cOa68DSRwdWqkgPe9R0OYfFpaDd9caW7IW4sp6E+nPvaIq7AhOMcLwJBcCJ1PZj5oUDwfV2y3e20VSJodPxtmjdYuQ78E/INSHSIJUmyCbDMlaFHvzYmV1QhJ7vb9i+IFa5kPJN0yKy5ITHEUSAqTDIvw9FtzefZfkOzEU3d37KkcbgBAkb2ulLO9/4La8tidLg3juemKF5yihCXLcIuSbCALCXz0qfDCUA7PdigopneRHK9YFIJoAyZk1RTuxpF6qAJLAzCu0cUj+e1KuZMOQWaDAokqqEtMNSOf4n1eagEY/Wk8lXrInokgUWVSSVx5bZ4enkTZZmTrVqyjk+cVFU3cxSBWAcCHsUDOn8KYZDWKOkIglgd9znDzBDyXT/XU5Uwrc7IRoDMVaC7EZkEKBlNWKkyK/mw5TJA918Hzsqlx7iWGgw965ImOPFjPcVytG49HHau5r7XHZoveb' $BG_Image &= 'RMiNP1gmhDzCgxPEnJp7urvJsRbRJ+msODssoUwWlEN81UrRIXQCkLYOhtkiSMJa7vocPmVvtetx7A2sd79Vxn8OoSCSpbmb2IdXIcjxooabKG5K/RQrvEXI9wTSf37Wnt/kmJd8GbTE7l7siD6vxRWeCALGgVUA2plYrrjNRGhzpzXotZw/pdbsg62TnNPfsdVUKSxKD9KwY5cgCi/Mk9x3mjzJYknvicC75Hgd3Pd9Wr0/k/G+4+eLIiE3QVJtyxP6/UKiX4aXoMIQ7iodcWBFeFcVqoqkxNeq0ICpkdeyElZF2TE5po7x+kIrL343FwmLpDhE2S4plqNz1rMDidYg5m8aokzoZPDIeML0WHxrX/2NIuSuBikAeiLpiF5QUm9uXnWz1Wc2FCXx0oYQBIlOqiJYgUMlNgYKSTTBD3C/7Tie3+nEQ2JV/MiO3NojISHGGAi12tLFLu6yBpHf7oQIA4uO9jKMOfl5f76MIHcgfc0jIANll5UkE272w+9I5Ysc6XODhJAooCCQS6Qv0KyRwx/bBqsFTp8sRHBbqkPIF1/nuZ45tDpMgJ4ZySZlSsjTq3AJMs1nZulpZnTwiqM/PEFnZS0+L8dB350bvocgrkfv1ubLNQWCU3YWIa9iNPaz2Ft/d2laYpkgYNWqraLZs6H9WqRJelbiINOJbkVNdO63+MJ5QK6R7VbUSGLvDnqybUEi3ZcHKxRZ0uPoDEpvM+Rdg/wxQ467aOprAulY31gSJxNCRaqneTWpSrAQRSUDnhqYETsahcUMOIbuEMjyqoYh6RbvaVYtJvVEeh1NnjDicnfVLT2f4cNWrB6ujNJ32N8GksuEaGvcO6NDQpC/w3W6M1En/DhDt0r/EoLwqMoW6yzOW2QxUOgQmxFsJbgsgJxi9WGMBxIm231h2QBEcTis7ie70aopKgSQkVOpKTSUDMbLydBbXXobljOpVlRRrJo4yOJT/nJvsDhCPaIkbUh3EXLnK35Tpgks' $BG_Image &= 'wQeSlDWzkO/ntFkSSmeJfp3rvherN20YYFahYQvhkyWHWlM95cj7REe0GZC1DCXOJNHYkiiUrZUpRjt1VLrxtJ3IuJ0g6bxHaJK2WKHItxRN3fhzlAkABuJWEVUsLxJDr8UF35hDQEBlGZLRU1MsZfsgxz9iFwQj3d1nQjvU4D4KAZNxgm49s9WKnggzzqzZz/LT6OSzmCPFKkp6pmfEa491HM9NrI/1SBx9zhEhPt4q/WsKbo+Vy04GWqhFEgfROASQCOoK9PsIGosAhSJMiTJRGPcVYLfuTKWa5lreZgl+rQG4PpsxymwQX+1uX6F3gW42BQIUA9S2hlXFkvZYoVv/HMl3z2honz2X7RUVOefzHn2LkO+IEx4oSMKeoVinjVaZJol4nMsIy6sFECJXgokkpicWbB/oIAhkWQFSNilqcAam+/1SI93fIzSQXZRy1+eNJKZFJP2mSZ7CBByX/ajyAN6iP6OD59HHsWIiSTd5JSv61+dssP58XU3IPfigig45lJmRkIB8Sa0TJaoUS6EB3u4RRDcLyXcn2hJkLighzuCcHf8wSyCTqUeSqJO4awkjnbdP2oclzO0wJJ5exYY0ZLBeL4f5R94c5kTbgDxcMGUN4m1WJuhcREKOLxEhtxPrQBUJqcnFEM1MKTHwzXOayYAKItIzqbAhW5BOEso2j0peoRsa+Q5o3VFTqaNK861Vrh5CSCFCJDtCniCVifAnmgsaE1i0BRmSpZj9OCJB9o5YXqzVjuN78hVv/ENYorfA0RrJP7T1iArZ/LzmT70OOqFFoXcvlmPovlRjOogA0krXKgkNmja9NEkDMm+8mrqQDh9iEvQ8pb6PMnnG0/XMA5p/1zJLqpIZQhbhz0zrxUcyentGpve+rwpBzsH0W4R8B0FQjng0q8jS60TWVi01N+Kx8u2s10uELQhJCC1u8worc9n8VzjZHFKTerJ4IZNlT2ektma90R8hzGlM9CAdSnMTQota5KAtx3Lz' $BG_Image &= 'ClEwFiHH0UnJ6iHGeHlnkxX8+bJ8xdvLa4KwsbZYlQmFVcXXQYXieHrXIfxIElbBxqQAcPFCgkBrdC+7tQOSyRMhQlBQwxCwV1ENBYYT2Knhm1e6XNpLTGbwKEvFZTks0s0UhVcepNN9rCZacWN5Vk6Kpo6zAfkSlX47sf7YgoDqjgXx7ipdDGpVo8ZoyGuAUSS7So8EMWxH3LDBv+fUEhRTwS4mT57LfMRm+OWf+Y1kSPq6YjeM6UnXMT5rk0eVVIZEzqqlff7OYX/v1KabDk5yH/vh15kjdzrWN5RLgSCbDbwIYoqIwwjRF0VSGP2RLvCjbxWkKN1mIWWFVSxrECxT4KO7qpsgUse3pekeNxzpUEVJeJcaoYpvnZMY0+p3SGYG0/GcokKQJdI5Vsr06ON5HMO1KUzvx9P9GhIqvNhi9S1CvsHLW+BC3Fik5NtFmjUqYjRIdmBRI7EeWAaEhJYNYQji+9CyBNkxQRjvb8R9GptkKEKejwV5Z0Xcu+GG3wpPRPhKghQXRBkUvbZIeu/7sKoKM0ja7bGe2WSdJ0G7888tQr7DywszRGAvCxI7UfQVq7K/mp8tSjgEyc1FBXq/pGprkBcWN/YiKSIhE7Tize0ZPSWTIAQ5xUDUGmIYIckG6a0LxCTNBIqft4C3blpJNLEksQmxk3fYYeX+/NJxt3cuLwkRPXlXpIhSvFihCnwlgaSC0KVlFBosJAQYgthQSIHXI1UaSAzFZIB2jW4uLIQ0sRDDGMWcBOiGMrcEkE4EIVXyqhwfSRPrdiTdGA1ihrRPjxyMY0mQ5x0q/Hj8ccyOAnmwqphQiFdUwTv0GJZYkFJcWbWrdYQb6f3z+iXBeKV6NyMgVoI8KBDOLik1CLMoNiQHqIHO/VTeaozUc2eTYB9xc/2JRIkhiBiGCNBmQnzwna0Z6QwoTN1t8CdTC2+V/vlOrKMKfBPjRcH02ALqtUU8qqUtAR4cYgQs7B7gGieWfcnQppgbSGBk' $BG_Image &= 'EQ4y4sACslRCHEjS+hgPYahksuRbnX2ZkVW9WxAvCoI/cWgx5mMihsfj2X/ZYY7EfnxnJOR2YiXXXYRNiHlhtvhkbUIFJLaseIQgfDuUIkksfy3bhVZPhmQsioJIEwUrtNfoN8fvuXfc9Fzc/FBKz4cOfwKyBtJGkZAjRmQPi6QA92w8Qo4vIsidqmiGoNmUOVE0lE2WykJkT+R1EMEmxXcCzsu2giaIN1qJ/tUsAL7TIsthwZSVBAkTKqGReVLy+lwPIkFnkCGIKG7LMT8Og6S+0Bepk3LmYoxIEBy3Sv9w/HPUwUGjWMUCgy2TN6QZHQJJ4E6KoN8JMx0bknNCgk6FR+VDxucbnZHdUk3pBpS6EItu9yQ9CfWJ9Glu+P0w5MqAcOhCR0Btk1Jwu9jxPCw6jNWXd59WuPdY/PMd86DvRBMWMSKkEglxwNAEGY9WKe5dshBSiJWlAqa6CkRNGEQF0hSZaCIpYjceHQliuHgkWSfDgCSO+GdGUmG9HSR4rjM/VIN9be7vw3j2GdKPww3jenl4H/8CN0E+vpzwhyuvENTIDS6eZOETxY0SsSbbEIRS6wI9BemFoQQKVdPN2h/bm3DXINdEY6FdvY71JpRGDuYMOrZnb++Ds6Ez5w1V1lRBMSH7IAQH1dOxdxvpecGM7xAhN0EIHhwVQlbBZGCpVqBZpWh0USLi7kVKR9Kg/cqM9CIICoYZAtiztUuQN2rkZ0rYOT1/3ZMx5mNjCOQ7iaHnhOwJN5TBYsgC896fNtoj/RuO43UKHm77c4mfO1/x4zU6UGp7sdjYLUiN9KgoEE0bh0y29T1Sge9p8npHg1RNtju66Vk6fXQRHD9vQL6HPERMBQdhSHPH8RBFhu9j2Z69F952LF+oqxBkTMgkZG1Fu3FkPfo4XkkmneFsxkW51JfMg74TTY5CEUKbBBViiEUHB7e7e2G6slxcQZ1LcdtLu3khEklexMS3C+gr925vJIEIOApOupwKPa7f' $BG_Image &= 'dMuaZSpGlK6k0r7JIhVzxz2Z10XpZP7a2DuQHuu8m5DfHb0/twj5dCfWil8TJOPGUb2XSpVvJIs3nFC4grd+WWMTetPoBdTEyfvRvvXCHjq5hollCFpXGtOx2p0Ihdd5T2cMZEKY1UX1RpDEewxKexQkHHntr47nGbEawZ+w5E7o/fQ4+lEUG80wBCxmV25qTHiAojaaUCjCN5PSG+TWhEG6MLN6uqpkipDY/vBsgFqieqgxNYmwMlfI4F8gkZBodL/rZcfCUYOdIIZIKX+Smbc2HX8ZcjxiRiZZ8dgZkvXPx6v0ezQIxlSAiBdLRVmGeGU+cEiRDVYtVWI2IOLkomKQBYCTxo4qPBqrVAscQhhZcJYQiEm/wlDBPxkhYroAbXLkOx4R8hyfdM1nx4TYq520LCmF7Ulx7+fjWL2wJpweigQdG/IlIuSOo6MoYQZLzTeEosokUTExkBSlcxab7i2JSPyioAWKqIK9ugSRGWvt2PrJ+ERBZE3L8yYkGA0Ji3+tHs4kVBIVoQxn26jHCicZC1IxIaXQy8hEtmyxdgmSjN5BDMjPTZCPb/kDSosdsSBmB8IQJhdrWJLuo4hrS/kNd8waea7U66D0HAWZKnQFMRw7V2D4zLYlEtI8LjoEQjITtbe1zvK9012nDt0mZMHk78AW5GU3zJC0sV64CIP4+PPZCb23RucBB8a8yxqGxNGb744PCXsIk5uVcCG5VxcaIQhq2rs78FGEIN8FKpzwIYtzn61odKbhL5RSwq2b6IkhqUPcm2CV16aF7QdNlvVOZ5ZhXsffRJOYkE5XkxOOkOSuKvxoPH4A6mRBEjW38eBWpU5TqRZDsOQKRWTgFKkNFLSoAVSNJakIb1ZSQBLEeG4EaZm9JYDaooVtPd5RHFBjLwcJQ3wOiyTOFotDkNSCDEMSbHw+JqDiMtvHX4X+iOVIu/fjZD/+zBarb4J8chy9QPIYDb5/Ryxax8nrVaprE0woTR1HxXCkgKRp' $BG_Image &= 'AWF3VUG1MOGQiW5wdW6AwhPtoFpXwAh3B8qB5OxuBDNJoGEKWHBsZ88voaRaEMlh2OpA9zRFkt37PFxxa6S54k4S0+SjRcit0ScRygeC+YKoos79kqkxNOEiVcVk+In9ZZCEu00NAxcvZB0iEquKvafzT9DauAGd0IgnV8mI78ZSInlny38XQXB5IBS3hF8GawjSM2vKh+OVbTIbreM5WAL9eMZ6/PmKfMVbozec2n5O3eOSHWVyzAGF0qY3iqHCRhL6ilmhVFUyXot2nRSnvZz9W4sg4cfmjYp435Em1t3R5xIEZNRnaNKZe0iQVcs8pumPXr+BCZJ8lcdqaOLV0+xYBsSHX7qP/nx0qPDW6E6tbWZblLAZGAPCstyYzgYUxk/63s0kCN/mfpkgTExPGBDMHJH0xhK3nVZ0dwAF5oemRbY6Bbgj2DvXrn0vbFqrDK+5r3dHca+uiivb3cbjeI3zNLZGvffA9C/CH2CZEILaIgFk/her5L3Pc4q7Si4kYYji1SaA0/22sHunkEY/aDNETK4v0QwFOocr9MYBqbO9sjyJAfGl5Q4Kyy7abmyk0MmA9DkSYoIsUT6deS8rb//k+HMT5IM1OoBku4cfSf5WaQXTc4+MD4gsIqXpKrVIbkmLA07sOpMGluHoLjulhGU9WsuSKE2qbU1wMW16Sj/2OepSC5MMGSME2xhNJJ9ktlVXmDDi0wzcCgstQI7j79Hu3rDkTI7PFyE3QZ5I07hSvTf5MDmoWBGRnFfNBGgm6hYdI8aE+Ja9WHv8j9MMbmYjyNaE+R7/WyQDJcPW0Mpcg+ziEkwfg+VaX6o0zjmDuwFRcU8HHqRGas0HOY5HLMjrzgl/PpwgtxPLOyx0j7iuQXYhetttgZDEEpYRSb8gvIfPfeJQh5WvHB05bKT6Sct8FBsrwh4WnBHy9PQqacOEkFMhU587NR3LOBWJApFKydJZgxhLOnUSspZGf66Zno/HcVijD3ovRt9XPx+v' $BG_Image &= '0u+uo02hZDsxsJA1MTjivLZR6V5WIvDbHLO0z1oc4dIgAVCW44DUhS5rbBKoQl/m9naut8sECtFCTxKLodbWswEmJQiUSVqqOtnMDWFITIh1+st0/P19hCLp7X6Nn7uq8GM1emGreIXICjwGgTEgS40kGHIuD+GmEXKA0p9NASXCEHpWEgZsSROYvyRLxH6m1NqJZUuRenVExQsBAUrxPQQ7V/YaybNQf/y1IP7Zim77eJ4D6cFNkM+eDEJSaasYiBM+I8WR67EgE3mXlAm4C1YoZLRJCBIAsg1ZgXQMmO69Yvhw2WsrGgTqLCHBV2ZLxYgAQ0tmn0hSvxiQ+LHCkMyXes70zsNjdPaMrFO+yeer9NuJRTS7CYYgATWOHntElXxecWFEeSwD01BxT0VZIj0oCBmWM0pdYqiiTs6tD70NWtgBUwO9jWwDtgkKLW1CBPRB+e+9MiC7CdmbPqQ5lr1Yj8O8SD7vM/wIRT5chNzzny1BorVrR0aD2JqYIDBLsr9av8x+Kp2AokFUJgilFmwEakKUkEDwbUShTuB2HooaLm0PqRoI7BBz65Mn4Kc0FFFSB4Ks94x3SL3P85z+7sfDQt2WYxsRcuHt/dRQ4a3R67BvlYpdqCBFdg6DW6izCDNmtETRMEtiRuocBqn92p4qVLJ5SwJIB0G6z+0aW2FhBE4PQcyUyI1N0BBsWaH305bGlFLIVteIAVEMiGJBnsuCmBrGw+YkOCJEPlmE3A0brEGOqO26IEjCBbYyxQI17tIkMpKxH0Vh4weVMEi6oDg6KBGmygLVQAHhRpCmdTvcQzHbqVgfL/25oyOe+9QpM87teAOe0xUF4K02ferTlwV5tQB6nBKxbhHyPfhTGcoRl1TtUHH9TL0dmRYNEewCt71PzpWZIfMBStM5JghCjg1hRHoVlNKSFnVhP6g0rkZm4/TspDrFVSt86I3W60JuGTSEriuQ8hGmxsYQT5c6XtnuzyNGJIbDfPA5NuQW' $BG_Image &= 'IZ/pxMJhRRDzwbMJUU3VVLo7K1qZth5zXSlT37/HZ41ep64lyLSqOrWcE6+FCGniSJ03oM4OCtYi5GT6Jh4iteV8K0UmbwazgpUeBsWJFbzo0Q8XhfQapGOK+BjjkfVNkI8kyFFOnWVnx11BTIhfdmZRlUk7Kbm1yPCmZgyIC913gnAYExA6I28XteuYU1heOmPrtohQBUrColbOyUzEDbgzJKtQRGmtJVfd2ovl7dWxIoTTuMFT2YK9LuS4VfpnxtEdETCUuFlA38qEkOT0atPlXtS+wzJrBN97F+lc71CgEHtxYV+ogCFUVPtZjRiyKDF6EUQNpHlDCOLTb5FCb/mUZKxMCDnMkb8avXvlYb3OXydCbo1+LPXQTMXtpQnRWlnXngjCsCRskMT8hB9viIERzzxgbEie6ao8F/T2qyR2WYTbfkjwlfbCqU4jIGWPdQaKVUgf01gfC/Rn92qL5VOSeuPmDTOCmyAfOBkEI69X1atUJ9DEGJosQiD1I4p84BbXw9adNGNpdF3vVBtFmPf3WONe6K4rZG40CKgzyBZmCGI7ZnAhnk+lFcovoUKgGJO06JEBbH0cHpO+/Y4NeZ77xn2sSr/j6LYgpJYJScp3YHbQ57i6qPLFCo8Q70FuVkS3MimTVJIYK4/nwCxDmLAjB5yaOHSuAfjQkenJzGrr85R1hCsmiK5NCFiEMAPWYQVyPPNycfpLevRjeXr7Ikz4oSLkjqM/gFgQltbX/cSPNP7xa5VKwVxBKTH4wdAgN2ELglxKljOh1Ipe5BClHjWDzVgwq5x7ckwmEt+ZSNXYnrLSHkh6tiTVJWyPIMV6PH1wronTst77mhj9LbMK744mB7AV7V2qkKj0VRlCP+XHiViVsMMohCvFdw1SNEE2CogePmAylIw88kaKChMrJJkw/ORZJb7nW92w0dhtR+LjlwTBGslLTan7M+m8bqxoijgIYlwpdFuQn49U6bcTa9JafTzn8xpiVbLetx45' $BG_Image &= 'flglv8bFVNuBc3OPg0TUz4Bc6RQ1QWUOVHj7C6wjQhAByghcGxMRPckncUjNWfKJlxqkKsOserWQ6ziyHq84yOPvyhLEG6yYj4uExZsgn6fRj+SHpP5pEDimHDUiyCYjL4Vd8T2pYgJOXiwnARaKCl+CXO6sOee9g+ZVrx8DmV3YyBrwyyW5IUQk+9Mn4VqEWKULrivZ8OjDw6CTy+tFJPrJgnyoSr8ng0QX9Bb5Y12oECWgvolzeUmleVxysHzMeAQTZEXb/RtlHiaU7coAWeWxIOuQxERYGbwIY0wRoiEpba1DEGsSQdcapJxNqRnJs029PY50OAlBoj/6bEI+MqH3dmIdzjTJHouR6EHa4fjMzJmRF6GMyFijHM0I1QTSGSuSMivOkxR83vQMLtJMcm1mxIKgQaKLTKdRIVsukNw8tsrhKQnNaxUCB9PzuDaG9GPmsSVd8fg9TviZUxDurqP7l5r+OXPE9FCa5HCZjqk0lDBxwn3XtAcP9y1Wd6b3S8OI5PkGYQH8eQi5dp70PiPBRJhjd5xavdmSveP7eqGBX/ZYUf5St55PdVxZx9GP7m2M52Pz9F5S5CbIp2n0nwNYlSBthiQOcuHpVZkTKJEJZ6BKnFhhvLSo8UVRCRSKWiJgPft8Lh+wsrdiDvDRV6dSKSgIPRoZDkqIGgVCq3UMJExi1bMlV60D9StDJt9xm5gus+TRDx+XC8utfy4aWH9oLP2eDIID0AqDgFoinXWGUhti7bHIIQ5fSEKUtFskOFySZlsq7qEMV2gwxqP2idLcaWIwi9iloFPX7sMwIsJ98SbjETqYcvVLekSCRN6/CZEYkN5KQvrCenxi2e2NnzixBCJltFciZCrvNA2tpVoMSW8GIuSoqRmpKIwqBd1y8EH9FlBM9H1dEwwxCuLcu1Tro9Mpk4PrWuaEIDMEq9GVokSez5iQC4aQaT4nm4/J6D28r5oaw+HGM+yICfH5HhPyYRr95zhq2Y0MQGCp' $BG_Image &= 'eGlAxrioaB7FKSVuApyzKO11Tinxtq5OahYhYt6hkpw1sfp8SLrJa4e//j0JvASbMR/uBdSJsCP7JailZ2S3y6euI4UAT02GUjt1eBybm7wfj55AoU9hSShyl91+mEb/OVY+uESgxGHIlQjJGITyj3xpgIqnl+uoOduU2BAZ7bBhKyaGu/LOOozjrv3XEqANhiAYiYW0HP72LTI7L0LvMt0nB1cGQTxq/Ta+bZVMHX8Pf/nhypCHBYitSJCikA9U6bdGr8hWRoJcb7K0ebHyQ1E0pFmL1EaOEsEE37eUkdbABItLeLCtwKT2JsCeAaDxMolor8KWXZ2LBP1GguqZ8ty4jJCG1Op9qLRxvPIU27mKI0HcbfEbSkLuHdZ//4Br1z5f0Qx+PiFT060/aoT51tC6hmDrY7Crak0tbxJ8M688lMrJXNuTHi9zToYameYJQiIwOSbYZnwKBiECgJ1SihiRoCsDsjM2dmc1beiHT89dpD9PUXSfwpGbIB8VRwfK+3YRVuhpM3pGOrwrVYXJ813mR4l7wEQb7AksUiIgy6BQcyJzg+BFNvwbi9KpHaB255XlCGS1rrRq3NpESC3t5SEtXVoQJt7iYw9CkWebHJkydYFQ5rjdWJ+D//o5DrzACTKz/BsEafMcqoQlDhdqswMR18MAnrtBUItNUeAopSOjDdGbOFGQfwYbiFiLZsyHCRPz8lrVutNtqbLVqbOCKK6SwpDudci4qZiPx/pJskko4dNaHXeyyUdpdBwEqKZEzaGuHb0yM1gxIGTJNgRbB9Kr3dKSNaxAAzKPCYVt25WNVU5GKDP2AgEhavFE8GJ7gAj2Xg7pecIr3wSViH0IZYQhI0B8+N1+fNi89FujmyAQmxa/U0lexmVZYWlzZ8F3RVaZCYianvaKqlJE+oLfUphUiZBX+ZIhgg958r33z4Q7SLSiRQTJHJgIYVIWORfybxtq2YKcsXdXDJciQ15YqVieb7si6X1dFHI8bz/v' $BG_Image &= 'JxWDFIhC8zBDKBq6JoiJMbMLqdIyI/EtOTiiU+8GStwb354FN63nC5EaaUPXo+nzsEKr2ARhUYHoVrPTpbfNkm7lORRKaXgixTFVZxFiyiP96U7tfwxP8jz+kmM4Enqco4Wf5ca68efnAA6KKxFLSluT6z0Ws9cauhjKanEsvX6Q6GMK0pWjYWYK60Eh2yujFFBZlARy/FfEHKUtVVGdriZwHH3nlCS4F5BMIamuQBn9Potnea5Om6w+TT8IN7K8CfJJTiyWFfqRrp7pPXpFkH2ajjaGFEr+USpwJfIUWVESe/e+jEMh+mYUf/R77a4thjFEpkcrNEGhuzE5V2gDhuyyQy/zEZK43EOX0R8Fe5Gu4WqQMCQaPSmLEek53m6sjyHIATd2P5pNCem4W5cqPZFCG4/Flkh20N9fJmQomQgJwW3iIQypsNLvCAq9zA1/dNgUm1IJ+6WXu9qLZTEynlBo9bpnNkjmSEOttH6/rIOhxiksJZye7g3PDj38Ssr7CR/YoPcuBqFDa82DVAYNXg9GphmSOTrLJTwpvic31m6RitLGjxadzVWp8tgn7iCGJpzZwEQOUSK4An9yUF1tUsREJBromzYh2tPiG53cLPE6lE4ZNh4RIhkKbduRs7PfzxLdvz93658P0ugHAIrdb3ui0OMdrJgW5YIlv5MPeAvvMTeszRnhXvRFxcyEUuGGacNcnsKJKBA6B0LWCzOYrVsxFW1i2PSYjWZKE79qELJqL806V4Z0L2JYkLwUevgRknzkqMJ7MohlLfs4KCqx8N8Yoqp9dnLiIT6LIjaGbJ/oD/QbMQy1LgrkViaYh97jhkqgvsIYFAhQocgYBxsSRX57e6WNJGgnEQhq+T1Iuuy6Ssb2qecQA5JNVkbdJl540umfRZAbD8fRmyQ7X0iaAkFAMVm8s+EyTVIukhh4FIiKopwlb0LMgX4j9zJJfY8dokIWKNQZHqJMi1YIAnGshxoOgiS6B2GEu7iNKmzi' $BG_Image &= '10BIrKN6Z8jTq63g9vFs5ywuExJivB+P28/7QeNt0yXBYZCK8L62IEkwkUZ1lFaYUL5bWFunzL+x74oT/6iaWP2pzWiFnuPl2iIg5DZgIWF4UAHFvfGP1CbOTLeFZHXuI4FmCtczL+TMkERFY0A6+e7pGfT0SJ2M9nQ+b+pCTky5CfI51VLLqTOJfUJsyC8mZBtRlqi6yVEqKCrE6GlhXdTix6hwmETY92FCWEPMu8nkkrQf/O8GPYRBD0lavmipzQxbFchHgQ1N2N3ska7TB0gF5wYnliBu3uCp0Isdz6tQ+vFB+by3E4sAxy0qZS5OXRNkLIZqMUjUlu6eVie7jjC4EyT2QUgoJFF3yijfLxuNaBC/9SusLhRWADJTlner2wei0eERjDYZr3XXbkEybmTBocJVlm6C/HkcI9SDGJDbz/tBXUeT7sq99umaH2mMFcsxZCLLLIkP1ncWSiR3gqxDvbVmyH1qzlQa0qVQUVq2BmHfRpCxEw3EhZV91CSsj/JotIReZSTXW6zERhU7pWU9vFzl6A+rdTPkiAE5UcMzo28/76c4sZgoNGdnZfyiQWxCVruGcMKLaNlMS3/7ppthpIJS9LfpQWzREx+ynEWZRyR2j3D6tsPwd32f6Skpk3AnjOg92J7LJZFXcZB9j7X3LlWC6f1cue6e/Hz8OazTk4cVV9YHtXi/M7FgEGDkR0zIFZjfzGozZ1Dzd1taYcT3EIQhRwgwij5UYEwM9u0YtRYonWB6QI6Px4S0MNmKshFZDEr1B9JDbnilupo+55eMXi1RtPEj9YVjQDy38FKD/Ln9vB/jxBrzIQD/nz2WSowCSeUUYfmepCsmdz0kUDRIkOySHEytvfg8j/n93dNL1kmkR4RQLTXWDkrecDW8hqBeT0R6AGZLmLxD9tPFfMDWIwhLzJHlw7puYv1R3RVvJ9YPlGpCmwAffzMgTDWIalxTJkWBJGsPqE9Ab/NiKbJ97kkp/cgXkdMLCwm5' $BG_Image &= 'x188TFFw8mJBPflXkIStobvfMEu6TRjQ8kT2bl1KEJr9MSDOx4ozy9o8QqRf/EjZ1K5AvDg+iCB3W96kuFKALUBigFfwbiiDEKTK09EvqQiBz1S0r4oaMJYjBiN2ZA+HCFJAIj3k1NrRLcXn0FgsiGKY0ii02nzAOggaukisC1AMQ4S9dipIl3erkOXo7VlFgfhw+3k/pJwQgHqq7Bj5wN9Vurg1xDJjXpdigbVsiWpr9m7NMH9uQNx6jYKWIPCnjyVJ4opZZAnNvCUFoRuEvX81ItynHbDQFiiabHcnainjdXTtxIrVEpKteCq9dbJiOxJy7t5g++EwyU2Qz8A/WKBgfhD8dyKdpfKbjPCo9WNWEIQDI5xAR7rGSa3skcCiwFpWhoYv/UAlW7G2asftbyScJUg7TJ7adNsLH0wRG4yYDiiJKo7gXFWlhx5L1AiSWicLsuBs96t0rDEidyDkE/AnQXRBgFg0TINrLDqUfFQlfEjWMh1Qgs8hyJ7tnrIsmBhSLWtSp1IRFZTdmmrX835P2rdavfZWgXW6t1XdouMidu+mBnf39FK8GB30HkyHP2ST6s/xYrku/WluHE5bNDOSqnh8UKTw9vJyqrSn7ai/5Y6K/zsTYhokv1fTyJqU78RWzMfx1J69fJkseRMkSb+SP+zU+WS7WOhtMe3jOhurFQ7ZG50kPcu3U5AoXVjOGNQ3DaJO+dSWjOVoyEaQswH5X6IcN0E+ZLZU0r4FWhiMNCjVb+DKAPeiSMnqO7yIq9e39jhh+k5b9m5SPOOkNdf7HGmGVL6x903ZEfUhKOUggq3EXlSodYN+RzB+LZiSuZxtXLrOPXN+73DSx0UgJIubIB8xIP3nzYMlBiL1qwhhck2iOpjNl0qMFYmkToqTBqAYqJLkaAIxv3wPpNfWTC4kkgLEh0UoMj2SvX02U+Z22vkKuoyk/8VGxvSMb/lkfmzkMDWeFwbE57t33Kd4eTc3bwb7M5uo35BsRcv0' $BG_Image &= 'iBBuZYbzXpI0KhrEaqLEhN8lG5e0rDM9SMy4kPKLMSQhBrWjG7EiNhs9VoNQw6SIAOHku7MFkC3x2mg6x3/Q7W1a0t9Tn57Kwteowr+XYUcOH9I77vbyCockUngrlaUohzouIZ9GqFMsk4rzZ8kueQuCmyCQTBILFFm5bP86SggFqIASwUUjeinlMLCdWIzHZIYATNouAXoV74TFOwGEyjto+yeBQrK+0oc0MEcefxu+x4mVeOEu1f/cBPkULy+FfPuU7VWqza9AJZN3OXjycNqRUtwgMRaEWsAU7b5+pxgq+y2zoSDDFN40v/xzhu3H7KUa3blU6m7hd0OSBsbw2FwFgWwxFU9AD0WCVS71ysNyScjftXGmyE2QT8CfAwelRlq2zSznRYJrUHsDB9VsroZUZF6UmRINksbvlCzIx/KIomJYahfgOzem/U5kidGndHcnmQwvWlpaPGID4/ACO2Rp6DrVxGdq0E3vsl7rdxvyePylh03IyX7kdBPkU5xYB6XE7kanj8T4NZ9Xfu0VuKXKZJ0JqW+QuGW711BnwihzK8oiO6jcmFcl2B/ibFiSYlV6TOC8G/Cr1SaJS9UJjRDhMj0Xfl7tRVOGsyDhs5TuPy/n1ULcvUE2WHc676cQZO0tOsMHSiRKiRRegZHppCYTy+QaymjSxP1Z52ReijJnhhil6Jb4qfaUeGQVwkSnQAMKhJH+WMvZq0lNbABc1BCB+RNJk9B8ZUNoIgftiqvT0Nulzp23OD8XBuQmyGd0VcQhqPfhNatViP6lG8vJV5l8m5wT/xHTw0HFyscOQXy59dztVu1TRcRYjyj3zBlpC+rhQ47IzMJ1hRYITFlUytFbkvWJuI8MGbVyPZ3RADVI/YiksGNef+H+Jn2Rz/tB+e63lxcUlK7sVIrL9esWK1sr8yTWZJkSVYYiYJRICJKJhinMc6URqFgW7vobeZ4yQiFRF8hXXRkbova2Sr3kutB+MS2uDV7HQTQ2RBQU' $BG_Image &= 'xbNaN6Z3g4YmLpwyIkL2VKzPqJi6vbxYwY/G3gQRIpPN+7tK3xS5Mh2EjN/XCEMqBFHQkT9lta4Qg7Nkwh5zkbcvgbQUJSEM5IAI1ELkgxPRksNLAF3S9WStMY2JgkB6ryuUbYfLb21GLgrTP2fS7U2QRh1sQkamDubb/xvMitmY+1kTIbVTsTMJkmQENKkW1YkZMl6qrMwXhiI1hxAmAuU3gJBIYA+vA6S/yyrE3QVnnJBoiRc1tz7siS1AZo5oTEgyTuznfR7ZY0Wg24R8CkFuL2+S+DL8v0YJ/Ot0RcsOkjI/FErYqsQZBguT4ZsgbH2g88XPlHVKSD26DdPwQ2Gygn97CaHDD9sWtcalhV5vN2eHFY2+I4YylgxGAybGwnMaADlC6N9gU+p367jPmG8b7/+WCJgAx682RMw8z4zUYSkSZOOKuSMyjUc5Ul0t+4pPW6q0b/CtdTGv08roK3r0EERxxwLwZW9teom3QAjF3yejiArzGlI2b8+OBLFCn9x357cHY0FugnyAl/c4juX+3ChCi2uZIlfIlMJMi5avTIgJHKowdIkBgVKarm4NOWJU+N42LkSZV2TKNfpKkyQncUqjmD5yyHecbZZQFK9DheR0b5C55T/tlZOVXosZfrByTXY3b1T6TZAPcGIlgrxkCAc2B//azbuZicWAUpouqsIVcCX4JtNEqZuqzD8IDXYdUhxzQ5w0Oq+JkSvkFl6Ie0utWsVTWPxJLgoBWEP9QpC9TmXp+0UP9SBerKXS+xmCxIB8CEFuJ9bBRubGSNOAmuFKXSMVh/6KVwbZlkabgKFa+V0mkM4kyF4MK9wk+1Lam4fLi8QGr9Fv5xEKtiTt4CGqW8IMaiO7JU1KM3nJD1NkCJr2W4T2YLqPRozIyYx8BkFughyWpRCaEn2Rlj22DdfgeD5T85QmDsqOatR7biRQWIOdG6fcEZ7akELXuLYgympreqVWTMZssFYMRJ04yKXhTG1Ymaacj/Qf' $BG_Image &= 'p8QwFuRFkotcrPzeBPkIJ1ZzZbAikeLaEtivEepwrWdA+lCm9g7XFr2nCYV1HjZlrlQ4osouy4Q9+YHFyfBF0s99uGoEZEK0GpyeWHIoXalBtFxvScXfmhIbJrCVPrhydaZsSpbpV8Zj32TdBPmM+bagJCWETEqKU1b1K1jaq6qUJg5E5n4wRkji1ty9W1cgU2ArI0tCFy19w5SFXq9U+nkJwKfp817J5rU8MV0kFASqxEt2iF6JpNkk+O9sRQzZeKwWWUf6m7zhJsintB3lXoqtqSSf8+Rb/dpf8dTsx5SRtXmtj9LIjvBDfeZFVhmTY57GsuSQ9RmZYI40rZ5lYuXomV/YoIAIeAiyHRB0rdLTumEGsdO0SCvszg7LIsShQo9AiBkJboJ8SscGNaSxJFwQY0WuYVduTIgiYe3nGevhZVHpAZFMjYDCLEQHQUCvZhdlLOLw3BboLDtSa7sPhPa99DRpJNUdABEhv1of6TeCqBZD6D+LERqzpU2n9zHxwpiRDxLpt5f3BzgkKf2gtHUiUf1OkaiP3YCEXeXjMkQatixkIzTO25NF6FSwx4iEPu8xkd8xcQm1OgRAjEi30CPaiZgRqQmoyF+NJlerO4CM8THnZncns+NlPzo93j9xi3Xn8v7MmBmk3W2UgxzF+A0qJSaYvmo+mWE+ixmDW4akjSGkTuh4syCh/FTowVgW5RC0lO99L2mhzHawDBekuHR9A8Bb+julX/6HYKc2KsW5tlFpjb3B5SDu0Ds4bD4+yYLcubzQfH2yeaGKir64xp54ZYoYqowOZCBV2EYZPfxgSLJXgWjMR5LdQ5O8vZ44A5nuDK0XYUI0ZMviR1qxKwLVwuzgfvPxklUg/DKpIKTAMCJklab/rUnvMOQzLchNENmApCCEA8WR9duYkIQ9itlZ+RK5kQbWZSiIkze1IJjG12POLtTGIs3vgNmQabbCgjSFtxbjU4+7EDH/e98fG0IAtfTL2CEXLb6Xp3va' $BG_Image &= '7Ro4dYxKjwq5kxU/oS/vcSi7jHQwNJYC/wW7AQkVNmKRkR5T68E9DBJCpPlV5HixIPoiY6BDkbh2O2nwg5YxRYRTfS7QlDAhlPwaIEd50Si06hreS6JYAJlB0ukEkQZc0x3r8MDbEeobOz4lm/ceLnX4GyQQSirvCGz9rkFmF+YXyWKoolgTMEGV7NaUBokOpewB8306znJlpWXchBELixTxadGnAHQKCZNN0pmh1UoW77oOgxxTXx/5Wy9JUNNqj/4zQv7R6gP8TDDdm6wkY234DAtye3kPQHsgxD9mSjqVXIHk3qJ3ESVFVGdI+STqDcTenmFO9MvveL0DegPfGYKuZSsyhlD+8rf5sbWqbiGlT+PkEnVtM20ILUJG+E9herZwS4Xo2R4U8teK9HlIyIc0bbgL0n+A6HRqhtcwPW7qVyz7MrnuoZNIryNJwrdYkHRdVMgQiky5lheiQL7RghHqq71C1EwACmhqJngkXarXuiVbFft7IShRki5JdQ2K3mCBtPVw0jyBxCC3Bg7Hq8eiJxX2/zUgd0XhB6QqopFNRrQAJarSwucKSkKW1qHemaHU31Z2WXt6YjRFNkpzeMG3t2cUJuVvxbk/zxsJe7Raa5bUNOYVUv4HGxf0sjSYhu+6yvNnZs6hCNQyIDFFmEr3FU+3BVkavV1b+M6Q24J8AEEO9AS6AAY2ByPUL8EMJax9HtsiFkpYs0IUrbKghT1v90QCTAgl3/88sruGUx0cVocgUqdFdQaBDDkmQKhOyaE2qa3LSGE65AlVJmAhHNlcYA2ozbrj+fdnBrGdc03uzoofMCH9wAIxu5NCaZuAfg0m24TKd6cYpC2KkJhKNIjChSmbYq59IFI5KBuhyXfcnyyUny5tHUmXLpAjFLYgktLQREIK0s0dtWaLJEIpXTmBy3ICLABNcs9ToUVN6gr33iad9oobboJ8QEH6EQUCKgVTqPh59bsXi4kSKhRRWDIjBLEW+aST5i7una+o' $BG_Image &= 'ikL3TwxMykzSXS5gusptiTOZtDnTCdXp9SbfNTm835JfQkuXqVgxk1he3tev/ErK/PtIz+N4WoOc+PEx3d3vtqOAEmwmSUjeXSVt5HcbklEg2UnFv5s5tBWNvicr7vLcd/INj3wXCTvAxMxmsOUo2zlTJ3IleSqNbk40EEtv+Hp2XBiz0sk74forGyhdy64yPyLS2UAEvm3UKJHn4RCh54X0Fib8EAtyD5c66K0zCRQ46R3QVuFRvyDiPK1MVIkRIj3d5cjanq4Y5THYcxMpMYTxFk0llZWNqSaDOUg1ViT3WkEuV+Rwgu29Lld0fUXVaZF+BZX3jMUYOTSghF40cZVkLL5keqjx/CgNcnt5D6IlDERNbqFU/vkVe8WtTUjJIp0LykI0mQwFe/+SBP4Sd4dKog95OE/ThBKvO2V1jt0+ucl7ooMuuhXgg6Ru0BfXDEk+5m6y0g5mEiS1NbF295+0WPw4DXI7sWg/b+ZpiBnkn0zd35DQoJ/NMJ2dHpb7KaIypDNDsOT10Mnhhmh0FaZGXms1lgeSiOv8LMsM241ZqregSGccW/vevKT6BSwsgpCrfaktL6aOFxk69aLH30ihBYjnsWWT9fFz0r8f/xyW6B16SAQnZlcZGHWF8IclDrwq7XeUDN8QJDgFQNJqlBddrBP7QOUG68oOqXVeeNlA+wAL91SrOx+lHCm8FOl7x8hSDMjU8w///NlOcDlcFPI0Tk7enw+Ycnt3bDiAhqLSlTicRP4yQSdIP9G0aIg6F3cUlfr2ECSdGkzIOKZ8WKRALIPfwXob3srtbd5/R4yJkJJcYNroCoZaMzZ60fxagqQY+W0c9GR3yb/bSM8XQ3pxZMcHEOTuqmgLgsH6KmLLWv+dH2UGlbXKOf6xQ36dvViR5bk1titMLZVUqBS1nwavS6cYOjdGBAG0vFqSQ3nx4M1oXNaI7qvWimm0Gr9bK/EjiNNGroWMm3IkxMgu69sI8j/twS5+biz0fwAA' $BG_Image &= 'AABJRU5ErkJggg==' Local $bString = _WinAPI_Base64Decode($BG_Image) If @error Then Return SetError(1, 0, 0) $bString = Binary($bString) If $bSaveBinary Then Local Const $hFile = FileOpen($sSavePath & "\Neo_Matrix_800x500_cut_32c.png", 18) If @error Then Return SetError(2, 0, $bString) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_BG_Image You need The Matrix Sound.au3 which is in the Zip archive (see below) to run the code properly!
       
      Download: The Matrix v1.31 (incl. sound), without sound The Matrix v1.30
       
      Can you decipher the code?
       
    • By UEZ
      I wrote a dll and the wrapper to convert non-animated WebP images to a GDI/GDI+ format / encode any GDI+ supported image to WebP format for use in Autoit.
      What is WebP?
      You can find more information about WebP and WebP tools / source codes here: https://developers.google.com/speed/webp
      Maybe useful for one or the other... 🙂
      WebP.au3:
      ;Version 0.3.1 build 2022-06-13 beta #include-once #include <GDIPlus.au3> Enum $WEBP_PRESET_DEFAULT = 0, _ ; default preset. $WEBP_PRESET_PICTURE, _ ; digital picture, like portrait, inner shot $WEBP_PRESET_PHOTO, _ ; outdoor photograph, with natural lighting $WEBP_PRESET_DRAWING, _ ; hand or line drawing, with high-contrast details $WEBP_PRESET_ICON, _ ; small-sized colorful images $WEBP_PRESET_TEXT ; text-like ; #FUNCTION# ==================================================================================================================== ; Name ..........: WebP_Ver ; Description ...: Displays the DLL version information in a messagebox window ; Syntax ........: WebP_Ver([$sPath2DLL = ""]) ; Parameters ....: $sPath2DLL - [optional] a string value. Default is "". Path to WebP dll if not in script dir ; Return values .: None ; Author ........: UEZ ; Modified ......: ; Remarks .......: ; Related .......: ; Link ..........: ; Example .......: No ; =============================================================================================================================== Func WebP_Ver($sPath2DLL = "") Local $sDLL = Path2DLL($sPath2DLL) If Not FileExists($sDLL) Then Return SetError(1, 0, 0) ;DLL not found DllCall($sDLL, "none", "WebP_DLL_Version") Return True EndFunc ;==>WebP_Ver ; #FUNCTION# ==================================================================================================================== ; Name ..........: WebP_Ver2 ; Description ...: Returns the DLL version information ; Syntax ........: WebP_Ver([$sPath2DLL = ""]) ; Parameters ....: $sPath2DLL - [optional] a string value. Default is "". Path to WebP dll if not in script dir ; Return values .: DLL version ; Author ........: UEZ ; Modified ......: ; Remarks .......: ; Related .......: ; Link ..........: ; Example .......: No ; =============================================================================================================================== Func WebP_Ver2($sPath2DLL = "") Local $sDLL = Path2DLL($sPath2DLL) If Not FileExists($sDLL) Then Return SetError(1, 0, 0) ;DLL not found Return DllCall($sDLL, "str", "Web_DLL_Version2")[0] EndFunc ;==>WebP_Ver ; #FUNCTION# ==================================================================================================================== ; Name ..........: WebP_BitmapGetInfo ; Description ...: Gets some rudimentary information about the WebP image ; Syntax ........: WebP_BitmapGetInfo($sFilename[, $sPath2DLL = ""]) ; Parameters ....: $sFilename - file to load ; $sPath2DLL - [optional] a string value. Default is "". Path to WebP dll if not in script dir ; Return values .: Struct ; Author ........: UEZ ; Modified ......: ; Remarks .......: ; Related .......: ; Link ..........: https://developers.google.com/speed/webp ; Example .......: No ; =============================================================================================================================== Func WebP_BitmapGetInfo($sFilename, $sPath2DLL = "") Local $sDLL = Path2DLL($sPath2DLL) If Not FileExists($sDLL) Then Return SetError(1, 0, 0) ;DLL not found If Not FileExists($sFilename) Then Return SetError(2, 0, 0) ;file not found Local $iFileSize = FileGetSize($sFilename), $nBytes Local $tBuffer = DllStructCreate("struct;byte bin[" & $iFileSize & "];endstruct") Local Const $hFile = _WinAPI_CreateFile($sFilename, 2, 2) _WinAPI_ReadFile($hFile, $tBuffer, $iFileSize, $nBytes) _WinAPI_CloseHandle($hFile) If Int(BinaryMid($tBuffer.bin, 1, 4)) <> 1179011410 Or Int(BinaryMid($tBuffer.bin, 9, 6)) <> 88331643929943 Then Return SetError(3, 0, 0) ;header must contain RIFF and WEBPVP Local $tWebPBitstreamFeatures = DllStructCreate("struct;long width; long height; long has_alpha; long has_animation; long format; ulong pad[5];endstruct") Local $iReturn = DllCall($sDLL, "long", "WebP_BitmapGetInfo", "struct*", $tBuffer, "uint", $iFileSize, "struct*", $tWebPBitstreamFeatures) If $iReturn = 0 Then Return SetError(4, 0, 0) Return $tWebPBitstreamFeatures EndFunc ;==>WebP_BitmapGetInfo ; #FUNCTION# ==================================================================================================================== ; Name ..........: WebP_BitmapCreateGDIp ; Description ...: Converts (decodes) a WebP image from disk to a GDI / GDI+ bitmap handle ; Syntax ........: WebP_BitmasFilename[, $bGDIImage = False[, $sPath2DLL = ""]]) ; Parameters ....: $sFilename - file to load ; $bGDIImage - [optional] a boolean value. Default is False (GDIPlus bitmap handle). If True then output is GDI bitmap handle ; $bCountColors - [optional] a boolean value. Default is False. If True then the colors will be counted and saved in extended. Use @extended to get color count. ; $sPath2DLL - [optional] a string value. Default is "". Path to WebP dll if not in script dir ; Return values .: GDI / GDIPlus bitmap handle and color count if $bCountColors = True in extended. ; Author ........: UEZ ; Modified ......: ; Remarks .......: Currently only WebP images are supported - no animated WebP images yet! ; Related .......: ; Link ..........: https://developers.google.com/speed/webp ; Example .......: No ; =============================================================================================================================== Func WebP_BitmapCreateGDIp($sFilename, $bGDIImage = False, $bCountColors = False, $sPath2DLL = "") Local $sDLL = Path2DLL($sPath2DLL) If Not FileExists($sDLL) Then Return SetError(1, 0, 0) ;DLL not found If Not FileExists($sFilename) Then Return SetError(2, 0, 0) ;file not found Local $iFileSize = FileGetSize($sFilename), $nBytes Local $tBuffer = DllStructCreate("byte bin[" & $iFileSize & "]") Local Const $hFile = _WinAPI_CreateFile($sFilename, 2, 2) _WinAPI_ReadFile($hFile, $tBuffer, $iFileSize, $nBytes) _WinAPI_CloseHandle($hFile) If Int(BinaryMid($tBuffer.bin, 1, 4)) <> 1179011410 Or Int(BinaryMid($tBuffer.bin, 9, 6)) <> 88331643929943 Then Return SetError(3, 0, 0) ;header must contain RIFF and WEBPVP Local $tColors = DllStructCreate("struct;ulong cc;endstruct") Local Const $hBitmap = DllCall($sDLL, "ptr", "WebP_BitmapCreateGDIp", "struct*", $tBuffer, "uint", $iFileSize, "boolean", $bGDIImage, "boolean", $bCountColors, "struct*", $tColors)[0] If $hBitmap = 0 Then Return SetError(4, 0, 0) Return SetExtended($tColors.cc, $hBitmap) EndFunc ;==>WebP_BitmapCreateGDIp ; #FUNCTION# ==================================================================================================================== ; Name ..........: WebP_BitmapCreateGDIpFromMem ; Description ...: Converts (decodes) a WebP image from memory to a GDI / GDI+ bitmap handle ; Syntax ........: WebP_BitmapCreateGDIpFromMem($tBuffer[, $iBufferSize = 0[, $bGDIImage = False[, $sPath2DLL = ""]]]) ; Parameters ....: $tBuffer - a dll struct with WebP binary data as content or pointer to the memory data ; $iBufferSize - the size of the binary data (file size) ; $bGDIImage - [optional] a boolean value. Default is False (GDIPlus bitmap handle). If True then output is GDI bitmap handle ; $bCountColors - [optional] a boolean value. Default is False. If True then the colors will be counted and saved in extended. Use @extended to get color count. ; $sPath2DLL - [optional] a string value. Default is "". Path to WebP dll if not in script dir ; Return values .: GDI / GDIPlus bitmap handle and color count if $bCountColors = True in extended. ; Author ........: UEZ ; Modified ......: ; Remarks .......: Currently only WebP images are supported - no animated WebP images yet! ; Related .......: ; Link ..........: https://developers.google.com/speed/webp ; Example .......: No ; =============================================================================================================================== Func WebP_BitmapCreateGDIpFromMem($tBuffer, $iBufferSize = 0, $bGDIImage = False, $bCountColors = False, $sPath2DLL = "") Local $sDLL = Path2DLL($sPath2DLL) If Not FileExists($sDLL) Then Return SetError(1, 0, 0) ;DLL not found If $iBufferSize = 0 Then Return SetError(2, 0, 0) Local $binMem If IsPtr($tBuffer) Then Local $tMem = DllStructCreate("byte bin[" & $iBufferSize & "]", $tBuffer) $binMem = $tMem.bin Else $binMem = DllStructGetData($tBuffer, 1) EndIf If Int(BinaryMid($binMem, 1, 4)) <> 1179011410 Or Int(BinaryMid($binMem, 9, 6)) <> 88331643929943 Then Return SetError(3, 0, 0) ;header must contain RIFF and WEBPVP Local $tColors = DllStructCreate("struct;ulong cc;endstruct") Local Const $hBitmap = DllCall($sDLL, "ptr", "WebP_BitmapCreateGDIp", "struct*", $tBuffer, "uint", $iBufferSize, "boolean", $bGDIImage, "boolean", $bCountColors, "struct*", $tColors)[0] If $hBitmap = 0 Then Return SetError(4, 0, 0) Return SetExtended($tColors.cc, $hBitmap) EndFunc ;==>WebP_BitmapCreateGDIpFromMem ; #FUNCTION# ==================================================================================================================== ; Name ..........: WebP_CreateWebPLossySimpleFromBitmap ; Description ...: Converts a bitmap to WebP lossy image and save it to HD ; Syntax ........: WebP_CreateWebPLossySimpleFromBitmap($sFilename, $hBitmap[, $iQuality = 75[, $sPath2DLL = ""]]) ; Parameters ....: $sFilename - file to load ; $hBitmap - GDIPlus bitmap handle ; $iQuality - [optional] an integer value. Default is 75. Valid range is 0 - 100. ; $sPath2DLL - [optional] a string value. Default is "". Path to WebP dll if not in script dir. ; Return values .: 0 for failure, 1 for success. ; Author ........: UEZ ; Modified ......: ; Remarks .......: ; Related .......: ; Link ..........: https://developers.google.com/speed/webp ; Example .......: No ; =============================================================================================================================== Func WebP_CreateWebPLossySimpleFromBitmap($sFilename, $hBitmap, $iQuality = 75, $sPath2DLL = "") If $sFilename = "" Then Return SetError(1, 0, 0) Local $sDLL = Path2DLL($sPath2DLL) If Not FileExists($sDLL) Then Return SetError(2, 0, 0) ;DLL not found Local $iReturn = DllCall($sDLL, "long", "WebP_CreateWebPLossySimpleFromBitmap", "str", $sFilename, "ptr", $hBitmap, "float", $iQuality)[0] If $iReturn = 0 Then Return SetError(3, 0, 0) Return 1 EndFunc ;==>WebP_CreateWebPLossySimpleFromBitmap ; #FUNCTION# ==================================================================================================================== ; Name ..........: WebP_CreateWebPLosslessSimpleFromBitmap ; Description ...: Converts a bitmap to WebP lossless image and save it to HD ; Syntax ........: WebP_CreateWebPLosslessSimpleFromBitmap($sFilename, $hBitmap[, $sPath2DLL = ""]) ; Parameters ....: $sFilename - file to load ; $hBitmap - GDIPlus bitmap handle ; $sPath2DLL - [optional] a string value. Default is "". Path to WebP dll if not in script dir. ; Return values .: 0 for failure, 1 for success. ; Author ........: UEZ ; Modified ......: ; Remarks .......: ; Related .......: ; Link ..........: https://developers.google.com/speed/webp ; Example .......: No ; =============================================================================================================================== Func WebP_CreateWebPLosslessSimpleFromBitmap($sFilename, $hBitmap, $sPath2DLL = "") If $sFilename = "" Then Return SetError(1, 0, 0) Local $sDLL = Path2DLL($sPath2DLL) If Not FileExists($sDLL) Then Return SetError(2, 0, 0) ;DLL not found Local $iReturn = DllCall($sDLL, "long", "WebP_CreateWebPLosslessSimpleFromBitmap", "str", $sFilename, "ptr", $hBitmap)[0] If $iReturn = 0 Then Return SetError(3, 0, 0) Return 1 EndFunc ;==>WebP_CreateWebPLosslessSimpleFromBitmap ; #FUNCTION# ==================================================================================================================== ; Name ..........: WebP_CreateWebPAdvancedFromBitmap ; Description ...: Converts a bitmap to WebP lossy / lossless image and save it to HD ; Syntax ........: WebP_CreateWebPAdvancedFromBitmap($sFilename, $hBitmap[, $WebPPreset = $WEBP_PRESET_DEFAULT[, $lossless = 0[, ; $quality = 75.0[, $method = 4[, $sns_strength = 50[, $filter_sharpness = 0[, $filter_strength = 60[, ; $pass = 1[, $level = 6[, $sPath2DLL = ""]]]]]]]]]]) ; Parameters ....: $sFilename - file to load ; $hBitmap - GDIPlus bitmap handle ; $WebPPreset - [optional] an unknown value. Default is $WEBP_PRESET_DEFAULT. ; $lossless - [optional] an unknown value. Default is 0. 0 for lossy encoding / 1 for lossless.. ; $quality - [optional] an unknown value. Default is 75.0. Valid range is 0 - 100. ; $method - [optional] a map. Default is 4. Valid range is 0 - 6 (0=fast, 6=slower-better). ; $sns_strength - [optional] a string value. Default is 50. Spatial Noise Shaping. 0=off, 100=maximum ; $filter_sharpness - [optional] a floating point value. Default is 0. Range: [0 = off .. 7 = least sharp] ; $filter_strength - [optional] a floating point value. Default is 60. Range: [0 = off .. 100 = strongest] ; $pass - [optional] a pointer value. Default is 1. Number of entropy-analysis passes (in [1..10]). ; $level - [optional] an unknown value. Default is 6. Between 0 (fastest, lowest compression) and 9 (slower, best compression) only valid for lossless = 1! ; $near_lossless - [optional] an unknown value. Default is 100. Near lossless encoding [0 = max loss .. 100 = off (default)]. ; $alpha_compression - [optional] an unknown value. Default is 1. Algorithm for encoding the alpha plane (0 = none,1 = compressed with WebP lossless). Default is 1. ; $alpha_filtering - [optional] an unknown value. Default is 1. Predictive filtering method for alpha plane.0: none, 1: fast, 2: best. Default if 1. ; $alpha_quality - [optional] an unknown value. Default is 100. Between 0 (smallest size) and 100 (lossless). Default is 100. ; $target_size - [optional] an unknown value. Default is 0. If non-zero, set the desired target size in bytes. ; $NoSave - [optional] an unknown value. Default is False. ; $pMem - [optional] a string value. Default is Null. If $NoSave = True then the pointer to the memory which holds the data will be returned. ; $pCallback - [optional] a pointer value. Default is 0. Pointer to a callback address for progress hook. ; $sPath2DLL - [optional] a string value. Default is "". Path to WebP dll if not in script dir. ; Return values .: negative value for failure, 1 for success or the struct with information (pointers, size) if $NoSave = True ; Author ........: UEZ ; Modified ......: ; Remarks .......: ; Related .......: ; Link ..........: https://developers.google.com/speed/webp ; Example .......: No ; =============================================================================================================================== Func WebP_CreateWebPAdvancedFromBitmap($sFilename, $hBitmap, $WebPPreset = $WEBP_PRESET_DEFAULT, $lossless = 0, $quality = 75.0, $method = 4, $sns_strength = 50, _ $filter_sharpness = 0, $filter_strength = 60, $pass = 1, $level = 6, $near_lossless = 100, $alpha_compression = 1, $alpha_filtering = 1, $alpha_quality = 100, _ $target_size = 0, $NoSave = False, $pCallback = 0, $sPath2DLL = "") If $sFilename = "" And Not $NoSave Then Return SetError(1, 0, 0) Local $sDLL = Path2DLL($sPath2DLL) If Not FileExists($sDLL) Then Return SetError(2, 0, 0) ;DLL not found Local $tMem = DllStructCreate("struct;ptr pPic; ptr pWriter; ptr pMemData; uint memsize;endstruct") Local $iReturn = DllCall($sDLL, "long", "WebP_CreateWebPAdvancedFromBitmap", _ "str", $sFilename, _ ;Webp filename "ptr", $hBitmap, _ ;handle to GDI+ bitmap "long", $WebPPreset, _ ;WebPPreset "long", $lossless, _ ;lossless "float", $quality, _ ;quality "long", $method, _ ;method "long", $sns_strength, _ ;sns_strength "long", $filter_sharpness, _ ;filter_sharpness "long", $filter_strength, _ ;filter_strength "long", $pass, _ ;pass "long", $level, _ ;level "long", $near_lossless, _ ;near_lossless "long", $alpha_compression, _ ;alpha_compression "long", $alpha_filtering, _ ;alpha_filtering "long", $alpha_quality, _ ;alpha_quality "long", $target_size, _ ;target_size "bool", $NoSave, _ ; "struct*", $tMem, _ ; "ptr", @AutoItX64 ? $pCallback : 0)[0] ;x86 crashes for unknown reason If $iReturn < 0 Then Return SetError(3, 0, $iReturn) If $NoSave And $tMem.memsize = 0 Then SetError(4, 0, 0) Return $NoSave ? $tMem : $iReturn EndFunc ;==>WebP_CreateWebPAdvancedFromBitmap ; #FUNCTION# ==================================================================================================================== ; Name ..........: WebP_FreeUp ; Description ...: Release the ressources from $tMem struct ; Syntax ........: WebP_FreeUp(Byref $tMem[, $sPath2DLL = ""]) ; Parameters ....: $tMem - [in/out] a dll struct value. ; $sPath2DLL - [optional] a string value. Default is "". ; Return values .: 1 ; Author ........: UEZ ; Modified ......: ; Remarks .......: ; Related .......: ; Link ..........: https://developers.google.com/speed/webp ; Example .......: No ; =============================================================================================================================== Func WebP_FreeUp(ByRef $tMem, $sPath2DLL = "") Local $sDLL = Path2DLL($sPath2DLL) If Not FileExists($sDLL) Then Return SetError(1, 0, 0) ;DLL not found Local $iReturn = DllCall($sDLL, "long", "WebP_FreeUp", "struct*", $tMem)[0] Return $iReturn EndFunc ;==>WebP_FreeUp ; #FUNCTION# ==================================================================================================================== ; Name ..........: BitmapCountColors ; Description ...: Counts the colors used by the bitmap ; Syntax ........: BitmapCountColors($hBitmap) ; Parameters ....: $hBitmap - a handle to a GDI+ bitmap. ; $bGDIImage - [optional] a boolean value. Default is False (GDIPlus bitmap handle). ; Return values .: Number of colors used by the image. ; Author ........: UEZ ; Modified ......: ; Remarks .......: The result may differ from other programs for JPG images depending on the decoder. ; Related .......: ; Link ..........: ; Example .......: No ; =============================================================================================================================== Func BitmapCountColors($hBitmap = 0, $bGDIImage = False, $sPath2DLL = "") If IsPtr($hBitmap) = 0 Or $hBitmap = 0 Then SetError(1, 0, 0) Local $sDLL = Path2DLL($sPath2DLL) If Not FileExists($sDLL) Then Return SetError(2, 0, 0) ;DLL not found Local $iReturn = DllCall(Path2DLL(), "ulong", "BitmapCountColors", "ptr", $hBitmap)[0] Return $iReturn EndFunc ; #INTERNAL_USE_ONLY#============================================================================================================ ; Name...........: Path2DLL ; Description ...: Return the path to the _WebP_x??.dll ; Author ........: UEZ ; Modified.......: ; Remarks .......: This function is used internally by WebP.au3 ; =============================================================================================================================== Func Path2DLL($sPath2DLL = "") Return $sPath2DLL ? $sPath2DLL : @ScriptDir & (@AutoItX64 ? "\_WebP_x64.dll" : "\_WebP_x86.dll") EndFunc ;==>Path2DLL  
      WebP Advanced Encoder GUI:

      ;Coded by UEZ build 2022-06-18 #AutoIt3Wrapper_UseX64=y #AutoIt3Wrapper_Res_HiDpi=n #AutoIt3Wrapper_Version=p #AutoIt3Wrapper_Compile_Both=y #AutoIt3Wrapper_Run_Au3Stripper=y #Au3Stripper_Parameters=/so /pe ;/rm #AutoIt3Wrapper_Run_After=del /f /q "%scriptdir%\%scriptfile%_stripped.au3" #pragma compile(Icon, WebP_logo_2010_by_Simo99.ico) #pragma compile(FileVersion, 0.9.9.0) #pragma compile(ProductVersion, 3.3.16.1) #pragma compile(CompanyName, "UEZ Software Development") #pragma compile(ProductName, "WebP Advanced Encoder GUI") AutoItSetOption("MustDeclareVars", 1) #include <Array.au3> #include <ComboConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <GuiMenu.au3> #include <GuiStatusBar.au3> #include <Memory.au3> #include <SliderConstants.au3> #include <StaticConstants.au3> #include <WinAPISysWin.au3> #include <WinAPITheme.au3> #include <WindowsConstants.au3> #include "WebP.au3" Break(0) If @OSBuild < 10240 Then MsgBox($MB_ICONWARNING, "Warning", "Your Windows version is not support!", 30) If WebP_Ver2() < "0.3.1" Then Exit MsgBox($MB_ICONERROR, "ERROR", "DLL Version v0.3.1+ required!", 30) Global Const $ver = "v0.99", $build = "build 2022-06-18" #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 ; enum _PROCESS_DPI_AWARENESS -> https://msdn.microsoft.com/en-us/library/windows/desktop/dn280512(v=vs.85).aspx Global Enum $DPI_AWARENESS_INVALID = -1, $PROCESS_DPI_UNAWARE = 0, $PROCESS_SYSTEM_DPI_AWARE, $PROCESS_PER_MONITOR_DPI_AWARE ;https://docs.microsoft.com/en-us/windows/desktop/hidpi/dpi-awareness-context Global Enum $Context_UnawareGdiScaled = -5, $Context_PerMonitorAwareV2, $Context_PerMonitorAware, $Context_SystemAware, $Context_Unaware ; enum _MONITOR_DPI_TYPE Global Enum $MDT_EFFECTIVE_DPI = 0, $MDT_ANGULAR_DPI, $MDT_RAW_DPI Global Const $MDT_DEFAULT = $MDT_EFFECTIVE_DPI Global Const $SM_CXPADDEDBORDER = 92 _GDIPlus_Startup() ;~ Global $aDPI = _WinAPI_GetDpiForMonitor() ;_GDIPlus_GraphicsGetDPIRatio() Global $aDPI = [1, 1] Global $hGUI_About, $iFPS = 0, $iShowFPS = 0, $bExit, $bGUIBgColor = 0xFF808080 #Region GUI Global Const $SC_DRAGMOVE = 0xF012, $iW = 322, $iH = 694 Global Const $hGUI = GUICreate("WAE GUI " & $ver & " Beta by UEZ", $iW, $iH, @DesktopWidth - 330, -1, -1, BitOR($WS_EX_ACCEPTFILES, $WS_EX_APPWINDOW, $WS_EX_TOPMOST, $WS_EX_NOACTIVATE)) GUISetFont(10 * $aDPI[0], 400, 0, "Arial Narrow") Global Const $Title = GUICtrlCreateLabel("WebP Advanced Encoder GUI", 5, 8, 310, 41) GUICtrlSetFont(-1, 21 * $aDPI[0], 400, 0, "Arial Narrow") Global Const $icLoad = GUICtrlCreateIcon(@SystemDir & "\shell32.dll", -127, 8, 60, 32, 32, BitOR($GUI_SS_DEFAULT_ICON, $WS_BORDER)) GUICtrlSetTip(-1, "Load a GDI+ supported image") Global Const $icSave = GUICtrlCreateIcon(@SystemDir & "\shell32.dll", -259, 56, 60, 32, 32, BitOR($GUI_SS_DEFAULT_ICON, $WS_BORDER)) GUICtrlSetTip(-1, "Save compressed image in WebP format.") Global Const $icReset = GUICtrlCreateIcon(@SystemDir & "\shell32.dll", -239, 104, 60, 32, 32, BitOR($GUI_SS_DEFAULT_ICON, $WS_BORDER)) GUICtrlSetTip(-1, "Reset image position if image was moved (only for images larger than preview window).") GUICtrlCreateLabel("", 0, 106, 324, 2, $SS_ETCHEDHORZ) Global Const $lbPresets = GUICtrlCreateLabel("Presets", 10, 125, 39, 20) Global Const $cbPreset = GUICtrlCreateCombo("Default", 120, 120, 145, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL)), $hcbPreset = GUICtrlGetHandle($cbPreset) GUICtrlSetData(-1, "Picture|Photo|Drawing|Icon|Text") Global Const $chkbLossless = GUICtrlCreateCheckbox("&Lossless", 120, 152, 97, 17) GUICtrlSetTip(-1, "Enable lossless compression. Default: lossy.") Global Const $lbEncoding = GUICtrlCreateLabel("Encoding", 10, 152, 48, 20) Global Const $lbQuality = GUICtrlCreateLabel("Quality", 10, 176, 36, 20) Global Const $slQuality = GUICtrlCreateSlider(116, 176, 158, 21, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_ENABLESELRANGE)), $hslQuality = GUICtrlGetHandle($slQuality) GUICtrlSetLimit(-1, 100, 0) GUICtrlSetData(-1, 75) GUICtrlSetTip(-1, "Between 0 and 100. 0 gives the smallest size and 100 the largest.") Global Const $ipQuality = GUICtrlCreateInput("", 274, 172, 28, 24, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_READONLY)) GUICtrlSetData(-1, GUICtrlRead($slQuality)) Global Const $lbMethod = GUICtrlCreateLabel("Method", 10, 210, 39, 20) Global Const $slMethod = GUICtrlCreateSlider(116, 210, 158, 21, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_ENABLESELRANGE)), $hslMethod = GUICtrlGetHandle($slMethod) GUICtrlSetLimit(-1, 6, 0) GUICtrlSetData(-1, 4) GUICtrlSetTip(-1, "Quality/speed trade-off (0=fast, 6=slower-better.") Global Const $ipMethod = GUICtrlCreateInput("", 274, 206, 28, 24, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_READONLY)) GUICtrlSetData(-1, GUICtrlRead($slMethod)) Global Const $lbSNS_Strength = GUICtrlCreateLabel("SNS-Strength", 10, 242, 66, 20) Global Const $slSNS_Strength = GUICtrlCreateSlider(116, 244, 158, 21, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_ENABLESELRANGE)), $hslSNS_Strength = GUICtrlGetHandle($slSNS_Strength) GUICtrlSetLimit(-1, 100, 0) GUICtrlSetData(-1, 50) GUICtrlSetTip(-1, "Spatial Noise Shaping. 0=off, 100=maximum.") Global Const $ipSSN_Strength = GUICtrlCreateInput("", 274, 240, 28, 24, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_READONLY)) GUICtrlSetData(-1, GUICtrlRead($slSNS_Strength)) Global Const $lbFilterSharpness = GUICtrlCreateLabel("Filter Sharpness", 10, 274, 81, 20) Global Const $slFilter_Sharpness = GUICtrlCreateSlider(116, 278, 158, 21, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_ENABLESELRANGE)), $hslFilter_Sharpness = GUICtrlGetHandle($slFilter_Sharpness) GUICtrlSetLimit(-1, 7, 0) GUICtrlSetTip(-1, "Range: [0 = off .. 7 = least sharp].") Global Const $ipFilter_Sharpness = GUICtrlCreateInput("", 274, 274, 28, 24, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_READONLY)) GUICtrlSetData(-1, GUICtrlRead($slFilter_Sharpness)) Global Const $lbFilter_Strength = GUICtrlCreateLabel("Filter Strenght", 010, 304, 69, 20) Global Const $slFilter_Strength = GUICtrlCreateSlider(116, 312, 158, 21, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_ENABLESELRANGE)), $hslFilter_Strength = GUICtrlGetHandle($slFilter_Strength) GUICtrlSetLimit(-1, 100, 0) GUICtrlSetData(-1, 60) GUICtrlSetTip(-1, "Range: [0 = off .. 100 = strongest]") Global Const $ipFilter_Strength = GUICtrlCreateInput("", 274, 308, 28, 24, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_READONLY)) GUICtrlSetData(-1, GUICtrlRead($slFilter_Strength)) Global Const $lbPass = GUICtrlCreateLabel("Pass", 10, 344, 27, 20) Global Const $slPass = GUICtrlCreateSlider(116, 346, 158, 21, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_ENABLESELRANGE)), $hslPass = GUICtrlGetHandle($slPass) GUICtrlSetLimit(-1, 10, 1) GUICtrlSetData(-1, 6) GUICtrlSetTip(-1, "Number of entropy-analysis passes (in [1..10]).") Global Const $ipPass = GUICtrlCreateInput("", 274, 342, 28, 24, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_READONLY)) GUICtrlSetData(-1, GUICtrlRead($slPass)) Global Const $lbNear_Lossless = GUICtrlCreateLabel("Near Lossless", 10, 378, 80, 20) Global Const $slNear_Lossless = GUICtrlCreateSlider(116, 380, 158, 21, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_ENABLESELRANGE)), $hslNear_Lossless = GUICtrlGetHandle($slNear_Lossless) GUICtrlSetLimit(-1, 100, 0) GUICtrlSetData(-1, 60) GUICtrlSetTip(-1, "Specify the level of near-lossless image preprocessing. The range is 0 (maximum preprocessing) to 100 (no preprocessing, the default).") Global Const $ipNear_Lossless = GUICtrlCreateInput("", 274, 374, 28, 24, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_READONLY)) GUICtrlSetData(-1, GUICtrlRead($slNear_Lossless)) Global Const $lbLevel = GUICtrlCreateLabel("Level", 10, 411, 30, 20) Global Const $slLevel = GUICtrlCreateSlider(116, 414, 158, 21, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_ENABLESELRANGE)), $hslLevel = GUICtrlGetHandle($slLevel) GUICtrlSetLimit(-1, 9, 0) GUICtrlSetData(-1, 6) GUICtrlSetTip(-1, "Switch on lossless compression mode with the specified level between 0 and 9, with level 0 being the fastest, 9 being the slowest.") Global Const $ipLevel = GUICtrlCreateInput("", 274, 410, 28, 24, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_READONLY)) GUICtrlSetData(-1, GUICtrlRead($slLevel)) Global Const $lbAlpha_Compression = GUICtrlCreateLabel("Alpha Compression", 10, 444, 96, 20) Global Const $chkbAlpha_Compression = GUICtrlCreateCheckbox("&Enable", 120, 444, 97, 17) GUICtrlSetState(-1, $GUI_CHECKED) Global Const $lbAlpha_Filtering = GUICtrlCreateLabel("Alpha Filtering", 10, 478, 71, 20) Global Const $slAlpha_Filtering = GUICtrlCreateSlider(114, 482, 158, 21, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_ENABLESELRANGE)), $hslAlpha_Filtering = GUICtrlGetHandle($slAlpha_Filtering) GUICtrlSetLimit(-1, 2, 0) GUICtrlSetData(-1, 1) GUICtrlSetTip(-1, "Predictive filtering method for alpha plane. 0: none, 1: fast, 2: best. Default if 1.") Global Const $ipAlpha_Filtering = GUICtrlCreateInput("", 274, 478, 28, 24, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_READONLY)) GUICtrlSetData(-1, GUICtrlRead($slAlpha_Filtering)) Global Const $lbAlpha_Quality = GUICtrlCreateLabel("Alpha Quality", 8, 516, 66, 20) Global Const $slAlpha_Quality = GUICtrlCreateSlider(114, 516, 158, 21, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_ENABLESELRANGE)), $hslAlpha_Quality = GUICtrlGetHandle($slAlpha_Quality) GUICtrlSetLimit(-1, 100, 0) GUICtrlSetData(-1, 100) GUICtrlSetTip(-1, "Between 0 (smallest size) and 100 (lossless).") Global Const $ipAlpha_Quality = GUICtrlCreateInput("", 274, 512, 28, 24, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_READONLY)) GUICtrlSetData(-1, GUICtrlRead($slAlpha_Quality)) Global Const $lbTarget_Size = GUICtrlCreateLabel("Target Size", 10, 552, 58, 20) Global Const $ipTarget_Size = GUICtrlCreateInput("0", 120, 550, 121, 24, $ES_NUMBER) GUICtrlSetTip(-1, "If non-zero, set the desired target size in bytes (lossy mode only!).") Global Const $chkbCountColors = GUICtrlCreateCheckbox("&Count Colors", 10, 590, 87, 17) Global Const $lbColorOriginal = GUICtrlCreateLabel("Source:", 101, 590, 38, 20) Global Const $ipColorOriginal = GUICtrlCreateInput("0", 142, 588, 60, 24, BitOR($ES_NUMBER, $ES_READONLY)) Global Const $lbColorWebP = GUICtrlCreateLabel("WebP:", 215, 590, 32, 20) Global Const $ipColorWebP = GUICtrlCreateInput("0", 250, 588, 60, 24, BitOR($ES_NUMBER, $ES_READONLY)) Global Const $btnShow = GUICtrlCreateButton("Show Original Image", 10, 630, 123, 25) GUICtrlSetTip(-1, "Press lmb and hold it to display original image.") Global Const $btnApply = GUICtrlCreateButton("&Apply Settings", 188, 630, 123, 25) Global Const $StatusBar = _GUICtrlStatusBar_Create($hGUI), $iSBColor = 0xE9CFEC _WinAPI_SetWindowTheme($StatusBar, "", "") _GUICtrlStatusBar_SetText($StatusBar, " Welcome to 'WebP Advanced Encoder GUI' ٩(●̮̮̃•̃)۶") _GUICtrlStatusBar_SetBkColor($StatusBar, $iSBColor) Global Const $hGUI_Image = GUICreate("", 0, 0, -1, -1, $WS_EX_TOOLWINDOW, BitOR($WS_EX_TOOLWINDOW, $WS_EX_APPWINDOW)) GUISetBkColor(BitAND(0xFFFFFF, $bGUIBgColor), $hGUI_Image) Global Const $iPic_WebP = GUICtrlCreatePic("", 0, 0, 0, 0), $hPic_WebP = GUICtrlGetHandle($iPic_WebP) ;~ Global Const $iW_Zoom = @DesktopWidth * 0.25, $iH_Zoom = @DesktopHeight * 0.25 ;~ Global Const $hGUI_Image_Zoom = GUICreate("", $iW_Zoom, $iH_Zoom, 0, 0, $WS_POPUP) Global Const $dw = _WinAPI_GetSystemMetrics($SM_CXDLGFRAME), $dh = _WinAPI_GetSystemMetrics($SM_CYDLGFRAME) + _WinAPI_GetSystemMetrics($SM_CYSIZE) + 1 Global Enum $idAbout = 5000, $idResetPicPos, $idResetValues Global Const $hMenu_Sys = _GUICtrlMenu_GetSystemMenu($hGUI) _GUICtrlMenu_AppendMenu($hMenu_Sys, $MF_SEPARATOR, 0, 0) _GUICtrlMenu_AppendMenu($hMenu_Sys, $MF_STRING, $idAbout, "About") Global Const $hImage_Icon = _GDIPlus_BitmapCreateFromMemory(_WebP_Icon()) Global Const $hIcon = _GDIPlus_HICONCreateFromBitmap($hImage_Icon) _WinAPI_SetClassLongEx($hGUI, -34, $hIcon) _GDIPlus_ImageDispose($hImage_Icon) GUISetState(@SW_HIDE, $hGUI_Image) GUISetState(@SW_SHOW, $hGUI) ;~ GUISetState(@SW_SHOW, $hGUI_Image_Zoom) _WinAPI_SetProcessDpiAwarenessContext($Context_PerMonitorAwareV2, $hGUI, 2) Global Const $iDummy_About = GUICtrlCreateDummy(), $iDummy_Return = GUICtrlCreateDummy() Global $sFileLoad, $hImage, $hImage_GDI, $hHBitmap, $aDim, $aPixelFormat, $pMemData, $pMemData_Size, $tMem, $mp, $sFileSave, $hFile, $nBytes, $nBytes, $iResetPosX, $iResetPosY, _ $hImage_tmp GUIRegisterMsg($WM_DROPFILES, "WM_DROPFILES") GUIRegisterMsg($WM_LBUTTONDOWN, "WM_LBUTTONDOWN") GUIRegisterMsg($WM_COMMAND, "WM_COMMAND") GUIRegisterMsg($WM_CONTEXTMENU, "WM_CONTEXTMENU") GUIRegisterMsg($WM_SYSCOMMAND, "WM_SYSCOMMAND") GUIRegisterMsg($WM_HSCROLL, "WM_HSCROLL") #EndRegion GUI Global $aGUIGetMsg, $aMPos1, $aMPos2, $iMPx, $iMPy, $iMPx_p = 0, $iMPy_p = 0, $bBigger = False, $iResult, $old_cursor, $bNew = False While 1 $mp = GUIGetCursorInfo($hGUI) If $hImage And $mp[2] And $mp[4] = $btnShow Then _WinAPI_DeleteObject(GUICtrlSendMsg($iPic_WebP, $STM_SETIMAGE, $IMAGE_BITMAP, $hImage_GDI)) While $mp[2] $mp = GUIGetCursorInfo($hGUI) Sleep(10) WEnd _WinAPI_DeleteObject(GUICtrlSendMsg($iPic_WebP, $STM_SETIMAGE, $IMAGE_BITMAP, $hHBitmap)) EndIf $mp = GUIGetCursorInfo($hGUI_Image) $aMPos1 = MouseGetPos() If $mp[4] = $iPic_WebP And $mp[2] And $bBigger And WinActive($hGUI_Image) Then While $mp[2] $mp = GUIGetCursorInfo($hGUI_Image) Sleep(10) $aMPos2 = MouseGetPos() $iMPx = $iMPx_p + $aMPos2[0] - $aMPos1[0] $iMPy = $iMPy_p + $aMPos2[1] - $aMPos1[1] ControlMove($hGUI_Image, "", $iPic_WebP, $iMPx, $iMPy) WEnd $iMPx_p = $iMPx $iMPy_p = $iMPy EndIf $aGUIGetMsg = GUIGetMsg(1) Switch $aGUIGetMsg[1] Case $hGUI Switch $aGUIGetMsg[0] Case $GUI_EVENT_CLOSE GUIRegisterMsg($WM_DROPFILES, "") GUIRegisterMsg($WM_LBUTTONDOWN, "") GUIRegisterMsg($WM_COMMAND, "") GUIRegisterMsg($WM_CONTEXTMENU, "") GUIRegisterMsg($WM_SYSCOMMAND, "") GUIRegisterMsg($WM_HSCROLL, "") ;~ If IsDllStruct($tMem) Then WebP_FreeUp($tMem) _WinAPI_DestroyIcon($hIcon) If $hImage_tmp Then _GDIPlus_ImageDispose($hImage_tmp) If $hImage Then _GDIPlus_ImageDispose($hImage) If $hHBitmap Then _WinAPI_DeleteObject($hHBitmap) If $hImage_GDI Then _WinAPI_DeleteObject($hImage_GDI) If $hGUI_Image Then GUIDelete($hGUI_Image) _GDIPlus_Shutdown() GUIDelete($hGUI_Image) GUIDelete($hGUI) DllClose($_KERNEL32DLL) Exit Case $btnApply, $iDummy_Return If $hImage Then CompressAndDisplay($hImage) EndIf Case $icLoad $sFileLoad = FileOpenDialog("Select an image to compress", "", "Images (*.jpg;*.bmp;*.png;*.gif;*.tif;*webp)") If @error Then ContinueLoop LoadImage($sFileLoad) Case $icSave If $hImage Then $sFileSave = FileSaveDialog("Save WebP Image", "", "WebP Image (*.webp)", BitOR($FD_PATHMUSTEXIST, $FD_PROMPTOVERWRITE), StringRegExpReplace($sFileLoad, ".+\\(.+)\..*", "$1") & ".webp", $hGUI) If @error Then ContinueLoop $hFile = _WinAPI_CreateFile($sFileSave, 1) $iResult = _WinAPI_WriteFile($hFile, $tMem.pMemData, $tMem.memsize, $nBytes) _WinAPI_CloseHandle($hFile) If Not $iResult Then MsgBox($MB_ICONERROR, "ERROR", "Unable to save WebP image to disk!", 30, $hGUI) Else MsgBox($MB_ICONINFORMATION, "Information", "WebP image successfully save to disk", 10, $hGUI) EndIf EndIf Case $icReset ResetImage() Case $slAlpha_Filtering GUICtrlSetData($ipAlpha_Filtering, GUICtrlRead($slAlpha_Filtering)) Case $slAlpha_Quality GUICtrlSetData($ipAlpha_Quality, GUICtrlRead($slAlpha_Quality)) Case $slFilter_Sharpness GUICtrlSetData($ipFilter_Sharpness, GUICtrlRead($slFilter_Sharpness)) Case $slFilter_Strength GUICtrlSetData($ipFilter_Strength, GUICtrlRead($slFilter_Strength)) Case $slLevel GUICtrlSetData($ipLevel, GUICtrlRead($slLevel)) Case $slMethod GUICtrlSetData($ipMethod, GUICtrlRead($slMethod)) Case $slNear_Lossless GUICtrlSetData($ipNear_Lossless, GUICtrlRead($slNear_Lossless)) Case $slPass GUICtrlSetData($ipPass, GUICtrlRead($slPass)) Case $slQuality GUICtrlSetData($ipQuality, GUICtrlRead($slQuality)) Case $slSNS_Strength GUICtrlSetData($ipSSN_Strength, GUICtrlRead($slSNS_Strength)) Case $iDummy_About AutoItSetOption("GUIOnEventMode", 1) GDIPlus_About(11 * $aDPI[0], 0.5, 18.5) AutoItSetOption("GUIOnEventMode", 0) EndSwitch Case $hGUI_Image Switch $aGUIGetMsg[0] Case $GUI_EVENT_CLOSE EndSwitch EndSwitch WEnd Func ResetImage() If $bBigger Then $iMPx_p = $iResetPosX $iMPy_p = $iResetPosY ControlMove($hGUI_Image, "", $iPic_WebP, $iMPx_p, $iMPy_p) EndIf EndFunc Func LoadImage($sFileLoad) If $hImage_tmp Then _GDIPlus_ImageDispose($hImage_tmp) If $hImage Then _GDIPlus_ImageDispose($hImage) If $hImage_GDI Then _WinAPI_DeleteObject($hImage_GDI) If StringRight($sFileLoad, 5) = ".webp" Then $hImage_tmp = WebP_BitmapCreateGDIp($sFileLoad) If @error Or $hImage_tmp = 0 Then Return MsgBox($MB_ICONERROR, "ERROR", "Unable to decode WebP image!", 30, $hGUI) EndIf Else $hImage_tmp = _GDIPlus_ImageLoadFromFile($sFileLoad) If @error Or $hImage_tmp = 0 Then Return MsgBox($MB_ICONERROR, "ERROR", "Unknown image format!", 30, $hGUI) EndIf EndIf $aPixelFormat = _GDIPlus_ImageGetPixelFormat($hImage_tmp) ;Local Const $aImageRawFormat = _GDIPlus_ImageGetRawFormat($hImage_tmp) If BitAND(GUICtrlRead($chkbCountColors), $GUI_CHECKED) Then GUICtrlSetData($ipColorOriginal, BitmapCountColors($hImage_tmp)) Else GUICtrlSetData($ipColorOriginal, 0) EndIf ;~ If $hImage_tmp Then ConsoleWrite("Original color count: " & BitmapCountColors($hImage_tmp) & @CRLF) $aDim = _GDIPlus_ImageGetDimension($hImage_tmp) $hImage = _GDIPlus_BitmapCreateFromScan0($aDim[0], $aDim[1]) Local Const $hGfx = _GDIPlus_ImageGetGraphicsContext($hImage) If $aPixelFormat[0] = 2498570 Then _GDIPlus_GraphicsClear($hGfx, $bGUIBgColor) _GDIPlus_GraphicsDrawImageRect($hGfx, $hImage_tmp, 0, 0, $aDim[0], $aDim[1]) _GDIPlus_GraphicsDispose($hGfx) $hImage_GDI = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage) $bNew = True _WinAPI_LockWindowUpdate($hGUI) CompressAndDisplay($hImage, $aPixelFormat[1]) _WinAPI_LockWindowUpdate(0) EndFunc ;==>LoadImage Func CompressAndDisplay($hImage, $sFormat = "") Local $aDim = _GDIPlus_ImageGetDimension($hImage) If $hHBitmap Then _WinAPI_DeleteObject($hHBitmap) $pMemData = 0 $pMemData_Size = 0 Local $iPreset = GUICtrlRead($cbPreset) Switch $iPreset Case "Default" $iPreset = 0 Case "Picture" $iPreset = 1 Case "Photo" $iPreset = 2 Case "Drawing" $iPreset = 3 Case "Icon" $iPreset = 4 Case "Text" $iPreset = 5 EndSwitch ;~ If IsDllStruct($tMem) Then WebP_FreeUp($tMem) $old_cursor = MouseGetCursor() GUISetCursor(15, 1, $hGUI) _GUICtrlStatusBar_SetBkColor($StatusBar, 192) Local $iCallback = DllCallbackRegister("Progress", "long", "long;ptr"), $hCallback = DllCallbackGetPtr($iCallback) Sleep(10) Local $end, $fTimer = TimerInit() $tMem = WebP_CreateWebPAdvancedFromBitmap("", $hImage, _ $iPreset, _ BitAND(GUICtrlRead($chkbLossless), $GUI_CHECKED), _ GUICtrlRead($slQuality), _ GUICtrlRead($slMethod), _ GUICtrlRead($slSNS_Strength), _ GUICtrlRead($slFilter_Sharpness), _ GUICtrlRead($slFilter_Strength), _ GUICtrlRead($slPass), _ GUICtrlRead($slLevel), _ GUICtrlRead($slNear_Lossless), _ BitAND(GUICtrlRead($chkbAlpha_Compression), $GUI_CHECKED), _ GUICtrlRead($slAlpha_Filtering), _ GUICtrlRead($slAlpha_Quality), _ GUICtrlRead($ipTarget_Size), _ True, _ ;hold the compressed image in memory only, no save to HD! $hCallback) $end = TimerDiff($fTimer) DllCallbackFree($hCallback) ToolTip("") _GUICtrlStatusBar_SetBkColor($StatusBar, $iSBColor) GUISetCursor($old_cursor, 1, $hGUI) Local $iColorsWebp = 0 If IsDllStruct($tMem) Then _GUICtrlStatusBar_SetText($StatusBar, "WebP size: " & Round($tMem.memsize / 1024, 2) & " kb / encoded in " & Round($end, 2) & " ms.") $hHBitmap = WebP_BitmapCreateGDIpFromMem($tMem.pMemData, $tMem.memsize, True, BitAND(GUICtrlRead($chkbCountColors), $GUI_CHECKED)) If @error Then Return MsgBox($MB_ICONERROR, "ERROR", "Unable to compress image", 30, $hGUI) $iColorsWebp = @extended GUICtrlSetData($ipColorWebP, $iColorsWebp) If BitAND(GUICtrlRead($chkbCountColors), $GUI_CHECKED) And GUICtrlRead($ipColorOriginal) = "0" Then GUICtrlSetData($ipColorOriginal, BitmapCountColors($hImage_tmp)) ;~ ConsoleWrite("WebP image color count: " & @extended & @CRLF) Local $aTaskbar = WinGetPos("[CLASS:Shell_TrayWnd;INSTANCE:1]", ""), $tbw = 0, $tbh = 0 If $aTaskbar[2] > $aTaskbar[3] Then $tbh = $aTaskbar[3] ELse $tbw = $aTaskbar[2] EndIf Local Const $minw = 384, $minh = $minw * 10 / 16 Local $maxw = Min($aDim[0] + $dw, @DesktopWidth * 0.95), $maxh = Min($aDim[1] + $dh, @DesktopHeight * 0.95), $iNewW = 0, $iNewH = 0 If $aDim[0] + $dw > @DesktopWidth * 0.95 Or $aDim[1] + $dh > @DesktopHeight * 0.95 Then $bBigger = True Else $bBigger = False EndIf If $bNew Then $iNewW = Max($minw, $maxw) $iNewH = Max($minh, $maxh) WinMove($hGUI_Image, "", (@DesktopWidth - $iNewW - (@DesktopWidth - $iW > $iNewW ? $iW : 0)) / 2 - $tbw, (@DesktopHeight - $iNewH - $tbh) / 2, $iNewW, $iNewH) WinSetTitle($hGUI_Image, "", StringRegExpReplace($sFileLoad, ".+\\(.*)", "$1") & " / " & $aDim[0] & "x" & $aDim[1] & " px / " & $sFormat & " / " & Round(FileGetSize($sFileLoad) / 1024, 2) & " kb") $iNewH -= $dh ;_WinAPI_GetSystemMetrics($SM_CXBORDER) + _WinAPI_GetSystemMetrics($SM_CYSIZE) + _WinAPI_GetSystemMetrics($SM_CXPADDEDBORDER) * 2 $iMPx_p = ($iNewW - $aDim[0]) / 2 $iMPy_p = ($iNewH - $aDim[1] - 4) / 2 $iResetPosX = $iMPx_p $iResetPosY = $iMPy_p GUICtrlSetPos($iPic_WebP, $iMPx_p, $iMPy_p, $iNewW - 1, $iNewH - 1) $bNew = False EndIf _WinAPI_DeleteObject(GUICtrlSendMsg($iPic_WebP, $STM_SETIMAGE, $IMAGE_BITMAP, $hHBitmap)) Local Const $iWC_State = WinGetState($hGUI_Image) If $iWC_State <> 7 Or $iWC_State <> 5 Then WinSetState($hGUI_Image, "", @SW_SHOW) WinActivate($hGUI_Image) EndIf WinActivate($hGUI) Else MsgBox($MB_ICONERROR, "ERROR", "DLL encode error " & $tMem, 30) EndIf EndFunc ;==>CompressAndDisplay Func Progress($progress, $ptr) ToolTip($progress & "%", MouseGetPos(0) - 40, MouseGetPos(1)) Return 1 EndFunc Func WM_HSCROLL($hWnd, $Msg, $wParam, $lParam) #forceref $hWnd, $Msg, $wParam Switch $lParam Case $hslAlpha_Filtering GUICtrlSetData($ipAlpha_Filtering, GUICtrlRead($slAlpha_Filtering)) Case $hslAlpha_Quality GUICtrlSetData($ipAlpha_Quality, GUICtrlRead($slAlpha_Quality)) Case $hslFilter_Sharpness GUICtrlSetData($ipFilter_Sharpness, GUICtrlRead($slFilter_Sharpness)) Case $hslFilter_Strength GUICtrlSetData($ipFilter_Strength, GUICtrlRead($slFilter_Strength)) Case $hslLevel GUICtrlSetData($ipLevel, GUICtrlRead($slLevel)) Case $hslMethod GUICtrlSetData($ipMethod, GUICtrlRead($slMethod)) Case $hslNear_Lossless GUICtrlSetData($ipNear_Lossless, GUICtrlRead($slNear_Lossless)) Case $hslPass GUICtrlSetData($ipPass, GUICtrlRead($slPass)) Case $hslQuality GUICtrlSetData($ipQuality, GUICtrlRead($slQuality)) Case $hslSNS_Strength GUICtrlSetData($ipSSN_Strength, GUICtrlRead($slSNS_Strength)) EndSwitch Return "GUI_RUNDEFMSG" EndFunc ;==>WM_HSCROLL Func WM_DROPFILES($hWnd, $iMsg, $wParam, $lParam) Local $i = 1 Local $aFileList = _WinAPI_DragQueryFileEx($wParam) Do If StringInStr(FileGetAttrib($aFileList[$i]), "D") Then _ArrayDelete($aFileList, $i) Else $i += 1 EndIf Until $i = UBound($aFileList) $aFileList[0] = UBound($aFileList) - 1 $sFileLoad = $aFileList[1] _WinAPI_DragFinish($wParam) LoadImage($sFileLoad) Return 0 EndFunc ;==>WM_DROPFILES# Func WM_LBUTTONDOWN($hWnd, $iMsg, $wParam, $lParam) _SendMessage($hWnd, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0) EndFunc ;==>_WM_LBUTTONDOWN Func WM_SYSCOMMAND($hWnd, $iMsg, $iwParam, $ilParam) #forceref $hWnd, $iMsg, $ilParam Switch BitAND($iwParam, 0x0000FFFF) Case $idAbout GUICtrlSendToDummy($iDummy_About) EndSwitch Return "GUI_RUNDEFMSG" EndFunc ;==>WM_SYSCOMMAND Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam) #forceref $hWnd, $iMsg Switch $iwParam Case 1 GUICtrlSendToDummy($iDummy_Return) Return 0 Case $idResetPicPos ResetImage() Return 0 Case $idResetValues GUICtrlSetData($slAlpha_Filtering, 1) GUICtrlSetData($ipAlpha_Filtering, 1) GUICtrlSetData($slAlpha_Quality, 100) GUICtrlSetData($ipAlpha_Quality, 100) GUICtrlSetData($slFilter_Sharpness, 0) GUICtrlSetData($ipFilter_Sharpness, 0) GUICtrlSetData($slFilter_Strength, 60) GUICtrlSetData($ipFilter_Strength, 60) GUICtrlSetData($slLevel, 6) GUICtrlSetData($ipLevel, 6) GUICtrlSetData($slMethod, 4) GUICtrlSetData($ipMethod, 4) GUICtrlSetData($slNear_Lossless, 60) GUICtrlSetData($ipNear_Lossless, 60) GUICtrlSetData($slPass, 6) GUICtrlSetData($ipPass, 6) GUICtrlSetData($slQuality, 75) GUICtrlSetData($ipQuality, 75) GUICtrlSetData($slSNS_Strength, 50) GUICtrlSetData($ipSSN_Strength, 50) GUICtrlSetData($ipTarget_Size, 0) GUICtrlSetState($chkbAlpha_Compression, $GUI_CHECKED) GUICtrlSetState($chkbLossless, $GUI_UNCHECKED) _SendMessage($hcbPreset, $CB_SETCURSEL, 0) Return 0 EndSwitch Return "GUI_RUNDEFMSG" EndFunc ;==>WM_COMMAND Func WM_CONTEXTMENU($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg, $lParam Switch $hWnd Case $hGUI Local $hMenu $hMenu = _GUICtrlMenu_CreatePopup() _GUICtrlMenu_InsertMenuItem($hMenu, 0, "Reset values to default", $idResetValues) If $bBigger Then _GUICtrlMenu_InsertMenuItem($hMenu, 1, 0) _GUICtrlMenu_InsertMenuItem($hMenu, 2, "Reset image position", $idResetPicPos) EndIf _GUICtrlMenu_TrackPopupMenu($hMenu, $wParam) _GUICtrlMenu_DestroyMenu($hMenu) Return True EndSwitch Return $GUI_RUNDEFMSG EndFunc ;==>WM_CONTEXTMENU Func Max($a, $b) If $a > $b Then Return $a Return $b EndFunc Func Min($a, $b) If $a < $b Then Return $a Return $b EndFunc Func GDIPlus_About($iFontsize = 10, $dx = 0, $dy = 0, $iSpeed = 333, $sFont = "MV Boli") If @AutoItX64 = 0 Then Local $binSIDSound = _Chip_Sound() _SIDStartup() _SIDOpen($binSIDSound) EndIf Local Const $iWh = $iW / 2, $iHh = $iH / 2, $sTitle = "GDI+ About Window" Local Const $fPi = ACos(-1), $fRad = $fPi / 180, $fDeg = 180 / $fPi #Region text Local $sText = _ "WebP Advanced Encoder GUI ²" & _ " " & $ver & " beta " & _ " " & $build & " " & _ " " & _ " Coded by UEZ ;-) " & _ " " & _ "Credits to: " & _ " " & _ "* Google for the WebP API " & _ " and static libraries " & _ "* wakillon for TichySID " & _ " and Stat-Mat for the DLL " & _ "* Soren Lund for SID Tune " & _ "* Ward for Mem call code " & _ " " & _ "-------------------------- " & _ " " & _ "Greetings fly out to: " & _ " " & _ " All Autoit users " & _ " around the globe " & _ " " & _ " " & _ " Press ESC to exit. " & _ " " & _ " " & _ "-------------------------- " & _ " " & _ "NO ..--+++--.. WAR " & _ " .-' | `-. " & _ " +' | `+ " & _ " ' | ` " & _ " ' | ` " & _ ": | :" & _ ": +'|`+ :" & _ ". +' | `+ ;" & _ " + +' | `+ + " & _ " `. +' | `+ .' " & _ " `._ | _.' " & _ "Peace `--.._|_..--' :-) " #EndRegion $bExit = False $hGUI_About = GUICreate($sTitle, $iW, $iH, 0, 0, $WS_POPUP, $WS_EX_NOPARENTNOTIFY, $hGUI) _WinAPI_SetParent($hGUI_About, $hGUI) WinSetTrans($hGUI_About, "", 0xD8) GUISetState(@SW_SHOWNA, $hGUI_About) ;create canvas elements Local Const $hDC = _WinAPI_GetDC($hGUI_About) 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 = 512, $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) Local Const $iMilliSeconds = 5 AdlibRegister("CalcFPS", 1000) Do DllCall($__g_hGDIPDll, "int", "GdipFillRectangle", "handle", $hCanvas, "handle", $hBrush_Clr, "float", 0, "float", 0, "float", $iW, "float", $iH) ;erase canvas background 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 / 4.5 * $iColums $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.3333 DllCall($__g_hGDIPDll, "int", "GdipDrawString", "handle", $hCanvas, "wstr", $aChars[$i], "int", -1, "handle", $hFont_char, "struct*", $tLayout_char, "handle", $tLayout_char, "handle", $hBrush_char) EndIf Next $t += 0.025 DllCall($__g_hGDIPDll, "int", "GdipDrawString", "handle", $hCanvas, "wstr", "FPS: " & $iShowFPS, "int", -1, "handle", $hFont_FPS, "struct*", $tLayout_FPS, "handle", $hFormat_FPS, "handle", $hBrush_FPS) DllCall("gdi32.dll", "bool", "BitBlt", "handle", $hDC, "int", 0, "int", 0, "int", $iW, "int", $iH, "handle", $hDC_backbuffer, "int", 0, "int", 0, "dword", $SRCCOPY) $iFPS += 1 If $bExit Then ExitLoop If $r = 0 Then $b = 1 If $b Then $a -= 5 If $a < 256 Then DllCall($__g_hGDIPDll, "int", "GdipSetSolidFillColor", "handle", $hBrush_char, "dword", BitShift(Max(0, $a), -24) + $iCharCol) If $a <= -50 Then $b = 0 $a = 384 DllCall($__g_hGDIPDll, "int", "GdipSetSolidFillColor", "handle", $hBrush_char, "dword", 0xFF000000 + $iCharCol) $t = 0 EndIf EndIf DllCall($_KERNEL32DLL, "dword", "SleepEx", "dword", $iMilliSeconds, "bool", True) Until False AdlibUnRegister("CalcFPS") ;release resources _GDIPlus_FontDispose($hFont_char) _GDIPlus_FontFamilyDispose($hFamily_char) _GDIPlus_StringFormatDispose($hFormat_char) _GDIPlus_BrushDispose($hBrush_char) _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_About, $hDC) GUIDelete($hGUI_About) If @AutoItX64 = 0 Then _SIDStop() _SIDClose() _SIDShutdown() $binSIDSound = 0 EndIf 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 Func _WinAPI_GetDpiForMonitor($dpiType = $MDT_DEFAULT, $iDPIDef = 96) Local $aMonitors = _WinAPI_EnumDisplayMonitors() Local $x, $y Local $aRet = DllCall("Shcore.dll", "long", "GetDpiForMonitor", "long", $aMonitors[1][0], "int", $dpiType, "uint*", $x, "uint*", $y) If @error Or Not IsArray($aRet) Then Return SetError(1, 0, 0) Local $aDPI[2] = [$iDPIDef / $aRet[3], $aRet[3] / $iDPIDef] Return $aDPI EndFunc ;==>_WinAPI_GetDpiForMonitor Func _WinAPI_SetDPIAwareness($hGUI = 0) Switch @OSBuild Case 6000 To 9199 If Not DllCall("user32.dll", "bool", "SetProcessDPIAware") Then Return SetError(1, 0, 0) Return 1 Case 9200 To 13999 _WinAPI_SetProcessDpiAwareness($PROCESS_PER_MONITOR_DPI_AWARE) If @error Then Return SetError(1, 0, 0) Return 1 Case @OSBuild > 13999 #cs Context_Unaware = ((DPI_AWARENESS_CONTEXT)(-1)), Context_SystemAware = ((DPI_AWARENESS_CONTEXT)(-2)), Context_PerMonitorAware = ((DPI_AWARENESS_CONTEXT)(-3)), Context_PerMonitorAwareV2 = ((DPI_AWARENESS_CONTEXT)(-4)), Context_UnawareGdiScaled = ((DPI_AWARENESS_CONTEXT)(-5)) #ce _WinAPI_SetProcessDpiAwarenessContext($Context_PerMonitorAwareV2, $hGUI) If @error Then Return SetError(3, @error, 0) Return 1 EndSwitch Return -1 EndFunc ;==>_WinAPI_SetDPIAwareness Func _WinAPI_SetProcessDpiAwareness($DPIAware) ;https://docs.microsoft.com/en-us/windows/desktop/api/shellscalingapi/nf-shellscalingapi-setprocessdpiawareness DllCall("Shcore.dll", "long", "SetProcessDpiAwareness", "int", $DPIAware) If @error Then Return SetError(1, 0, 0) Return 1 EndFunc ;==>_WinAPI_SetProcessDpiAwareness ;https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-setprocessdpiawarenesscontext Func _WinAPI_SetProcessDpiAwarenessContext($DPIAwareContext = $Context_PerMonitorAware, $hGUI = 0, $iMode = 1) ;https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-setprocessdpiawarenesscontext $DPIAwareContext = ($DPIAwareContext < -5) ? -5 : ($DPIAwareContext > -1) ? -1 : $DPIAwareContext $iMode = ($iMode < 1) ? 1 : ($iMode > 3) ? 3 : $iMode Switch $iMode Case 1 Local $hDC = _WinAPI_GetDC($hGUI) Local $aResult1 = DllCall("user32.dll", "ptr", "GetDpiFromDpiAwarenessContext", "ptr", $hDC) If @error Or Not IsArray($aResult1) Then Return SetError(11, 0, 0) _WinAPI_ReleaseDC(0, $hDC) Local $aResult = DllCall("user32.dll", "Bool", "SetProcessDpiAwarenessContext", "int", $aResult1[0] + $DPIAwareContext) If @error Or Not IsArray($aResult) Then Return SetError(12, 0, 0) Case 2 ;~ If Not $hGUI Then $hGUI = WinGetHandle(AutoItWinGetTitle()) Local $aResult2 = DllCall("user32.dll", "int", "GetWindowDpiAwarenessContext", "ptr", $hGUI) If @error Or Not IsArray($aResult2) Then Return SetError(21, 0, 0) Local $aResult = DllCall("user32.dll", "Bool", "SetProcessDpiAwarenessContext", "int", $aResult2[0] + $DPIAwareContext) If @error Or Not IsArray($aResult) Then Return SetError(22, 0, 0) Case 3 Local $aResult31 = DllCall("user32.dll", "ptr", "GetThreadDpiAwarenessContext") If @error Or Not IsArray($aResult31) Then Return SetError(31, 0, 0) Local $aResult32 = DllCall("user32.dll", "ptr", "GetAwarenessFromDpiAwarenessContext", "ptr", $aResult31[0]) If @error Or Not IsArray($aResult32) Then Return SetError(32, 0, 0) Local $aResult = DllCall("user32.dll", "Bool", "SetThreadDpiAwarenessContext", "int", $aResult32[0] + $DPIAwareContext) If @error Or Not IsArray($aResult) Then Return SetError(33, 0, 0) EndSwitch Return 1 EndFunc ;==>_WinAPI_SetProcessDpiAwarenessContext ;Code below was generated by: 'File to Base64 String' Code Generator v1.20 Build 2020-06-05 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 _WebP_Icon($bSaveBinary = False, $sSavePath = @ScriptDir) Local $WebP_Icon $WebP_Icon &= 'iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAMkElEQVR4XsRZe3BU1Rn/vnPvPpNsdsnCIgkkFogoElIpFAMZmUIC5SVpBcb6ACMNFAYUi5RRKUgFNWTEDgyKBEHoA4y1ZkKxHQYspfJ0SpGEplIeCXntJvtIsu+993yF3EDGMs3eO67hd3fuP/fuOb/f9zrfOReoV8TkGBFdrwvo7oXFi5bNmjN59pzJi55dZh4OX5y91P3CXQUDFeAxZu0HhSu8BUtbpyxu/eFz3nsyIRZWnsG3BM5VDR1HgMJPFA16PdizojZHxOaI9ssM2NLAZuvX9UiEbweMqTJub9MTkcKvualRFwJPS9DvFUHGtuZrDsz+5Usbc76b7XL7BCYAECQIBKBnzO1vnD+3qKAwX3FFL2KQiP7/UAgAH+4/WLx81urSSdljfX6PBMBMKfK16v6t7iudkXpZAkBIJAhQAMbg/Q2wY/PvSn72uGJKRNTmAYXXwgUlVWd2vvVRvn1wm68FqCvkIkHMGtU0wpQmiiMQdZBwyLIhhRcUmJbM/8lXl2vLyl5FRMWgGjzQ7pbuy7XlTPEvWTM1xp3tLgmRKVYgAg5AMgEov8QDiawOUcB7X11emWWaWXWwSlsI/any2MyiSau35+RPT/W6vEE/CIwBQl+Cc56UKpstmTs2/vnqqfR/X2gApq4KbXht3cySSeXHZk6Yamxp8ISDIAgK+z4FQ+bvEPzuhqVr8yY/rcM0vC0sjoDz5y6/VGrIyPY1XvODxBAZ3BUgCMCCIfC6PHOL80w2CHR0S4iTxGajJRiJ+L2AwABRaw0hIFkmYARArHs2BI6CgAgIqFEDsWgUwoGYyQACqQshOcaVhUQrdZk4gKxPIvvA1IzMjKx778scmn3jnpGZbh9o0Rm5DDIRAWn3BUMJIBBUV0Y5cgEAuDarA+MWq85i6e9ri507faK6JtpcD6EQGAyQPgRG5/YbOXpMmiPs8/hC' $WebP_Icon &= 'fo7EtLm2Kwdlla3ErSQhVeS72OuMNGCw0dtsWb/icPG0v54/MCfPWr6m6ERZyZevzD0zod+e0/smPvHI4Z2bjwu8v/0eEZhMRNpWNwBB5UKGIAOqEaBo5EYzmFNNn+xq+KCsee+2yic/mX0HgbGrX15AEqxZ89oTBWvLduUNzY21NQVJFjT5QVYpADip84Bie0hOTd31+ilXTS4PNn2tl+yJQoExRBHeLHvlyaefyhmbtWHXw6MmiK3XZdISS8hV5gAQMHVtF+NWh/HjnTXuf33vzOlTt6mzLvxPfHIuMSaOyslsvNyZnpmypXLy4Gy32ykhqVtkUH07zTlTU3OAW+y6+mrTR1t9J0+e6qJIvbTBjHUba1BG8hcnL61aeCQcSDOZmYaqpDaJ1VlfFMmkc2ze+PeKvcdvUURQhzHjhr24cPOBXUes9jQOHCihAgAkiAdOPNmqq73QZPYOm/HoRPUbKCWWuhqWVYf3Q9BrNBiBgBLqAY7I4hYfSklK/7Tyws+Xl2rZQPXEks4IeblFF2vOJqdYZDmhAhB5fBICJzSdPwPTp83qNqoWKNny6NTHzp5oMyWlAeMJ9YAMDIDiJACGA52xTsj4jtgzjsaaPnb8xNpqEJiZJTaEAHgcBQAoYDTiN2mhfWedGOQYEPADESSiCmkHIcE3Q0zijAHDuyGAZDLokqPyN5q14XqjNQ34XRHAZTKaU3gyOOvvWDxUF6Ljnx99MAfkmJero8ExQQLwpvcZYnjMOKg6WNlNSDv2V24dPyHbH2hDlTR4ojyAN6/OQOOMopxNb6/o6d7UQZZlAKi92Hw9UDN85NBQR1TT5oAnQICy4/ZIw0fb9Rn1v/ngkPqFjHMuCAIALFn8zKLnHRy80Qgg9nkOIILEIeT3vLCu8KnFM5wtYZXsFZ179vyxLvqX/KmjvW1+xtjdKaMCsA6f1H+Ic+22ccOyTeEQKJC4xDm/k7pMssL1s6Pnnln+o3VbCkORhmgUEFAt' $WebP_Icon &= '03j7Ae2ZQMzdLD1UICx9/QGTDU8fqxn3/QdEJn4tK9jN67aZd773YcmL89/5eHKy3eVpZgIySGQZ1R5IJDFPY+ThGeay3094ZN7IeUXFdVc7uodWcGuKz49fzM0dW7pv/vufFtoz3d4WiWlmr84DpE0DyhJrbQhlPSjtOzTlSFXFiCm7B4kDfpC38P77c62WNKer/h//PPHZmd2GgVD8/IiH8gtDwRu2186eA5A6AaIgAiodkVoNxIW2ZsloaJk2b9T0uba6q0211aVHr0HwP2CzwdDpMG3V+AHpaVLE7W1tjEVRW+RwAiSdrpssiyugtaNplJhqSmHUzEHdTKgcoUWopb5Dr++w9RemzMgXdUmIJs5D0Yg/FGx31nfKMjDGBC3ncwQkGMBkFoMhCAR9AFbOgbFeT6e3vrN95cZlvz00G3V1Ppes1ddEwImoy2y3IhJRQIW3JhARityRkfS3yvDba7+MeghZdy2Oc7z+6y3lv9jy092VMwXjZZ9LUDT0KRT2Ou5ITzlS4drxqyvtzaQ3qa5Cz61c9MbKd0t+fFCODrPaOScO1NfsRYX9AVf5piudToW9qg8cPT4qK92+/r1l5X+YheIljwsRsc/4i3pwZFiOVLTeYO9rItEAmr7Q9GgofXPbG+XLdx98LMkejvkRBAFUA5W71u9QxJGR0QRVey+9u7623amwjyegFw2bNm55+a0Xpj8OnZ2AGrM5FAYZQKcDowCAav9l1IOzFb46CR11pDMCgAoBvWuoqKj0e0kUjJw0KNDr9UOGZBoNBqfT6WptQyR1AmRR1Hnbry14ttiSosLh/23WykIiPYJw51hcFEVBnxJ8MGBMBkREQV8EQfDFAw+8yGpAjSJhxYcIRiIS3VVXMt6Yw8iIJDMGIXFEFBFFxRtR8+D14C0Rx2tcD8Z18+djC8o//Q+T2SwLFtJUfVNd/1/VVdXd8itvky6eX3eZupW3SbQCb/TZAhU32WF9fILAP01OToaH' $WebP_Icon &= 'h9/c3DxAMrHmm39twPejFy/kL06AOA8ywRSBxLBL8/Pz4OHA7e0tG3GS+PWY5wcR/f8UQpi1oF0HFhYWnJ/+Wr6RA0p3t5ymGxsbg4ODEri+vj4zM6M1tLKyAnx7e1vyjR3ARBKhs7i4eHZ25sBnia6vrycmJtQLfnBwoFYQrq6ueMbU1BQEm82G8Tn65Suqq6uDiHVXh/Py8pIn+/v7SwlpMBjYNE+B2dXVVbWau7u7k8vr4eEBffJQbSExMZEURHNzM+TCwkKebDQagYSGhnp5eTG4v78vdS0SIyMjr66uIPb19RHS1tYm6cAOxsrKyq2trdbWVgJxtb8Lv01ZX/6LRW0IYmJiMGZlZWEBS0pKCIyOjoaCYM94TkBAAMTAwEA1WF1dDbGsrIzEhoYGbRfu7+/XOhkSEoJxd3eXwbm5OVIbHx8npO634kc/iPKuT7N/FF//8uE3xk++NXzGFnx9fTHi1dnC0NAQEDIrIFOEjo+PeU5eXp7ZbAYzMjJCIP0vZG9vj0Rvb2+IJpOJjWqTnsXg4GBOaDX+RV4ueKtFyWoXzVMPvzNnzP05+cwcpx8XKT+JS+udZlBQkF0LNTU1AgIta1NTE/ilpSXwCBIppaWlUUbazZ+wsLDs7GxkUVRUVHx8fHJyMuGjo6NqNb1eL7Wd2NhY4Drdx6/cUh6bxJM/AhSiW+Xp7x88Ngrl5s5CVVWVFKmkpCRKk3ehkJmZiZGyore3l9edYoxxenqaaloq2aOjI9SGxWJBZ9jc3MT65Ofnt7e3R0REqNWoT7A/vEO97/KQLrv4e/DOR4LoPUjehDO5uLhIFigjrFar4FCRBmqXI41yIb6iogLM+fm5tAIoXEYclGBubi547nIgNzc34AUF+eDPLMqjn8XTEfHr8Pfnx0rHYPWzMZH+7xRKT0+XLPj4+AAvKioSEDiLcnJyMGZkZBC4trZGorZei4uLgaDHSQ4MDw8DRyNmB/z8/KS5Ozs7UhE3dZUU' $WebP_Icon &= 'dYoCg0jWiy8N4qtO1yedn7MFnU4nWTg9PSUL2H8EtgYqDqpdOrqoQ5iQkICxpaXF7i5bWloKXtuapMeDZmdngeClX+scKVSEzYTDyhburHh6emrtokB5/5L2y8PDQ2GPuJuxk2j/7BvTxcWFeuPSbs1SW6uvr5csoPygILg/nJycxMXFIQc40rR1p6Sk9PT0EKil5eVlbIVYh8bGRpwpJAX04tTUVOIRv9ra2vLy8oGBAefOOXJfRnNDk0DL6ejokA5z941kB8bGxv7722msAxF4B6D0K05KGJl3MJ01mXGS+F6BAzmbZQv3eQXkG4Xdi4RQ7jehbOCAgyP3P94Red6jcQCLAAAAAElFTkSuQmCC' Local $bString = _WinAPI_Base64Decode($WebP_Icon) If @error Then Return SetError(1, 0, 0) $bString = Binary($bString) If $bSaveBinary Then Local Const $hFile = FileOpen($sSavePath & "\WebP_logo_2010_64x64_Simo99.png", 18) If @error Then Return SetError(2, 0, $bString) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_WebP_Icon 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) Local $bSid 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) $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() ;only x86 :-( 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  
       
      Download 7-Zip archive for the UDF, DLLs and examples:  WebP v0.3.1 build 2022-06-18 beta.7z
       
    • By memerim
      If i get a graphics from a call _GDIPlus_GraphicsCreateFromHDC
      How do i convert this graphics to a bitmap?
      What the function below return, isn't a bitmap?
      Func _GDIPlus_BitmapCreateFromGraphics($iWidth, $iHeight, $hGraphics)    Local $aResult = DllCall($__g_hGDIPDll, "int", "GdipCreateBitmapFromGraphics", "int", $iWidth, "int", $iHeight, "handle", $hGraphics, _          "handle*", 0)    If @error Then Return SetError(@error, @extended, 0)    If $aResult[0] Then Return SetError(10, $aResult[0], 0)    Return $aResult[4] EndFunc   ;==>_GDIPlus_BitmapCreateFromGraphics   Theres an example in the docs: But the variable name is $g_hBitmap? hBitmap? Trying to understand how to use the function to get a bitmap from a graphics and save it to disk.
    • By UEZ
      I've ported some of the JavaScript 140 Bytes demos from dwitter.net to FreeBasic.
      Download AiO with 500 examples (7-Zip archive): The beauty - magic of math Vol. 1 - 12 build 2022-01-16.7z  (1.99 mb with source code and Windows compiled executables)
      Some screenshots: 
                                                       ...
       
      Autoit is too slow for almost all of these examples.
       
      Happy watching. 
    • By t0nZ
      I was searching for a way to highlight zones (regions, provinces, counties, etc) on a map, and I don't need  super precise maps so I wrote this script, based on picking up black and white maps (2 colors BW .png or .gif tested) and filling them with colors, writing down a sqlite database to associate zones with names (and other data as well), and reuse the map and the DB to display data, in my example reading a simple .txt file.
      It's all based on this thread  and this other thread.

      So I have two modes:
      The Map "creation mode" : you provide a map image and you start to pick up colors, set "upper level" region/state, and by clicking on a region you fill it and you name it, and all the data are saved on a sqlite DB (auto-created) when you have the map image and a DB with the correct associations, you can switch the "mode" to "show" (as by .ini file) and the script tries to read a "datafile" showing the zone names listed in datafile. The code:
      #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Icon=Icone\mapFlooder.ico #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** ;MAP Flooder ;(C) NSC 2021 #include <GUIConstants.au3> #include <_GOLLOG.au3> #include <SQLite.au3> #include <SQLite.dll.au3> #include <Misc.au3> #include <GDIPlus.au3> Opt("mousecoordmode", 2) Global $prgname = "MAP Flooder", $ver = "V.0.7", $Buttoncolor = "0xFF00FF", $MPini = @ScriptDir & "\MapFlooder.ini", $btest Global $dbfullpath, $dbtable, $dbFields, $mapfile, $FloodMode, $datafile Global $HDC, $hBrush, $hGraphics, $obj_orig Global $Pic1, $gui, $width, $height, $bColor, $realtimeCoords, $lastclickcoords, $inputSup, $zonecountNum,$labeltest #Region program Gollog(">>>>>> Start MAP Flooder " & $ver) ctrlini() Gui() SQLiteDBcreate() If $FloodMode = "createdb" Then Gollog("CreateDB Mode") DBFlooder() Else Gollog("Show MAP mode") MapShow("show") EndIf Close() #EndRegion program #Region funcS Func Gui() _GDIPlus_Startup() $Pic1 = _GDIPlus_BitmapCreateFromFile($mapfile) $width = _GDIPlus_ImageGetWidth($Pic1) $height = _GDIPlus_ImageGetHeight($Pic1) If $FloodMode = "createdb" Then $gui = GUICreate($prgname & " " & $ver, $width + 150, $height) $labelLoadedMap = GUICtrlCreateLabel("Loaded Map", $width + 10, 5) $labelLoadedMap2 = GUICtrlCreateLabel(_FileToFileName($mapfile), $width + 10, 25) $labeldim = GUICtrlCreateLabel("Width*Height", $width + 10, 45) $labeldim2 = GUICtrlCreateLabel($width & " * " & $height, $width + 10, 65) $lastclickcoordslabel = GUICtrlCreateLabel("Last Click Coords", $width + 10, 100) $lastclickcoords = GUICtrlCreateLabel("xx - xx", $width + 10, 120, 180, 20) $realtimeCoordslabel = GUICtrlCreateLabel("Real Time Coords", $width + 10, 140) $realtimeCoords = GUICtrlCreateLabel("Real Time Coords", $width + 10, 160, 80, 20) $SuPzonelabel = GUICtrlCreateLabel("Supzone (region-state)", $width + 10, 200) $inputSup = GUICtrlCreateInput("sup", $width + 10, 220, 80, 20) $bColor = GUICtrlCreateButton($Buttoncolor, $width + 10, 250, 130, 30) GUICtrlSetBkColor($bColor, $Buttoncolor) $zonecountlabel = GUICtrlCreateLabel("Done Zone Count:", $width + 10, 320, 100, 20) $zonecountNum = GUICtrlCreateLabel("x", $width + 10, 340, 100, 20) $btest = GUICtrlCreateButton("TEST MAP", $width + 10, 380, 130, 30) $labeltest = GUICtrlCreateLabel("", $width + 10, 420, 130, 30) Else $gui = GUICreate($prgname & " " & $ver, $width, $height) EndIf GUISetState() $HDC = _WinAPI_GetDC($gui) $hGraphics = _GDIPlus_GraphicsCreateFromHDC($HDC) _GDIPlus_GraphicsDrawImageRect($hGraphics, $Pic1, 0, 0, $width, $height) EndFunc ;==>Gui Func MapShow($showmode) ; reading a simple text file with zone names, searching for names in DB and fill the map using stored coordinates If $showmode = "show" Then Local $aLines = FileReadToArray($datafile) Local $iLineCount = @extended EndIf If $showmode = "test" Then $iLineCount = 1 If @error Then MsgBox(48, "MapFlooder", "There was an error reading the data file. @error: " & @error) ; Gollog("There was an error reading the data file. @error: " & @error) Close() Else Gollog("start filling zones") _SQLite_Startup() _SQLite_Open($dbfullpath) ; open Database with zone definitions Local $hQuery, $aRow For $i = 0 To $iLineCount - 1 If $showmode = "show" Then _SQLite_Query(-1, "SELECT * FROM " & $dbtable & " where zone = '" & $aLines[$i] & "' ORDER BY zone ASC;", $hQuery) ; the query EndIf If $showmode = "test" Then _SQLite_Query(-1, "SELECT * FROM " & $dbtable & " ORDER BY zone ASC;", $hQuery) ; the query EndIf While _SQLite_FetchData($hQuery, $aRow) = $SQLITE_OK $hBrush = DllCall("gdi32.dll", "long", "CreateSolidBrush", "int", $aRow[2]) ; fill color read from DB $obj_orig = DllCall("gdi32.dll", "int", "SelectObject", "int", $HDC, "int", $hBrush[0]) DllCall("gdi32.dll", "int", "FloodFill", "int", $HDC, "int", $aRow[3], "int", $aRow[4], "int", 0x000000) If $showmode = "test" Then GUICtrlSetData($labeltest,$aRow[0]) Sleep(200) GUISetState() EndIf WEnd _SQLite_QueryFinalize($hQuery) Next _SQLite_Close() _SQLite_Shutdown() EndIf While 1 $msg = GUIGetMsg() If $msg = $GUI_EVENT_CLOSE Then ExitLoop WEnd EndFunc ;==>MapShow Func DBFlooder() $zonecount = 0 While 1 $mp = MouseGetPos() GUICtrlSetData($realtimeCoords, $mp[0] & " - " & $mp[1]) $msg = GUIGetMsg() If $msg = $GUI_EVENT_CLOSE Then ExitLoop If $msg = $bColor Then colorP() If $msg = $btest Then MapShow("Test") If $mp[0] < $width And $mp[1] < $height And _IsPressed("01") And WinActive($gui) Then $mp = MouseGetPos() GUICtrlSetData($lastclickcoords, $mp[0] & " - " & $mp[1]) $hBrush = DllCall("gdi32.dll", "long", "CreateSolidBrush", "int", $Buttoncolor) ; fill color ok $obj_orig = DllCall("gdi32.dll", "int", "SelectObject", "int", $HDC, "int", $hBrush[0]) DllCall("gdi32.dll", "int", "FloodFill", "int", $HDC, "int", $mp[0], "int", $mp[1], "int", 0x000000) Local $Zone = InputBox("Map Floode", "Zone ?") If $Zone = "" Or @error = 1 Then ; when manage wrong click, possibility to repeat ; set 'temp' color to highlight the 'wrong' click $hBrush = DllCall("gdi32.dll", "long", "CreateSolidBrush", "int", 0x4ccfc6) ; fill color wrong $obj_orig = DllCall("gdi32.dll", "int", "SelectObject", "int", $HDC, "int", $hBrush[0]) DllCall("gdi32.dll", "int", "FloodFill", "int", $HDC, "int", $mp[0], "int", $mp[1], "int", 0x000000) ; restore color $hBrush = DllCall("gdi32.dll", "long", "CreateSolidBrush", "int", $Buttoncolor) ; fill color ok $obj_orig = DllCall("gdi32.dll", "int", "SelectObject", "int", $HDC, "int", $hBrush[0]) Else _SQLite_Startup() _SQLite_Open($dbfullpath) ; open Database Local $SupZone = GUICtrlRead($inputSup) Local $data = '"' & $Zone & '","' & $SupZone & '","' & $Buttoncolor & '",' & $mp[0] & "," & $mp[1] _SQLite_Exec(-1, "INSERT INTO " & $dbtable & "(" & $dbFields & ") VALUES (" & $data & ");") If @error = -1 Then GOLLOG("Error insert record") MsgBox(48, "Error", "insert record") EndIf $zonecount += 1 GUICtrlSetData($zonecountNum, $zonecount) _SQLite_Close() _SQLite_Shutdown() EndIf EndIf WEnd EndFunc ;==>DBFlooder Func Close() Gollog("<<<<<<< closing...") _WinAPI_ReleaseDC($gui, $HDC) _GDIPlus_GraphicsDispose($hGraphics) _GDIPlus_Shutdown() Exit EndFunc ;==>Close Func SQLiteDBcreate() ;complete path e filename If Not FileExists($dbfullpath) Then GOLLOG("perform SQLite DB creation") Local $dbfolder = _FileToFilePath($dbfullpath) ;Local $dbfile = _FileToFileName($dbfullpath) If Not FileExists($dbfolder) Then DirCreate($dbfolder) ; =====================>>>>> START SQL DLL _SQLite_Startup() _SQLite_Open($dbfullpath) ; open Database ; creating first table If _SQLite_Exec(-1, "CREATE TABLE " & $dbtable & " (" & $dbFields & ");") = $SQLITE_OK Then GOLLOG("DB table - " & $dbtable & " - creation ok") Else GOLLOG("Error creating DB table : " & @error) EndIf _SQLite_Close() _SQLite_Shutdown() Else Gollog("DB already exist") EndIf EndFunc ;==>SQLiteDBcreate ; #FUNCTION# ==================================================================================================================== ; Name ..........: _FileToFilePath ; Description ...: Returns a folder path from a FQPN (Fully Qualified Path Name) ; Syntax ........: _FileToFilePath($sPath) ; Parameters ....: $sPath - a string value. ; Return values .: Success - String ; Failure - Empty string as returned from StringLeft() ; Author ........: Sam Coates ; =============================================================================================================================== Func _FileToFilePath($sPath) Local $sReturn = StringLeft($sPath, StringInStr($sPath, "\", 0, -1) - 1) Return ($sReturn) EndFunc ;==>_FileToFilePath ; #FUNCTION# ==================================================================================================================== ; Name ..........: _FileToFileName ; Description ...: Returns a filename from a FQPN (Fully Qualified Path Name) ; Syntax ........: _FileToFileName($sPath[, $bIncludeExtension = True]) ; Parameters ....: $sPath - a string value. ; $bIncludeExtension - [optional] a boolean value. Default is True. ; Return values .: Success - String ; Failure - Empty string as returned from StringLeft() ; Author ........: Sam Coates ; =============================================================================================================================== Func _FileToFileName($sPath, $bIncludeExtension = True) Local $sReturn = StringTrimLeft($sPath, StringInStr($sPath, "\", 0, -1)) If $bIncludeExtension = False Then $sReturn = StringLeft($sReturn, StringInStr($sReturn, ".", 0, -1) - 1) Return ($sReturn) EndFunc ;==>_FileToFileName Func colorP() ; modified for BGR color GOLLOG("Color Picker") Local $color = _ChooseColor(2) If $color = -1 Then GOLLOG("no color selected") Else Local $sCr = Hex($color, 6) Local $RGB_Buttoncolor = '0x' & StringMid($sCr, 1, 2) & StringMid($sCr, 3, 2) & StringMid($sCr, 5, 2) GUICtrlSetBkColor($bColor, $RGB_Buttoncolor) ; BGR color $Buttoncolor = '0x' & StringMid($sCr, 5, 2) & StringMid($sCr, 3, 2) & StringMid($sCr, 1, 2) GUICtrlSetData($bColor, $Buttoncolor) GOLLOG("new color " & $Buttoncolor & " selected") EndIf EndFunc ;==>colorP Func ctrlini() ;ini read If FileExists($MPini) Then GOLLOG("found: " & $MPini) $mapfile = IniRead($MPini, "map", "mapfile", "") $datafile = IniRead($MPini, "map", "datafile", "") $dbfullpath = IniRead($MPini, "db", "dbfullpath", "") $dbtable = IniRead($MPini, "db", "dbtable", "") $dbFields = IniRead($MPini, "db", "dbfields", "") $FloodMode = IniRead($MPini, "mode", "mode", "") Else GOLLOG($MPini & " NOT found..") Close() EndIf EndFunc ;==>ctrlini #EndRegion funcS All the needed files plus some example (image maps and DBs)
      Link to all demo files
      To test, copy all in a single folder and adjust the mapflooder.ini, also you can add to you includes the _gollog.au3 (used for log, you can avoid it deleting all Gollog() lines)
       
       
       
       
       
×
×
  • Create New...