Mbee Posted July 17, 2016 Share Posted July 17, 2016 If I compile my app in 64-bit mode, I keep getting @error = 3 -- "unable to create bitmap from stream" -- when I call _GDIPlus_BitmapCreateFromMemory(). It works fine in 32-bit mode. The following code will reproduce the problem (sorry for the extremely long line width): expandcollapse popup#AutoIt3Wrapper_UseX64=Y #include <ButtonConstants.au3> #include <GDIPlus.au3> #include <GDIPlusConstants.au3> #include <GuiButton.au3> #include <GUIConstants.au3> #include <MsgBoxConstants.au3> #include <StaticConstants.au3> #include <WinAPI.au3> Local $L_GuiWinHdl, $L_CtrlID, $L_BinImg $L_GuiWinHdl = GUICreate("Test", 400, 400 ) $L_CtrlID = GUICtrlCreatePic("", -1, -1, 200, 200 ) GUISetState() _GDIPlus_Startup() Local $L_BinImg = _My_LoadOpenBtnPicBin() _Set_Control_From_Binary( $L_CtrlID, $L_BinImg ) MsgBox($MB_OK, "Test", "@error = " & @error ) GUIDelete( $L_GuiWinHdl ) _GDIPlus_Shutdown() Exit ; ;= = = = ; ; Func _Set_Control_From_Binary( $arg_ControlID, ByRef $arg_BinaryImage ) ; ; By UEZ, Prog@ndy, and Zedna, etc ; Local $Lf_BitmapHdl, $Lf_HbitmapHdl, $Lf_Error = 0, $Lf_Extended = 0 If @OSBuild < 6000 Then $Lf_BitmapHdl = _GDIPlus_BitmapCreateFromMemory( $arg_BinaryImage ) $Lf_Error = @error $Lf_Extended = @extended If $Lf_Error <> 0 Then SetError( $Lf_Error, $Lf_Extended ) Return EndIf $Lf_HbitmapHdl = _ConvertBitmapToHbitmap( $Lf_BitmapHdl ) $Lf_Error = @error $Lf_Extended = @extended _GDIPlus_BitmapDispose( $Lf_BitmapHdl ) Else $Lf_HbitmapHdl = _GDIPlus_BitmapCreateFromMemory( $arg_BinaryImage, True ) $Lf_Error = @error $Lf_Extended = @extended If $Lf_Error <> 0 Then SetError( $Lf_Error, $Lf_Extended ) Return EndIf EndIf _WinAPI_DeleteObject( GUICtrlSendMsg( $arg_ControlID, $STM_SETIMAGE, $IMAGE_BITMAP, $Lf_HbitmapHdl ) ) SetError( $Lf_Error, $Lf_Extended ) Return $Lf_Error EndFunc ;==> _Set_Control_From_Binary ; ;= = = = ; Func _ConvertBitmapToHbitmap($hBitmap) Local $Lf_Error = 0 Local $iButtonColor = _WinAPI_GetSysColor($COLOR_BTNFACE) $iButtonColor = 0x10000 * BitAND($iButtonColor, 0xFF) + BitAND($iButtonColor, 0x00FF00) + BitShift($iButtonColor, 16) Local $iWidth = _GDIPlus_ImageGetWidth($hBitmap), $iHeight = _GDIPlus_ImageGetHeight($hBitmap) Local $hBitmap_New = _GDIPlus_BitmapCreateFromMemory($iWidth, $iHeight) Local $hCtx_new = _GDIPlus_ImageGetGraphicsContext($hBitmap_New) Local $hBrush = _GDIPlus_BrushCreateSolid(0xFF000000 + $iButtonColor) _GDIPlus_GraphicsFillRect($hCtx_new, 0, 0, $iWidth, $iHeight, $hBrush) _GDIPlus_GraphicsDrawImageRect($hCtx_new, $hBitmap, 0, 0, $iWidth, $iHeight) Local $hHBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap_New) $Lf_Error = @error _GDIPlus_BrushDispose($hBrush) _GDIPlus_BitmapDispose($hBitmap_New) _GDIPlus_GraphicsDispose($hCtx_new) SetError( $Lf_Error ) Return $hHBitmap EndFunc ;==>_ConvertBitmapToHbitmap ; ;= = = = ; Func _My_LoadOpenBtnPicBin () ; Code Generated by BinaryToAu3Kompressor. Local $sFileBin = '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' $sFileBin &= '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' $sFileBin = Binary ( _Base64Decode ( $sFileBin ) ) $sFileBin = Binary ( _LZMADec ( $sFileBin ) ) Return $sFileBin EndFunc ;==> _My_LoadOpenBtnPicBin() ; ;= = = = ; Func _Base64Decode($input_string) ; by trancexx Local $struct = DllStructCreate('int') Local $a_Call = DllCall('Crypt32.dll', 'int', 'CryptStringToBinary', 'str', $input_string, 'int', 0, 'int', 1, 'ptr', 0, 'ptr', DllStructGetPtr($struct, 1), 'ptr', 0, 'ptr', 0) If @error Or Not $a_Call[0] Then Return SetError(1, 0, '') Local $a = DllStructCreate('byte[' & DllStructGetData($struct, 1) & ']') $a_Call = DllCall('Crypt32.dll', 'int', 'CryptStringToBinary', 'str', $input_string, 'int', 0, 'int', 1, 'ptr', DllStructGetPtr($a), 'ptr', DllStructGetPtr($struct, 1), 'ptr', 0, 'ptr', 0) If @error Or Not $a_Call[0] Then Return SetError(2, 0, '') Return DllStructGetData($a, 1) EndFunc ;==>_Base64Decode ; ;= = = = ; Func _LzntDecompress($bBinary) ; by trancexx $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 _LzmaDec ( $Source ) ; by Ward Local $__LZMADLL = @TempDir & '\LZMA.DLL' If Not FileExists ( $__LZMADLL ) Then Lzmadll ( 'LZMA.DLL', @TempDir ) If @error Then Return SetError ( 1, 0, $Source ) If BinaryLen ( $Source ) < 9 Then Return SetError ( 2, 0, $Source ) Local $Src = DllStructCreate ( 'byte[' & BinaryLen ( $Source ) & ']' ), $Ret DllStructSetData ( $Src, 1, $Source ) $Ret = DllCall ( $__LZMADLL, 'uint:cdecl', 'LzmaDecGetSize', 'ptr', DllStructGetPtr ( $Src ) ) If @Error Then Return SetError ( 3, 0, $Source ) Local $DestSize = $Ret[0] If $DestSize = 0 Then Return SetError ( 4, 0, $Source ) Local $Dest = DllStructCreate ( 'byte[' & $DestSize & ']' ) $Ret = DllCall ( $__LZMADLL, 'int:cdecl', 'LzmaDec', 'ptr', DllStructGetPtr ( $Dest ), 'uint*', $DestSize, 'ptr', DllStructGetPtr ( $Src ), 'uint', BinaryLen ( $Source ) ) If Not @Error Then Return SetExtended ( $Ret[0], DllStructGetData ( $Dest, 1 ) ) Else Return SetError ( 5, 0, $Source ) EndIf EndFunc ;==> _LzmaDec() ; ;= = = = ; Func Lzmadll ( $sFileName, $sOutputDirPath, $iOverWrite=0 ) Local $sFileBin = '0x4D5A90000300000004000000FFFF0000B800000000000000400000000000000000000000000000000000000000000000000000000000000000000000D00000000E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F742062652072756E20696E20444F53206D6F64652E0D0D0A2400000000000000A343B8DAE722D689E722D689E722D689643ED889E622D689883DD289E522D689E722D789F422D689693DC289E622D689E722D689EF22D689693DC589E322D68952696368E722D6890000000000000000504500004C010300448DAF4B0000000000000000E0000E210B01050C00600000001000000080000090E100000090000000F000000000001000100000000200000400000000000000040000000000000000000100001000000000000002000000000010000010000000001000001000000000000010000000C8F000007000000000F00000C800000000000000000000000000000000000000000000000000000038F100000C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000555058300000000000800000001000000000000000040000000000000000000000000000800000E0555058310000000000600000009000000054000000040000000000000000000000000000400000E055505832000000000010000000F000000002000000580000000000000000000000000000400000C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000332E303300555058210D090208106E62B27EE4412138C300008351000000A4000026030030FFFF77FFC800010053B28CB9060088C82C01516A0859D0E8730230D0E2F85988FFFFFFFF840DFFFEFFFFE2E68B5D088B4D0C8A451085DB7413E3118A1330C20FB6D23284FFFFFFDB15001DFF43E2EF5BC9C20C005589E5FF750CE80300974283C4045DC3FDEDC8650F48C81062536A058F45F8DDFEFFBF4E0C833B0A73088323006A0758EB5A832B0AC745F01D004BDBDB6DB306F45B8D0D50503C1C6A0009F8EDCBB275080802181410538B4536DB7FFFEEC00A505647FC8945FC83030A9C45148943052D6A6BDB76F70953E82A92884309722C15FC9876FD9C6C65145DECF0836D14DD6EFFBF344D108B550C8B0239410573058B04890269EC509EEDB6BB03F45045055108145069105273FF67E77E6D670CC424837DF4027505B659F2CC7D5D5FC9E553817BAEFE777BDBCA381F8B8DEB0F686B016EFFFDFFC2CD3C31C05B02435243204572726F720D0A00CCAE61738F0055B80192435D4090008CBDBB734EE1C7000515C74024000604C9C9D69D2CD9FF06201CC9C9C9C91814100C0FDFDEC908283E7C908D7426A4567F2F2C6CAF55311ACA0F88EE7B1A8B423DF6EEFF0485C0752583FB050F8F8C118D4C1B0E96D3E089B2BD5FBB1A8DB43514BC27062B08E7F97CB73815010A0CFE0010963FCB9FE7721485F6CB4A1885C9A9ED32F67D5A1C6F8E2B207867746DFBB79B240ED1F9178D41107502D1F86B241B1582B59B2C2B5B5EAD7636E81EBABF96060F95C048250CFE150493E977EB885D54022CCF90096FB8021880B50905754B433FDE601FDAC76D3DEB900FBB426B7763EF3E01FE8DB65FDBAD95C3899F536BFF72F66E906F9F83E0E08D484089C217D76E98ED631404F3F089DE100AE57BDB585710730B4DBBC22097C10B420803376F1BDF7F23A4E583EC3C8975F8B9248B4B8985EEDFF87DFC8D7DC860C8F3A5890424E88AECF125CC2EB7CC18F88B89ECB86FB7FB6EEF55BA664357BFDB563F53BB110D0BFFEDC606024601019089D989F84349A9C1C2DBFF6FBAEB0690881C32404239C872F743B2157EE109F962C7DC5F51E98DBF4F8E18BDF1B799897310895DF48B460F1F39D87BBBD02EF589C30A5F5C241A44240495DBE51D6F0CA0BF60295E08015E1A1F6B7C97B98B2DAA764F575052351ECE7D1CBB4848A73A5CC1F76F6FBF210881C280C33C05102C0489142481C718BD0877AF8B39575125B9312A894C2492452E772BC80B04587425B9BBBF93B000528248191B870897C9EDEFB680CF8FF042C1E3058D343B0190A37DB7B74EB583AC25288D930589CCDBB22C4BB789410508080C0CCBB22CCB101014141818BFB6B92D1C2F8C27411C3E088D8E17027BDDE401CD8605413BDBE9B75AFFAD1D' $sFileBin &= 'F00B0F8E67760C03427BF709F08D9F640981C60C2906AF77EBBBDB74DAB8801883EE80891C4DEB80EC7B6BFD4808FF4DF079E0972F97640538C8C8F7B7812C918784010B3088C8C8C8C8348C3890C8C8C8C83C944098C8C8C8C8449C48A0C8C8C8C84CA450A8C8C8C8C854AC58B0C8C8C8C85CB460B8C8C8C8C864BC68C0C8C8C8C86CC470C8C8C8C8C874CC78D0C8C8C8C87CD480D8C3C8C8C884DC88E09C384EC7F8C8050C2B2DB9E42144EF4663605CCF31F02B2C1919D9CA48060BF44CF81C19191950FC54002C323232F258045C0839323232600C643819C8C8C8F3F8963CFC40979F91E7009744048AA0BCB8009D8E3F743AD3E68B91A825ED1C913608B2BA54291CB373226958AF5F102CD353026480C35A05649E4E03A45F5665892A7D84745F0301FB179636687056DC14531486454A81F40B5F50BD91DA3B5F08476E86058C2C43255F5DB7C329765B80E4BEE4F25832B29DDAEF640B8830323232328C34903832323232943C9840323232329C44A04832323232A44CA85032323232AC54B05832323232B45CB86032323232BC64C06832323232C46CC87032323232CC74D07832323232D47CD88033323232DC84E0884C96CCD65587875874A719416A416E5E56C791CE7824D5896B8B9AD191EE34D28B6589710B5091919191F854FC58232323CF002C5C0460089F232323640CF8963819798E8C3CFC3C009740D3E91919044417675C891348A56A5E89F65FC2C4480C9F4C048D4874749F6EB81B83189038895DA8B8A54D8FC142B71BF90822C991C483FAFD347FB6040BBD75C883FEB145BC3D6BF9CCCD062587A30A40989FFE7DC9F483009EB5DC89BB040845D083F857B6F8DD33868F251101BC76060D2FE1B62630BE6B8993984ABA6FB85FBF04398B9427B39C05FECC000FDB75BFB7941D83A4BC43D4850AEC36740F50BAC4ED65D8017E4C04037FC6C289E776044E6FBB7145E056E0BC9CCD456B3F16C70EF80989435F2FB80FD43A16BF7811BF0B8B7AEBB472F421CC0E2F8B5020ADA391ED395B0D060C007D767DC606011314C6406A5018CEC9168C7D062C30E8B2782F384F8F5D856EB150FD93758E70308E521BD9B674795D8C759011FC3C8E75A3F18B53B329C68DF587FE7783FF1239F07407C7433009C2D2017328D1B2ADBE932011532C04183B05BAD896EF6110D970058E5AE1BBFEA6FE76308B48DFB97EFF568BB52942C05F6E4B1483C20183D176B56CED00C1E6610E8989A0C4106F15728F4B2FFAF48845F76DBBDBDCEB09182A0C21004DF7741817876D77FF55F788104039431C7B7441C622FF4CFF36EC1B2CFFA509D075CC6550236B93FD89F0C1E8186788536A1D1078C789D86B0C7CEBB6FF89D7365A0BF3C20C4C8086F051ABFF1723890B74458B034E89F1D1E8960DBFF0AD94F255F0D3E8E401F7D821D00F43FDAEC085080C0C812BEE0077CEC165F083EDAC2BA725035CDC3E755F61241B246F0C2DF091E9C60D89C613213835BCFD37FF0FB71A89F9C1E90B89660FAFCB382B2BB4DD2C5F08CA29D8CF05775D4B18FFB781F96C66891876328916508FFB7EF7AD4EF8D811560C2B89FA29C329CA8DD13103DBD025A1E119890E36D3E163BFE9A96690FFC75689D60194B765386081CBA93F5789DA36DDDA6D5607FAC1EAB11456AC01DBB7B6D0150FE70E00FB5FE376DC9B188C210F573B56BEC1634BB9A13C4A084231C9BA851768EF4B1FDE63C9EB0356B4B7F6DF413D3C77F64A79EC619C83C31060D82DD76D80C85307326A76C853B7B3C5B64FD15198C97FC6536887BD5652489FC89D5B68EF6D3E144608A65DA325438742DBFA31C2C1418B483D0812D2AC75A7D488A66F86D79EC55F5C31FFB6070AD6150AAF049F441FECC89FE90CDBEE21F26501D0FF30596D50EECE5400CE70033C90EF330A07FBC8F7D021C676BD5A2E02381763081F6DD26008F0C6035185C655EC746F9460578B064FEC4FC118F8666B106E06D3EB83E30169326E1722722809D82E75D9560EDC72584F1C0C45313CECBB12B82910753955E85F7D34ED7FB624CF5F1C89FE83E601D1EF60AD8DB91BB23424635BFF38BA8009ECDC09F0423B7CD6CA1D8EC3482F2F31B45684FF80C231F6E0C6E309C3EB2856F80BBBC22BADD1EA230457F7DB81E30B1B5B701AD931C6F8521C19AF6DFF8101DE89D383FB01BF5BC85B7FE4DA77807AC4081DB347032FD88585D2511D2ACADB4BC3F6F183E153EE777801FFF7A4CFAD50480873E4A62E69214BEE4B75D4D96F081D6D81025B6166176A0405ED0DB6BF000444500406425D7F76F31B986B4DDB90B90B00238C1484155C1630CAED5F1F025AB660D881FAD1D2EA5FA34BF34D3FBC2055800415F686AD90CF944DDFEC8D0413B6BD6DEEFF17C1E00689CE8D8438044B14E811C281F26F8E8DEDC008D24604F7C1818B0C6DCE6CB7910E57021EE4151286C2B6DD96242101C819E0139673FA49E2A588894DDC5F3B75EC0F8307228D706BC80867CAB1B1F0F18D443B0407CCCEE4B88BD1DB4BDC0C04B246460776CE040F773D03EC1CCE76A3163F736514B5B5D26C46F83BDFA83A01E6DCC122F1414DE03F80418F3DFC3D0F76CC33318D9F11903AF0BA08E49BB9262D3577DCF0E862973072D63F480C0964C3BDCE848F08095F2081522B021FA8E524C12E18F8D639F32360731B26B75FEF536FDA436A8311DC1F72EC1BD813020DEB0D90004FC9391E18286AC32C4B7734F8D8DE589A106B4548A3DD602A6438967756C756C3B70D4C3A8911F5897CCFC1E2F13BDD0B29541A041D031B100CFBDD5DC06BA77416' $sFileBin &= '228B8493CF488907A44B5837157A915501156CA10D7080286ACFB6972DE7026B8D4797446E941A5DC2DE0F82EB8C903C27100803EFB03D472E938131CB21D8366913CE7F96E87928198703AED887EA28AF6EBAE930C111617504C97F0190342FB7A00141548E4018FF51140242C06816FF3F1568AF1D365726AA2A4D77F7F62B53628398068C839C10444443714325227439C67419B45B28B6FE85940D942039BBC64A6C3A7C15741ABB76F81896101E61322D41DB5DB864103D48FF5C13983A8B9367B5E950E9407FC423772A6EB1E1B6092B0639D7B773B224040733DCB6975C0F75A9CF471273A2041262C2EF0774EFEB94BA33EBCF1FAB52A9B94ECA53D051DBA506C74D6D016FE9041284BE4FEDCF538C948B9C0E06818483095B78181835C6CF0F0CCD420B060541892E7CD79CDB26039C0675465594485BAE0E4A6D3E0CAAF5EACEEFF47C574635CB559C860D5C17DB5C9606408B4CA4C8EED00CAC46003048447607DB0A93013374344C4E5C3D45E440949E292561761B9ED3814E74004DBE37ECEB96336A7F8C170B4BF274CBDF9FCB51814AFC9F37C73E931BE3C396E3A54307CB348DF40D469D487803F2F0EE15C16118BD54330C1A304E136D205F4B5210EA8D023BE4045B0EE08430A0CBE17EFCE078144F9E880B178F36B6E1991E01F0D7059015E4216A6078D31453568D0C7F58B2D310C8DD79829C18A00DF3BD1BA60E9082B4512F18BBBB2957267BE7840E741581C17005B3DD04EFC273034431140610BD91BA5B184F7F89E3EC74321FB58D56BC3B8B7A1897EBEC08DEDD8E1B395A142E85656A8B86B83E5782D73AB1020A6B5F05D096C5235856EF6FA8016E9480FCB2E5C6418B82D8ED4EA5730B0939AD980BB8BF5716E0B1A7BC051418B995B0309F018AF49F0FA193752F092EEBBAAF8DB09FDF17B8A80FB7014D98F488E08B574B3DC976BBD84F38FBA1D7ADE84B79F6097CB7AE5998D68F1517E1B0A417B4D714CD9F4DB79C362A1C2C7021D68678F83BEB29161370E8D8A397214CF0B0DA0CBC9457DE14E30BCE1A87D9975BAD579CFDF5A060891287A0604F0DF01604D283BF57003D8901B700B3DE446EC21CD4F06DBA9D46137C1406B83F5E977D8D3D5C717A7E10FA1A9A5DC3184FBA8D032F0D9C04DD811C790FF02B5CE118BF1F2B83720F8F8D802B538D193538BDBEAFD00A56030F68A7CB0B18FAC8F0C283632F849E4C04B95D1B14F1FCDFF9BE8C0D7F236C08815F585381EC5ADE0E8634F48DB585DCFD90EDAA6BDC97941EBEA6D05995D481AD16D8128D780CE2B0CAE0A946C77EF9D3E28B8D120456580B68F3FD5A0C32050AD54CD92973075B5A7B0C70FA949DE81D947B3BBC85B2AA8D862ACD4C1D0368DF16A9A6D8B870B71910E4DD4BB98FFDBD90B589898DE00D83D8B7458BF8C504955F8B10DCE183D88B3507BA8067674BEF24C5951CE6933E42B35FFDB1890F39D077C3BA0EDDF80E1195B664DBEB2440E04CDA83BDFB3DDB3AC66D416F398E3E77DA7F71F86F6D8B134E8F4183F90376F4B91802A76121FF1F0E1FAD366BDF8DDE03792DE49750E8A9BFADA28081C3A381CC26C75FC15929DA0F891F10EC70D261C786F05E81C47392761F1D31189F40C783E58DCFF712EAB39C01FA2000ED346C8EF858F0BC8D43208C8E8C89B3834FEAF1EC8D75C81B018CB4850AFC90EED96B49A22A039C0D0EC7CF35F70EEC8667EB0718BD275B9404CA400F6F2830BCE8CA54049314CB70D3D94F3CEE2FC37408441BA44541CA5514AC1F513055F34FFC5DD989B92D3159D70427040F18BDC61A1A03C7E49E238EC12349F019B0DF7B08C3600FF4108910F483C5E0D016D4FEECE00EB27B0BD701006D6C60750FD2A17940161C3C8B383C89D70A9D75571C0CDECACEC1902D6FF84DBC8223DC60C85C69365BEDDD88321C0F4B04A5942964B073AE3BFFE13F490DFC3E51008008EB55B0511BB07089D78B96F486743B02FC4163C48BF8227E861A6663F1F2464A1628158E580674F13DF9CFDF60EB0A1C15074FC045E876F5457B059669A4ACE845A89DEC06CF1309C1019E00505608C08E6DD02E1508AC3C184C787787527B8D55C41476271A14BC8984402BC49DA0135337C05960836B055732B659C09C3A86341CA1200CA1D51BA1189E12E85C4B876DD8740896D420C0BEBF57720E6D573E9CFF8E31FF3D7B2DD7B0280179A389BD305CB7EA2236845A0B7FCC7C07DA5F8215786DDB499CDF0D9806719C08949C4F6C23BC72986A45C0F44BE12E76A0BAE724A0010F8673B1F614ED84095B0721081463DB61AA0C0F986CBE763BD2F66DC90E94E258FFBD40FF98444BDDCDB08885AB0590E78EFE5803F8E6DA29F1128D7AFF3A42FF5418ABDC91820426DC69E0F67EB4639E613995397BEF08D076A399AC879F766F1CBCDCFE5FA221907C93FC763F8B4493F0403BBF75354BD02059CFEBA83B146FEB6F17F476218D42FEAF02D52BF18DADC530836D4D9C760BAF352845F7658339C874D45002FDE2D4FE3BA7FF7F0F97C285D07411B903D72EDB120F74945A8BD067D2EFCEF50F831A6A0C83C0020E93C2F5ECEDE6DA81A0313EC085D085FB011E66920119037FDCD9FE42063FD40F96C08AA0DE85087F96C209D0A801730ED3098686A5183BFBA48B1C63ACCB1AB66F972521C72CA401750A05C035F12D0A1286F8C25458688B1926E333AF3F8CDA25D9721A2B030F4689D9B0479A312ED6D865BB645645A8C0A603292CC9810C00441E3D723B5AE0DC01F26BF36CEFC2F8980F95AF0C1451058C192FE3F8A0E0F290573AECED8BE429D0' $sFileBin &= '890A01688317E2F1C1425EBEBD001A83C4A1ED81BEEB7FC4D7827A42BA8D910F0CBE06A474638B2E015F6A165DC54DB029D82A84066E54821BAE052C1136C77346EBB2F9DDB2C8BC72C0BC4D0899033719D9DC5D0B1396D4050BB8BCFF0DA0BB05002065D2CD39DA770E0F82B6FC86335B07D2C807AE62313296A9858DA87F4011ADB5ED227B1DD67A980DC1EFDCD7AD94D6C04A0E8C0B18204C8B8EA312AE47394117FAB254B91D55849B28031C490B50EA739C501C1F6CC02CC46847D029CF6CFE7D81E0F88246550F9590914B68968696930119398686BEB42108957C8D7583EA11A1B3B02A14B7959AD04A75D50A838DF82F0845289FB8694402AB9C06E61B697BB1B39681171C10A4C532F06A6D07860A35EBB44C4610D50410FB2E165CB1D7445B38C02D0B152016FFED00295898DDB6D71A0D46B5048F101B66AD16AE748D1E3D14A143A5C30EDE455FD562DFE00D86919191CD950B3C4038BCB1709D3CBF1A891474F1483F3A212B3D8686EDFA38D20C261426B8AABA108E6F66435F1D67E347013843B0DBCE35D571FB1390DE4FA039097356686FB6201B42027517FF0D3113DF5003CA55B5E2043A38041AC77AD6DB74E9DB9039BDB1231B0839C7C746CB6D0A284879187D0A28E4C3E11F3A9B8E5874277C03523CA0D2250F9C9214427AE3D6AC1C21BD99FFD2843605FF5C4C0BB38021FA0255E55B92E91A74CD49039670259C107D9E83D8B11FF8A10E46968C2A0D22FDAFBEF5FFC0B92E29C1C1E91FF7D983E1C4C106D3E8F16D45365784B44828E002274E2C54BC694E450EBD5ABB111EBA071BF16052AB9D3E07111E0783D3DCC797048EC48D7C15E70D1C84CAB88B9EF2DC60A97C8C80BDDE00808386821C803BFFC12DD52D31B87837483B74E44212C2E90F5F84BE4BBC466F9517ED05A4BD70B7068DD89E5D08855433FFA235EC15FF385D7225734CBDC8476DEF8D064FEDC68BBD519530DEAEF1F63E5C1539C30FF7AD3B85A1C36F43380642955C4186264FD5BD0BB15CFAD88B83560960E2FDBBA083BD2B01888D5B264B0ABC25762338C14A5A0E6848EC76D011567416E47711B4193C1C285B454B2D360BAEAD92AC763F4821C30F7E3FDA13A0279D74999E944DBDDA041B70BE0588D98C66DB019F7841FFB9B229D922A83D186EADD3E8ED0C520259F81FB8E04FE7D0C1E109E86001DC9AEC82D9B4FF062A15043B528DF795B2E62A85A457BDEF76813BC8E8203C8D3C03BBAB1F5E8783519EE8BDE53FBECCE616720FC5D865BED40A6B609710B368048455E442BCD8684305275E2C85B37D068C01CA878D6711BA9FBB642B388D5A84FD166F959DFC6EFB182D8B5495C821700939CA7306898DC80D5EE17905B887B10C1C38BCA25A900F0C3546048DCF838260D25D21F6DD83E70F28C001633DA9CD9675070B09690D04F386BFC9EE18BB44235CE8198C0B216E74B155CFEC61F84AA8FC7C10735B4A046F194E9CD2E5308A57E30433A3908412F278AC2596274A14E1F9E5BF5DB88D5B0DE52991B60740BF2B60C0F5780C00F288185FE295F21452DB0901DA833B1B83E7C606AAB8FE05089D401DE0EF341A517FFFB8A418B985474C98B41C7FF536E277950C01FF798D095F6B850B5721FA975EAF4F8D6171B2505AD8DB37C50A75636931D8564C2021754679B23AB3C04947048B9D8343B5412E3D10657BFCCF3BF5732A5DE04907B0B93842B61B431A98BDF61415873116BA0BFCD14C5F1374E589A01812395C8D74919A4BE8833989C06526BB214348755C2324F2D9FA06069910E6C6B8ABF13B0DF249258512A5B2756AD81780A3F80AAE49FDC176563B4D872CF6DE187D8C3B39FB0F9237FD7533048D17FB4239D1BC6C0786517BB487E9A6F26747EA6B8CCB970E0D0239D82A0D586D22C6C20C5AAB9D54908E888B37ECFD5A52AF8C0991D34588833CA94997946613D9DB39783C478B99C9285226ED1656A6BF9C19295A63FBE52823B0F28D531EDFB991C38A159114BEACD70791BDF4B6CF1F2DDBE3B744272016C5F80F0D1C9A74D5BA49D944484D87C282FCBE511C4A1D076211082C69D7051A385B57E4AC89C3CCC608B8BC0A96EF307048C19285785B9F1E58FA0DC704404BD63055F19ECB05068B6A2807B370A1BEFAC8DC01F03A9031D8CD3DE326A37D115EED06ABC598A182339A46E12D0974BDC2C801D1F40B85CD966860760397C59D2CBC6A7BBA4703951A4CDF023F7EA1BD5C8E1FEBDF850F02BD7EEC6BF3108B0C391C8272E87FB79A9DEE25148DACED8F04E7DB5E73A8185D6348188DC8C06E7BBABFD8850C301BADF9606B7804694433037787F72CCDD67BFEF5487FAB950C6C36B0F0C1E7072C17504C1D8D44F08162273C8B38B98D88B658E1FB4339B80576B60789487536B381AB41180608E16E36FBC9411CBECAC4740643B08E950EB02C6C502E1C75EC88BDC72877859CFE290580C8021193A36C1864C9D0CB6F5EB4397223D19D632F3C4B881BA94B1616A084E76C9C60DF57173A4B5953181761DE4366FB36C10C4A09970F0B102940613BB1F4837B14031006114F38931522D41D3F101F3C762EFDF56CF6128B059E3CBD8A4839D06C7E939A1BD662BE027B0C80D9D95AA90AB334CE96ECBDCA344D7752B8C55A946270A470690EBCD162FCB68F20F4EDE0D8771B5FFE6F06DF18971C894495D84276F383FAEA225DAB039D11200D761E9A22D685B5F61C31435996AD35073E0520DC24BF5E9665E028E42C8B1B1A9D2C1F8B3378252CBE2F4D848D50ACD7360D691421F9B50735A0858BEF1B29D09F96A4F79A9FD58D34' $sFileBin &= 'FF1AD6741DC13286C4ACEE40B6D89E6601D33984782860F0E2417776792E62C48373EB6C2E8C70175F01C1832006D2960132566C2C511B6A3644CEC313321A01852897BDA7C77E16F77F3C308B143987CCE78E19B1BF9F057628890D596AB5C6B3455B43891C09D99BACE18CFB1CD68BE8DC2C6561B60A2C8FE78B91B6D2D35138722491614BD93956241E2052ECC8581C8D1B911A940C8F1462F498FF8EBB677661160AC431409485409DE14E4640E6A38040295293363E2D466F5BAFB320356906B8641AED94D446790F6D0C48025A7290810FFD33DF96E954680EF2E244D893789B63E3E0A91C966C649CF07B934E0A04060C232E2D7428158295816E973376860E30E11B2F77D9C0344B484DB32D090A26D8D3D84A77E9884B86ACC560E07CC41BC4C6528BFE578039C7642C19784D3516801268847787AC4894C038954F950E2CC4864D85D0440B8636F1DFF63024142A7DD84129F8083B8D072956F850762A07697322A2FB676C3600F2384701751442120F94EA07EB221A13043A74EC4A9E2A94966D903DB12FADA4EDAE7738BA094121D9BD100D3219318E8BF80BBCB273C676FB57102A7E1EC7469B102B240254D0468D31F85C100139BA73D39BE0A17623DC7F890852E71CA3C2E9C83704BAC0301DC5B319C52F72E9B08B0F750362945231D231F0748D352E16AC295B0CFD5B1681C809CC90D2E68F8F7DEF2B0C53868911C7421C0079A0B2049D8D9901BDAA5493AC40957404DAA99B2D57AF853035E4E948A7850C47852786757B4213FCFEFC4EAC251B99843880EF7188153B8D3B8F86164C6D3D748D82DACA18007D1706017E07EA6305AB0C682DF02225050BC4E8318363D02F1476521CE707852041399C45B482137143650A73219951E258474F9D5CE78D526F5BD802DE6E7C93F8722BB4E6803CE17D0E3E890C82AB119DDC624E068F41748255F917952458BD1610D3131F91690C16185AE4D66CC9628988F0FA3B28418D42C248CE9549D2E1B516CF2F77E9E0597F036BF1636FE04DB4393BEB1D902B10CDB138EC02E93031E0FE0C6CAC592CE22D278B39600EF9D84F8B5C9F04DC5612182A8C7DA1F0D832BC33B2C2D876B688DD9CB888EB7A8B375F07186B67712AD177E3F871CA1859EAAC406176221E275E9B57293DB1566A34982C2D5A9F7083507A8D913D8F99852CF0CABF98CC3C9374750AA4346887AF85738D63791B3A55B0EA1B72FF040D9E4D17E447DCFE867EC1B63A7B74CB0689188633D0EAC09C9611911BC98FA6C26625D8010C9E071F082CAB54434D9C62D65481A648D4A378F15A8D28761F910BAD6F59ECC250ADDA685850DB8EC562370FC373594BD4F675AB271163443AC2443B7B0706B076420FFF4F3716597826D021BAD4198B2C5B6F05A4149DC6D16C6B7674CB14E8488DF408C3D86B775B18F63B5DB44AF0F9B831A1F6B35C7C9FC18271E1B94EDB17A3FE238C11C6AD4929F907040283C0C317670996068CD5AD487485CC64841B8B352C842105C8AF129D0B91CBB2852AE2DA945667C0C8A5EA1D9C96D9AE8D82859387C4188D14888E615DECC6B6C01521C833E01B8EDFB1E05C39AB2B8D1BD3FB7EF86D8F07886D34A85CE009BA8109AE913290B60C1F9E0517AFEB2F5AC8BD593B76F66BBC21A801C7D0AAA4664160D7D040DAC99444FF8CCF94819434F123F94ECE130287E7ACD7B6CE2B93F469A48B4305086690EF83422C046215C9A10EBC09BC92CF6BCA40040ACC50D0DBBC401688D5CF38F8FD92C06C08C98DCF904A6F9078016B7308F534D240D901108C425D9E6003A73695694790FA3CE4095C38697D14FF96D1389F473B7DBEDFE0F41285B0401F74E5E5B2CD6AF5D6F2F9FD80A77B011BFB130684C1C61366290877DBA408167BCC924CFE7CFE0A6CF508CC0C9EF1206AD6DC8A9F04FF09E2AC17635B133938FC5A1620D620946A54172DD19DD6F726431FB1710C9D2D95CE5A9A4F3358A525EACDA01EA1967BDF36830B077506F805F86A8E142830569CC2F9BB9E4B2F587307CC95F8468375C2D93E082ABD0A1976D8BB341F29FF422A1B244BC3B2B1509D2A551939E9F5668D74556B8490F14A469F9E7DCCE8F8C88725B495803508C604A7AFF37DA5F43985B0F00D48C3849186C22C269CF2D4C8D98B2ABDD9EED03B102906FF1A1E4DA7D8D2C3ECFDB9C307E9D4226D17F0BD11E1C1644A3A5B1FE8C7E8690C1E31883509D581F4260DC9FEC7D3398BB59069B98EC13699A4BFAA4221CABEF470CD5656BC0854BD9034E121BC01DFF5E37081188426CFBE9D948E21238D36F8CC03CE70408692843972DB13F1DA530BF0BC959524BD5284E3C8DCCBD27B4B4E10F78AAFD1844E115A02CAA5D0A78FB4CB5A10897AC833791A10A3876641FCFD6526956403481C7D01AE7E84FC394318730B0D904B7AD8D656F36A3472386F0718798C8B95D06BA0822CF36287D1330B2F439A4C200601614B020842BB07A76C30363F01ACBE271C607E2741F77E8657EE9B504389061188D7B1E032F7FA89FA11645B067182AA9864309B215A07B346501280C749538C9AD9EF8511FE5A241E0311396C7610334F96630731D2B4B8B80DDD19F166A44B83E90428C8C12B598D71E4F68B9514957295C4805FC06ADCD93D562996B5C6A547CCC17830CD31AA407B8AEC8CA3DCDB59818C0C0F83F71582C60C1B056345701A55D6B53D6DDCECDE88438C111009C59775D48C8FDC3B8238EC49386120442DDA235D76D4908CB0E1E886CC30BFA7E0EE64E8F0BED4DD3181A698A44A9F8D55C053948A5946AF75012BCC809161D4A1' $sFileBin &= '6291ADB4AE3C34A2AAFF0B189E763C24EBBD894DC06710805640452D901DA080148FCF40ADE254A620F55126E285E46843D10CC15D54F18D86021CB9887607EC2C89D92E34EE584842BFE811CF0F66C7B59FDF93EE0004098C2776E3B8048A009D00F1BAF69BF96C2C45B80C8C5E440794EE4CE5CE5E5C1C0B750B7697DA946BB3C535478A86986EB1E0FF74C1D3E239D37311C36604581D8076DB46431072F5202C0B2C9DC3B866174240A03F09E1BEDB76F44AEA80C3E6DADF80477EB37B6B0C2B7176ED16AB9E1DBAE1117C380A5A39992C2AF00F625590EADD989C252C29541829222750C2792002DF5C04A689D1498928872814598C98CDA4401308D05B5E4F1802BA8227475DF4428F5FC4837F93C9745A8B87DA908DD5C61B81B71E8F7C574858C4630BE9BC6887147412F7DEA760FC132C2413C70A2EB88238DAD3E37AB38AD64335BC23E8B343357809068CEB968751BCACDF31C9612C896037417F9000BD83E50274835C26AC1A77091F5DD0B7D339C277F25510040953F0201C46D1AB2B7805871742D2AE2B5E812C08CF43790A36008DEC0137F85B406B41496F571CB00B2605466385D2DDCE3A585F7405C24E1EBE9883078FF6F8CA2616BA84100DA8C50D2FFE7E6F38932D0C39BEA051849B5D4D08BB61A870A25013CC832D22025E0EE3E07BED411C450821A145113D1B65194D0C599685BD2E80CFC9537464482D010F08D24444C86ABC820BAA89D09E22EE0D7B85901C541FC61488BD151174D9051C951CB663377141BB899D8B56CA8E50880DB011B8F9340F97FFD04498651981483B45F072772A042C10817FEBEAA0FB895F8D5E205E10B9149E0972B3F30D2AD591DB4DAA8A978F7C7249227E6DC763035E185A337EB8DC968CBC65DB3F4C2173E609DB40CC8BE8A39EECCDCBBBB90DD41329C8FC5C75817E55F620269EB281906D78E56D9CFB7FDEFE841A06B4E1824C01432C2FBA204323BF2E2F88ADB5E6203F0E2B11059B905D9714085D9F415CB934B56F837203F011102B5522446C36B3350C0F14C390689388937F451482BB15E90BDAEE1C8B105778FF280CA0C143EC8D833B2341AFAB72837AD0754DA04AA70C1E7EC7F80D24EA81EFAC501C162D6283E603766E8803C7DA205AA7912C06D00238B24F109C8058BC059A09C74611CA109D2DA1562DB905B0ACC9A189D8067659444DB66F24C2B5AD234820EDB834815A368F4E357E4D12D893755929925B729715BF2CFD9DD8301CA88560444A141C446FEB1AAFE90214E447DDA1EA68FD00876607F47C5AA222A787B6756E2A5A311C3D2A46797BF0F8C99F3001564D1C8DF1B59845D27C1B01B534D69BFF8C4F1D69C26D8677AFB9302B29D88901DAAEE00132F4AC270BE4B8F154C71B46A902437A6DA045E573EDEB88BF8DC181F881D1D0437595140F888428E82F7703ADD9E00F7EF3E37765C71E0ECA5E868F451C903B20C3893FCE2581C4A559157B506E671551BCB314AB5CB5F8EE50DA31755F9E0A9E5585FF74D66105012BD1CE2CA2695A200C10F13F8A500CCA7FFF17EC211577808ABB0A19446C8DCD4848D440EF0381E151CE02F0F1EB8DE2085647538B9A3283390F7C542F5168C701FF82E28BE00D8DD4B298C1806604C00282013D7C7A1ABE83BA0B2807101B069EAF88D1AB9032D16E62ECA50A27B11E7EE5FD47DFC0F9E60CD5D0E8884417019BD86042E17EEB8396ACDBA3F038A9EF3070524A703696F475104F61E870B271EB7C118B065BF4F0666DA7EA85C3082825BECA572A9D0610D10C416A5F93893D8D4315D104B05043C2BF06A24CC8D22906F43099463AA4BF38D72CEC20D8CE30F83C1C81C68AE70C4F57742A65AC5503F055BC5E0B260AB4E76401CD3008FCC57DB191545F3AA10892E6F3ECC24146DC75BE1CA49B6C6F20D9D618DD14839C6CE710420C084749AA76B56C403348361FAA2E44971040488F483D0675A3EE8777788B3A4B245F1B61F8873F43388B73145422C8B6D6C1F639D0726310308E17065B7B5503BAD0F83229F834D5BA9BA1343B18EB031329377794A35A47787E48EB20FDB6B51955DA42C82C3B4DEC73054BD4D8A00B69F82C848888DA97E804314169FF75E089719FAC0B41707CEB993F688B702406AA89788730EC94201CB80DDF523078216DFBA05E92855E0A7B29185191B5A5D8B6597DDA8E76E3161CD916DABB915DB4301C9FB836F00AED585788B08B4934F1BB6E893AD0A880044D1BF6DB76AF3C9724494017D83640441AA120D4F5D48B4AAFD0554F36B46CDD194917CC044C8B0ADB5608D81CC86E3D2813C4772B7000A0D07DAC4F49AAEDC25996791C80A8CFC476CBB575348FED21F30AE4B726477D5F818B374639A40FDB856FFFB7107714C165A8083CACC1E7081A014152AC54FB26E00945A8E40B0FAFC2390AED553DB1FEE904C7424C5BD52B144A4946D095BA7DF481C66C0E22035F900B8A6D6BADBDEFA474414292249E5574DEDAB6F675C021DABC59B80FBC518D44330C259A5B070D089183CD54DB098F19C4998C42BF4D82028992837DE0060FD7F68D858BBDFDBB75EBD38388B5C6C7AC7875BD00A5EA5B72044A01C910856AB675585C68A4D3D1B2ED64B04ECE7506E475CEEDD7DD1E72B4290429C734894F29C24C047AD66E358D4C7A4E76B11F7189AE0D6CBDC0721A426D6BBBEE6B0C555BE0FFEC49B85E015A087629A1604439BBE219D55A1508178586D30261E603925DE5C0B0BDB9059A897B1C51B0141C85F6044373181447FCAD5158004953E8120B354C868E34F3395C1A18BC6DDBB2202CD01A3C0E' $sFileBin &= '400B44720348558372FED872D443F5E348BC407224C37F7AB606779A7A183BF90B7E4297A5705167D2A52E3D122DB17510A90A4BF0A74822046BE90B0468F51DA1150C111AE61D5A5C1668C030E690E02F56964A701765918031687784606CEEFE0458C90C3BBF029ADE1648813FA705D6D1863D3160DE8E115619503900CA05111786F1B259E3041CCB1304657A006C63022B7966636123BA1F8242B049367ED35101CBB0395DB0734F42B09241AE9271B1B073AF5DE0713D3601294E1E0471331B5BDE98CCB03386D38AC1B747C40CF80376058653CD5AE4E4CB711DB2A1746299600D5A5A6203037330015C1BD3D239C281BEF95B620311B003205D70E082064DC307C114E2A7047301F695C9CFA604195D4A0343895D9B90964CA7AF724A1900B9AC5D9573401420AF00D90561E329E4720583EE40F303EF04D0E263A899F27A56F9ADA2148CCE0283FA0DD468C73AC6DAB89401F8E4D31D03DCADB5813644055E17627F807DD30BEB1DD16594AA5A01DB497493B10F8451D9587713AD4591C03244B3EA06D4E182A43AA75833CCB7BEFB8D5C1B016509D64975AF69D48D5E01960C38D8F4DC73C913D4725B9BD8F6D8F25DDCC9119A8B3B5ED94FB408CD1319C0D7C9540962FD6740DAD5ADBE71B002A4B83975E8F5F204F0128D582BF81239C3766E57CB5599CED729C1070DBE09032B7D45BC01C1018B2DA8356DF2191E3B0D3075B7AD18AAFBCE7EC0019FB82CABAD2D0B1A2133C67FE212F0466F1688022975F5B675CDED3F52AC247258DC6689E2652A07B75F73065C5B54838EB0C9B95746140D42F817D1E59C2A55A0EB244C6D02FF61C9AB03F7D621759CEF85DBB6D0A219690DA0479C5C9CF82D362CA06E21DE2601C88D1C424C254C5865136E6A99B0DB83814E6613EB14DD22B295F7913E0B558332BD521EFCEF16EE2A299862F53E2C5B024DBCBECC0EF04E430517CBC1315511456E954DBA5858E0BB57168ADBAE013D29D654C1EEF1168632D2196054E0B86A74948706DFC05D25C0A1A1A34C0FE800DD88CB47DB6162410B1707890D1AC7B230CBFE0B7F1331094709320025129FE2252263F7C34BA68DE0615C724D11E05102212307C00CAB0008456CAE1C8CC8554286C140D8554D2690D70148071183D5B05264CAE07372CDB0407938DCCC750275D80E0BFD64577E30E8680AED4CCE608F4F37B210D0BBA7F9E83355B7F081C1D5A92B6402D9FD15582CB4499FB0A66402E4C83BC8D839DA46D48AD86F655397617D66C8ABE017A043E95D916E3B912555D0EBBFBAE2C6269703A611410D1646801C2DD5446ABCF8D8B841D03DDBC14BE7FA453A94B96E2475BADBB23B7165AC70541B4E6D6C23E3154F99411B71850C64874E370378272E794EB8BEB01DAD0A7C919A1C221001889421D782EF3635A432217D0CC648FB6690CA55FA87426BBE2990D1EF297DA8ABB7B619F7541FF6697001218DDE82055A0D83CB15C1E60421070B0E12FE44F30E0029F7398993460FA12F96031953E4B90E49383708EA83431530023900724BE300ECC0C0D47682484A2D01D8A9737D4691524B8C909372FF711AA306E635F98FCA6D820362357159CFE30E6109735D8704E64BE4C076079F2256C61E02D3E432A67F05B9CBC877163628015390413403EC921C081A570F90317BEA694148F643F0430A890F1819CF6F3430B14075506D70A2207540894D004B081079436D22684B74531B8259B050DC0057D53C4B2C3982C6AE418821CA088D3C74061C40658B9A4B0C388142B42BAB7BEC6118695939F028EAF05A41B0CFA06500F009C78678361EA14662C139C74410C6804BD002E76C81C22D157061DA04FEC2A7DE0C8A1FBF4B04637DC00560037F0BBF43249E60096E9C4DC49903BD14B441800D1848DA2B17B8E50702D8DC837DE46B4BD0D4E1533EEB109F82C60A168E4405775424DC9A87FD9DF1C553771EBEE5045D5FE61E491CBFB872BB8D6785168554F7348648767B0B4BA8B79F0AE06C5717CA213C770F19556D731244A31A048A22C10E2A607F95C43404D34B425F565160840FF07357FB8C58804663013D3758E12E32D85CC62FD860653A7902E3DCDCC84E080F0B7721A1738ADE70C8C836598FCCDCE1B0DD115B5C020412D0674C051E260CCF4F3B970F63B0C3734243F51D089B039003612548C2C68781DD4172BEEBF0CC88C2109586B9034F5E896A941EE8AD48BDDA443527958410BB6D6BEDCCE0870D7E82253F234A5E209C40D113033B84DF1BBA848CEBB4295D3AA695B9665D5C4E3A58369423C2598AAF996B90FDA201712C5D587589D63E4B374B39C205404B28D2C056D1688DA516AA66569A70D0182208C7BDA5DE363A189008D4C1F7D2210F6A0CCEE8817DD41FB9C0D8049B30517E2B3121DA09933D2AC8D5D9486195E022793902A0C3E5D8C4EBDB6177EB9725E198CD885966523CBC91FDE266957725FF8C160F4C642DC4F965729835D78E2A4DE826EC55DD908CECB950E05C070F3DA0216B462839EE3A3C3CD76A12A1625C3CEF61AFE9CF5BDCB2594B02A88B0C33613AB3D6A21CC8C8A901089C4C1E48CF765A07795B75D919B05FF37676ED8229B21793BDEBE943A293CE41C6991F7779E3D08C9AC40CB9B6DA420E19DFFBB588D3FB47D8901D5D0075A9295CEFC2F782440CED8601EB87372A4C5F588283EA407101A600D70F42E18A8ED1D248588E3A88D9745094DED683C80270A0E8499A010B68414B8D60980D9D0B83FDFAB141C6603D5077197A8BAD381B4DD2C186BBAFCCA8E12C45F734D0FEC39266DBC1AD5A0E96FB5DE5' $sFileBin &= 'A164AFE02D135D057B57A0DD5ED1EED2621F4821F0418B37B750FAC9B940639000FB24824FC36D4D5E24EFEDFD48B52F85C9C7404CD4068C88CFC84800587415AA55AAB32524505D2C82605B46070D8F8782070425742605B8082259BB3002BE289154B289E251705EECB6CF562253255FFD609C81E0B9F15FE23C8A1B1A2976759D1C817E5588CE66492001A03A824F7C7690CB484CD99C2BE256C696F00A6702912D24E0725058773C0FF1835017F675E5108844165C1405F702F08946587D5AC0E7D94A103B9F5676D3FBF76E2F59807A5C6B855A14840883C65C3C5E60E97656010346024F18A01009C2B04164EB0B030808344191118E45E6414C4441BB5FB46A1A7A7531F6D739507A1325FA24722C89C19BD60B8B7920667BAC236241601885F60A26BBD3354155DDEBBE758B595A823680508C5BA6106B100F14A0DC49ED9D6854F786970536070E4AA7882DE0D08C4F9F516EEE02252E9072F5378644014E4ECE4640063C383477B02ACEA25052425877CAF048C08A467DF0132B091C408DAF11FD36E806501409DA5AECAA0FB1DA21599E478956FBFD286705D4E3495C3F2E01B209E0823B7D20CF4118677033DC62069D1029CE63817A869F638BC32544CC25412005957B17800950C7069440E2102A4E16F6316C5BA18DFD13BB87C0933BB00434A0DFB72A9C0158C04BE10346872F340537EF43473688D383FB13DC26EA7DB1C0297A75E0C9C1B9CAC5136B7F5D8C84EB00BE59588D715C886116073BDB462F71C534C3756EB98D6A1F5570B9F703C452DBEE36A37FA412013E01D4295A1AADC7F769976158C3512D34AD3AB4D7CEFD04C8A0EC8FA8A37E1E83909CF2E05BB72DD557CCA56ACD0283857B748B90B9B584702B0202F7F1C35C430DFDCA6C317C857A9042D8756CFC5424968CDD7889A1EB8A6C02AE7DB3114504990D14B009373828DC623B4D272A83C05CDE90280CAFFDBCB6B5179E761C01580130458E033D7BA6574A6F966D6046000329E2750F6D816233FF38180D12839B196A0255C90B2E0A9F11B163D85FD089D34772D4DD178539F87206688D1C3EFECE51A5ADCB8DAAD70A8E6010B80C83612267EA0815525F6C946060A3B58D36011E843EEC26E06F0FB7AD582429F301D6FEB8DFE9DC29DF36320CCF015D4B084A9B7676E80149753F32ED53406BEEFF04977525298DB7B17A430624492839D6867CA559A75DAB9F9CB64CC3260B2805B0E80A8B602001AF0A930057EF5D773D736350B4D2FF52F90C4014A65AD8815B0F2F8B432D39B0142B140F118C248AFFC40720217CD6641CF690001793D1EBA396776372816FB804990456925B9FE25753DD8692D942029A4ACBF7EA9E01C10C03AC080418BD89A5289D0FEC6F894E0CD0D8FEEE422E1A80FBE0775B6608D3F62CD48003B4063C01DE622B2AC088089688C8C0B6AD7DD70D1DD100C828C306E2062695E2063079012889C2FA25778374C0EA7663460888D0C05CB4759BA1D02873C10E04FE848623D8ECB986BA1FACD305B1AF18D9A91E4244F18B328C786D347101F1794B2BB0E548C37F2984053973547427897C111CA01D613B3C2478365617891C95023EA41F107402E5C89545D056D0DF28334270F28D5DE8443F1C49089ABE57AC790A3BD743221EA16D656C22E14C7454E3AE068AD934B76CCEA3EE05F40C33E8B1322414BF386F02BB8CA0D8681475B50612C5F4FF2AD064CEDF7976E27F637FC119B4270A5E28741989FA1B64BB66708F4C252B04201D29899191672BA1D8DCE011869D91E4F4614C201CA49334B8EB667E9F72EF7B7C81ECB862B914AF9F8886446772C23EAD0CC58B589989925BAC42F1D91306763501189CED04F0288DAC0F88219F8D01BF1CFD18891485A4A0E665DC104FB38876B23D08894DF621010FD645A0223C893E1D304940D720100C210896F58E059B8D853AF2BEE904B45569BB24833A03749625FBBAC49CCB02A38EBF33F73A5AD8898F8CBBD6EBCDC09DBBB090008B2DB70333C0B58DE24D7F683CFF152310117B6427107CC31F8B4CFD89C8D09A8CD4055AFD8BB57651520301341A1C508901ECC93AD87B682C0DC35F6AFF5021275D617614C30F765F06508C2DBB7C2E8C04C38F13CCD63DD09A13F9068212446DC25F77183B07203C5EC3A99A860E2C6B09CF8FA9D84D446B149629C050519FC9205B371C1A049F02045BBEBB2D5E4C186A015119FC0C4DDB7D832DBF0091693408C32F37394A2E005CEFB6646C6C08518120EC4C2FC20A996C1F2425C5DC48481F0FEF590239CC73E8284F64ECBF770C1F33508B0251507900BFF796AD2FEFD3EF6A1CD9F91C20016A4CAF4BC0C647558BEC0E6816808FF4877704977064A1C15064892587EC085349140BF1565789651BFC7C141EB9B39F2C1096D58D7FB652332C0D5F5E5B8BE5D6C55E2C18A633220F8041B29425AFCF8D9841C74C5406C2D088250706DC3061108D316F5DB27FA338B429A60C5DB4AF8A30112B844DC13650F4FE29C83FA42985152CDB500802040CCFBAADE3B28F38D96089680659B6BF6E0D343F53043F0329D1093053DB680B5043FCD050FF169B8B7845F874395D11348463130AD7F819AF391FE6DAD66D6DF8D71E330C2E4215077E89AD1EC1083B434476B4CF8423D566D5E242EBF10F278813312F14A2EED5DA53406439827AD07BDBC92F374330720A408C16B19DEC6C034766EF4A30F23C29476F0B370A3D3B4244EE04E16BB397FF1F1BDC0D15C119DC0E392173065F5D002D017E306BACCF9E6C119E6DC7468606202C2023B70344B01B48044C1C817827' $sFileBin &= '5406CFDAB94049C04015FFFEFF02B076E2644AF7D281E22083B8ED31C24979EB96A58017339E6C43D300CE2F524227D51FEFE2203990202008B42F5C790374B8F6F084C06C915DED6D3C198B2C01E86780E61C908F1DBC8F1CC9D38186D0186337C452817F78F9D1E9128023C3036D0F2F98146F454194EDADF0C58D8C087A08DE5D68AD8838A38C01F21B53448D34C2AF231ABD4CD70D41733CC82DD68AF8488D7701B63FBDE04BC5915CF9026D74328D576C835CBD2B47B80206EEF7E5E40408D1EA81CA3781FA83E9EEFE96010B515328423D7607814904A149F3EC030B00010418A5D61C819E097C7BB12D50A97B8FFD603860B811B4A1B904735006020140ABD8BAD764AB02F5048E9A3A2755F1DCC1019AEA71F291C716F11EC1B73D8D0CB5B583E0BB01DDC8A639DA96008A205B28E696B8595B363B825314019A6B2493246F099BCA05D6C96DCDA6D90F3D8817773C741C5BE81D0C878622AF10016EAF237C89247FC6FE00B1EC97C5D06D6C31C95B82BBC2EF5FFA740723616E51BA37D929E6CF098E4CC212302E8C8AFF0C212816C045AD9904E8AD36E5BF4FF3F75BC239DA04DD78A9A7D38B790E414444B7412C4DF2CD0BE2094DB66123A102201D1C22DA96C00C8E10F91E78C29D61605E8B56E3667A48C5A31F014B60E132963A731AB120DFC730D4854854D14077F348D17698C62309681CF06B89CE38AD18394304DAB9229E30AC5A1ED76F8CC409D1C8EF1F100389762F855339F275731D2F4FB7CDFD049139D8770E9508421F72EF6E2979A870BFD80DEBF096FF18DA58DAD1D483786D7440466DBF5DCE2D465E042B394644742F0C183D723CB407145FF84F9F96D5599A8EFB14568F2650CC166172FE818EB5451BC2EBBCFF58588B5660F0B316167C647A4BE681E300FC5E562FD9F74620706CB46B8C25D483EC5070C02CEBB19F01682C22AF08E170D8000D5E3C8205A276D45F494E29F9828490DE535CEAAC4DE68387280C29DD5E60098FCB0F8D1487181476CC06BBD64118930C8B3A33248F5D468A4C2475B70E023803F70D76C675AD18135F452502221EB5B7FF06423B55F075EE393073898904536EB476A839073B0141FFA339FA8F26F083C204397310EE0B16D07361FF20C14F900986359F55450DE843D9724F808256FCE9B76DD18D58049EA08D98D07B0673247FE30D1AD375DFF3837DFD746E3B5D2073FB5670A66945CBBA0C1C8D3CC2D8EE9A6BB04D201B090757E429D91C758BD8A8E8E076034B77A65E2217B60C329BC73238C16DEBA8DB7465037349C775634F6CE5DCAEDC4DECE2077F04676DC8B9932DB80C6D759224D4B20D12CC07C728D114D6B5F7600F6131B27D02366CAAF6338B07B9FB726C2B0874C20BAD1D3A79883D0A74453785A5CAF62C73512E2C4B432CE0D6B9ED1683C67C06042889127449F175BB86405DA40C02351A44BFBFDD73CEBFB740474475BB5675EB9E6D10764A72B59F5D35751AC2042DF6233584C856DFD6D0A18F47620113FDAF513C2B064F4D101E4C90E35923AC7A506A51C150378A131B06638CBADC614F0629F1C78E8556C57E6A607365598E051CCB55C8546EC25741C3E1965DD809746E3BCE0E4B1B3B7BB619578845DADD9A80DB7A3806746C04733F0DB70005646B4FA64139C25D808D7D7604756A91A83DAC666975960F7BD03262C276377A02D7ED8043C05B75E8E416C7ED3D0E3BE473EE8FC66B787BA51CED751D4187AFDC49D837AC0BAA01AB02441B7691916D74E4A01C5D44743CB6A2A6846FC29640D6E2522BFDD304407AA33D8BD6E04204693E5770AC4B07F2153F387715FE61C027E80177168C74EC4E5775036A674F206427D78136031314C0D52A62D40CA9085B966E1BD9BF2420152C061C18C91F60691814CB4724895C49D107B83526F023BB7BD73D723CFF27C341FF0729C321C1FB02B74280966547470F704BE8E6DEA2C315EBE81F68854C60CF02A917BBB551025302CCD8CDA290DB6087D6CAE51000201376E7DF02141F1A63FF4C4B4610E6E0E34F40E80F86E5E83E0EC18BC834DB07C4578673103F0C71E1FF74CA4702D44D206A90C6EC310CF1776FFD56282104202B1C8A8B8C82B7B1B716B9B9A02DE4899C0F76BCDF05561C828B4E18BBF87176122E754B1CAB66C26638E7848E586A6A1EEF5C5D890C839A0F261A45F58AEFF21CC920CBC98B46467C4670885FB863135DE8E81176CBF3F5467D062229FBF5C846599646461DF44C72115AD4668BC5102D1F040B64BD70DA059468674F3B51D16F4DC3681C0F173BA9750743EBDC73BB421975F1FFCAC5AF4812DE26F7B4891A1008E30E774EBB6C72F2C5B0BE100CB7F740B8E846DF94E4B67158736673BC13B4AC0A5A16EC8B234BB29910CDD2B0045FBF7D4703B1B69A23F5011708E075282C978512C2415C97D813978D23947FC25DD8A551E208D8721B9731B7F2D7DC23A34FD32CDC584244AE89CED00557C2DB87CB57349AC675F0172BB49AC811B1ED21CF04448C06118ADBCB38A9225DE436500582DF8CB22531F63D0FA99ABA6239576BB581741BCF43ECA539C076168B9CFA015DE8A2184596D1BFA29DA0417725E72259784368A2037FCF820B4BFCE52EEE041E5CB0F862854E4EC67A212414100C0F001F742EE07447B55C1B0975251320432CB6601882EDE365786FE7607A84393629CA79AA07314696C835F0C4EC080DAF44480E09ADBE9A388C6F3C7929836E7705BB03CE4D8397C8EACBB1C1AABA1E3DAC57C8C475E4C067062CE7A4AAC775221903560990C71BD12717C66B95CFF8DC0907C50C7C' $sFileBin &= '9087E45AA9C46D4863B2046DC3DD12E0C3FAB04CFAF0EBB56FC8858C115F3CCB32944C059333170F915C9D7567FF931C87860E2A57D1E4AEDEC864343836971F39E99531AB857F3CC33D989047C9577B891C13198F1109B22FDA4D8E17932C4C552B35A3E102C9716CA43835C983900B3C7BAC0A89B32B8F7C132F6A16FA9696178B5F20E64800AEB5152C7BAC5485AF12EDC483317034F32EA38473C88B1C0E25B420B807050D9E096104B20807FFD283EDCC1C3BEB0AC64E74750ECBC1363101CC76EBC342010A086CE62261B3A3D8032CC7118975978B0CAA133C4E75900FDF63C860239F0E89AD3CDF6181B6A302E79C2797D050E002645CD957654B70BC67B3839223EC248090AF2CA29D01B9B1EC96949066E97E0252872C0C75B0530FAE0254795BBCAAE75794B26A8121912D27F081C9F5D100B96C4CC9ECCC362C1617CD0D5E04B285A40FDF2C3AB31C72D103E8C21138DA062498C2EE2822671B904F9B55F0CAEEECC39148129D9B21D8B42B532436F28386ED3A6BEF32B68C93F8550C932A1512E40A84581F05E8C09B900B3F380D6D8EB0203FFF0CEB7FB26C9B0A5FDF7728E81040BD9535CD4CC80FE7DF7021C9B6EBDAE220D50421F8101BBBE8B481E29406D59499D3916847E614811F3934906C129FBEDD17B44042B017D123FF724BC4A58A287F1027798DD81D66BD851575EA6116064D58E3D41FA45E99CBBF4C9FD252276D8F438915743BF2D56F60A60E3491CF918F0B98A77B8E8C1F1205B04047326088EED80DB04093BF45B850E5701A311600BE6B59059BADD9080880060C50757E506D2868077AE02F811097823E292F8B52482E741839566805A60421788023C79C19805F1275107D44478E95E00F76C07F30411503827F5FC9C9D9907B1006141881CEC9C91C2024DFA8C8570B5E10FB150DEAD96E4B495E1809EA9C6C6F0422060C08F2CDE24FBF69AC8D461CF80A1459BECD0D8C1D383015CC24C5D99E3D6A7C3397545A2CE622552F8D8D65F89F2D1D62EED70E5AFF781946202669010CC0CE3D6C48501D80907F9616006E27E07EDC5E489D74E5B6AAA5F4041D6DCF7425800F13562CA35D20C161CB0C7E6BD5CCB0A27EBB5D433B9174298D7E24EF9E2D3B1B3C898B332875E52A21C5D957040FD9649BB0FF46EC04E32DB04DBCC19A841DBFB614DBCE353E46108214B854094DB667DD28067D8269DC4D18C9205CF20A1C20388C482B6B718CC48C557136778AC786BC08604F168E0375349510689C0764B9ECD8BC7C7483C24E2821E9C106CF968CEBC2AFE06A5950BF71A22BC0CB9058F94E11C23F96B9A7930F4330BE0CFC217BD65D9C24178284AC2CBAC318E1C743286F437D7CBAD3409601D90E18C41C0EB03968B56F1220DEA2C569CE16EC9EF5A10DD876391C24188563D367B3C01472B823109D119427685C730308D98FE02672859BFF8480D88932466F180474B07C1C7585F875A3F1EB2EB489CF6280569789433BC641C72B9A8037F72B3C905138B475CD1140C70A7F4E930D56BC799775D0A3664F0CCDD1B33C4D5D40CA319EF80F9420BF0133148789DF8E4161BB131786EC43905C142161B0618D0CECBEFB5FDE480EE404485D6CEE1FC45826418B04874D680514D09682202B52EBDA12DD570783C74089091E4367B294141CB6588FCF6CD902B94971D8316400E410B58F5F35240F3C95080552C4224CC481C257AF6EC63A13A2164010DC83C25C0931762B75055810E45F10CCEA80B71436AF5E41C0A00C36C283805BC17A08B4858D3CDB3DA8E50C85D66FB078459AA321D19AB2598C86E8F547E239ECA4C548F4DC0D0A7E4CDDB013353AC37B11A029B0DE7705DD291A299A18516399C3C65A1742140DF0106C089E8C84734C65F402AE8020C8A5622AEE3A1B8E8C093DFFDF44CD229A70994E746B512D8F5EA4058AF814A96FFFF6E707C1E70F7701CFC707F7DFB6686B0C3248DB4F138D5B0181C06B00E0FBFE1FF5BB06135F6D2D2514386C138D728D18790869285C904713C251B46BBB019B1BDC068A1DFF9074011F586DA95CF4EE1EA3CDF70CDA746C65887C4F5E58B1E801B144299A588D076FD6BDA05C40505D92766E16BD60C9653E894316800F39108A424811C085A4EFB0238C595BBF93F06C40BE04285B830187871B9B8370C48B0A2ED085124B0BE00D7983FC425D24000A1A0300177AE5EF8993088D5002173881045246C36C1B04F47F40538029DF1D4060300238CAB786B5F619F1A9C301C0291F11B45534E23FC20539CB5EAB6A773E61AF7D67407432FC3D867C39BEBD6FA108ECAAA9964AC6D88BBE14D1A2D771D6964A93ABF8ADC0BB48FB8B8E1C014F4AC018F1770397895EDEE66E85221A73031F4E203F2C59EBA8F3D4161585B6A02F1AE6F9E4F7FF4E76F3DC6ED90018EB2090150E0102DC6BC39C684AA25D19A219B8DB7C0986280D34454D485E24F3016FFB07201124264ED4AAB3353E7C4C481708DCB3456CE1F947721055F0BD08B61F8B2B0C90B7406C0A42BCE26CD29FA2B2D55699EDC1BD01E0BA919A92862A13C240C361667ACCBC100F824A1AA22148803B3C8B9E30AB4F106DED843EF84946F03D8A98DBEEDC399D28E987ADCB44A02755AA964E8133B709205465FEEBAC05235C9C0A8164B64EBAA54AEB9E808A90BEC2E157C418B901F8F2FB555C88303B2872FBFD028F5A3063618B10575D9D1D888B4C41914A18D9B316DB9575DE772081D08C3F2F407504606F16BEEE377DF402470F3E3083E33FC1E31098A2D70ED201C3648A9C6AB1A29ADDB641BF87775E2B86A243C2492F' $sFileBin &= '580F59685991B747EBA89366C266861F5A00753D2161492989D36DC097553322D8029F292037A8083F2F8D63EA5B26487F7B408D5F2C17A66A3B3C474405288FE021874004B6ECEB2A81461385FAFC32881598C5522CEA46E1DD96ACD6AC17892908F7CF01EB8750E973488D8726E0B02D8BEC7E568F0F472B580F1F5116B19533FAAC5783C32C78822212AFAB1920E90ADF09C1BB8C9F833086205601227B80328A0987876F6F3BB4ACE7080CB74390A2DAA159674E1B08921D10F2EB943FAA428F3D8825881CC9172EA20D8C8F0E4143C133456B6F5F430E966478FE368DFC4BC01B087FC1188700EF5BAC7889A45720BA05CFA20D16782440026F3F0086D736846920D3566DD98A32366D20C603825CC48311460B442457E157FFF7050F0E7C6904C9E6706B3859577422ADBA078F30151C5E9D90BEBCC50061F86CFE857437B56C20279397441C8A3FD8007774D6A6E347398FB9F2DD7014A2A7BB40505C8DE0C5BE6450554F36008784046F2F1D8EC1E16190198BB3004E01C4C0172D3B24F192FA06088E6FFCECCE02B680792096402313502A0596E0138DC041D8B951EDD4458D89AC830E08195946961C0C481004D946B6671406101814081C0365641918202C67503029809E03DA63E12FC52C7EB3EF842209C40FE3F1501D5A7E28682039D3C1546BF081A74859C1E3A08A3FC42692F1ED793C43746696260A5A363F0EFBF44D14825C30817B10FEBF243ED110F70C345308316958C15BFC770A59661C839871A45B913CEF8F0E8260296F06125BA968587F405A6F31D8B35A4B917C159057865506BFBBB51B811CB9254932502F8DB65F7D308B5818C75024360E96DC101D9746048A8625388B0C83D0880D6E8E833BD872175DFD12B07BCA6E29DA380416EFF8132A352429EF3F17A92E531A904823232480993928254F6CCFB972148F89988948B354B76D11789140891E20561E550A5C9890234A80213EA9FC149925083D3B294C4388BC063C990EDCCDD5FB39FEBC720DAE50182AD3DB29F9AC0E7449AFF5F625CC5482B52455D1216A80CCFA37102102BA43105A2BF096EAAA6A6AC710022B0451E0005810F3FDCF41D797D01848C79B38440E0274199DDBDC8B3BFC693E086C4172A15850899003B899728D2CFA08EB84EF4A1A86165D518B57EF292A01B0F025F18B31FF4F6FC17B296A6F25320189173B178B010FCDED169A7F040309C3040C095E7829700771E5FF47C6F0FF07A126A400BF0C3F6D0168DB02574401132AB889566E4C44101147D6754F1B0FD58D398D42CD478E0F660DAB60414A84E46A84A17E8B1D1B45A22A1F94E2C6B7FD9873291D2A29C65BC1FE8FF031F2B987B9AE3453043734D0C24B081DC2CFB549FB172BB8064B0907EE0275E795102CEB74EBA29F5DA5B67DC9D733EB1BFF4B5C43498B5AA02EB4FFFB1B01CA114EA44B4B44649F3B5975E0027A81B537272F2A75D5C0215E412F175F58962D259F705D463791A569038856050F47579C0AC056105E08055D17C45B8D13FF4610D4062C8B7E03BAC53C82CB404BBC742F3B460C0AD4842E315658B4C85CF71658B6294C04342E7A76487175D18D34BEEBC427CD944DFF8F554657273D014D0B880AD1055641051C9310A502D98A469BAD21F2B68801B20C99AD0CC8612F25CF02982EAD0A12C95A9FCC95EE3855B3DCFE9080C71555D100B8069220FD5DA266FBD091F0060CE06B74342068D0AE0B98942097DB881DDCCE4954AB87B0C70508210CB0C07283250AA3B86C5D3FD0291495E0D00BB23BC49B2286901B591238F694E04C93D04F3965B625DF4028E0445064EC56F1FFFF88A050054C64646464480C0804766C2C7640CC000B3405380000005B5104031162A62007322403C80A00082403C8400B00ADB24032093FD334CD950B010203042FB0254D0506330203419EB3ED0405060207000A0040A0BB99FF056AF103F7540564290811A00A1905FEFF97675CA00152656C6561736553656D6170686F7265DBF67F5B4C0F7665437269746963616C1763076FEBA6E4B76E15456E746572443D742C00DAB62B47144C5474F66DBB3DF20D57611E460853696E672DDAB737F74F626A2514436C6F7548616E64126D6BDBE60C776146457664413D96EC8B95530A9C730B236E6E976CA727496E7675697AF634DBC880DE694866296BDBB6B95F336C6E630770274AB1FFE76C661E345F6578636570745F6888EEAEDDDC72332A606D6F711A6265672D673CD6BA6876642518637079B28F6FDBFFFF0757076DF09A17F03505F0F902F06901F0D402050B7204196DEDFFFF35F0B90261BBF00705D1F0D302ECF0B101C2181C193DFDFFFFB61F6228FE03F0B31C3522453982204733730528F08B170709FDF6DFDD011B070C05F0340D65F03F06070A0D0D090D070F4BFF63BF0210050D0D06000C06F00C0A040050453D4CCDFF43FE010300448DAF4BE0000E210B01050C0098081B699A27801110B0100B6E166C19020433070CC0CEDC92D01E341007CB66E9D906A0B3D66E8CB15040B21C24C0F01706B26EA7581E2EF9787436B0C176077C979098C40267DBF87220602E726424611B0E7317D27DFB06279C40022763939B636510B32A01FCA2CDED376527421B34B2103EC1B7000000700400240000FF00000000000000000000000000807C2408010F85B901000060BE009000108DBE0080FFFF57EB109090909090908A064688074701DB75078B1E83EEFC11DB72EDB80100000001DB75078B1E83EEFC11DB11C001DB73EF75098B1E83EEFC11DB73E431C983E803720DC1E0088A' $sFileBin &= '064683F0FF747489C501DB75078B1E83EEFC11DB11C901DB75078B1E83EEFC11DB11C975204101DB75078B1E83EEFC11DB11C901DB73EF75098B1E83EEFC11DB73E483C10281FD00F3FFFF83D1018D142F83FDFC760F8A02428807474975F7E963FFFFFF908B0283C204890783C70483E90477F101CFE94CFFFFFF5E89F7B9D40100008A07472CE83C0177F7803F0375F28B078A5F0466C1E808C1C01086C429F880EBE801F0890783C70588D8E2D98DBE00C000008B0709C0743C8B5F048D843000E0000001F35083C708FF963CE00000958A074708C074DC89F95748F2AE55FF9640E0000009C07407890383C304EBE16131C0C20C0083C7048D5EFC31C08A074709C074223CEF771101C38B0386C4C1C01086C401F08903EBE2240FC1E010668B0783C702EBE28BAE44E000008DBE00F0FFFFBB0010000050546A045357FFD58D87EF01000080207F8060287F585054505357FFD558618D4424806A0039C475FA83EC80E9272EFFFF00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005CF000003CF0000000000000000000000000000069F0000054F00000000000000000000000000000000000000000000074F0000082F0000092F00000A2F00000B0F0000000000000BEF00000000000004B45524E454C33322E444C4C006D73766372742E646C6C0000004C6F61644C69627261727941000047657450726F634164647265737300005669727475616C50726F7465637400005669727475616C416C6C6F6300005669727475616C46726565000000667265650000000000000000448DAF4B000000000EF10000010000000300000003000000F0F00000FCF0000008F10000E2100000411100006B10000017F100001FF100002EF100000000010002006C7A6D612E646C6C004C7A6D61446563004C7A6D6144656347657453697A65004C7A6D61456E6300000000E000000C0000009D3100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' If Not FileExists ( $sOutputDirPath ) Then DirCreate ( $sOutputDirPath ) If StringRight ( $sOutputDirPath, 1 ) <> '\' Then $sOutputDirPath &= '\' Local $sFilePath = $sOutputDirPath & $sFileName If FileExists ( $sFilePath ) Then If $iOverWrite = 1 Then If Not Filedelete ( $sFilePath ) Then Return SetError ( 1, 0, $sFileBin ) Else Return SetError ( 0, 0, $sFileBin ) EndIf EndIf Local $hFile = FileOpen ( $sFilePath, 16+2 ) If $hFile = -1 Then Return SetError ( 2, 0, $sFileBin ) FileWrite ( $hFile, $sFileBin ) FileClose ( $hFile ) Return SetError ( 0, 0, $sFileBin ) EndFunc ;==> Lzmadll() If you replace the "Y" with "N" on the first line (on a 64-bit system), it will run correctly. Note that I included all the decompression funcs for the binary image at the bottom because it is certainly possible that the 32/64-bit problem arises somewhere in there. However, that code is over my head, so I can't determine if it needs adjusting for 64-bit mode. Thanks! Link to comment Share on other sites More sharing options...
SadBunny Posted July 17, 2016 Share Posted July 17, 2016 Reproduced, then reinstalled the latest version (3.3.14.2 - thought I already had that but I apparently had some conflicting directories) and now everything works fine... Roses are FF0000, violets are 0000FF... All my base are belong to you. Link to comment Share on other sites More sharing options...
Mbee Posted July 17, 2016 Author Share Posted July 17, 2016 Thanks for your reply, SadBunny! Unfortunately, I've had version 3.3.14.2 installed since it was released in 2015, yet the problem is occurring anyway... Link to comment Share on other sites More sharing options...
SadBunny Posted July 17, 2016 Share Posted July 17, 2016 Yeah something may actually be acting up here after my re-installation, my au3 paths are on the fritz apparently... So disregard that last test please The only thing I can think of if I look at the script and the library, is that you are directly writing a 32 bit DLL to that temp directory and then using the 64 bits executor to work with it but whether that could or could not be a problem is slightly over my head for now... Mbee 1 Roses are FF0000, violets are 0000FF... All my base are belong to you. Link to comment Share on other sites More sharing options...
Mbee Posted July 18, 2016 Author Share Posted July 18, 2016 3 minutes ago, SadBunny said: Yeah something may actually be acting up here after my re-installation, my au3 paths are on the fritz apparently... So disregard that last test please The only thing I can think of if I look at the script and the library, is that you are directly writing a 32 bit DLL to that temp directory and then using the 64 bits executor to work with it but whether that could or could not be a problem is slightly over my head for now... Thanks again! That's exactly the kind of thing that I suspected might be going wrong, but it's over my head too... Link to comment Share on other sites More sharing options...
SadBunny Posted July 18, 2016 Share Posted July 18, 2016 Well, after an interesting quest through my registry, my hard drives and my sanity, I am now back at the point where I am now sure I am running all the latest versions and am indeed invoking the 64 bit executor again. Problem reproduced. Wish I had something better to add Roses are FF0000, violets are 0000FF... All my base are belong to you. Link to comment Share on other sites More sharing options...
Mbee Posted July 18, 2016 Author Share Posted July 18, 2016 No problem, SadBunny! I appreciate your time and replies regardless. One of the resident geniuses will probably be along in time... Link to comment Share on other sites More sharing options...
UEZ Posted July 18, 2016 Share Posted July 18, 2016 (edited) The problem seems to be the LZMA decompression function which is probably not 64-bit compatible. The output of $L_BinImg differs between x86 / x64! The output from x64 is not a valid bitmap format and thus the error appears. This works: expandcollapse popup#AutoIt3Wrapper_UseX64=Y #include <ButtonConstants.au3> #include <GDIPlus.au3> #include <GDIPlusConstants.au3> #include <GuiButton.au3> #include <GUIConstants.au3> #include <MsgBoxConstants.au3> #include <StaticConstants.au3> #include <WinAPI.au3> Local $L_GuiWinHdl, $L_CtrlID, $L_BinImg $L_GuiWinHdl = GUICreate("Test", 400, 400 ) $L_CtrlID = GUICtrlCreatePic("", -1, -1, 200, 200 ) GUISetState() _GDIPlus_Startup() Local $L_BinImg = _Image() _Set_Control_From_Binary( $L_CtrlID, $L_BinImg ) MsgBox($MB_OK, "Test", "@error = " & @error ) GUIDelete( $L_GuiWinHdl ) _GDIPlus_Shutdown() Exit ; ;= = = = ; ; Func _Set_Control_From_Binary( $arg_ControlID, ByRef $arg_BinaryImage ) ; ; By UEZ, Prog@ndy, and Zedna, etc ; Local $Lf_BitmapHdl, $Lf_HbitmapHdl, $Lf_Error = 0, $Lf_Extended = 0 If @OSBuild < 6000 Then $Lf_BitmapHdl = _GDIPlus_BitmapCreateFromMemory( $arg_BinaryImage ) $Lf_Error = @error $Lf_Extended = @extended If $Lf_Error <> 0 Then SetError( $Lf_Error, $Lf_Extended ) Return EndIf $Lf_HbitmapHdl = _ConvertBitmapToHbitmap( $Lf_BitmapHdl ) $Lf_Error = @error $Lf_Extended = @extended _GDIPlus_BitmapDispose( $Lf_BitmapHdl ) Else $Lf_HbitmapHdl = _GDIPlus_BitmapCreateFromMemory( $arg_BinaryImage, True ) $Lf_Error = @error $Lf_Extended = @extended If $Lf_Error <> 0 Then SetError( $Lf_Error, $Lf_Extended ) Return EndIf EndIf _WinAPI_DeleteObject( GUICtrlSendMsg( $arg_ControlID, $STM_SETIMAGE, $IMAGE_BITMAP, $Lf_HbitmapHdl ) ) SetError( $Lf_Error, $Lf_Extended ) Return $Lf_Error EndFunc ;==> _Set_Control_From_Binary ; ;= = = = ; Func _ConvertBitmapToHbitmap($hBitmap) Local $Lf_Error = 0 Local $iButtonColor = _WinAPI_GetSysColor($COLOR_BTNFACE) $iButtonColor = 0x10000 * BitAND($iButtonColor, 0xFF) + BitAND($iButtonColor, 0x00FF00) + BitShift($iButtonColor, 16) Local $iWidth = _GDIPlus_ImageGetWidth($hBitmap), $iHeight = _GDIPlus_ImageGetHeight($hBitmap) Local $hBitmap_New = _GDIPlus_BitmapCreateFromMemory($iWidth, $iHeight) Local $hCtx_new = _GDIPlus_ImageGetGraphicsContext($hBitmap_New) Local $hBrush = _GDIPlus_BrushCreateSolid(0xFF000000 + $iButtonColor) _GDIPlus_GraphicsFillRect($hCtx_new, 0, 0, $iWidth, $iHeight, $hBrush) _GDIPlus_GraphicsDrawImageRect($hCtx_new, $hBitmap, 0, 0, $iWidth, $iHeight) Local $hHBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap_New) $Lf_Error = @error _GDIPlus_BrushDispose($hBrush) _GDIPlus_BitmapDispose($hBitmap_New) _GDIPlus_GraphicsDispose($hCtx_new) SetError( $Lf_Error ) Return $hHBitmap EndFunc ;==>_ConvertBitmapToHbitmap ; ;= = = = ; Func _Image($bSaveBinary = False, $sSavePath = @ScriptDir) Local $Image $Image &= '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' $Image &= '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' $Image &= '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' $Image &= 'J6tTcmKAG3GASlcFKYDAAgYBAe7ahG25fZq1d6CNOGtmEjovNtVdu5GGIqSHs9dlHVfsTIiob+iqyDExDyEcVUCrDGPufZnUKAmS2WYexTsAdQ0LLP40FzoHcpNXKibZ2LYVBbg9a8QtnpEeWW5NN0ksmUFVQAuihwFq2ej0+6Jt07VW4eeFmm7SYOJBigs+jCPwQB6MVI8IP4pR1zVqK60c5bKqC2bmMcTIJCXCJN+Ct6Qpt66dLZ1zUik4XVVTapsKXwN0znExUSqFiyKHKmUQIBziJzAG8w7xHZVXvdqcmEy0mQ5ja6j0dFl117+wjIodvqDZuM8O46YEKRpAKpFIGhQGcsSogAetWWUMP3iO0bN4JnovMO82c83CI/5aph+TINsMbZPj3vij/wAJh8LsqFxvTC90Qf3rMj+cgO3DyS/Rb7cc3fD1T5LY8K57z4vsTD4Xbl1c030Qf3pMfMNl5Jfot9uObvhqp8lseFc/58X2Nh8LsdXNN9EH96THzDZeSX6Lfbjm74aqfJbHhXP+fF9jYfC7HVzTfRB/ekx8w2Xkl+i3245u+GqnyWx4Vz/nxfY2Hwux1c030Qf3pMfMNl5Jfot9uObvhqp8lseFc/58X2Nh8LsdXNN9EH96THzDZeSX6Lfbjm74aqfJbHhXP+fF9jYfC7HVzTfRB/ekx8w2Xkl+i3245u+GqnyWx4Vz/nxfY2Hwux1c030Qf3pMfMNuBvBK9FRwED5vzaYB7wFvVe3/AKe3EbTOj3vSj9rNj8NtyLjyoF7SxSgD6pSY+YbXK0g+Dp8nvpMuEJkVOuWLLt6rM6lYq9MZFeJOY6Kk26R0WrlCuNihDi4bJqKAgvzBVCCqqO8RVU4kx1JPnuoOXKihBMU/JBwpocZCmIVQG6QEQKcCnOHGCYG0ObUf3h1X46CiIkSmYMEEFSpnRBybiXeCiqoRVREz1wZV2ZEyiaZxSMsKeqaehf3CaZ5yEIkQiaZCppplKRNMhQIQhCABSkIUoAUpSlAClKUAAAAAAAANsLZW2//Z' Local $bString = _WinAPI_Base64Decode($Image) If @error Then Return SetError(1, 0, 0) $bString = Binary($bString) If $bSaveBinary Then Local Const $hFile = FileOpen($sSavePath & "\Test.jpg", 18) If @error Then Return SetError(2, 0, $bString) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_Image 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 Edited July 18, 2016 by UEZ Mbee 1 Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Link to comment Share on other sites More sharing options...
Mbee Posted July 18, 2016 Author Share Posted July 18, 2016 Once again, Master UEZ has provided me with truly excellent assistance! Thank you! Two questions, if you don't mind: (1) Do I assume correctly that your newly provided _WinAPI_Base64Decode() function should only be called under 64-bit mode? Assuming that to be the case, I've added a tiny front-end func that calls your function when running in 64-bits and trancexx's older _Base64Decode() when in 32-bit mode. Is this necessary and correct? (2): Clearly, I must eliminate all usage of LZMA decompression (due it's failure to run correctly in 64-bits). But using only Base64 encoding/decoding requires considerably larger source strings. What about using trancexx's _LzntDecompress() function (as seen in the code posted above) for Lznt compression? Does that seem 64-bit compatible to you? Of do you know of any other 64-bit compatible compression/decompression functions I can use in addition to Base64? Thanks! Link to comment Share on other sites More sharing options...
UEZ Posted July 18, 2016 Share Posted July 18, 2016 (edited) 1 hour ago, Mbee said: Two questions, if you don't mind: (1) Do I assume correctly that your newly provided _WinAPI_Base64Decode() function should only be called under 64-bit mode? Assuming that to be the case, I've added a tiny front-end func that calls your function when running in 64-bits and trancexx's older _Base64Decode() when in 32-bit mode. Is this necessary and correct? No, the code I've provided can be run as x86 as well as x64. 1 hour ago, Mbee said: (2): Clearly, I must eliminate all usage of LZMA decompression (due it's failure to run correctly in 64-bits). But using only Base64 encoding/decoding requires considerably larger source strings. What about using trancexx's _LzntDecompress() function (as seen in the code posted above) for Lznt compression? Does that seem 64-bit compatible to you? Of do you know of any other 64-bit compatible compression/decompression functions I can use in addition to Base64? Try : https://www.autoitscript.com/forum/topic/134350-file-to-base64-string-code-generator-v120-build-2015-01-20-embed-your-files-easily Edited July 18, 2016 by UEZ Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Link to comment Share on other sites More sharing options...
Danyfirex Posted July 18, 2016 Share Posted July 18, 2016 Problem is that you can't use a x86 dll from x64 process. Saludos Danysys.com AutoIt... UDFs: VirusTotal API 2.0 UDF - libZPlay UDF - Apps: Guitar Tab Tester - VirusTotal Hash Checker Examples: Text-to-Speech ISpVoice Interface - Get installed applications - Enable/Disable Network connection PrintHookProc - WINTRUST - Mute Microphone Level - Get Connected NetWorks - Create NetWork Connection ShortCut Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now