Leaderboard
Popular Content
Showing content with the highest reputation on 02/08/2024 in all areas
-
hi all This one is nowhere near finished - I'd probably call it a proof of concept for now - "GDIControls.au3" needs to be included, then there's a couple of control types that you should be able to create. _GUICtrlGDI_CreateHFader($hGUI, $iX, $iY, $iWidth, $iHeight [, $Colour [, $iStyle [, $iExStyle ]]]) _GUICtrlGDI_CreateVFader($hGUI, $iX, $iY, $iWidth, $iHeight [, $Colour [, $iStyle [, $iExStyle ]]]) _GUICtrlGDI_CreateKnob($hGUI, $iX, $iY, $iWidth, $iHeight [, $Colour [, $iStyle [, $iExStyle ]]]) _GUICtrlGDI_CreateLRKnob($hGUI, $iX, $iY, $iWidth, $iHeight [, $Colour [, $iStyle [, $iExStyle ]]]) _GUICtrlGDI_CreateVMeter($hWnd, $iX, $iY, $iWidth, $iHeight [, $iStyle [, $iExStyle]]) _GUICtrlGDI_CreateHMeter($hWnd, $iX, $iY, $iWidth, $iHeight [, $iStyle [, $iExStyle]]) _GUICtrlGDI_Create7SegDisplay($hGUI, $iX, $iY, $iWidth, $iHeight [, $Colour [, $iStyle [, $iExStyle ]]]) _GUICtrlGDI_Create14SegDisplay($hGUI, $iX, $iY, $iWidth, $iHeight [, $Colour [, $iStyle [, $iExStyle ]]]) The above functions return a controlID which can be read with GuiCtrlRead() via the usual methods. The controls can also be manipulated with GuiCtrlSetData() Valid values can be from 0 through to 127. That's about the long and short of it! ---------- Theres a bit going on with the mechanics of it here, and I'm sure theres probably a better way of going about things... But for anyone who' s interested this is what's going on: I take the requested dimentions of the control, If there's already bitmaps available for the requested type/dimentions/colour we use those. Otherwise, we dynamically generate a set of 128 bitmaps for the control. The next step is to create a "static" control, which is basically the same as a label. With the right style we can push images to these however. At this stage those optional $iStyle and $iExStyle flags come into play. There are some forced style values to make things work, but hey, if you want to add $WS_BORDER or something I'm not gonna stop ya! Static controls are pretty dumb, but they do know when they're clicked on ($STN_CLICKED). This is enough to let me know that a control needs updating. Next we need to track the mouse. We need to know when and where the mouse in released. I can't really utillise the $GUI_EVENT_* method for this. I'd either have to force OnEvent() mode, or we'd have to ask the user to call some function in the Main GuiGetMsg() Loop. So then I thought of handling $WM_MOUSEMOVE. This works great until you move over a control in the client area! It seems the message gets gobbled up. So now I'm using a low-level mouse hook. With this I can find where we are relative to the control and update it accordingly. The next peice of the puzzle is to let the user know that something has been done. I can easily provide a "getter" function that retrieves the control's values. I'd rather not have a bespoke function for this though. So I thought its better to associate dummy controls, which I use as a delivery mechanism. Lastly we need have a method of updating the control from outsige the GUI. For ease of use we probably want to leverage GuiCtrlSetData(). Setting the dummy control this way puts us in the same predicament as earlier however - we can't really use GuiGetMsg() to monitor it. but we can periodically check the value of the dummy control with an adlib function. If the value of the dummy is not where the GDI control was set with the GUI, we know we need to update it! GDICtrls_1-9.zip2 points
-
Using NumLock as a hotkey
Zedna and one other reacted to argumentum for a topic
ok, try this: #include <WinAPISys.au3> ; for _WinAPI_GetKeyState() #include <Misc.au3> ; for _IsPressed() #include <GDIPlus.au3> ; for _Set_TrayHIcon() #include <WindowsConstants.au3> ; for _Set_TrayHIcon() Global $hBmp, $hIcon, $sTitle = "NUMLOCK as Calculator key (script)" If WinExists($sTitle) Then Exit 5 ; so it don't run twice AutoItWinSetTitle($sTitle) _Set_TrayHIcon() ; tray icon HotKeySet("{NUMLOCK}", "NumCalc") While 1 Sleep(100) WEnd Func NumCalc() While _IsPressed("90") ; wait for finger removal Sleep(50) WEnd If BitAND(_WinAPI_GetKeyState(0x90), 0x1) = 0 Then ; NUMLOCK is OFF. HotKeySet("{NUMLOCK}") ; 1) disable the HotKeySet() Send("{NUMLOCK}") ; 2) turn NUMLOCK back ON. HotKeySet("{NUMLOCK}", "NumCalc") ; 3) re-enable HotKeySet() EndIf If WinExists("Calculator") Then WinClose("Calculator") Else Run("calc.exe") WinWaitActive("Calculator") EndIf EndFunc ;==>NumCalc #Region embedded icon Func _Set_TrayHIcon() ; Let's load the icon embedded in the script _GDIPlus_Startup() $hBmp = _GDIPlus_BitmapCreateFromMemory(_Calc_ico()) ;load ico and convert it to a GDI+ bitmap $hIcon = _GDIPlus_HICONCreateFromBitmap($hBmp) ;convert bitmap to HIcon _WinAPI_TraySetHIcon($hIcon) ; https://www.autoitscript.com/forum/topic/134350-file-to-base64-string-code-generator-v120-build-2020-06-05-embed-your-files-easily/ OnAutoItExitRegister(_cleanup) EndFunc ;==>_Set_TrayHIcon Func _cleanup() _GDIPlus_BitmapDispose($hBmp) _WinAPI_DestroyIcon($hIcon) _GDIPlus_Shutdown() EndFunc ;==>_cleanup Func _WinAPI_TraySetHIcon($hIcon) ;function by Mat Local Const $tagNOTIFYICONDATA = _ "dword Size;" & _ "hwnd Wnd;" & _ "uint ID;" & _ "uint Flags;" & _ "uint CallbackMessage;" & _ "ptr Icon;" & _ "wchar Tip[128];" & _ "dword State;" & _ "dword StateMask;" & _ "wchar Info[256];" & _ "uint Timeout;" & _ "wchar InfoTitle[64];" & _ "dword InfoFlags;" & _ "dword Data1;word Data2;word Data3;byte Data4[8];" & _ "ptr BalloonIcon" Local Const $TRAY_ICON_GUI = WinGetHandle(AutoItWinGetTitle()), $NIM_ADD = 0, $NIM_MODIFY = 1, $NIF_MESSAGE = 1, $NIF_ICON = 2, $AUT_WM_NOTIFYICON = $WM_USER + 1, $AUT_NOTIFY_ICON_ID = 1 Local $tNOTIFY = DllStructCreate($tagNOTIFYICONDATA) DllStructSetData($tNOTIFY, "Size", DllStructGetSize($tNOTIFY)) DllStructSetData($tNOTIFY, "Wnd", $TRAY_ICON_GUI) DllStructSetData($tNOTIFY, "ID", $AUT_NOTIFY_ICON_ID) DllStructSetData($tNOTIFY, "Icon", $hIcon) DllStructSetData($tNOTIFY, "Flags", BitOR($NIF_ICON, $NIF_MESSAGE)) DllStructSetData($tNOTIFY, "CallbackMessage", $AUT_WM_NOTIFYICON) Local $aRet = DllCall("shell32.dll", "int", "Shell_NotifyIconW", "dword", $NIM_MODIFY, "ptr", DllStructGetPtr($tNOTIFY)) If (@error) Then Return SetError(1, 0, 0) Return $aRet[0] <> 0 EndFunc ;==>_WinAPI_TraySetHIcon ;Code below was generated by: 'File to Base64 String' Code Generator v1.20 Build 2020-06-05 Func _Calc_ico($bSaveBinary = False, $sSavePath = @ScriptDir) Local $Base64String $Base64String &= 'AAABAAMAAAAAAAEAIAA6YwAANgAAABgYAAABACAAiAkAAHBjAAAQEAAAAQAgAGgEAAD4bAAAiVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAgAElEQVR42uy9WYwlWXoe9v0n4m6ZWdXd1bV39T77TM/0LJx945BDkCYpiYL9YNiCLUGAIVmAAAEWDNuPfrEF2H7xg2HATwahF9sPNEVBokiOOYs4a/ds3TPTM9NbbVlrbvfGds7vh9jOOXFORNzMW5VLRzSqM/PeuCfiRsT37//3A8M2bMM2bMM2bMM2bMM2bMM2bMM2bMM2bMM2bMM2bMM2bMM2bMM2bMM2bMM2bMM2bMM2bMM2bMM2bMM2bMM2bMM2bMM2bMM2bMM2bMN2LDY6xudLx/y7DNvR37jH74MAeNDn+Hv/4L+bTdY2fh+gPyLCe7W3ngRwbnhOh23lyGf+AcALZn5ZSfmN67/68Z9899/8y3kBftaEAA8C4AGe39/5J//DPyUh/ufHzjyOFz/0flw+9xhOrU8wGYWYTUb59af6NvDw7A6bAeT8qVDF78xc/ZTMUCr/l0kFqRhpJrG1s0CSSNzf3cXNzTu4du064mgXMk3+xzdf/d6/eOkv/+8tIF/SEgaDAFgx+P9ROJ7+r1/47Gfw+RefwfpsBAIhCABmghDFlS9uKBnfihpfkhxOBFmXgIr/U2M/+4KRsRYVizf8EtKPTc7jUPlJAojyNapdaX+3iGtNZrxoP63M2jXUP1nty+Z+1e/FO8zW5wFV7Fx9Xj9u+TvXx6pACfM9/Zio3qvPR5P7UFyfaw38+ifAkNqa9TEZSgIKDKkYrBhJmiGTCkmcIokS7O0u8PPXb+D69auItu/8SRLt/e9/9n/89/8WgCwEgTquQuDICoCv/r1/Ptl47Fz0uc99Ab/76ffgsdMTZJKRSFVI7fynfZMtKWDgpwJZC7YIJpDJEhREPQQANdcBWcLIAHslAvLXqHgf' $Base64String &= 'lXRYUuOZwIUBLPNRNYCnCwyuBQhroAdysFSvaWsyl5q2FiVsgE77my3hwLngUNDArwsaTdgYp8jWdytep3Jfh+DQBQ6YoYihGFAq/4ySDFYKUioopZAsEsSLGK+9cR3Xr9/E/P5N/Px7f/XkT775r+4AyI6zEAiP6omtP3Lm9x89cxYvvPsyHjs1hZIKi0QilRKsCsmtGEw6bHWgsUMAwCEAyPpcA9umQGCH5CSAWBMQ7DgWmgKCmCA0E4GoeIIqs4CWE9OM4npo4CAdFZowqPWvBs6mc8sgDbjk0OQ1iJW+Dlu/V1q6ACsDUhMyqnhDB70hMHQrQ7MuWPuyxvmzabmwbaloAofAYEVQTGDKFQszoBQgMwUVCIhJiMtnH8HdrTlkGuPZD33qv/7JN//Vf1tcquy4xgSOqgAggL761FNXcPHMGgDGIlOIMgkpubqLXACqlO7k0bSGlubmezooGRoQtc/YQGRrrfJtrn5S/mA1Xm/+ZAAClH+GlnuEGC2xaZemtLQm25aAAVI3ENkypcGFVcDmvqoANDThoIo1KzfB+GwhCCoBwM1zMn5qFgHZgsJ0Q/Q1SBcWbLpKrHJBpTg/Z1kIApDAaDrBmUfWkMlHMZ5v/5fPvvCZ/+XXP/rWpnYb5WABrEoCEF44f+YMZuMRsiI4IyVD6b6+F8jU6oNTl9lOXeZ//sdB16FC7YvSHajMf38cgH0+nK7tLSHTLj5yDU8u6dRH+lBpcmsWBjetqPJ9UaCkNkw4t56KdQTVgCf/Ic2TpPovslQxab/4ZGu5nyoVSaEBqBDKCvkzJ0YhTq1NcOueQDhZw3MvfOb3fv2jb/1x8ZUk/Ic4sps4wuf2xMbaFKNQQDFDFma/aXrXBitVt58c6CDTTThw9OPgoRMqnBSC6cKQ9SCzK9TsfcP9thZu0wxndhgL3Nu6MExw43X2xiVKS8C2nJxnoGnz5a88N34juDJF5mqiEMLl7yiFMkQunITAZJTrzGA8' $Base64String &= 'xXi2/hsARgCC4h/hmNWjHFUBQAA9Nh2PIAQVvpqqHyQqNbAF+gbgu+7HcvfqYPke0wFn6zTt/ADbqnyZhJMVPjeEAB/s+7ET4h0Cg9zCgR1Cgqy9GvFdG8TWree270W1Ocao/Tz7s6UQIMotEgoKS00IBEEuAEQQIghHzxRWdFhg6dgVo4VH+eRIFGBQ5LcJaX/wJt8ftKSQcAUeXB9zxBHIaa3UcYilQkrcERxcbncjwGbYDB1xBve1c1gK7BEEjs+z54yZtAAgo9VN4rZLxk4XNHctiECc+1dMQFB8JRGEEEF42QL/sRMAR9kF2BiNRBUlV72xSUtJA+q7FLWvRT1/wuFiVw7AAR4fbjEGnBqeO2TLEoVVTrMfVrrOWJOb57BPQc6OWIj+kzR/wyUYyLpYrlA+E1VZGiEIoRAACRBorcCQOK5C4ChbAEEtvbn3VSWHcibULoMvAwDb/LMx6UkTkvN1amTwyNLsZa5fUJ310+UAHTDewOz/JGvHWSoAyJY6pToUw6Tl84tgX6OIp/iAQJk45yL7YRYBVWt5rAMmKyWpBQLtjAG0/VShSlRxzqrFndGDsFwKEu3GEwmQMATAsexFOcJpwP57OEFfRNf1gI6wQNYGXFs6kE8A6MZ8iwDQJQgV7wtH5F9fY7/4p6oKQleIuRhlDfi6VUDa/xv/tGg/owQo1zUCWnpOab56CUZR7KeYq3tQpQzLajxtLcVNK4XZVaOAZiEQ17ULesyCVSF0VC5yOA/7V+k+WELRNgPy72FXmzYCf0MMYNWbO/ZFTnfArqQLCoAJEEgYMSC3lWALAP1IRuquvZioafpbacniHAXICDgZFYBLWgBsBdrY4ZsbeX9qmrnOYhs2i2vqwiC9DJu0sl9qVP5VdQJa4E1Zn6uq8ooTM6v7ahtQsauUmbXz5mb2o8zrs4JUBKnyst+MarGn2O9S1UYPucpHjy34j4UAWMZkKMEviBCKvMouKH6SyAGna3P792Zw' $Base64String &= '0FVPQA2h01yH3JWE1DxXvR8Ael/AMo+UDmzrs2xVA/rMartGv9aiNfhYAyeMwGBZaEOmoDECiNwAdlXI43rPEEbcjGFY6wPmvvp3VYUFkDFBSkaqGEnGuR8gc3dCNJKjbFgfggTA0hf+GSyABw7uHjvlZn8O/jAg/PBnb+Jr3/spNu9u4/VrtxraGB6wu2IDPo1Mrs9SP7+F3E6C+w+fS+E7V3LZH/4vSASPzdL/XPw1FnapNnVc46brBY+gdb3pOg9BhEvnHsPjj57Cix98HucePwPKcueDkdeZKPZHyvmEsk2ExwH8ff3eUuOHgcAf/+lf48++8TLCMMR4MsYjj5yGEMJfJ7RvoHe8Rm3MJeRGGrn3IR8AqSVk6G2Ocv9tH9sQvoUfZcRSyPyjEdAkUYFIj6zV1pjmAoEa61aNUvprEJrLVx9MaGuhcP1KDZ6qDHGc4Bdv3MCPfv4mfufzL+JD73uucEVUXmGqNzfVdZtmbfjqHtlBAKxKKpQPqSAgEISXXn0df/aNl3H6kVM4tbGGIAwhAlE9bF5AH+Q16tbwrgDfgYBOLivArW1d52h3NpJ17Pp6kZG9MIBbh8WtHia9ok7/W//6BUSFBTmqgV99RhModkdlLVtEdSyyz5UBpTJcvpji7au38Off/CGeuHgWp06fglSErMwksJbZsNyNk2gEhMcR/Y0QmUDl+wsi/Lu/+RFG4xFOndrAeDxyaH1yCpF9afg+4F8W6MsKgy5zvsffVGr44mWhL6YLB6N1WdfoTa1P1ZKWlicL2CAtJqIFZIWuh/OTsoWU0I5VCyEy3MLyNINghHA0xlNXCPe3dvHyT3+FL3/2RYgyTuQplSzTpkwnTwgcmyxAp0goA4AC+Nnr1zCbTjEahY6I/6D1XVreyG7YwUlU+VQL7G4tT2YnUy2ki7/IAKeZBSlNbmHFdoxGKsutoIZQqhyF6rnQnAfMplNcvPAY3r55pwgWd/Gu8PEN85+EGAD12i//' $Base64String &= 'L4pSRHGG6XpQlRKfCK2/jDlv/W3i0dby1OxHMLQqqs5HcvjtxrmUwNUtA0MwWAxIyAW2Xk1BRphGGH9T8QHjXIRO3lJaCVbBl37+hYWysTbFrdtbufa3rEu73+HYtfid+BiAT1AQsIjj4sGid7TWt31zQ8s7fP8KlmTVS+ja1vL14dC8usmuv0aWti6Fg5kKtYN4tUAyfX2YlZ3aOkJDPkF7zUjjBhiFYUEjV3f9CbBRFGQURfLJFALhsUS662VnYPCwtL5dPPTgtb5LyxvvExpg1339plY3KhIMa4o0m10Y51JkCQwQagJI2DEHKrI3+jUmgITDBdC1PBlNLPnXFRD6Ndfp1ki3EvN9QqEJIaCmb9HU/TuBZz48buj3VOo2XyQT/KEQeOG5S7j8+CNVT3fvXH+fvL5oe2Cou7KXOqr/W/L6hrDoKFhy5uDJ7XQJjw9GzjXse2OVNjvyk2R9ppkVtc4DbstH+O4TEVKpcHcvxlu3tqu+B2aGyJt5YC/NLRWBgwA4pCDg0iLC8cB+4JkL+NJH3o2nLp7FKAwe3Hk6mGztLjjzteJn59/mZ+1aeFjHN8pjrWCqzrijk302GYJRMQ0ZZbZcw4ad35f938NY3+QThPUZwOw5MN4nqwWZuTpPPYVHIePxR2IQgLdub1eiSQhfSL8O+LGVFSAeBMBRsfh77aWb+89efBzPXj6PgBNMf/I/YXT9a6B0+/h8+1ZLxVOJSuh431HF6jINyGZaomaIluy/rX3IsW9jH30N+33rPLyfzX9mYg1311/Az8/8x0hoiounZ3j7zm5R1cdVjAgoqvyoXbjTsez2f4cEAclrCeTvjIIAk3EIIQiTV/43jN/8kxMC+HZXwVcq286ihCbwXMLCPk5jkIJLOGmCwC4ZdAoE8pyD77P1viHHOL/3PTAF+NmZ/wRCCIxDAanyij9BZLpJPZqBTmJMQBx7pDveJwc1YPlsjd/60yP4pTRAEDzUZh6+iaqFsKiG' $Base64String &= '0vczWgyF9ZquiYW5r7Gu4/3yOKT9q9YJ6r+rfQJzX9I4NFzvOf8Fjr8D7Xj26/nf5+Yv57Z7Gekv0oC6BaADnto4xU5gQ0B4nNBPNp1jj/thFqUAJBfHRMujhxb3rfmgzXo4tC51mPX2Z/qY9eT5bJtbYFopAgohR3k3aCXMuJ7H0HIrjBZgOpk5gfAkfRmyygbpSNy0AwLeC/oHYNbboO9l1rtMc+pYw+cW2FaRaAq6HnEAst4nrpvFWORRTRLUFsqtav/J6xgMAuBo+gWr4f1e0an1ZTGljs9RizCgjoAfNd0N3+vk+7wFfm88wCUQ2iwPYaVt7WOL3nEAajuW1ipesh4FRYmh8oiAsgGQy0EGOELP1SAAPLfDAX67s+ywQpLLCa02gUAtQcFVm/XwgH8JkJPocAlE8/XG2k1hQ63WRVM4lJ4gFSyEhgvQpthVMxQwCIDDQjovhzvqGyh4YJHJNtO9430nQH1ghkMbAyuJ1qMlWk9wm+qdLoF+DqIZfKwWF16zvtMScVR7BoHI53ypog4AZEXB3VzurLkEgwtwaAFA9A4AurT+6sIBXXMCqMP/b7MG7Ie5y/yHBwQd/r9Xy7eZ9aKH0LDMeldQ0Jne0zMUtlkvesYbHBaPMAlGSlpvZjZKhA0jQB9vdiKN/hMaBPSRcGIlAVxa0s93aV/4NXmbVeDKabYF7nyCoFXz+yLuPrPemrxkm++GRaB/RniEVtmIZJ+n6GeJ6GuJ5ncoextFSQIa5MxRXkNTqwCs6BSJT2QiIDwZsG/DJj0kwPu0ect71MesbzHvfT+JOmIEDguizZ9e2qy3hEAvs14PBDqChK5zNADviWFoDUlUNS8104Dv1C08kfCnZcG/jFnfM7jn9c+XMfu78vgHNetdMxTJXarbFvRzResbAb4us16guxy4H+Dt71hSsAuqx8wIQc6W6ca8QlEHAod24KOp6D1BdeoQBn1mUXVF9NtM+LaYQJtg6But9/ng1GHm' $Base64String &= 't5n1TS2tBVWawqIr2l9M1m2eu/CY9cIdMxA9XRPv+3qIoaSOz89XwQ9uQk4nXnKCEYZKwEPHf7di97PkeEHdWTtA+xMUnfl88gsK8uTvqaUIxxYc1MciEGivrfcIEU96jww/3xMTMI5r+fw24Dt7AvpYBHUhUHUkKwZAjjHkvIQOGgTAETMQqMFRl7++9Xtfa13L1apbmYMwB2H6h196flqTOl0tss52XG0/vc22mhzO9pl5JgIRjGEaxPpoMHsaj/8czO/PzmtgXNNyjK/db2+39FqQY1ijuqg+F3uMeNm23Ny/PHZUCYCcCQgaIQq7L1wpk2TdZjwIgKMIe3uYnU42IRrcICsFP9CctVe9r9PJFw8dLwt+Ky1FDvATcXM8t34+5Ihua2tTOdWH62Gs8ABa/w42CKs17aYZYuMaNeaLUj1WTJ+K3pi6VIK/kFzGBHXXeLcCteVa+TORpwCFEM17rwtCV0jnBG7iBMDf/UYxepcK35JWDH5y7uMWDnCQeTTBT8UkWw0E1DyefawS/I197JicZiUYDEJsuQ/kaLhyDTchx7RGIkfHHDcmHzsOVQGXm06PNWgkb+c165H0//T961ReRUhaUIC7soDuOACd2ADg8bAAeojeRomma8YerQb8Fm1cO5OPw0Q2ZvjpJrim3WzGHlPbm2uzdU665tKn9lao0afhsqltGdygxIJ2bqBa85f2NllCjfSZhNZYd8M4sKyBch2yzHiqvYf6+5bWHZvWjWHxOyArtFA/EbXEcDVJpHCit2PlAvQNANqjv0WLJOkCv67BuC+NF8HwNdnwhZuWQA0Mbpj6prZv+vxsgx8O8Jdes89FgEaF7aiE00FL5RUhj+1smf2oRoSbQIel7cvjOM1+bQfDunfEUAma2a8JrnISMxVvlKXAyhUC8CmKoRDoCEsGi0ijwYLryOW3gZ86An5OrjsyA346g4FrXLce1LLJ/XRh4g34seWTawKiwWnHDo2uaX4vkG0B' $Base64String &= 'xG6NTsZhasGXFeZMykCq8s9knA/j1A+TZBYvofa7ZIVMuq99QIRAmNdGv5yTsLgo0xhv3t6BCAgjQbh7d7fXEHa2OSgGAXA0fALb5Gzspc+2E/01P/YBfkfYW1uDnKCxyTGZ3TGF5u/c1ODW7zr4yfH9GleCmwAna6y4AX4ClGIoBjIFSMWQnPfZSM7n7VaAdQQ4DYJRy1qxwV9eG/Zcm4wZqWoKxnLtRZq/tkEZNncWyBSDFePG9VteF5LtKJka0oBHIAjgig+7Jbgx+go1SZYL/PbK6AN+8rMAGwE/h2/ajPY3fX44tLoedW+Y8s0v0AhW8BKavzxfyQxVgCtTjIzzEdqZ5CaoLbekkbp8AOCHxypyZlSqASXckIF2C4JhzSicaG7wYyAA2Bfqaxcbxjgr0QA/wU3f3Qp+NMGvY4ct8BuRbU9uHw6f363h3QE/My5Qug2mGcy65WFZOEy5OS4lIDnX5iXQK2A5wNkL/Hw44LevMfcILNspypPcAnwsXQDD33TeyGbEv5wjrw/tIJfP3wZ+8lgNjXQeO9yEWoW7Ofnd2QUd2A1BQD4QWNYL1zyW5bmWZrtkIFOq+t0F1IcF/vISlUHCMhiqVI1GtST42ZFqNZ4NDdiiQ69w4QKcVFbgYyMAuMU58FkAZexPoE679QK/HdDrAX52xAhc4IcH/LaNYz7s7Nf2mu/Oms+vkAMn1+wMKXXw5QsoHB74yzy8KKbzioq8lcGKoAQXggogzn9ntT/wOyoWnMFjbkT960zGYAEcuZhAK/rzh0vPKdES4Ld+UluJrwV+w71QDHa0mdlTfuACNpvShjzuS+k6KC60e2HCs6bZTa3ZDn7d3XgQ4CfkE4EDIoSCoGSKWzfu4tr124iiCItFjDNnHsGZM4/g1OkNnDq9AUUBEsnIkAuCMne3LPiNGEBxW5QmCd4p9f/HWABY/VgtQxzJmHZrVpk1wE/+6D61Fvo0wW8Cm7TxWw7wwwP+6kuxN+Cn' $Base64String &= 'VKnhOU+1eYC4LPjZCjSuCvxlQD0QOfCTaIHv/vDn+Nkv3sLuXoQkTaGkAjMjCAKEYYDRKMT62gQfeN9zePd7n8V0PEGSMVLK3Ze+4K+mAFsuYh9Tc5gNeKSyANz7EySoHiNNjiyAHizzBPz6gB/w9AJUVTDkBj8BvvS7HqGvTPoizZaVkXk78Ogz11cAfrSAH8uAPyCMBOPVn/4S3/7eK7h3fxdJkkJZ5YdpJoF8yju2tnZx5+42fvTTX+KTn/ggnnn+KUASIAtroAf4zUCSaQ80tD29Q5B/fF2APm4B1XEAmPMB+qT6GtrcAX4z+u92EQzwg00rxNLsZlde/oIsAmCyCN75NHq3r34w8HML+Lkn+MOAQCrFX/zl9/DqL97C3jyGUt11tooZiyhBvHkXf/G17+L9N27hNz75IhAEYL3eoAX8zcYeaigEdgWdDfdgGAxyBNIA/f0zAXswCGm5+Hbwc1u9P3PzwbFSfbbZrxfkuCL7ursvmavCGndw7viAnzXwc5bgX/+bb+GXr19HHCXVdQqCANPpGLPpGKNxCAJBSoU4SbGIYsRxCmaGUozd3QV++ONfYj6P8KWvfAaKBKTWO4E2V0sDP1v5PeLmnmxnlk6oSRCexC+VtwGL+g+BZl6tRfMvBX4L1Dr4icwx3a5ctSpSXqoAv79y7niCPxAEYol/++++jdd+fQ1JnBbXhjCdjnHpwhl86hMfwPkLZzGZTXOtnkrM9+Z47bU38cMf/xL3t3aRphmYGVGU4Je/uoZTGy/jo5/6KCQTEsVVqs4Ffj370hoDIEdLgzIF+yAAjmD8n8nXDVgWBAmzm8wBfm9PPxza3REodAWjFKuqH8AEcQ56qXTgtoO/j8+PFvDjIYOfOI/DjALCD777qgl+ALPpGB/78Lvwqc98BJJCZJKxE6ui41EgXNvACy9+EO9+91P42te+h1+9cR1xnAIAojjBT155HefOn8WlZ56CVEBalg95wO+2Iq25AO8Q' $Base64String &= 'v9+2lE/kVvZ+Q+sR9/Xr9wE/ClrohrDxARFsCAYwQzIjVYw0y/PbNYfJasDPLeDn/YAf+wN/ifJAALtbO3jpx68hWsTV+qNxiPe86wo+87mPIuEAi1Qhkow4YyTFzyhl7KUKYraBr/7OZ/HUlQsYjcIK5Lt7C3zvez+BkCkCkad8feBv6/NXrlgA277kIACO3MY5twsakwAqqrh68guJdiHf2exDbDz8zoCT6VxUbayKGZlkJDLX+ErZQHsI4Icb/OgCP7O/6rAF/GVcJBSEH/34F9jenleRfkGExx45hS998eOIJCHJGFlxXfRjSGakkhGnjIxG+MpvfhKPnF6v4jpKKdy9t4NXf/oaxgE12yE84K9oQxwFQG3jQgdGoCPjBPSZ81cUApVj6EENX70L/NanWoN3Zt04F11qQCKBrKixdwPtIYGf3eDnfYKfu8APIAAhjWO89qurSNKsuqbjyQgf/tDzCCZTpOW1aVzX+tiZYsSSMV5fx/ve/RTGo9prjeIEr7z6K3CWINA0te+eUmMegybgtQABtwiCQQAcuQiAe89yEqw+GNKuDGsDv54tcEXr9QeDqr71HPCpqh9sP2D7gR8PGfzoAj/awa9X+925fR9788jIxc+mE7zrXU8ilblL5HNN9PUyxUgyxvs++C6srU+1+8fY2V3gxrWbCEVu7bWC36s7uquDBgvgiMC/UarZGtEtWGC0sdB0QPC7NH/GQKry9J1yWQgHAD8/ZPBzF/i5HfzlRRZEuHp1swrcoQjIrq1NsL6xnsdAVDv4q2OqXKjONjbw6OkNg9I7jhO88frV3AKwuCLYIkbt8Cl7yAMaBMCh+fxleyr3Fxh1JaDBENiD3YfdLgObVHFSldren+o7GuDHQwM/F1c6IODXb15Hqpn/ozDAU1fOQ0Lkqc8e4C85DMvv9+SViwjD2g2QUuHm5j1AqTwQ6BLoviAgdfv7VKSZGHQiAwHHLwhIXS8VXYCipgbXCR+6fH52' $Base64String &= 'MPja4MmK/nnF7Xn+Bw1+9AY/rwT86AH+0spK0wTzeWSU+Y7HIzz15KWcf4C52YzlaeMVAggprylYW5uYlZ3MSJIUSRw3CEVdQtwIAvbQ63zCAwHiBODfcW/qmyx6gh86+O0GvqqHHnWnnQUs9AE/Vgt+fsjg557gBzEWiziv6de20SjAqdPrBW2Y5Wq5wE95FeEkIEwC4LVXf4l//52fGFYFAGRSIl7EDarvJvkq9XD32U0Vd0K38HjD3n+jSh6AcvAkOUBNttnfLBYseO7gsAq4A/AO8HN/njzsE/zwgR8PHvx56jPvvFvMI2SWAAiCAJPptGrp9YE/LyLK04iTgLDY3cHXv/kS3nz7JhaLCEqZd1xmEov5AuPTjzayNjabk3NyketRU+hFGjoIgMMUCW2EoABAwjT/NQBQh89fkly6h3g8YPC3aux28PsqC90FPysGv1aZsVjEkFJZAkAgHI2QybwEGmiWVAsAIiCMAyAE47VXXsP3X3q1Kgd2bVIp7O0t8BjBM32JewUAzUDzO2AsEE5UN6Atr0XBMgNjXkxXwE9pfHhHEvy8PPjxkMDPKCi2iDDfW0Ba3X5CCAhBYNksrAIBAQqtHxJ2793Ht771Eq5eu4VFFDe0vr4pxYjjuFYKPcFPLUwSRtn4YAEcPU+A7QpAe1ehRQOEFhwih8+PPNUkPdRcxx387AE/eoIfPcEPzjn0iIG9edRo9yWqi7L14xDlDEGjgDCCxE9f/jle/tHPsbW9V7kRRITJZITZdILdvYVhDbBSSOKkMgsbnYDcoTCsEu9Gr8cQAzgCoKf26aw66Wc9JJL0UfVWP0ARQS+45vQ58czvDPBzT/BzX/Br6jKKY7CltUVxE8rvUbpnIyKMQ8LW7Tv41rdexvUbt7GIkuoehWGAU6fW8MH3P4+Pvfge/J//8l/j7t1tw4JPs8zR08FNWjCixlxDOOxHdngJQzfgIW/LSOVyGKQe/TXAbzPiDuBvBT96gz+/' $Base64String &= '6FkqjQrAUoOX+wnKCUHHgiA4w4+//yp++JPXsLMzN7T+dDrGhVc6AwcAACAASURBVPNn8JlPfxRnLz6OMCA8cnoD9+7taCXS3BA2PvB3FgjoVsE7IA9wLGMAnTMCq8BfYQVo+SFWXJXt4kGDH0cQ/OgAP7jzu7bl7svfkzSFjcl8JDchEPmI7mlAuLN5G9/45g+wuXkPUWxq/UdOr+OFD70b7/nAuyEpxG7CWBtpQz61c4uTtHIn2An+/jmmd1JX8NEXANzvrjT9NsqLgVC7BCVzrrPcdIXgh73PAcGPVYKfO8DP+xR03D7ChSgH9UgAKiTIJMV3/+ZHePVnb2J7Zw4pa60/m01w6eLj+OxnP4q1Rx9FlDJSqRAIglRdKeEm+LlDndiV/uStOuVBAByq2uemzHbeJ40ItAR/JtVS4McS4IcF/mXaZp0CwwK/P5V3BMFfDuUcjw2tywzMFzHGAXDt7Zv42l//ALfvbCFOUkPrP/rIBl788Hvxrg+8CwkL7CWMrOBE9PF1EuVVhgyu+guWhqxjGjI1OkNpEABHPDkAWMBPlIJMEyjFS4GflwD/fttmnRV8XeBH8xyPFPgLQS0ENUp2797dxv/1//wVrt+8g929RVUnIARhNp3giSfO4bOf+zgmGxtYZLnWr6YIa2As6cF0314IalZ2lr+obvRzD9lAw3jwww/+9RUETIR5kkJKhTAQjvzw/sCPwwY/H13wl+spBsbj0CJlBXb3Fvj5L9/Oz634wGgU4tFHNvDxj74fz77nOSRM2EvzSUYuiw2ERoUhARiFo3p/C/y8j6eL3xEhwGNoAXQFAMtatN15jEcmE60tcDXg5yMMfrSAHw8F/MWxmbC2tma07VbnVTIDCcLabIpnnr6ET376IxitrWOeMVKloKSjFqNcX7HJ9Q+AhMB4OqliIv3B30+ZDHUAx8JGIKOdU5WJZthlv/Aw+xx/8PeZ1LM8+LEc+AuLezqZIBDNXjMiwmgU4LFH' $Base64String &= 'T+GTn3gBTz73FCLFmCdcDT0xQK+PNydAStkoMAqEwGw2NTMV6oAhO0cgkXgQAEcA6oQmQ4toim+yLQZqmR+/WvDDB348DPDzisG/zLUpevcVY21jhiAw70up9d/9/BV8/JMfRjCZ5Vq/mPLTxtNQUvNLmTVLjAPCZDKuR5ovBf68DFC3LCuFUTWS0Ik1BY6FAKAWn62FEKi4qRoZyEMCP3f1/J9I8HOlJRUDs/UZwjAw7sl4NMKnP/khfPAj78NewlikhdbnPiQteTlHskiaTUYiwGRtBsVsMTP3fcC42QJej1zeR0rh+GzHgg/AbmdtvuC7sWRYAX3Aj5WAn1vBjxMKfr2ZajKZGMw9QJ7mO3/+TE7/neUU6b3AzzXP43xvD1mWNdadrk3z7k21v+erMfyH8Y6oCDpWhCBk6Xeu/rn1f00L1s/nRxsI0U6SuQz42QN+PADw4yGCvzymYiAYjbCxPjUCgVIq3L27Xbczox/4gbJ0mLF1bxtpKo2YwngyQjga1+PUljcAzOlBjeeNBwFw1MQA99nLngX1IMDPzWj5fsHPfcCP5cDPDxn8qAaaAleuXMRIswKSNMPbV29WLE19wV8ac6EgvPXWdcMCCIMAly6ehQL1LvP3+4taAJAczFADJ+AhmP/U4vG3EIKU4NeygA8F/NwX/Ngn+PkA4Mfy4MeS4OciA5MqxpUrFzGZjDULQGLz1j1wlpnjGjvBzwgEkMUx7t7bNmIA48kIly5fzIeLHFBT68Ne3ynbkRcAtMR7bGn9phVwhMDP3eDHqsHPy4OflwQ/UFsAp888irWZSeK5N49w89omxgFVTT1t4GcwBBFGgnDr+iYWi9gw/2fTCc5ceLwqF94f7JuGAMEuBSYMtOBHPFDYMP+13I4d1D0O4Pev2bfl+OGDX2dOpiDE009fqmb6AUAUJXjppVcQksIogHekV3mkQABjAYyg8NJLryCKEiP4d+XKeQTjaTVnYN9qptAe7BENw2Sg' $Base64String &= 'I5QN6LQIdCvAwwl4nMHfKPhBe9fhwwS/7gYkmcJ73/ccNtZnlRUgpcSNzbv44fd/jGlAuSUgmnTeIM7pwQRhGhJe+u7LuHX7flUERERYX5/hXe99FxKJVsqwLvC7Gk7fKYxA4jiDvqtjk8gRzz0E8ONBgp8PB/xoAT+QAzJVwNqjj+DZZy83rIAf/ug1vPaTn2N9TJiFIqcDCwihIIQBMAkIs5AwCxmvvvwT/PSVXyNJ6ilDo1GIZ5+5jFNnHkMq6wrCVbmb75QwwDGqBLQqAKnDDdB2dM0F2PfvvcFvVscdVfBjn+DnFvCXtfqZYsQZ8OEXP4C3396sNHg53vtvvvMj3Ll7Hy9+/EM4vb5e+PEMQQICCtt37+Hr3/4hrl2/hUijCAuCAGfPPooPfewFRFk+ko1X8XhRfzdzEADHQmBQwwro1RW3BPjhBT8fC/DzAwJ/+XqSAbPpGj79mRfxta99B9vbu3lrNjP25hF++sqv8MZbN3Du7GM4c+YUNjbWsbW1g+vXb2N7ew/zhTlfIAgEzpw5jc994ZPgcIIkXY32B7tjJoMFcFSie1akmHyGAKHh+0PjBFw1+Hkf4IcO6gcAfqwA/Dgo+FGPTosy4PyVy/j0pz6C73znR9ja3kWW5ZyBSZohubeNra1dhK8LkCAoycikbHT9jUYhHj/zCD7/pU9h+uijWKRcjxhbwTPG2kQAVzxgaAY6RF3um+riMs1srW/PjDts8LMda1gx+LuYhvqAnw8I/sr94dwVmCfAleefwalHTuH73/khbm7exSKqh4copZA4VDkRIQwDrK1N8fRTl/DCRz8Emq7lfQSKDxD5dz07dp0Jn/jAwLF3AUy6ZvNukSdOoIMffUzhNvBjNeBHC/ixLPjhMmUfPvjLv6XKR4btpcD6mcfxld/9Eq69eRWvvvJL3L+/gzhJIaXMhQEzSBCCIMAoDDGZjHH58jm8673PY+PMY4gzRlo0EbF6wFqHHR2JgwA4DJBT' $Base64String &= 'Y34bdwhlA/xFyZkL/K05c/3h7vTVDwZ+5u5sRG/w8z6snAcEfjZGrTGUYiSCcPbKk/jNp59EEs2xdWcLSZLg3r0tKKkwGo9x+vQGNk6fwtrpDVAQIpHAXpIH/JRacUCuJQBIJzwrcCKDgLbvTy5fr7UOfwD/KsFf/a2ADPlo8FQpBJIgxBSnLswgCDj/dP25vJqQESlAZnl2YOXAH7ajLwB6Ff7Azwys/80d4McA/gcGfrNUuBzMkvvYJLma41CdC9cj2/gQn7kTTgdw9AUA7evuWWMfieqJdF1NNh3gRwv4MYC/E/yNgSL6eSs+GkBj2zc4uWVBx3I0GLGBdUNUsMMXkFLlaSXFlSWwX/BzC/h5P+DHEQS/fc0fFPj1Y6gHp2XzUuM8a+BTGI3a34EQ5Oi7AMvEdq7e3cXW3s6DAz/8c/PaXQl/+fGhgd9X638MwU8ALq5nuLG16BEtXrE1OlgAD9glIE+MljQXoNjnFzfuggA8cXYvHxzaeYA++7Ts56hQEr2fKGoMO0HrbDta+imlFRBd0jGYlMEAbm7N8etbO/v4rMk9N8QAjsDdZGoCRDeZDaxoQFeK8er1O3j1+t1G1yD5wG8D3QV8Mg0qcgC/8Rp5QO58refr1B/g7eCnztkLZKRWTsLGDppJbgiSwQI4wr6AzvqbMz3TPoC+X2HgAb/L0nC+5ge5T7v7tf7+hEJfYNOJm4/FjpoStiyvIQh4JPCvS2G2Qn/5+4TxaFSofG4Bfz9h0HQRT6bW7+MOnEStr8ctLNPxhHv+x9UF6JDGzMBkHGIUBkizFIoZAYlB6w9a33pOGErl48ZVMa6MuaYf5yUsz+O+HVNacBhU36pQ+KqwEZ574jz2dhdI48QCmwf8hqlHBpV49bmG1hdN64BcwTvfaxZotXN0a31yaCqY32lJi6AL/AQ6gSY/ILMMUZTgsdMbkFyUKesuJOAYRDEIgCPjBjRe4JqPPlOMr/zGB5DECTZv3sbOzi6S' $Base64String &= 'OIXKZO4odAgDcmn9LpOfyGMJ9Df53QLB8boNYI/WJ3NOulvrU4fWP2HYV4qRJim2t7axt7OHKxfPIpN5fwIrNliFuXG9BxfgCLpwtQPHxYgpycC7n76EP/ziR/GnX38ZuztzzNamxfCIEYQQbl8fXb6+u7sQfXz9vj79Cnz9tieWejzGJ8/Xrx8XmUnEUYyd7V2sTcf40PueRapUzijEjuvH5ueprSd9EAAPN3hjP+kKeYWgVAyCwpc/8QF84Pkn8INX3sDr1zaxiFO8vXm3n6/fB1DUA+Q+kFJfOLbEALAaobCceDje23gU4swjG3j+fc/iw+9/HixCJKmEVIBEGwvQyZ0RdHyyAJrwtdM21VDKQk5nisGscPax0/jdz30YojDRRYl26oMT0rFumMa2xqbGjtQZReKWF/VKPddn7AfVNRDTrtqz13M1QMGuXtTWcRleim1vzD2by6Ayd10Dtl/jjvf9YG2Ogc9fyacP5+3EqWIkkhFlChkz5Dul7vc4C4Au7WQIASYwMRQASVyBNg9occEQ1KJNrUmRZndxLUDIECakcUZxP8DD5sF3IM1B8qEjo6thpwZyE1A22UlTALBBbAoXQ5IuEHxghSXM2Dz3ZimyS3j5ryd7LrDRZIW8nVgVXYiZKrgFiiwAFDnvFA8C4GgFANtM7KrenTgXBioHs9BBTQCV5oTPanaY6DnHoC5AzM8SLfnQtDzURvGpXTvvAbkuTNhL981ObkLzmPn+kq3PMjutCR/Jip1nNwHLrULQEF42czHZ185BV24JGZOjEHnAr/iOXJiXynfvGsHSIQZwuBJAQx3DTRWoijdEmd818e6JqnvMel0AlO9VlgDv/7u4lX3TFHZx/DnM/AaFWYcAUBqQyxy4vm7XxCHd9nDPE3QLANsdYIf5b48FZ4fL4NrXp/3LzyjtTd0qYl/szzGG/qSxBR+7ICBbfrqPGoy03gAFP6co9fy7MTOOtJ+uwEQb2F2/O/bz8fYD' $Base64String &= 'jvHkrf37tYnO3A5ww8rgpkBhttmM2fM92BFjcE9Rdn7O9Vk0R5779tOFE7wCxAY9LxV+HgTAQwZ955vkeovQhs8+xyY0y5BpGe2+xHdymeYuI6hpSLt9CQZXpm9rzMEZO2C/H9/zS3n9eO6+8KzNEOd9PzcEd4ix/Ua+U8KCx5sTkJsxADqgtC4fGmoxA5ouITU4JfpKNfbEANqshS7w6ia/WupcuD/YWwJmvmxAl7zgxkVuBz+1XDMb/Nxi/rk+Q50SDQBItBiPgwBYFcgbmpcN3C0JeHLefPI8FLX2p+oEyowDl/MGaMmHvQ383A2UZkCQmy5Ci8/BDh+57fr5rIY298Mf8GQv+1Df56GxvDX6zX5m2o5kni811yW3wMlLwWltsAAecvyP4c6yE3kEg6W1fR4DOzR7GdknDfilfVCBv9vtX8789wgMHxtPfxSx16ztys037gEvB9xOsGuxFFfWAM5AXXNH6rKkOgr5aB8u2yAADtP/R8NahJQS8yhCFMXI0syB+FoikIV8fcBIGAaYrU0xm0wxGgV5MRHyctJFFGMRxcjSdN/fKQxDzGZTTKdThGFgjM/eW0RYLCKkaVpF6F3BsVqDNQNzYRhgOptiPMnXLwWYlBKLRYRoESNN0qJuwk97BkcakBkIwhDTtQnGkwmCIND4FyUW8wXi6vrbVkZRp+GKZGhByTAMMZlNMB5PEIRBNdtBSok4ys8/yzJANTMCbgvDDDyGYYDJdIrxbAIh8uvPffx/GgTAw9168HLp5voiivH2m9dw7doNLOZRNU/e9u7ajieIsLGxjitPPoEnrlxEGM4qQbGIYrz5xjVcu3Yd8/miWL+9DNdVvLyxsYErT17GlSuXIMQUQuT7zRcR3nr9Kq5q67PHpHbXCuSmy/rGOq5cuYyLT1yECKYQBUCj4vrcuHYD8/kCUiPbd80u1P0AvTRqbWMNl564jPOXLmA2m5X4RBzFuP72dWxev4HForj+7HNzPD4+' $Base64String &= 'EdbW13Dh8iVcuHQBQTCrtHMSx7jx9nVs3riJxWIBJVWn9VJ/m/oGzTbWcOHSJZy7dAHTtZlRaUqNmADVJiCfLGvgWAYB2yL6aZph6/42PvP5T4AZyPYxOpYZ2I5SvHF7F+9ZnyEQdUgoTVPcv7+Fj3/6RTADqWueHbozF1tRijdu7+E9azk4uTr/FPe3tvAbn3kRzIxMcmf8k53rJ3jj1g6eW5uBRA26NM2wtbWFz3/hY/n5S7X8tWfG1iLBr27v4Om1GYSgqiw4S1PsbG3jt3/zN8DMSCV3hAzdvv39RYzXbmxjujZDQFQVJqVJhu3tbfzOVz6RTx82zp+9MRb7/t7bi/Hzm1t4ci2/v9LlczCZ50UnzyY4djGAPpc9DAPc3o0hiBBro6XtTTEjlQpS1mWh1QMyT3D35k3MPvIsMpWXj5YBv3J9cqyvg18qlZecSkZWaPJSw96bJ7i7uYnZR59FovJW1fKDQRjg1k7Uef5SKWQyL2vNpDLox+/PY9y5uYn1Dz+HRCokqs7Lh0FYrR9l3ho4ZClX3yFTqgI5g3FvN8adzZv47HufQSwVEg1BQRhgc2fRvD7KBGp+3vm5Z9r1V8y4uxfj7s1NfPr9zyBK83tU3d8gwOb2AoEQmMcSvtLrTEpImd/jVL+/inF7L8K9zU185v3PYZGq3BLyxDhOXg/gMbQAqCU6TXrkngARBNhZpFAMLJLMfKiVQpwpJJmqHojmuoz5zg72trcRCoJUuvErEIQhtj3rpypfO86Us5GGrPUDQRCKITWTMwhC7/nr6ytPeJ5ZYbFbnD8RUstsCoIA24s8vrCXZMaHU8mIU9m4PsZvijHf3cHe9g5GASFVelguH+y5PU8hmTFPpLFApiSiVObnr5rtTlykKOa7O5jvbGMcCCQSgJLFBSSIIMDWPAUzYzdODdM/lapYXxr3rd4nvy+LvT0stncwDgmxRN4O6Hno2JcSGQTAw7cCyBMI67LD8ocxQ5I9mJGy' $Base64String &= 'UjH2kqzVpCbH9+GekfKMGXtxlmv6liADg50aiztsK6kYu3GG1Lo+viCaPwlBxRmYPrkqwFpZBAw3+J33m1szG3nwkbETpYVL4KsAVK0NRroScSB/sAAOFflsBmZoSXDeXyQHsj6MphhrbHymcp94XzGMMsrfEsHS1/eDn53mKjty/fYaUubXh71VjNwKGpePZoP/7jxqDDxxgb9/vUDt0mSKcW8vbtRE1J9TDbov9kSSyCOgTyonUHhc8H+Qbc8yo5cNCLLnMSh/n3vW99YIcLuWth/gcv1GCWtXNN1rYZh77ibZvsDvPZ5VFbQbp0Z8Ai2a3wX+NiEKADtR2miA0sFv10xwX44GdmkgNQiAQwsCcPfDYAuMVKqlI91t56DrDdWyvg/8VAQtuFD9bD1i9lfMivXZg2ifye+6QK6qvUSqdrO/LaLOXUI6D1DGmew0+XXhxNxDCxR/J1IhldJtLbB93TyNS2Q/YgXJPOWt33yCqZKOVQyg3BQ0NtOOmxMfwOfnHlaJa/1W8MOjgTwHizLV6gG3Vq9xh0XAQJwozym0g5/Z+YmGie4Cv6tXgFsCbEaBjmUdxans6e83CVLa7zIVRVhUFS7RCYwFhMcN+ECTytjb0tvIEy9/XHOCb7Ou2LU++fx918Nv95vDrGk3rAurZbYv+KXHvGXU6y/j7zP3d8ySVHoFi/mV2CmgfOnf8vUolcuB3yjmcdOdsSOSctAms0EArNQXaPPZKZfaRfCM95G28fm2NuOX7Fif4TAt2W9R2JaB5Jyy2uXvoxf42Y077fwVc29/n9jN5sOeAKMq+Pf6BPtc4DfvuRX4LWo4lCE42v19Zk8cxCr2IZh8hyd5O9btwOVNEh6hsK8qwCXkTVkF2Brsq6r8uLW71BUAzKTqHexrM/vtNCFr6/f198lDUurLSuRVhlbFf49gn7cU2WGVZUq5tX4f8HN/noly7NwwHPQQlX6u2U1XoAuhcgkxzr0fBHP9fsG+Psdu' $Base64String &= 'OsWZ4t7BPvYgkVsCdbV23qe/39GRmDpy8m3BPh/4fQ5H5X61BPt8DEK+MQC8D6tzEAAPGP3My3kDTLyUAOhKNzWYhbi2ADqDfZ3g58YDy5YFsxz42R+cs97K1+d2f79tLc811EuhucXf97kt3HLi+iczyZ3BPh9Jqel6tVh+tOwTMwiAhxoBELnnV/w0b47q4f/zksdrsw76+PteAePl9l8W/G5R4ObL6w9+bpECPhJ05SzF5RZ/n43UOzc6Es2DGaXEPfx9tlwh30W1rzehex7BIAAe0tZgAK5rvVYS7CP4mXqI3J/r6+/3PSnfII1lwe8PNmLpYB8aQG1L2ZGT7dfv7zfjBF1FTczYJ/jZAD+13H/3PIUhDXgIkOfqkaMHJEhc4IdXe/rA39ffb8TBWqjB9wl+doHefHEps79iWebWXgS3O9Az2Mf7sMo8rMQ+rgSfkGFfpNGORQ0xgKMpIkrwiiDA+sYG7swT3Lm/jcXu7tLeG4MRzxdIoghCwOgUE0GAjVNruDZPcPv+NqJi/T4kmnU3IBDN50gXEQJBIFnDMwgCrJ9aw815gtv3trDY2+sV7DNAxUC8mCOJIgSW2RKI4vrsxbh9bwuRtj631POb/nl+feIoRijMkZlBKLC2vo67ezFu3dvGYm/XIzRbwM8K0TxCGkX5+hrwgkBgtr6B27sRbt+9b16flmCfzTwULxbIoryluCKOtwYRuKneBgvgaICe3A/rdDrBlScv4/tffwmbb1/FXBMAS/HYKYXZdIKQyBgCMptOcOWpJ/DNv/wublXrt2t+dpmXxfqCoNF+AZPpBFeefALf/tq3sfn2VSx29/Zl8rNSmE3GCIW5z3g6weUnL+MHX/8ebl29mgtI7hZg9qFVcf6joLw2+R6TyRiXrlzCn//77+P221f7CWCHlmalMJ1MMBJk7DOeTnDhyiX8+Bvfwd3r14312RufacYiWCrMpmOMA6o4f3zP1Enejm8MgN3+WxiGmI1H' $Base64String &= '+Ie//1msjYKKzad9IKijI4zyOoMoU9oIqZwLbzIe4R//7S9gNgoQ9hkJxm4BphRjkbJRdDIKQ8xGI/wXf/hFrI1FpcHZq0V9pn9OcjJPVT0XgPP1J+MR/v7vfwGnxgGCwB0PYF+hjHYsqRg7iTKyLUEQYjwe4T/9vS/gkWlQA7jDjXZdu0wpbMXSYOsJwxCzyQh/7w++jMemYS6Aelwb15YqxlYk6/vbYv1jCAIeZgQA5njgDpxJZiyynGWGiDrgXrD8wprvV9idijl/AIvBdFSUwsZZTm7hWt93YvbkW8UMKfPzrebXlecvgTRWoIY2M31ZFw14FRhV+UNe1hNUk5I4FwyJYojiuzN8EXVutPGydv5pwUjEmlBWCpinOQsPkT/Q5wSblraTRTGR3WwlGdhLFBKZ5tffywHoBzEXQ0ITyY1y7mrJd4AJcOxjAC6ab8l5j3tOU0UGGbC+5d4fQWhOXz1BnExqcM2VlsXDk6qeniG7TVH7IVPa+WfF+RtanY04tlMAGBkE1xTg4vVYMaIy9sCmaDICaRYbsLOUV/uhih1lxogydyGON+jHzXWrrALV36mkElukbYFV9gdxuc23p4YYGRiBjhLYO2Z8mZmC9iEgyvopymEf7LAIdE5h7tEi2sKr79pHuR5G57APV4DLcbzGEBAPVXZLkz9z7Rhzz1lBrqX69vXrHTcM8p5inyCu67jUil9yp0TRzjY8CICHtKk+4KecNz6JE0RRDCVz/9c5+deRU6xHfRNEIDCbTTGZjBEGQd5vQHl122IRI04TZJl0TrLgloeyMjYCgel0isl4bPDqK6kQRRHiOEGWZWazCzt1rzPtJ0hgMp1gNBkjEEElzDKZIZpHiKMYaZrVxTqa69BsqGka1SIIMV3Lr08QBiipwKTM8vNf5HMBuNFsZKDcO/k3CENMJlNMZhOIQBhzE6JFhKSYC6BcqcMeDVpBGGA8yecC6Ndfv4jOsfGDBXA4m5WN85CEMqIo' $Base64String &= 'xs3rm7i1eRtxlLTfMPIHAGezKS5euoALF84hmAXVJKBFFOPG9U3c2ryVCxnVm1/GAOlsNsWFixdw7sI5TGYBylhZFMW4cW0Tt27dqoRYp1ZtWAOM6WyK8xfP4/ELZzGbTPOYBnLe/mtvXcON6/XcBOZ2y6PhvxNhbX0dF5+4jPOXL2AahAVAOZ8L8NZ13LpxA9EigrI4DF3lwOy4MWsba7hwKV9/MptW+8VxjJtXr2Pz+k3EUT0XYNmJPrONdZy/dAnnLl5AMJu1tPuS9W+wAA5ho86bWu6RpRnivQX+8d/61IEsNqUUsjTFq3vjOpMAIMsktnd28Q//g48fyCos1//J7gQk6sq5LJPY3d3FP/qDT6xk/W/fy6calXIkTTJsbW3jy1/8uMbb3x7xd1kz9+cJXru5Xc8FUPX1393exm996eMAuGIbam1S5GaLcc7bv40nZzMEAlUmIEsy7Gxv46tf/hgALYDHLnfI7QowGHd3YvzsRjEXgMicoIy6A5B7iZNBADwUF6CzaafYIRyFkFJiPJ36WWaYoZTK/0lpTBAqAfTm1ZtYO/8sUsVmKioIIJXCeDJZwfrP5ZFu5qr2P1jh+uuPPoVEMnRajjCsefWjJHWCXxVDVXTe/vo6K9zZi3F38xY+/6HnEWX13AEuzOubWwuEAWGRSGd5tORyJoBEWq5foFcBuLMb4+7mJj7/wrsQpbIxF+DG/TlCQdizx79pBUapVEikQpYVcxk0t+PWzgL3b93GFz/yHixShViyZzLQkAU4UpF++1lq+mkEIUQxkoqtefeAzDJkWQaZtROFbu3s4c7dbVy8SMg4HyZBhRUYhMHK1j93MY/4V75yMddgVeufOkPGdJ5y/XyuQU41rl/TOMs59ZNM+jv5St7+7W2MAkKS1WXQBEIgAmwvEigwdqPMyCzEqcQiy+cOeDv5mDEvePsnxfpVPoAIIgxwfxGDGdiNUiNLEaUZojRDkkktbmRl1mynfQAAIABJ' $Base64String &= 'REFUTZgR7e1isbuNcShy8MuOwqq24NMgAI6AcKB2dz/LMiRxvDRDkM1yq6fCVrZ+I7THK1vfNn19bEFRJrEXl0FHbm3j7aLLZ9hdh7lg2Y0ySGa003SbNOn5dK7a//alEKNUYnsRG9Od7NiFfU4NSFO3tT/0AhxSBIC7kwDe17MsQxxFBxIybTf+oOv7XJlVrN/a814cK84kdqK0AQ7Di27t5PPoTK7X316k+6PtYs+X0c4hyiTuzyNnDKBRL9Ey27wzkDikAQ9Dwzv7z7xMPK4HPYnjgwsh7YCrXl9/SF3P5yrO33m84kC5G+Bn7mkDv8054Crq2YmyqsnHP3G4hbPP92dxjO1F7DgvR70Ed/MluI5F+t5DKfAh2fnarKh+Y69q7ckryN3yg1pfOUDPq1ufO1yOOJOQrFppuvtw9vmOE2UyN8uXou1i45pwyzlEaVYTm1r+vvF9HZkGXeJRQ/iw8R8w0IIfOv77X34yAHRw4OdVIcrxMK5mfX9B8SrWNywL6wvEWbYUTbelXzslZJTKbppu+Jl73Achbf2st7/vFGDs9zTqY1GL6zMIgIcT5ENH+a0jQMfMndHyvgBSjru/ivVbv+8q1tfotVyoTVLHXIBWmm5uCBL2uGDMjDTNDkDb5R88CuSpyriaC7AP8HtkF/l0PQ0WwNEJDLI/+lflstUK57g51NIq1m+j6VrV+fuKcLLG1KF25h6X/984gvaFEsk1VdtSNN3cEFguF6OkNe/r7zuzGD0L/E5qIPB4CQDufqgNgEq5eldE8x1Xtb7yfIdVnn/Dn+aaFnwpmm5XlJ51zUwGQNtm8rlpuj0zBBwgzWcmcre/Xxy0PYvhjpHAHQUZBMBDwbvym4N9SjJWoqF114IejAVghORXvH6bgKyGji5J0+1jGratmdzCWIamm52uhfsLMBLpmDvI3G3ys2WRdHIR1r0APDQDHW4cwB8OKl+nBwIgV0R6Neuz5Tc/PBdAKu5P022so9wt' $Base64String &= 'xpZaTbXzX4amm13+Edc9iWXVZJbx8v6+g5uhyzzj5SLQgwBYvd3d8jb5zbcHJa1Xun6Lxlvd+bMxw68kDVFKLUnTzT5jxSnW7Ko8P003miPMDfC6sw6SuTf4zde4qUWopEM33b1lUs6DAHhAUKM2re94MmjFt4ntB5NX/zWZH8xDJuFpHV6aptvTv98BkKVpuj2Te/3zGpbx9x3fraW8eyl/cxAAD88IqAszqBNMx+37PQj54kLmsuD39Qb4ajS6Z/L5wO8eA+ay+tgaB8MtJv+y8wcqlmCNiIIHAXCY8GiZeae9IIIAa2szKKWwvbOHnd35vo66N4+wuzfHeUvGVOtLiZ3dObZ39g60/uPCevCCAGuz1a2/XtCal4+/CAKsrW/g7l6M2/e2NV599nLzNc1rRrxYII2jai5AueVzATZwZyfC5r0txMVcAO6g6baDcnGU8/aHgsBU23QU5Ovf2l7g9t1txPN5p78PB+Fpsoig4rhx/ifV1D8ZFgA7MgH63SPCZDrB9MJZvPH2DfzqjWv7BlA52PI9wiwKGU/GOHfxHN66tolfvn4VW9u7B1r/eTL5yicrXv+JgAzROZlOcOnJy3j569/GnbevmYM7HPl9ZxeGNhdgLMhQ4ZPJBOevXMJLX/8b3L12LR880gP8sGoEWCnMZmOMAjJcukkxF+Clv/oW7l2/jmi+1wJ+9sdvlMJsOq3mAnCPZ5AGSrDDigJ4AjLUdNHCIEA4CpFtPI33X3oWoaBOh85g9tZ+VwxEKUNpbCSBCDCZhchOPY0PXHrWYAtynjv7v5VUwDxTBq9dEAQYhyHmo6fw7gvP1oM9Wsd3uy0jqYC9VBpDOsu5Bv/5H3wZj0wERgF5exG6HvVMMrYSmQubYu8gKNb/w6/g0WmAcdA9F8DbZ6G4ORcgyOc+/P0/+m2c8cwF6PSAuF7/fiRtKgCnP0An1DY42nUA2oPom9JMljAAgMyYC+A2GZxEoaBGsEwykFhBJcmM' $Base64String &= 'WAJZrLzxofZCJQYUkCJPxWUamw4VswgWKZBKCSL3THtfbb4uMBXnuX694IcqwaCQSJu335/Wa4zYYiAr5g6kGi8iFYIz5+1n1PKRvRN2fYQvkoE0y2m/9P79jIHdYi6AKEn8CV0kxw2LQ6pyLgAbblLD+SyPzW5FNAiAB6n/l6BxhnbDEsmIJTsIH6y8oQb+EmzkNQ+0uQAOFhm0WIiMlmk7VgmrQjnXoDk/gDsCd75UqE71BTCyDIjKgers9vvZJ7w6vmcp1BaZe36AF6TcFGLO66gYC1XPBbCv6VIEoa6ZBXq2R53s6MCxKQVeNjru7vOmpiywmKpBDj74fbsu7NTY3BGR5y4N5jyCo2uS265Fc5Xu43L/a72kfOcuG7zju/fZCC2zFBp8gO4nYBgN9pBdgC7g27UBmZSI4wRpFCNT0jN5QvuNNDmgPWe5r1/w3gdBxUuvlEIUxUgK3n5nzrlDUzIDQgSYFrz9QltfKoU4ipEk+frsSEGxq3rPOhaJfC7AeDKCENr6MkO0iBCVvP1a441/uGbzO4kwLK7PBEEYGLz9caTz9ptSj3sCKQhDTKZTjGaTYq5BbvFJmSGNEiRJAimlGf/wFVQ5vpMIAowmY4yt61+7lux9xgYB8DA3MrWbTdtWanIuZ/YtYmxe38TtW7cRRTE6OwgMF6B+eTqd4MLFizh38Ryms3qwRhzFuHltE7eLuQDMyqlR2s1NYDqb4FwxF2A6Dapd4jg//1u3biGOYrBix/CM7rFXk+kU5y6cx+Pnz2IyDQDK14kK3v6bN24gmi8q8tEuTW5eRcJsfQ0XnriM85cuIAhmlRRN4hg3i7kAi0VUlDP306QV0Chf//zlyzh36QLEbFYJviSKcWfzFu7dvo1Yv786YxN3C5npbA2PnT+HM2fPYjwLOi0x0+3kQQAcpitgA02HdZpmiBcL/NM/Ws1cgO9vjSFE/TClqcTOzi7+yd9aDW//39wbQVAdiZeZxM7uLv7Z' $Base64String &= '3/nkStb/y5sCgaCqbDZLM+xsbeG3vvgiuAgS+oSLPzAI3N2N8Iub23hK49UH8rkD29vb+K0v5esnmWo32z2px5y3/x6eXJtBaOtnaQY538a/+P0A4BnAmRP1bDB9sOXYMzh6HdGdv8AfT/9ZPtfAOWzCNRBkiAE8RLBzXZNtiGRq0R795gKU5qrOrW8D6M2rN7Hx+DOIJZBqWrIPb3/v9R97BnFWzAUovu8q1z+18SQSqaC/HYQhbty3efthDgJV+fTjkrM/lUoLsjFu78a4t7mJL3z4PfkIdWnOHbh+f46QBOba3AGj1ZnzoSGpyucOpFIZrk3J2//lj30AiyTn7c9p0wWCMAQW14FgBpYLK6DAjgemEEJ71wqLTYHnt3D15gKPvT/EIlOIM24aigpDDOBoqPwlgn3FXD8Xrz6AilM/68mr/+g5QqKpB6IcoKtaf+NxQkLW3D2xuvXHjxBSldvn5VIiENhaJGDkvPp6jX6cKUSpRJymDX9db12e7+5hsbODSUhIZJ1Cy+cqBri/l4DBFdtwNRcgy7BIM8SJ1PDFDSanaHcP0e42xoIQCwJLrtK+IhDgZAcQCyDbM7Q/772Zpzoq+vGSj1D7XSnc24txb0diGopiinSTmJ2BcoT0id2O33Tg5WVELsylRBzH+2qxNcZiezKT+13fXX67+vXZW9zDhSuQgzWT8gCcfZ4AXOFqbEexYUk4wa/9z0nJRbbvUNgku28VOU7VBH/1d/2Plaraip1uiW488CAADi8N4LgnzmEOLRkDmeUTax+AAXLg9TWaIe/xDrR+23eoePsVthZxN023o5mnjbC1BHOcSdwrePv70HZ1jSIvKcbzf5rWB1ev5ZwFtRBAYfrnVpUC2Jrs3MPSHJqBjsBmp+7LB6otTBM/CF79Fa3PNpAck0FWdf5GWlXn7V+kpv9vBOccfHs96DR0TZ4LF9sicdB02+uyo1PSMJkKUFeZjBrsTa3Plf+PSgDAW5bsbkE7' $Base64String &= 'eWLgWPABmK+QV9uwo2nw4Lz6ZDzwtp5e7dyBphVw4PPndmKLKFWQLHub/DptV7dLxlgUvQj7Ze5xGXuG6b/zpqX1mxo/FwiaMFAKUNLowWhSEHbNVBoEwEPBv30bDAvA0SRg366D04KbwyFs3bcKWnAb/Lzi9b3ilIFIW38Z2q5GwKyRe8+vVKzTgi8Ffg/wKpdPFcX5Pg2vAd/y//PXpVYZ2hIELAQoVZnEwQI4PGPAUTpKLUG0vHJMrvwcdHN2FeuzJ0i3svP3MA4xGGkme/v7NnmHc1Zfw/9Xrf6+bXb7ePubsYYS2NLS+robYAG/iAvUrzd7APT74Z5ONAiAoxkndHSDKbtUdEWg5xWu3xbTX8X67PVr89y+Yl6KpttH2+WyLpJq/f3RdrFPCmgIZTY1vg70ptY3XQCbdbrtUOCT6QwcK0KQHlTxJoBWyKrrqvdfOW23ZeU8CFZjfUuLNttlmXo9ybMGcPTinn7+PrsHcDj7KYpAnjJNfLY0vtMS0FwAhjZ+nNBogbZdz8ECONQgIDnfJd1FYFNDr+oMXBHylazPprn5IAaDuMk068k6y4NfO/eWo5Zlxn3A722V9imBSuvLflq/8ZoEWORCgJtCqG4MJ7NL7IQVBR0LQpBlQbpSC8DhgJYP6+o0ND9wC4P1B7is29cq4FrBz45AZY88oNFn0ErTbZ6ke9CI/peZzmOn/y/bXQDOAA4c1iVpHgYbwmHoBjwkC6ArGWN0bmt/rCY9588CrG59nwBcwfpWWbxZj6+W9vddNQI6b4YRI2G1PE2346oYtRLVLwqgLg3vcwOkFgR0DJV1xEt6C75BAKze9+/aiX1P+3EKZuoWJq9+Xd+F60fTDTf4O+z0co7ivijIHbz9xnATVWcBmua+bHEBZP5ZJRtlvmyLoDKAaTxWQwzg4cPCawKYXHcPC/qr1gJelpoHFEhtprh6+PsGcLnRaduoD1iKplt7nd3XuZl1LM156cj3Syf4TbdA' $Base64String &= 'avqdPcFKV/pxEAAPcSPrAeDOBzwIAkxnq5sLcJrIMP2ECLC2trYy3v7zZNJSCyEwXeH6p625A0GYzwW4vRvh1r0tRBotOFvg9QERihFHC8gonwugk7aIQGC2voFbO3PcKnj7ncG+hr9vkiQmiwhS5+1ngJnATLULAJevL1ui/nUMgFUGVmHrCDBfvcMgAB6iBWAHhNoCMUSE8WSCM+dXNxfgKWE+qKPJGGdXzNuvT50dTcY4e351658tAFrNBZhMcOHKZbz819/EnZK3H02WYa9FUvnN+VyAkpa7mpswHePClYv4wV9+A/duXNfmAnC7e2ILBKWvTwZHXy6EFBCY5r4L/Mz2PqUwyLMAzeyC9ryp9manQQA8TOe4hQVIfzsIAoTjELvjp/D8hWcxEuQ1LPJhkPVwAZsGUjJjniiDLSYMAkxGIbZHT+G5Tz5jrN9Gc+V6RSpgJ8kJN6r1i7kDd8ZP4qmPP13z3nM7uafLRJWKsZ2oei4A57z90/EI/9nf/ioemwrz+vScB1AeJ1PAViyRcW2fBWG+/j/4u7+DR6chJgG1X48WgtREMbaifP3afSl9cgliobkAsj0YqIO/jAG4sgAarVijDmCwAB4y9m06v57VWEoBi1QhkUDb3AhjKJSjp0BxPjwiUza1dj53IFXcay4AW1+qVIgKeSouU2ZATjFjnikkyuTt97Xbuo6sium5Lt5+qYDdWCHJFASh98w81lKG5fVJJCPNSt89d5cyzgVbJNN6LgD3F5KlWS5VTe9uAJUIdaOP7AV+pzCA9FojtgAA8taBoRfgkIwAVzWeb6abZIbMqpi6w1UwpQqhOWKordNNcj6bvq0azqmdbd/aAQJVCp6MNb/YQ9utvaAsBLNPw3I+OCVTjChjr/nrPU/2CZ+aR7cUmpy4hTp3BFXZYW3U4bqiClDlAGYluzMBjmxBLjQCx03z1SEMMYBDsAC4l3dALs3lV+5WO2FPs5c7ND372HS5tee87bNt' $Base64String &= 'wsI9rbcbUMpjzi/zvXwJGe6yfjzrsifuY+9jVEsqiZytNfOC35sWrNKA0ks9XzcrlRkCrRqEBwFweGaAwwIw/HYpkcQFb3ya5feQHKPEyeMMFBTjIih59c25ADpvv0wyNxD1h9nTKRcIgfF0gknBSw9r7kCaxMiSrHIV+mnM+gEVxVyAUOe955K3f2Hx9rNV6dg9YksEOW//2OLtV1IiXiwQx8XcAc/cwkaazbqOQRBUcwHK62O2HusuQFv+X/rrAYpCJW5kPihf3jl9anABHn4MsGPgA2kSO45i3LqxiTu3ct54JvdYB/LbBwCA6WyKsxfO46zF259EMW5d38SdgrdfeUwD9vHaldH46RTnzl/AmQtnMZ1qcwfi/Pzvbt7ycgD6tJCuoaazKc6cv4DHzz+OyXRa7RPHEW68fR23b9xANI8glfQEE/2PPYEw3VjDuUuXcfbSBUwr3n4gWsTYvFqsX80FcOp37/chIkzX13D20mWcvXgBE239SlYpCVQugA/oHvCr0v+XVgNWM+1cCgfSmcUHAfBwg4BM/RMFaZbPBfjn/+GnVzIX4P+7FUIIqs4lyyT2dnbxX/3d1fD2//nNoOKl52r9Hfw3/9GnVrL+/3sV+foFDtM4nwvw21/4CBis8fa7zH1/FeDd3RivXr+HJ2Yz8/zTDDvb2/jqFz8CFOtzi3/Bnvt+ZzfCK1fv4rK2vrmPDnI3+H1lwsxlO7CDhEVpsYqi7oCrNORBB8YNAmA/+t+s8CWfVqrfHpVzASaTTpCUnPpKma2rFa/+6acRS0aqRaJFuDre/tMbTyHOuKYeL1J1K1t/eiXn7deq94IwxPV7cwSBwCJJGxyBAEMpRiYZqVIVb3+dHWHc3lng3uZtfP6jH8IiVYgzVWnNIAhw7d4eQkHYizNvfCeR9dqpVEYh0ub2Hu7fvo0vfPwFzFOFKGXzOeBcg0Nl3YU/3m5BWa+pPF2TcIwbGATAYYqDjve0uQCuIKKUsuLW' $Base64String &= 'bwsyVrz6j+VzAeoUVD5XbmW8/acJqTEXgBCI1c01GD9Z8/aXZi6JAPcXCZgVtqPUAH+cpVgkEnEqLf+cDULPaHcP0d42JgEQZ3p0n0BBgHvzGMyM7UVqWA9xmmKRZohS6ZkTmKMsmu8h3t3FOBBYpOwgT3UD3Z37dwsIIwbgyHa0tWoPAuAhx/4aBkBLWSB7tH0Sx0tTbPWtAj3Q3AGXxlnR+szuHik9XlCSd2wtYmSNHn5/M4/v/O0gX94aLLG9iA1N7wQ/mqzFZg9DWbsvQaruBTDAjw7w65+z3U2YfSUNATFYAIer8vXebGfxhgNBUkpEi8UDO82D8PYr2Aw73Ij6H3SugZNaWwt+JZnC3b1FZxDT1czTWJ+btQJxluHeXtTMJrAnPGjNDqj+afUAbv9fdvIB1kQinAcBNcvOJQwMITpkAQ5fAtgPUB+ShuSAvPp+bvo6cr//tdkApeLVrm+DUnGTaOP+InJq+F6dfOzX1uW2vYg7in/YW3fgFWBK5hOPWfZoAS67BdlkErKDgOzq/DvBKQAcAz6A6qG1SRuo0xMwAmUHFkFsPfSaT35g4k67NRerW99sAzbJTXLe/qzqFeii6WZrUZ2fRweQ/tkoTY1eB2aXCHSD37QENPr/IgaQ1/VLd9TfcAOarMGlxWASgnBj+EmD9nywAI5e5E8XBvYDmKXpgcHpr1pb3VwAX0HRyuYa2MQWXPL2S8PfB7AUbZcdHbdjBIs06+XvA+1NTs1/CqS5AW6tr08HYnN+QOk6wBaKzQBg2/0fBMCDxH5b+W3PO7FqXn2bK/6g6zcizQ9iffjLc6s8/b5ou9ykqTqFVlLNBeip9V33lq1AoEJezktlOa+EcyCIofUdFOIel4V9rscQBHz46r8rOt4W8PKlApcHkBtCK+PtZ/dDt5K5Bi1BukQqSMU4CHNPGZmvuxzrq5Vm5tyB/YC/0ZVHhcXHssoGmB1+5jxA96BQM/nvK33WLQBimyOQBgHw' $Base64String &= 'MMx/141pTAf2zHhbDa02ewG0CtZeQ7OBDT93Jevb5qx2zDRTODBtl+cfivV7g99r7VGzIajoBVB3f+IO/kE1B4fAAj+b48Eb/Qje3P8QAziUAICXmcURMl4lgJw+7goFTPlsqqZnvPK5Boapa8wF6EvTzQ2QNKwY7UYl1fn39/e911/BZCjWO/r6aH2wwx3gxjPTajnh5G1HPAvgpwU3hoN67syqNLT+s9AvqxMwulmpsdCuXIAp12gwuZS/723K8rgwefnwAcAPRzS+esNiAipreV0pP31KsNbe2xiJbsd8uDkWbCAEOUxjwBEpJ26au6udC6AH6TSq6BWtr6zcv6l1Vuf/O2MMzP1pup0BWHYWAlUCjNVywb4e96Bm69G5/bg5Hhy29mctK6Dtj2akv6l0uHV+wyAAHhTmOyJ/7JQPvNL4DOePWsMaeVCybdUNJ0Z8QQvYmde3v79vgN/WlA3QrAb8rjHx+XQfcygoO7W+JhjMPGijngENwJeCo2Ajri4aDQLgkA2AZlAJVlXdio+rlklH7MvCaE7ZWZ0IYyjPiIV+NN3+NJ4vXbZssK+3BaNPBqpqALgZ6CsEAFu+v31C7oIn0qw+OpHBv2MVBGRPUNDlqAux2rkAp4iKKbJFr5sQmKyQt38icjKg6vsIkZ//itYPBBmalITAdG0Dt7bn2Ly7lfP2d4DfvtCKGWkUQWm8/fXcBIHp2jo2t+a4dWcL8WK+PPgZSKNFPheAyPDLRRBgPJ1Abb2GnXs3sRWpptaHSeXVMFMA7ETAXoqcFdl4y6fdaWAFPsxgIHcEovJ7RAinEzw2eXxlcwHOCMprzosjhuMRzpw/uzLe/mcDKszM/PXRZIxHVzgX4AkLoKPJBGcvX8LXv/l13L9+HbE+F8AZA3ALY1YK0+m0oP3Wrs9kgscvX8I3vv51bN38/9u7mh/JjSr+K9v9NWE2aGfzuUm0IheQkhAJbkhcCQcCRyJx45Qb/0TEgSsXJHKP' $Base64String &= 'IoFAXCCQSJHQIsEGiUiwoCQbLbvKZmeWnZ6enu62XfUeB9vdtru+uieTHUf1k6zReNw1trve169evXcH2cl275+JMRwNMEhWCkwIgWQwwGhvDzff+xQfHkhMFvXN/NTM2KqvrbQ3iBEQD4FhEjX6JjTCDi0JWGefgwI4Yw6gdF3Zni5bPxHHMfpRgv3BM7j8jSu4EkWefsb6GUmMSUqQaiWgcRxj0E9wu38Zj7z4DJ6q1e3XjWUypFyOX9XVX3YGimM81E/wUe8yvvz803jUUVffllsvCThaKGRqdS7uJRgNenjle9/B3k6Cvq1uOtvLpmaKcbhQyKsqOlS8n9EwwSs/eAmP7MQYxJExrre+J1GMf3+uIGsWOopj9AaX8Nfv3sSjOzEeT6L1ETz7G2SK8b+5Qq7sYeN6l+LAATxwDsD0hQkGcgamOSFVBCGi+pzyTuwo2PmiUk9OzRbasmzosZCMSLgbX7QLX6x4BUKmuBBQrqJPQCngOFNYSEJbf61V7zFsJOLSymVyNX4FycA4Jcxl3hyf7fff8Mi4aDySKi6qAdUq6kgCxovi/oUQVmm0LcMpLkqXL3JqrPrkinC4YMxyVYQ4bC/jriOXi/fDWOSMVJo3+jLQ3g0UQoDPzwPAskqvLlmDDdcLYsyoqPdfNX8QGtLQOkk0vyyJQMWQCphpzJitNHZzw8x6++slCUi8rEKkM25sOqdp8qlrdFmNf5LZS3IvlSHazCSbnxEAyaJZyDSFM7xwhXVrLBAX+T+ZYhzDXoLcZiis33ljuXH1Dr5oacCdIAFtvRm1CoGreLHVZb49yYRd2E3/ix0Cb56EbAxh1oTaIRBsEybT/bBe2F1CUxXNsVpH1/MbHlqfg89OD8TkFZoE3uod6OaQMIdzhC8WOhACiJXbZvUAdNarmUcuNohB15YT2T65mxaN7YoDzTZbWsEzCA9pvQLWKiZd0o5WUeiEhtytyEzW19gZSaO42DN2tykqH97FXErd' $Base64String &= 'EfdzGXdUS4rLcJDATNOuBwXnWgEQEVD1xzMJvG2SCX0FIV0HIVP+ALPPJGSPtl2GcyZlwh5WHaslu02su6/A6N9v0wVmWxvxLa0720JCF3+wCdGonTerVQTiWlcgBoTgogoxemV7cZp6DB8UwJZQxIiFKIg2ETGg2GOS1eTfMtltvfNsXkEzdreQZuwRn7YtH3tYVoMnxJpFO10mpbXrD/kIlnCGH1qWYEvrbruWT2Hd2x80Xiu4mEei6hNQ1hEgCVJqH341XYMC2ALTRZ49zERFsomIimaQ8IzdhdB/sR4ubNu6O13+tnVnl3VnY3yuu1/SSIbWG2D3c61SaS2Cxf7cyBoJ6SPsvH3s7sN/OK27kxfgJVnKqlAAIIBkBqKyhZvMkWeLG/AvHB0UwIYE4CJN5cOCCEncQz9SmAsBxaxvBro2QRgsAMHCz+W1CLvNLXbGvLosO5O3sYErT7wZQVhvfOEjLGx10dkZVnh5aex5rbN78CmEXeM2Lesn1uL9SACczaHKD6k8xeJk8i/UFwg6qATOqwJgAJ+Oj+ePKZlh2O9jJ4kwywlUpuWSbscfmzsEuwTel702xe7sYPB1KxL6KrSWFQK2ufK1zUoEY7trH+9pXYmw+1q0l8jY7cp7KFIfok7nGXkJO8xdmaksAxShaEIcAeDsBFlZ4kCmM/z33++9i9UO8aAAPlMNwHz9k/37Xz+6P8ZTu1/ChWFcrF3nBEkCxAxSDBZivUloXQMI/WxjjYbgDYg6rTAYwwsu9xO0VIIu/c1G1LE99l3OwMiiLNjl4bTOUn1DjItPcOfLa5cleUuirnEPYiuB51oDynqthISKzcJCAJEQSJTE7N5tpNSHzOdIZ8d/u/H+1dsAVJeVwLlVAKTU28dHkx/+8+O7uPzkJez2RqBhjF4UIVOEnBgqKph5LkkEAAAC3UlEQVRaAU2cLNp1w91thMjTetjcY3NM3/YAhJXAIoNwmMk2sS4f7LM+35Y+4RWP' $Base64String &= 's1NYHe+bT0PUCbvCcIxNayFRmdlYhQAswBGDo6jIOpIENb6DacYgkSCd7uP+3VtvApDloYIH8Bnj6N6d3yX9Aa795w52d0b41otXsCti9HoCWSKQUlR4AeSo1S5qGYKbWJoN6hDAFY87yDF7CqonKWaZ/GxhQDeZtZtlw7IXRwFPknYjgtDD82CUc6dc2lflvhMigmKGmmeQ2QxqPoWc7OPg7hgnaoT0ZIzJvU9+dfW3v/w9gLymAFQXFYA4x/cVv/zqaz8bXdj7yfDCJTx+cQfPf+UJPHbxIYwGPQx7ESQxFHFr+yp7TQj3Bbz5R7Bd4Ti2xRfbjeStzOyjbZv/zqd47lOMy82ipg2LX1URoqLzMXMxd5QiKCJISchVjlwqSKUwnaWYzjNMTjIczhg5RcgXU8zH+/jHu7956cb7Vz8GcAJgDmABIEOzYlxQAKe8rwhA7+VXX/v56MLej4e7eyu3PiDg8+SjiJBODzE5uPXHg9sfvnHtrTeuApi1hF/WeIDOID7vyung1gfvPHHlaxdlNvsmqKoDV2wLDQg4K6g8hcrmyE6OMJ8cYLx/6/U///oXP715/dpHpdCn5VGFAZ3kAMQ5v7eo5Cn6L3z7+08/+exzP0p6/ReiOHk2TnpfDdM04Kwg8/S6zNIPjg8P/vL3P735h9nx4bwU9qwl/Dk6TAKedwVQVwI9AP3yZ688F5d/Fx14noAOef01+qA6ZE3g85rlpy66/uiIwNSVQFwKfSX4lfBHQfADzlARVAKu0GT8VdeFvysWU2gUQV3wo2D9A85I+OtHXRF0Ov23awoALRffdAQEnLUS0FVBR1AAD+Z+RcefJaAbPED7dw6vJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOAB4/+YQf1dG9737gAAAABJRU5ErkJggigAAAAYAAAAMAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' $Base64String &= 'AAAAAAAAAADBllKNvpNQ9ruPTv+3jEz/tIhK/7CESf+sgEf/qH1G/6V5Rf+idkT/oHRD/55yQv+eckL/nnJC/55yQv+eckL/nnJC855yQooAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDmFP27MmP/+zJjv/sx4r/7ciM/+3Jj//typD/7cyS/+3Mlf/tzZj/7c2a/+7Qnv/u0aD/79Kj/+7Tpv/v06f/7NCg/6qAT/UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADEmVT/8dmw/+nEif/ltWv/5bdu/+a4cf/muXT/5bp4/+a8ev/mvn7/6cSL/+7Qof/u06T/7c+e/+7Uqf/v1qv/7dOp/62DU/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHm1b/8diw/+Xi4P/a0Mj/5Lhz/+Xi4P/a0Mj/5Lx9/+Xi4P/a0Mj/7M+h/8OfZf+zkFr/89++/xGa8/8AkvH/7dSq/6yDU/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADInFf/8dmy//f3+P/t7e//5Lp6//f3+P/t7e//5L2D//f3+P/t7e//69Gm/86scf/Nqm3/8+PI/yil9f8RmvP/7NSq/6yCU/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJnVj/8du2/+nLmP/ku33/5L2B/+S+hP/kwIf/5MGK/+TCjf/mxJD/6s+k//Phx//z48n/8uDC/0Gw9/8opfX/7NSr/6uCUv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADKn1r/8d27/+Xi4P/a0Mj/5cGI/+Xi4P/a0Mj/5cSR/+Xi4P/a0Mj/69St/8KfZf+zkFr/8+PJ/1K4+f9BsPf/7NSr/6qBUv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADLoFv/8+DB//f3+P/t7e//58WS//f3+P/t7e//58mZ//f3+P/t7e//7NWw/86scf/Nqm3/8uHD/1K4+f9SuPn/69Sr/6qB' $Base64String &= 'Uv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADLoV3/9eXM//LfwP/v1rD/7dSr/+7Xsv/u17L/7NSr/+zWsv/t17L/7te0//Pky//z5Mz/79u6//HgxP/w4MP/69Os/6mAUf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMol//+OvY/8OfZf+zj1r/9ebO/8KfZf+zj1r/9OXN/8KfZf+zkFr/9OXN/8OgZv+zkFr/8+TM/8OgZv+zkFr/6tOt/6l/Uf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADNo2D/+u7c/8+tcv/Nqm3/9+nT/8+tcv/Nqm3/9ujR/8+tcv/Nqm3/9ebQ/8+tcv/Nqm3/8+XN/8+tcv/Nqm3/6tSt/6h+UP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADOpWL/+ezZ//fp1P/04sX/89++//ThxP/z4cL/8d28//LfwP/x3r7/79q3/+/dvP/v27r/7Ney/+3Zt//s17b/6tSt/6mAUP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADPpmT/+e7c//bp0v/25Mn/9eXJ//Xkyf/048j/8+HF//Pgw//y38H/8d7A//Devv/v3L3/7tu6/+3YuP/q1K//69ax/6mAT/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADPp2X/+vDh/8+2kP+/o3X/vqJ0/72hc/+8oHL/u59x/7qfcP+6nnD/up5w/7qecP+6nnD/up5w/7qecP/JsIj/7du7/6uBUP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQqGf/+vLl/8Gmd//x6+H/8+7l//Pu5f/z7uX/8+3l//Pt5f/y7eT/8u3l//Pv5v/07+f/8+/m//Dq4f+6nnD/7t7C/6yCUP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRqWn/+vLm/8Ooef/07+b//PLn//vv4P/669n/+efS//jkzP/34MT/9+DC/8uoif+ofFn/' $Base64String &= 'y6WF//Pu5v+6nnD/79/E/62DT/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRqmr/+vLn/8Wqe//07+b//fXt//zy5//77+D/+uvZ//nn0v/45Mz/+OTN/7GJaP/45tD/to5s//Tv5/+6nnD/79/F/66ET/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSq2z/+vPo/8isff/18On//fn0//317v/88uf/++/g//rr2f/559L/+efT/7CIaP/459P/tIxq//Tv5/+6nnD/7+DI/6+FT/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSq23/+vPo/8quf//28ej//vv4//359P/99u///PPq//vw4v/67Nr/+enW/9CymP+pf17/z6+R//Tu5/+7n3H/7+HJ/7GGT/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTrG//+vPo/8ywgf/18ej///38//77+P/9+fX//vfw//317P/88+f//PDj//ru3//77N3/+unX//by7P+9oXP/8OLK/7OIT/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTrXD/+fLp/82ygv9Isvz/R7L9/0y0/f9Stv3/Wbn9/1+8/v9mv/7/bMH+/3DD/v9zxP7/dcX+/3fH/f++o3T/8OPN/7WKT/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUrnH/+PHn/9nDnf/Os4P/zbKC/8yxgf/LsID/yq5//8mtfv/IrH3/x6t8/8Spev/DqHn/wqd4/8Gmd//Ot4//8OLK/7eMT/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUrnLz9/Dj//fw5P/38OT/+PHn//nz6P/68+z//Pbv//z37//89u///Pbu//r17P/68+j/+fHl//fu4P/06tj/7t7F/7mNT9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUr3SK2LR89di2gP/XtX7/17N7/9eyef/WsXb/1LBz/9Ou' $Base64String &= 'cv/SrG7/0aps/8+naf/NpWf/y6Rl/8qiY//FnmD/wJZW3bmOTXIAAAAAAAAAAAAAAADgAAcA4AAHAOAABwDgAAcA4AAHAOAABwDgAAcA4AAHAOAABwDgAAcA4AAHAOAABwDgAAcA4AAHAOAABwDgAAcA4AAHAOAABwDgAAcA4AAHAOAABwDgAAcA4AAHAOAABwAoAAAAEAAAACAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDmFOHv5RQ8LqPTv+1iUv/r4NJ/6p+R/+leUX/oXVD/55yQv+eckL/nnJC8J5yQocAAAAAAAAAAAAAAAAAAAAAxZpV8PXiwP/kwo//5MGO/+TDkf/kxJT/5ceY/+XInP/mzaX/9OHC//Xn0P+eckLwAAAAAAAAAAAAAAAAAAAAAMicV//037v/4LZ3/+vr7f/ftHP/6+vt/9+5f//r6+3/5Mie/wGS8P/26NH/nnJC/wAAAAAAAAAAAAAAAAAAAADJnln/9eG//+G7g//ftnr/4LmA/+G8hv/hvoz/4cGR/+bNqf8AkvH/9unV/55yQv8AAAAAAAAAAAAAAAAAAAAAy6Bb//Xkx//kwY//6+vt/+LAjv/r6+3/4sKU/+vr7f/kzKb/AZLw//Xo0v+eckL/AAAAAAAAAAAAAAAAAAAAAMyiXv/46tP/6dCq/+jNpf/ozqb/586n/+fOqP/nzqj/58+t//DdvP/y48v/nnJC/wAAAAAAAAAAAAAAAAAAAADNo2D/+e/d/82pbP/048X/zals//TjyP/NqWz/8uLI/82pbP/v27n/8eHJ/6B0Q/8AAAAAAAAAAAAAAAAAAAAAzqVj//nv4P/25cr/9ODB//Pgwf/y4MD/8d+///Hev//w3b3/7dm2//Hiyv+idkT/AAAAAAAAAAAAAAAAAAAAAM+nZf/m0Kr/5Mmc/+LFl//ixZb/4cOV/+DDlP/gwZL/38CR/97AkP/hyJ7/' $Base64String &= 'pXlF/wAAAAAAAAAAAAAAAAAAAADQqGf/5tCs//z48//9+vT//fr0//359P/8+fP//Pnz//z48v/89/H/4cmf/6d8Rv8AAAAAAAAAAAAAAAAAAAAA0alq/+bQrP/9+vX//fbv//vw4//66tf/+OPK//bdvf/117L//Pjy/+HKoP+rf0f/AAAAAAAAAAAAAAAAAAAAANKrbP/m0a3//fr2//769f/89Ov/++7f//nn0v/34cX/9tu5//z48//iyqH/roJI/wAAAAAAAAAAAAAAAAAAAADSrG7/5tGu//369f/+/fv//fjy//zy5//67Nv/+OXO//ffwf/8+fT/4sqj/7GGSv8AAAAAAAAAAAAAAAAAAAAA061w/+XRr/9Jsvz/O639/zut/f87rf3/O639/zut/f87rf3/QK/9/+PMpf+1iUv/AAAAAAAAAAAAAAAAAAAAANSucvD17uL/8+rZ//Pq2//37eD/+PDj//jv4v/37d//9eva//Lo1f/y6Nb/uI1N4QAAAAAAAAAAAAAAAAAAAADUr3OH061x8NKsbv/Rqmr/0Kdm/86lYv/Mol7/yp9b/8icV//EmVT/wJVR4byQTngAAAAAAAAAAMADAADAAwAAwAMAAMADAADAAwAAwAMAAMADAADAAwAAwAMAAMADAADAAwAAwAMAAMADAADAAwAAwAMAAMADAAA=' Local $bString = _WinAPI_Base64Decode($Base64String) If @error Then Return SetError(1, 0, 0) $bString = Binary($bString) If $bSaveBinary Then Local Const $hFile = FileOpen($sSavePath & "\calc.ico", 18) If @error Then Return SetError(2, 0, $bString) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_Calc_ico 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 #EndRegion embedded icon let me know if it worked flawlessly or not.2 points -
Get All Window's Controls
vergil250493 reacted to jdelaney for a topic
I've wanted to post this for a while. It's a great script to help debug control data....perfect scenario, when you have a 'Button' grouping, and spy tools cannot focus on those controls within the button bounds (groups). I also use it to verify that a given ID is not present more than once...if not, that's how I identify the control in future scripts. Output can be filtered by: 1) Filter by IsVisible 2) Filter by matching class (ex Button, Label, Static) 3) Filter by containing text #include <Array.au3> #include <WinAPI.au3> ConsoleWrite("Make your window active!" & @CRLF) Sleep(5000) GetAllWindowsControls(WinGetHandle("[ACTIVE]")) Func GetAllWindowsControls($hCallersWindow, $bOnlyVisible=Default, $sStringIncludes=Default, $sClass=Default) If Not IsHWnd($hCallersWindow) Then ConsoleWrite("$hCallersWindow must be a handle...provided=[" & $hCallersWindow & "]" & @CRLF) Return False EndIf ; Get all list of controls If $bOnlyVisible = Default Then $bOnlyVisible = False If $sStringIncludes = Default Then $sStringIncludes = "" If $sClass = Default Then $sClass = "" $sClassList = WinGetClassList($hCallersWindow) ; Create array $aClassList = StringSplit($sClassList, @CRLF, 2) ; Sort array _ArraySort($aClassList) _ArrayDelete($aClassList, 0) ; Loop $iCurrentClass = "" $iCurrentCount = 1 $iTotalCounter = 1 If StringLen($sClass)>0 Then For $i = UBound($aClassList)-1 To 0 Step - 1 If $aClassList[$i]<>$sClass Then _ArrayDelete($aClassList,$i) EndIf Next EndIf For $i = 0 To UBound($aClassList) - 1 If $aClassList[$i] = $iCurrentClass Then $iCurrentCount += 1 Else $iCurrentClass = $aClassList[$i] $iCurrentCount = 1 EndIf $hControl = ControlGetHandle($hCallersWindow, "", "[CLASSNN:" & $iCurrentClass & $iCurrentCount & "]") $text = StringRegExpReplace(ControlGetText($hCallersWindow, "", $hControl), "[\n\r]", "{@CRLF}") $aPos = ControlGetPos($hCallersWindow, "", $hControl) $sControlID = _WinAPI_GetDlgCtrlID($hControl) $bIsVisible = ControlCommand($hCallersWindow, "", $hControl, "IsVisible") If $bOnlyVisible And Not $bIsVisible Then $iTotalCounter += 1 ContinueLoop EndIf If StringLen($sStringIncludes) > 0 Then If Not StringInStr($text, $sStringIncludes) Then $iTotalCounter += 1 ContinueLoop EndIf EndIf If IsArray($aPos) Then ConsoleWrite("Func=[GetAllWindowsControls]: ControlCounter=[" & StringFormat("%3s", $iTotalCounter) & "] ControlID=[" & StringFormat("%5s", $sControlID) & "] Handle=[" & StringFormat("%10s", $hControl) & "] ClassNN=[" & StringFormat("%19s", $iCurrentClass & $iCurrentCount) & "] XPos=[" & StringFormat("%4s", $aPos[0]) & "] YPos=[" & StringFormat("%4s", $aPos[1]) & "] Width=[" & StringFormat("%4s", $aPos[2]) & "] Height=[" & StringFormat("%4s", $aPos[3]) & "] IsVisible=[" & $bIsVisible & "] Text=[" & $text & "]." & @CRLF) Else ConsoleWrite("Func=[GetAllWindowsControls]: ControlCounter=[" & StringFormat("%3s", $iTotalCounter) & "] ControlID=[" & StringFormat("%5s", $sControlID) & "] Handle=[" & StringFormat("%10s", $hControl) & "] ClassNN=[" & StringFormat("%19s", $iCurrentClass & $iCurrentCount) & "] XPos=[winclosed] YPos=[winclosed] Width=[winclosed] Height=[winclosed] Text=[" & $text & "]." & @CRLF) EndIf If Not WinExists($hCallersWindow) Then ExitLoop $iTotalCounter += 1 Next EndFunc ;==>GetAllWindowsControls1 point -
Using NumLock as a hotkey
argumentum reacted to matthiew for a topic
YES!!!! That is brilliant! Thank you so much 😁1 point -
GDI - Interactive Fader and Knob controls
argumentum reacted to ptrex for a topic
1 point -
Hi MattyD, Love the approach, you've traded memory for low CPU making it smooth. One note! I believe you may have a memory leak, you need to release the old bitmap object when you replace it with sendmessage(). Something like: Local $vRet = _SendMessage($hWnd, $STM_SETIMAGE, $IMAGE_BITMAP, $aBmps[$iValue]) If $vRet Then _WinAPI_DeleteObject($vRet) Many thanks for sharing 👍1 point
-
WinAPI Hidden Func
argumentum reacted to LKP for a topic
Well, I hoped it is not the reason. 😕 Still hope some genius could provide a way to apply this win 98 style on any other AutoIt window & switch it back. If backward compatibility exists there has to be a way to use it. If none does that, or helps me with SendMessage within a week, I will mark your reply as a solution. P.s. Feels strange to know someone uses XP today, it was great, but it was so long ago. Everyone laughed at me when I bought win 7 CD to have operational OS, if Vista2 happens, but today none of computers around me even have a CD-Drive. P.p.s. Your About me looks perfect😉1 point -
A smoother MouseMove
hudsonhock reacted to the DtTvB for a topic
Hi. I just made this code, this code moves the mouse more smoothly. It smoothly starts, and smoothly ends. This function also do some random curves, but it is still smooth! The ease in function. Slowly increases the value, used in animations. $i = number between 0 and 1 representing the animation position. $sm = smoothness, if set to 1, it will be a linear animation. ; Ease in function func __calci1($i, $sm) return $i ^ $sm; endFuncoÝ÷ Ù´áyæ¬z)èº×îËb¢ÛRȧØ^y«v§uæ¬z¶+y«^j÷«Êɨ¢ØZ)¶*'h!¶Úþ-uÚh¶îrGr¿jVîÏç׿?éeéàýæ¬z)èºØ"ø¦«¢+ØìÍ¥¸½ÕÐչѥ½¸)Õ¹}}±¤ ÀÌØí¤°ÀÌØíÍ´¤(%¥ ÀÌØí¤±ÐìÀ¸Ô¤Ñ¡¸($%ÉÑÕɸ}}±¤Ä ÀÌØí¤¨È°ÀÌØíÍ´¤¼Èì(%±Í($%ÉÑÕɸ¡}}±¤È ÀÌØí¤´À¸Ô¤¨È°ÀÌØíÍ´¤¼È¤¬À¸Ôì(%¹%)¹Õ¹oÝ÷ Ù´áyæ¬y¶«uû§rبöâmÊ%¢º+yÛ)j{-ÊWoÝ÷ Ù´ázf¢û§rبöÓ+ºw-ÚrÛ¦¢÷¬¶¦¢ëN«yªÞ· )j¶¦z׫²Ø^µªàzÜi¢ÈÚÛazÖ«ër¦"¶*'jëh×6; MAIN FUNCTION func mouseMove2($x2, $y2) $x1 = mouseGetPos(0); $y1 = mouseGetPos(1); $xv = random(-100, 100); $yv = random(-100, 100); $sm = random(1.5, 2.5); $m = random(50, 160); for $i = 0 to $m $ci = __calci($i / $m, $sm); $co = __calof($i / $m, $sm); $cx = $x1 + (($x2 - $x1) * $ci) + ($xv * $co); $cy = $y1 + (($y2 - $y1) * $ci) + ($yv * $co); mouseMove ($cx, $cy, 0); next endFuncoÝ÷ Ùµ,x-ë®*mý¶®¶sc²FW7B67&@¦Ö÷W6TÖ÷fS"S"Â3boÝ÷ Ø Ý~)Ú¡z·¢²Ø^~éer^¡øjëh×6; Smoother Mouse Move ; by the DtTvB ; Ease in function func __calci1($i, $sm) return $i ^ $sm; endFunc ; Ease out function func __calci2($i, $sm) return 1 - ((1 - $i) ^ $sm); endFunc ; Ease in out function func __calci($i, $sm) if ($i < 0.5) then return __calci1($i * 2, $sm) / 2; else return (__calci2(($i - 0.5) * 2, $sm) / 2) + 0.5; endIf endFunc ; Ease backward function func __calof($i, $sm) if ($i < 0.5) then return __calci($i * 2, $sm); else return __calci((1 - $i) * 2, $sm); endIf endfunc ; MAIN FUNCTION func mouseMove2($x2, $y2) $x1 = mouseGetPos(0); $y1 = mouseGetPos(1); $xv = random(-100, 100); $yv = random(-100, 100); $sm = random(1.5, 2.5); $m = random(50, 160); for $i = 0 to $m $ci = __calci($i / $m, $sm); $co = __calof($i / $m, $sm); $cx = $x1 + (($x2 - $x1) * $ci) + ($xv * $co); $cy = $y1 + (($y2 - $y1) * $ci) + ($yv * $co); mouseMove ($cx, $cy, 0); next endFunc ; Test Script mouseMove2 (512, 386); Tell me what you think about it!1 point -
File Delete Line
faldo reacted to NeuroToxic for a topic
Func _Delete_Line_In_File($fileName, $lineNum) Local $len = FileGetSize($fileName) Local $txt = FileRead($fileName, $len) If @error = 1 Then Return 0 Local $pos1 = StringInStr($txt, @lf, 0, $lineNum - 1) Local $pos2 = StringInStr($txt, @lf, 0, $lineNum) If $pos1 > 0 Or $pos2 > 0 Then If $pos2 = 0 Then $pos2 = $len FileDelete($fileName) FileWrite($fileName, StringMid($txt, 1, $pos1) & StringMid($txt, $pos2 + 1)) Return 1 EndIf Return 0 EndFunc ;==> _Delete_Line_In_File()1 point