#NoTrayIcon
#NoAutoIt3Execute

#include <WindowsConstants.au3>
#include <GUIConstants.au3>
#include <WinAPI.au3>
#include <GDIP.au3>
#include <Date.au3>
#include <Misc.au3>

; - Author: name22 (www.autoit.de)

Opt("GUIOnEventMode", 1)

;###-v-SETTINGS-v-###

$iGUIWidth = 200
$iGUIHeight = 200
$iARGB_BG = 0x0
$nFPS = 20

$iX_ClockPos = 100
$iY_ClockPos = 100

$nLength_H = 40
$nLength_M = 50
$nLength_S = 60

$bShowSeconds = IniRead(@ScriptDir & "\Settings.ini", "Boolean", "ShowSeconds", 1)
$bFluidMode = IniRead(@ScriptDir & "\Settings.ini", "Boolean", "FluidMode", 1)
$bOnTop = IniRead(@ScriptDir & "\Settings.ini", "Boolean", "OnTop", 1)

$nTransMin = IniRead(@ScriptDir & "\Settings.ini", "Numeric", "TransMin", 0.3)
$nTransMax = IniRead(@ScriptDir & "\Settings.ini", "Numeric", "TransMax", 0.9)
$nTransSpeed = IniRead(@ScriptDir & "\Settings.ini", "Numeric", "TransSpeed", 1)

;###-^-SETTINGS-^-###

;###-v-BINARY_DATA-v-###

Local $vBin_BG = ""
$vBin_BG &= "0x89504E470D0A1A0A0000000D49484452000000AF000000AF08060000008B928E75000000097048597300000E7400000E74016B24B3D600000A4F6943435050686F746F73686F70204943432070726F66696C65000078DA9D53675453E9163DF7DEF4424B8880944B6F5215082052428B801491262A2109104A8821A1D91551C1114545041BC8A088038E8E808C15512C0C8A0AD807E421A28E83A3888ACAFBE17BA36BD6BCF7E6CDFEB5D73EE7ACF39DB3CF07C0080C9648335135800CA9421E11E083C7C4C6E1E42E40810A2470001008B3642173FD230100F87E3C3C2B22C007BE000178D30B0800C04D9BC0301C87FF0FEA42995C01808401C07491384B08801400407A8E42A600404601809D98265300A0040060CB6362E300502D0060277FE6D300809DF8997B01005B94211501A09100201365884400683B00ACCF568A450058300014664BC43900D82D00304957664800B0B700C0CE100BB200080C00305188852900047B0060C8232378008499001446F2573CF12BAE10E72A00007899B23CB9243945815B082D710757572E1E28CE49172B14366102619A402EC27999193281340FE0F3CC0000A0911511E083F3FD78CE0EAECECE368EB60E5F2DEABF06FF226262E3FEE5CFAB70400000E1747ED1FE2C2FB31A803B06806DFEA225EE04685E0BA075F78B66B20F40B500A0E9DA57F370F87E3C3C45A190B9D9D9E5E4E4D84AC4425B61CA577DFE67C25FC057FD6CF97E3CFCF7F5E0BEE22481325D814704F8E0C2CCF44CA51CCF92098462DCE68F47FCB70BFFFC1DD322C44962B9582A14E35112718E449A8CF332A52289429229C525D2FF64E2DF2CFB033EDF3500B06A3E017B912DA85D6303F64B27105874C0E2F70000F2BB6FC1D4280803806883E1CF77FFEF3FFD47A02500806649927100005E44242E54CAB33FC708000044A0812AB0411BF4C1182CC0061CC105DCC10BFC6036844224C4C24210420A64801C726029AC82422886CDB01D2A602FD4401D34C051688693700E2EC255B80E3D700FFA61089EC128BC81090441C808136121DA8801628A58238E08179985F821C14804128B2420C9881451224B91354831528A542055481DF23D720239875C46BA913BC8003282FC86BC47319481B2513DD40CB543B9A8371A8446A20BD06474319A8F16A09BD072B41A3D8C36A1E7D0AB680FDA8F3E43C730C0E8180733C46C302EC6C342B1382C099363CBB122AC0CABC61AB056AC03BB89F563CFB17704128145C0093604774220611E4148584C584ED848A8201C243411DA093709038451C2272293A84BB426BA11F9C4186232318758482C23D6128F132F107B8843C437241289433227B9900249B1A454D212D246D26E5223E92CA99B34481A2393C9DA646BB20739942C202BC885E49DE4C3E433E41BE421F25B0A9D624071A4F853E22852CA6A4A19E510E534E5066598324155A39A52DDA8A15411358F5A42ADA1B652AF5187A81334759A39CD8316494BA5ADA295D31A681768F769AFE874BA11DD951E4E97D057D2CBE947E897E803F4770C0D861583C7886728199B18071867197718AF984CA619D38B19C754303731EB98E7990F996F55582AB62A7C1591CA0A954A9526951B2A2F54A9AAA6AADEAA0B55F355CB548FA95E537DAE46553353E3A909D496AB55AA9D50EB531B5367A93BA887AA67A86F543FA47E59FD890659C34CC34F43A451A0B15FE3BCC6200B6319B3782C216B0DAB86758135C426B1CDD97C762ABB98FD1DBB8B3DAAA9A13943334A3357B352F394663F07E39871F89C744E09E728A797F37E8ADE14EF29E2291BA6344CB931655C6BAA96979658AB48AB51AB47EBBD36AEEDA79DA6BD45BB59FB810E41C74A275C2747678FCE059DE753D953DDA70AA7164D3D3AF5AE2EAA6BA51BA1BB4477BF6EA7EE989EBE5E809E4C6FA7DE79BDE7FA1C7D2FFD54FD6DFAA7F5470C5806B30C2406DB0CCE183CC535716F3C1D2FC7DBF151435DC34043A561956197E18491B9D13CA3D5468D460F8C69C65CE324E36DC66DC6A326062621264B4DEA4DEE9A524DB9A629A63B4C3B4CC7CDCCCDA2CDD699359B3D31D732E79BE79BD79BDFB7605A785A2CB6A8B6B86549B2E45AA659EEB6BC6E855A3959A558555A5DB346AD9DAD25D6BBADBBA711A7B94E934EAB9ED667C3B0F1B6C9B6A9B719B0E5D806DBAEB66DB67D6167621767B7C5AEC3EE93BD937DBA7D8DFD3D070D87D90EAB1D5A1D7E73B472143A563ADE9ACE9CEE3F7DC5F496E92F6758CF10CFD833E3B613CB29C4699D539BD347671767B97383F3888B894B82CB2E973E2E9B1BC6DDC8BDE44A74F5715DE17AD2F59D9BB39BC2EDA8DBAFEE36EE69EE87DC9FCC349F299E593373D0C3C843E051E5D13F0B9F95306BDFAC7E4F434F8167B5E7232F632F9157ADD7B0B7A577AAF761EF173EF63E729FE33EE33C37DE32DE595FCC37C0B7C8B7CB4FC36F9E5F85DF437F23FF64FF7AFFD100A78025016703898141815B02FBF87A7C21BF8E3F3ADB65F6B2D9ED418CA0B94115418F82AD82E5C1AD2168C8EC90AD21F7E798CE91CE690E85507EE8D6D00761E6618BC37E0C2785878557863F8E7088581AD131973577D1DC4373DF44FA449644DE9B67314F39AF2D4A352A3EAA2E6A3CDA37BA34BA3FC62E6659CCD5589D58496C4B1C392E2AAE366E6CBEDFFCEDF387E29DE20BE37B17982FC85D7079A1CEC2F485A716A92E122C3A96404C884E3894F041102AA8168C25F21377258E0A79C21DC267222FD136D188D8435C2A1E4EF2482A4D7A92EC91BC357924C533A52CE5B98427A990BC4C0D4CDD9B3A9E169A76206D323D3ABD31839291907142AA214D93B667"
$vBin_BG &= "EA67E66676CBAC6585B2FEC56E8BB72F1E9507C96BB390AC05592D0AB642A6E8545A28D72A07B267655766BFCD89CA3996AB9E2BCDEDCCB3CADB90379CEF9FFFED12C212E192B6A5864B572D1D58E6BDAC6A39B23C7179DB0AE315052B865606AC3CB88AB62A6DD54FABED5797AE7EBD267A4D6B815EC1CA82C1B5016BEB0B550AE5857DEBDCD7ED5D4F582F59DFB561FA869D1B3E15898AAE14DB1797157FD828DC78E51B876FCABF99DC94B4A9ABC4B964CF66D266E9E6DE2D9E5B0E96AA97E6970E6E0DD9DAB40DDF56B4EDF5F645DB2F97CD28DBBB83B643B9A3BF3CB8BC65A7C9CECD3B3F54A454F454FA5436EED2DDB561D7F86ED1EE1B7BBCF634ECD5DB5BBCF7FD3EC9BEDB5501554DD566D565FB49FBB3F73FAE89AAE9F896FB6D5DAD4E6D71EDC703D203FD07230EB6D7B9D4D51DD23D54528FD62BEB470EC71FBEFE9DEF772D0D360D558D9CC6E223704479E4E9F709DFF71E0D3ADA768C7BACE107D31F761D671D2F6A429AF29A469B539AFB5B625BBA4FCC3ED1D6EADE7AFC47DB1F0F9C343C59794AF354C969DAE982D39367F2CF8C9D959D7D7E2EF9DC60DBA2B67BE763CEDF6A0F6FEFBA1074E1D245FF8BE73BBC3BCE5CF2B874F2B2DBE51357B8579AAF3A5F6DEA74EA3CFE93D34FC7BB9CBB9AAEB95C6BB9EE7ABDB57B66F7E91B9E37CEDDF4BD79F116FFD6D59E393DDDBDF37A6FF7C5F7F5DF16DD7E7227FDCECBBBD97727EEADBC4FBC5FF440ED41D943DD87D53F5BFEDCD8EFDC7F6AC077A0F3D1DC47F7068583CFFE91F58F0F43058F998FCB860D86EB9E383E3939E23F72FDE9FCA743CF64CF269E17FEA2FECBAE17162F7EF8D5EBD7CED198D1A197F29793BF6D7CA5FDEAC0EB19AFDBC6C2C61EBEC97833315EF456FBEDC177DC771DEFA3DF0F4FE47C207F28FF68F9B1F553D0A7FB93199393FF040398F3FC63332DDB000000206348524D00007A25000080830000F9FF000080E9000075300000EA6000003A980000176F925FC54600004B414944415478DAECBD798C1CE77D36F8D4D9F73D57CFC92139E4909448C99445C9A4643B8E0FC84E8C788D649DC4F1228BFCB5FF2C1027810D2CB0D800DA18D818FB219B40B0BDEB24929DC8CA97C4B1FD5932BF58902889142551E235E47038F73DD3777775DD55FB07BB5AEF14ABBBABBA7B484A6201853ABABBAAFAADA79E7ADEE7FDBDBF97324D13F7A7FBD30771A2EF17C1FDE93E78EF4FF7A7FBE0BD3FDD9FEE83F7FEF4219F58A79D14457DE40BC6344D7B21502D966D9DA6C5D2BA1FF76BD5EFDF97E6E0FD8803950425D560DB69760364129CCDE61DDF35DFBF63E67D40E33E7809C03602215D9B29DBD2BECF7E1C3B881BB1AA4180D570D8366DFB76CCB5EB373FCA40663F826075022CED3033B625B9DE08C8AD58D70E4CFBBA7DD69B7C070490CD8F2290D98F106849A0C2019C4CAD3C188775FB4CD940DD8A75D102A83A0154A775FB3EFBEFCD8F2290D98F086049E05AC0A46B4B72E61AAC33C43A4D80D80E5E12C4A44CB0CB003B18B5DABA569B758775729F41ECB3B374FD41F9B04B0BF623C0B234015412843CB1E41C961C01603B9019070941359009A4C6B583CD09A86A6DBDD992FC1E097EF281B06BE40F5D458FFD108296041409581298BEDA3A5F5BF711FB7C36205BBF25814FD9C0EBC4B84E1532BB2C70625A0BA0163895DABA42EC5788CF34DBEC24313E9420663F84A025F52AD700A47EDB6CEDE36B4BCE065E96D4C6F97C3E2E08424414C590288A6100104531AAEB3A6D7991D56A356A18066D9A264CD3347C3E5FC1300CD3300C00D00281405ED77533180C6643A150311A8D664646463609102A0EE055886DD901D424336B0E7AF9430562CA29AAEC5E6FA468015AD6C6B03E008106B3BFB6B4B32F0780AB56ABE162B1982A97CB494551C2AAAAFA15450937B826D48009C330EADBF6A5359BA6095DD7EBDBD63AC7713996658B7EBF3F9B4C269746464616FAFAFAB204406502C4B20DD8242BAB0E6CAC37B0DF3E302026F1DA75F03EFBECB3BB76E17FF8877FE806B43CC1A40100C1063309601F005E92A470369B1D140421294952CC300CBF551E569998A689F5F57564B359E472396C6F6FC3344D6C6D6D4155D5FA77B6B6B6A0EBFA2D5B8361D0DBDB5BFF8C655924934900403C1E472412412412412291D801665DD7A1691A1886290683C1C54422317FF8F0E1CB35302B2E668BB92D8D6CB402F173CF3DD71188BFFEF5AFDF076F03E0DA2B6216687DC42BDF4F0034E4300709D0FA0B85425FA9541A902429AE284A94A6E9FAFF2F168B585A5AC2E2E222B6B6B690CBE5B0B5B5B5AB37C70273341A454F4F0F52A9147C3EDF0E30FBFDFEC570383C373131F1F6912347E609C6956DB24271C1C4F6C6908E00FC8103EFB973E776ED624F9C38615D0C694B3981364000364C2CADB9CEB8954AA5A750280CCBB21C5355B50E585114313B3B8BA9A9292C2C2C2097CB395E53381C46301884DFEF4728140200844221D034BDE33BB1588C0F85427CB95C56D6D7D795BAE16B1810040100200802244942B55A45A552713C5F2814424F4F0F060606904C26C1B26C1DCC3E9F6F36994C5EF9F8C73FFEDAC0C040D6065C521BDB2585EE00E21D2CFCE69B6FBA02F1CCCCCC7DF036002EE5005ACE260D2C568DD4965162DD0272606B6B6BBC5AADF62B8A126718061445A152A9E0BDF7DEAB03969C7C3E1FA2D128A2D12802810002810082C1E08E42DCB76F5F229BCD8A854241B25F7F3A9D0EF7F5F585B6B6B684F5F5F51DC8E4799ED9BB776FFCFAF5EB59B2DCABD52A445184288A28954A28954A906579C77193C924060606D0DFDF0F9665A1691A"
$vBin_BG &= "745D47381CBE34303070FE739FFBDC990615BB4695BB862CEC06C0770BBCF7A4DBE0C0B6B40BD0866BA08DD6D6230042A669063736362665594E1A8611B2D8F1DD77DFC5C58B17B1B8B8583F6F3018AC8335994CC2E7F30100F6EFDF9F5C585828A8AA6AD4DC83FA6F6459D65996A5ECFBC982262B73F58267595AD33493FC8D699AF58764DFBE7D89C5C5C5A2AEEB862CCBC8E57228168B2897CBA8542AB879F326666767914AA53030308044220149928ECECECE1EFDC10F7EF0D9482472E92B5FF9CA4F388E736AE2666A40A66B00B6C841B77BD4274E9C70CDC01F79AB8C605BCA065ACE260FEC80B5D8360A20ACEB7A747B7B7B42519494699A7E8661B0B9B989B7DE7A0B5353535014A5FE7A0F87C348A7D38CDFEFD7EDA0334D138AA2E8C16090CFE7F3B7B1ABAAAA06C3308C1D9C4EC72127866118599675C33076BCE94CD384DFEF67799E675455356A2C8D8181010C0C0C80A228E4F379E47239140A853A3BB32C8B9E9E1EF4F4F4806198B15C2E37F6C31FFEF078381CBEF0852F7CE185643259B2492F10EB2A5111B6C753E0C48913F022233E72E025D89672605BB2221626401AB32D23AAAAC6B3D9EC014551521445F10CC360797919AFBCF2CA0E96EDE9E9412C16433C1E07001C3E7C38393B3B9B174551B383AF5AADAA8140802535B0F5D9EAEA6AA59975465A642448F3F9BC643D0C84E76A695C5614458D043FE9761C3F7E3CB1B8B8585414C5C8E7F37536CEE572C8E57288442248A7D308068383C56271F0273FF9C9A3E170F8ED279E78E2F9B1B1B12C51CE8D82952C19418308023A71E204752F0198BDC7804BCA048EB0BD48D0466A608DD7961670C39B9B9B476459EEA3699AE3380EF3F3F378FDF5D7B1BABA0A0088442208854288C562E079BECE88A669A2582CCAB158CC57AD5635BBB65A5F5FAF36D25DCDF6D93FB77FC75EB7B0405A2A95D452A9A49280B73E0B87C31CCBB2B4AAAA06455148A55248A552501405C56211D56A15B22C63616101C160107D7D7D0806837D954AE5A95FFEF2979F080683AFFCD11FFDD1F7B0B3E9BAD14446AF19F71A80D97B04B8F6C019CBAF0D10C0B5183661036E2497CB4D489234689A6688E779CCCECEE2CD37DFC4E6E6661DB4C16010FBF7EF0F94CB655592248D0493699AC8E7F3522412E1ED206BB4EE06B4E57259314D13954A4569F65BBB6C104551B783D65A8F46A3BE42A120DB8FC7F33C7A7B7BC1F33CB3B5B5A58BA2084551B0BEBE0EBFDF8F643289402010AF56AB5FFEFEF7BF7F249148FCB7AF7EF5AB3FC5ED311824136B0488E97B0DC077D56D7000AE5DDB866C4C6B01370E2026CB726F3E9F3FACEB7A9C65596C6F6FE395575EA98396E779F87C3E84C36198A689C1C1C130006A7575B54C02B711489B01B71DF66D55C6F67DE4B6B5CE300C45D334A5699A61EDB3968944C2DFDFDF1FBC71E3468EB4E1ACC6139FCF876432098EE3A0EB3A58967DF3A1871EFABF8F1F3FBE4C3464E80E2E843DF6788713F191B3CA6C36184DB490F96D6C6B813641AC47B3D9EC615996871986611445C1D9B36771E3C60DAB260F9FCF07BFDFBF03881CC7D1939393A92B57AE64745D379D80DA0AB86E40EC99415C80965C6FB43C78F060329BCD5673B99C44EE976519B22C43D3B41DAE4ACD731643A1D03FFDC11FFCC10FE01C86E914A95697136FBEF9A6F991B2CA1C80CB11C07562DB646D8EA9AADA5728141ED0753DCE711CE6E6E670EEDC39288A02BFDF0F9FCF470D0D0D05298AA2D6D7D72B24186559361616164A5645AA13E0769379EDF2C12E15ECEB4E4B8661284551F45C2E27DB2B873E9F0F3E9F0F8AA2D43DE142A1804824029EE7039224FDF13FFEE33F4E1E3E7CF8FF7CE49147D6887B63C905D35679B3D6A913274E606666E6AE48883BCEBC36E092915FA44CB0833601205E2A950E88A2B897A6694E92249C3B770EEBEBEBB74A93A641D33482C12037313191344DD39C9999C90B82A03A81D30B705B316F341A65138904CF711C95CBE5945C2EA70200C771D4E0E060209148701CC751E572599B9D9D15545535BD32AF5B066EB46F6464242A49929AC96444CBFDA85D23D9F0920D87C37FF7D5AF7EF5BF3A4806721D68D0A47C279997BE8B8CCB108D0E41826D93007A00F402E8AB2D7BB2D9ECA392241D645996DBDCDCC4E9D3A791CBE5E0F3F9C0F33C1886414DE7A9D96C56A4288A4AA7D361D25120EDAB56B33D22CC69DDDA3E70E04078626222BC67CF9E502291E0ADCFC2E1303B313111068052A9A40D0F0F078F1F3F9EB05F0379AC46E7F47ADDE41C89447CA9542A30383818615996A669BA5E1FA0691AB22C83A228701C979224E97FFBA77FFAA7FFC3A112D7AC37351934F5E163DE26C00D10BE6D9C60DB148084A66903C562F198699A7100B874E9129696960000BAAE4355D53A8B58378BE338FAD0A143299AA6E9F9F9F9622E9793BCB0AE5B1961DFFEFCE73FDF37373727CCCCCC0816F3721C4757AB55BDE625874746468267CE9CC95AFBBC32AF9B25B9CE300C35393999080402DCFAFA7A65636343B0BE4351D48E079F6559701C67C991D7868787BF7DF2E4C90D876663C3DE12873B145A79C799D725E3266A80B558B74755D5E162B17882A2A8B8AAAA75FBAB56E0B4CFE7E39D98469665636363430080C1C1C11045515423566A167BEB9679ED0F84F5992CCB66A552D1C9EFD62A5046BBCCDBECFA9C7EDFDBDB1BF0FBFD9CA228FAC6C646D5FE3D59966118C66D206659F6D4C6C6C63F9C3E7D7A14B7874F3A1261EDFFDF3106A6EF3070691B70C336E0F6D6E694A228A3A552E904C330FE52A984B7DF7E1BB22C83A669542A1598A6C90C"
$vBin_BG &= "0D0D455996A59D5E9F9B9B9BA22CCB9A2CCB8605DE56A074035C27A0911A926477F277D168941D1D1D0D6E6D6DC98AA298F6C074FBB13BB93E6B1FC330747F7F7F08009697972BBAAE9BF6721A1E1E8EF23CEFAB542AA0691A1CC781A6690BC0E3D56AF55F5F7CF1C5C3B6666338480AF2FF531F78F036711502841546326E0A405292A4894AA5F228CBB26C2693C1D4D414689A86AEEBC8E7F3D0340DE57259CDE7F3D2D8D858DC8981344D33A7A6A6F2D7AF5FCF2B8A62B4BAD1AD7A3FB4625E52BAD881C9300CF5E8A38F264451D4DF7DF7DD5233D0B63AB75BE01A86018661685996F54AA5A266B359C9FE50C562317F2412E10541505555452E97B3C22CEB1282E3B8A861183FFBE52F7FF91B4DBC5FD309C41F58F03AC42AD8811B211C8594055C51140F89A2789465596C6D6D617E7E1E1CC74192246432991D37686D6DADB2B2B2526E54595114C568F43AF5026037CCEB241B6A00A21E7FFCF10400BCF5D65B454551CC66A0EDE4BAECFBAAD5AA76E5CA95DCF4F474C1A91C7A7A7A020B0B0B452B5ACE300C6C6F6F439224F03C0F8EE3EA4B86617EF8E28B2FFE8F845E6E94D1E78EB12F7B071E0E32C0C6C90E4B597658A55239A1EBFA10CBB2585B5BC3E6E6267C3E1FD6D7D791CBE56E930696BBE0B4DFEDB65B0BCD4DC5CD7E0E003879F264221289B0AFBEFA6AAE5028684E15B3463E2FB9DFEEED3AF9BE765FD8DAB6E220EC9FDFB871234F56F0AC697373139AA6219D4ED77FA3EB3A4CD3FCBF5E7CF1C58F7FE10B5FF873A2726600307FF8C31F9A1445E11BDFF8C61D63DF5D711B6AAC6B6F390B101AD772147A6B722159A9541E370C6388A228ACADAD219FCF0300161717E9542A155F585828CAB2ACB7022AB93F1289B0F1789C675996CAE5724A369BAD033D1A8DB2C964B2FED9F6F6B6DA2E809F78E289783299E4C93278E38D37F200F0894F7C22612FAF37DE78236F9DAF9D56356B3D1E8FB3C96492E779BEFEFF482781FCBED376B3FD3E9F8F098542FAF8F8B8D5120745512C49F693CF7DEE73DF8673CAAA3BE636B0BB2417ECCE82DFE62CC42D2B0C405C92A423A6690E310C83B5B535088200966571EDDA3594CB6583655979CF9E3DB19B376FEE08086F05E0898989703C1EAF07DB90009D9C9C0C271209DEDADEDADA52DD02D7FEC05FBC78B1C2F3FC8E273E9FCF6B00F0FAEBAFE7ED6594CFE7354B233BB1AF9B56358AA230393919B61E1AD33491C96454F2377606762225A7FDC964D29F4EA7C3D3D3D3D9999919F3D0A143F5CA5CB55A05C771BFFBD39FFEF4DA97BFFCE57F2234B075DF0DB88B58BBB798D701B86493AFE5E3F61076584A55D50945518E531485ADAD2D542A15288A82CB972FD7FB79594135B95C4E769209CD006C9A263EF7B9CFF5CDCDCD09376EDC10ECDFFDE217BFD877F3E64DE1DAB56B8257E6ED467C43AB001D37AD685FFAD297FA666767851B376E086ED9B6D167F178DC373636169D9B9B2B88A2A852148540208063C78E81E779288A024110609A26161616FE976F7CE31B2FE3F6B4556EACB57BD2E7B500CC3AB06E9CD0BA314DD34655553D4ED3344AA5121445014DD3B872E5CA0EE09AA6899595954A23E036F25D9DC21B1B55B23A6DD9DAADD94D258DAC28BA694D6C5656954A455D58582892652D8A222E5DBA049AA6110E87118944405114C6C7C7FFF66FFFF66F4FE0F60C434E0908EF5DB7C1C6BA4EC02523C4A28661A455557D94A6E97AA7438EE370E9D2A57A2FDA766F76B3C60337EE8353E04EB3B9DD6BF57AEC466E845B703603AD35ABAA6A148B45C5BEBF5AADE2E2C58BE0380EB158AC1E9576E4C891BFF98BBFF88B899A774FE678DB7500D3BBA8737D363FB7DEEBC134CD5E55551FA7699A5514A50EDC2B57AEB0D1683446D334D50DC66AC4AE7670DAC1DD2E18777B767A08C9C6914E40EB662E168BD4850B17C0711C52A914C2E130288A0A7FFEF39FFF7F7EF7777F370D5BC6A1DD0630DD65B960771742D819971B0310D534ED518AA2829AA6D5817BF5EA55ACADADE9866160FFFEFD098661E86EBD769BB57C5937BD9B6CD90D807A91148D7ED32DD09AA6895028C41D3C783095CD66E9AB57AF82E338A4D36984C361B02C9BFEE33FFEE36F6367DA2C76B7014C7741403BC9053BEBD67BF76A9AF6582D5A0CB22C8365592C2F2F636E6E0EBAAE9B8B8B8BC552A9A4701CC7EC26633901BB13607AFD6D37CFE5F4607653AB47A351DFDEBD7BE32B2B2B6555558DD9D9592C2F2F83E3380C0D0D81611804028153FFFAAFFFFA6DECCCB6B9AB0CDC91DB60032E638B128BD9E3150CC398340CE324004892045DD7B1BCBC8C3367CE7454996974731F7FFCF1783299E4C9FFF8C61B6FE4373737D5279F7C329E4AA57678B367CE9CC96F6E6EAAAD1A251AB90B9D760372E3F792EB9FFAD4A76EFB0F9687ECC561A0280A56D620A7D9EFF7332CCBD296FB60CD4F3CF104464747210842BD2BD0D9B367BFF5AD6F7DEB75BC9FB587CCD863746AA575DBE725DD05DEA192160510364DB3C734CD8F5114054DD3EAD96ADE7CF3CDAE81D63E5FB972A5622504B1A65C2EA7D5422B2B1CC75124D80B8582D669F71F3700265BCFDCEC6F345DBC78B1C2711C4582329FCFDFD665DE09C0F6C9EA7D41A6ACB2264992748AA274FB6FDF7CF34D241209241209A4D369ACACACE0F8F1E3FFEB6FFCC66FCCFDFAD7BFDEC0CE9CC566CD4A23FFA079579897605D2B4BA3152916B54589F5D458F7B300D28661D4FB529D3E7D9A595E5ED67703B8CD18D96DCCEE6E82D7CDFE4E7A5434F3775BCDCD58D83EA7D3693CF5D453304D13535353562294B35FF9CA57FEF71AEB4AC4AC3A78C177"
$vBin_BG &= "CDE76DC4BA6492BB90699AC701A489FE56989999412010888D8E8EC6BA5539BB9B15AD7BD599D8CD996118BA582C72333333605916564B5C381C7EFC7BDFFBDEFF849D29642D0DCC744BFFD26DEA0E7B25AD117843B5CAD9410BB8344D63717111AFBDF61AE6E6E60A00303E3E1E7753D8DDA884B462DF56013C6E622ADA01959BE0A176FFC76EC8B26834CA4F4E4EA6C2E13077E6CC192C2C2CC0E7F3E1C89123505515232323BFF3D4534F8DD900DCD50A1CDD21EBDABBAC934942AC5CB88F5214C55AAF9972B95CAFA0A9AA6A2C2C2C14E7E6E60ADD2CF8761A1ABAC95AED027B371D0DA7726977A6699A1A1A1A0A2F2E2E16373737ABA669E2CC99332897CBE8EDEDC5C0C0005455F57FED6B5FFB13DC9EC49B1C55E9CE32AF83C3E0C4BAD67C14C020A9D12E5EBC0851146F6BD5E9C60D6E05D856ECD4CD576DA34ADF6E4A02B76F914EEB0DBAAE9B57AF5ECD912D71A228E2BDF7DE03455178E0810740D3342291C8F1BFFCCBBFFC2DBC9FD0DB473421772C1FE82EB02E9976344830AE1FC03EF247F3F3F3989A9A6A1A07DB2E881A01B7D9B1DCBC6ADB910E9D7EE74E5C7F3B006E76BF00606A6A0AF3F3F3E0791E0F3CF0006459C6C8C8C893B87D1C10BE1BF281EE02EB92C025C77B78BCE638D4A7F7DE7BCFBF7FFFFE643018E4BAC9766E80EB5513DE6B153CAFD7DDAA1CBA5D87B0E63367CE4051148C8D8D21140A81E7F97D4F3FFDF41F62E7700AA47CB8A3CC6B675DBBDE0DD4ACB2FDE48FA6A6A6108944825652909191917AE7C956AFB96E01D70D6B79AD70755BC7B67B7E2F15CE7600ECE61E310C434B92445B69B71E79E411C8B28C743A7DEAC89123FD36F9C0752A1FE83659978CD72533955B17F6F1DA12A669229BCDE295575EC1CD9B37F39B9B9B82699A662A950A1C397224954EA74396CBDE09FBB8B9516E7F7FAFB07037AEB7DB65D1E83BBDBDBD81C9C9C9D4C8C848F4D5575F45369B455F5F1F868686A0695AE46B5FFBDAFF40BC99AD7CCB5C27EC4BB7C1BA64AC2E99D1D1BAA01ED3340F92E38C5DBB76CDEA0765AEADAD55AE5CB99229140A124DD3742291F075CA6A6E6E4A3B1262B72546B78EDF4A2AB4A3A7DDBE1DA2D1287FF8F0E1E4F0F07094E3389A61189AA2286A6A6A0A8661E0E1871F862CCBE8EDED3DF5F0C30F0F3B68DFB6D9976D533290618F24F3FA4CD3FC38F94ADAD8D8C0E5CB977754D01445316667678BE170B86A81BA9696888DC7E33CC330542E975332994C3D209A6559EAC08103A14824C256AB55E3FAF5EB42A552D1DD56A89ADD60AF2D6FDDE851E1D414ECD4E9D2E973FBD2CB711B9D87E3386ACF9E3D819E9E9E7A5EB51B376E08F67133C8DF4E4C4CC492C9A41F00344D33565656CAF97C5EA2691A972F5FC6D8D818D2E934C6C7C731333383A79E7AEA4BEFBEFBEEFF87DB472722BB12995D655E423290CDC176F0FA4CD38C188671B0D6490FBAAE636666A6A185646500B7B6272626C2131313E1F1F1F1502291E049001D397224B267CF9E60A954D2FAFBFB7D274F9E8C3703AA5BCD7BB73CDB6E9FC78DE66D5626F1789C3D7CF870B8765FB4B1B1B1E0638F3D9668767E499274C330CCB5B535E1D2A54B192BB5AAF5F9CCCC0C745DAFB36F2A953A313838D863ABBCB5AD7DE93659D73EDAA40F006F18C6C7ADD11B354DC3DADA1AA6A7A71D6D31A7EDB7DE7AABF0AB5FFD6ACBFE7D9665A9A1A121FFCACA8A74F1E2C5CAD5AB57CB814080E9EDEDE55ADD946EB654DD2999D1CDEB6C551ED6762E97D34E9F3E9D3D77EE5CF1D2A54B958585856A241261038100D3E8B72B2B2BC27BEFBD97595959A9188661DACF333D3D8DB5B53544A3510C0D0D4114457CF9CB5FFE82CD95F2B5AB7DE936814B0E2C5D8F9E370C63B4260BA0EB3A565656682B33A19BA7BF91A91F8BC5D8DAB0A932006C6D6DA900D0DBDBCBB7C334DDB2CD1A01A7951FBA5BACDBECFFB62A7755554D271966256E71FABDAEEBA6A22846B3732D2D2D41D7751C3F7E1C9224211289EC7700AF93F6ED1CBC846480432C439D7555553DA6EB7A4AD775288A824C26831B376E80A2286A72723235303010F2CA86F602B10A521004DDEBCDB953ECEB34708A9716B6BBC1BAF6CF63B118BB67CF9EE0E6E6A64C66F8F152014CA552FEC1C1C1F0D4D41432990CFAFAFA904824C0B26CFAB77FFBB74F61E7F8CF3C11B443B965E07698971CF0C43A29ABEBFAC19A0EAA4B0645518CE5E5E5D2D4D454369BCD4A6E2D1CA71BDE68DBCD77EE34FBDE0DADEB85759B6DB32C4B7DE2139F4888A2A85FB870A1E4D57A6359963E7AF4686F32990C0A82A0D5D27241D3343CF8E083104511838383479B4807BA9B9A97ACA89123ACD77B8A6A9A96D6346D44D7F53A78E7E6E6EA07D034CDB0B2DDB4EB41024020106000209148B03526365BB1C89D60DF6E5965778A751B8198E338EAC9279F4C00C0F9F3E78B76D67573BF545535AE5FBF9E9B9E9ECE5943DACECECE42D3341C3870C01A2471CFE4E4E498CD36232B6EAED897762119C8EFDA352F07805514E5B06118F59167ACAC376ED8A0111B92EB5B5B5BAAAAAAE6E8E8A8DF344DA4D3691F006C6F6F2B6E6ECA6EB06FA7006E379EA19BAC6BDFF7E4934F26A2D128FBDA6BAFE5ED3D32DC5890D6BA24493B649D2008585B5B03001C3C7810A228E2E0C1830FD9D8D7EF10EFDBB1CF6B6F5523999705C0AAAA3A625DA4A66958595971155D652FFC471F7D346EA560DABF7F7F68DFBE7DA1B367CFE6B7B6B6D4E9E969E181071E087FE6339F49C6623176696949CAE5725ABBAFC76EF8BE5E7A58B8F55DDDF8BACD92F0913D29DC6E03407F7F3F178BC55800F8F4A73F9DB4F69F3D"
$vBin_BG &= "7B369FC964D476CE4DAE2F2F2F239148E0E0C1833877EE1C42A1D0A843B8244FF479EB2A781D812B49D2B0AAAA8356589C2449F5414EBC480400B876ED5A8565598ACC756B31C0CCCC4C757B7B5B49A7D3BE6BD7AE09CBCBCBB21BDDEB95F53BED1ED46CBF13685A01D6CD03E094DFACD143E20462E056FEB4575F7D356FEFE66365B6B4FFF76660765A5F5F5FC7F8F838D2E9B435C4587A626262EFCCCC8CD820DE41B3F581F30C5EAA09F3B200185114270DC340B55A8595A078EFDEBD095114B55C2E270982A0360301B95E2C16B5661961F2F9BC66B16D2BB9E05632B4C3BE6E01EC16D0EDB6AAB95DB79FDB699FA228E6D6D6966AEF656CF567737B2D8D98170072B91C7A7B7BB17FFF7EBCF5D65B1819193938333333E7102A694987A6FDDC6897AD6AB443858D01C0288A32AAEB3A2A950A5455C5D6D616565757CB866198A3A3A3112BA57EBBAFEC56FEA85BD0760BB89D6854AF01349D5C8717BDEBC6AF76730DF67D3CCF33FDFDFDC1C9C9C9642291F06F6D6D415555ECDFBF1FB22C231008D8631DFC5E5C07B7B28104701DC892242564591E0650CF2F562814601886B6BEBE5E595D5D75F5FAF502E06652A1DBD6593BACEBA5F7702BD6742B2BDAD1BBF6EB6D94FED40BE3DAD936168BF1B55188AA954A45AE313CFAFBFBAD712FFA53A9544F369B2DDB98D72E1DCC76AC32BB646088A7822E97CB0748D6B5672F77E32AB8B1889A31861B36E966E5CD6D838ADB1636B75D7ADC5CAF575FDC6D597AB5F1ACF5CDCD4D717E7EBE582814245DD74DC33090CBE5A0691AC6C6C620CB32868686F6DBC26979873807CA2B782907CD4B0299AA56AB63BAAEA35C2E435114148BC596E0F0F24A74D352E5B6F05B6DB7FBDA6ED54CDCEAD5EC35AF44AB87DBAB5C68A7BCBDE6BE20F7170A05288A823D7BF64096658442A121322AD141F7529D3452D00E928106404992346A815755D5BA7470F39A6D1724ED00B99BDE6FBB3D303AE911D1CD96B4DD02AC5B7965BDA5FBFBFBA1AA2A5896ED25AC3232C6976CB0700F5E5B658D229E807AEB872008714551129224D5F3EB5A9970BA055C37CCD52DF9E09685BB016037C0F5D288D36DB9D0CAFEEB04C05666D06030089FCF0700A170381CB755D848E6453BB2A19974A072B9DC18A9774551C4F0F07074747434D6DBDB1B708A24EB0680DB65DD6EBA0F5EDE0E6E1EB276CEEB96793B61DF4E80DB0CC0A2284255550C0C0C4051142493C921DC9E5D92ED443638316F7D2E97CB7B344DAB83579665E4723951144535180CF26EFEB89B02725BC06E59D72DF376A23BBD74176F7724FA56CCDB0EFBBAD1E75EEF1F00C46231DFD0D05078626222C9F33C638511F4F5F54155550483C17E3242D106DE8601EAAC4BF0DA010C5114D324F3AAAA0A4DD3D44AA5A2DA931EBB7D9ABD306DABE3BABD915EF4AFDB56B65656572B9BCC4BC384BD41A091FDD5CC1273BA6697C9166FB3C89CBE130A85584DD38C8D8D8D8AA2283AC7715055158944029AA68165D93876E633630977AB21FBB24D808B46AC0B009224A501D4E319C826DDDDD0BB5E654327E1935EAFB9DD56362FC06DD672D5CCCB75E3E3BA05AB1360DD5CF3EAEAAA40669ED4751DAAAA221E8F43D775B02C1BC3FB9D1BF80611661D69DEFA018AC562585194882CCB75FDE28561DB09F5730BE44E40DC2E80BDA67472DB7AD56DC9E0E6B376E4433B156F5555C1F3BC15E7C00702811876462B32846C70ACB4B901AF7D696632993E4DD32008822517DA66A2762A38DDAEC475EA4BBB05B11B9FD9AB6FBA5B95332F1550AFF7D5721D545545381C86A669F0FBFD31827949D9E09979A946C00560964AA594A669A856AB75C970A7E4423B35E456FB1B6DB75379F3EA9DB69BECDA8BD6EE14B0BB619B599D7443A110745D07CFF311EC0CFA6AD9A78D75C9BC3BAE5B108484A669F55E13B501E5628AA2E8B22C6BDBDBDB52B758B7D30277CB209D00D8CB5BA79176F5323876A34A9A97B88576356FA373B573AF354D43301884611860182644480652EF36741BBC747DAF0FC759AD56FB48E6058072B92C0300CFF3EC6E56D2DAD1BCEDE85E2F00761344E4D5D570CBB85EF5AE57CDDB2DF6EDE9E9F10F0E0E86474646A2D6EF49E66518266C635C27B781F26295394D862449214DD320CB721DBCF97C5EB20F0FD509083BD1566E2A8FCDC0D08E9DD709F37AB1A11A390F6E58B115137B7149DA9D6459D648E6E538CE1ACC856F22193CFBBC0D99575194B0A669F5FC0CAD6C18A729180C32FBF7EF0FF9FD7EBA5AAD1A972E5D2A2B8A62760BC8DD04703BD659B3D7BB176BACD1B1DA01AE57D03901F6F0E1C3212BD98B288AC6FCFC7CB55C2E6BAD8EB5BDBD2D597699B5AC695D0BBC3E07C6A59B695EDA23700D0086A22861CBABB386406A050AFBF2D1471F8DF7F6F6FA72B99CDADFDFEF3B75EA54A213466DC73EEB8449DD380FAD4226DD00BF9DEBDDCD72DBBB776FB05AAD1A56DAADC71E7B2C611F12CCED036D1806388EB3BE63B5A8D9818B4E98D7B4815757553508A029F3369B52A914E7F7FB99CB972F97161717254110F4A3478F4663B1189BCFE7B56ECB8A4E5D877641DF0E03BA6154379535AF6CEB5616FCFCE73FDFB6D8B3542A69C78E1D8BC66231369BCDAA5E3040D3B4A575611806689AE61A302ED5AEDB4002D81A3BCBD0759D27539846A3513E1289F0765FB35C2E2BF97C5E69745051147500A856AB3A702B7D532BF076C373ECA6FFECC67D68A4779BC9846ED4E877D33DE0388E1A1818F00140B158D4DA39AFF5D6AE959553DC78D3DC0DAC07D6AD0358D334CA3A692D3529DFD7D71772BAA94EE05555D5AC3130BFB5B5A5F6"
$vBin_BG &= "F4F4F05681EC96BDD62EFB762A393A655D371ABA13D66D07B84F3CF1447DD8D8D5D555495555D3EBB9EC0F6F2D0CB711EB7A665ED38179CD1AF3FA2DC10D008220285B5B5BB70D485DA9541C59B7542A696B6B6BD2BE7DFB428383837EBFDFCFE0433875AB867EAF4D972F5FAEF87C3EEAE0C183A1A1A121FFCCCC8C60BD45C929168BF1B1588C27FF3F4DD3585F5FAF90034AD626C6E67451DD645E589A97ACA4D53C5E851CD6C83E4E84D374F1E2C5D2F2F2B258636EEEF0E1C3612B47C06E376EDC4966EF94F176533EB47BEC42A1A0D51C03E1F1C71FE7FBFBFB7D0B0B0B55FBF7A2D1283F383818B24BA7F5F5F54A0389E53AC99E970A1B08CDAB9BA6299AA61920A583D7419F2D91CF300C35313111D234CDB4D237799DBC9E7B378EEDF51ADC82663719BB1D9D1B0E87194BE346A351AE465E6A8337AC621F0FD93E30B7AAAA96FED5BD5EBF17E635702BF53A6365B7A369BACEB25E0BE2D0A143E17038CC0100CBB2D4C58B174B9616FEB04C1F26A900DC4A7078EAD4A9842511028100532A95342B1D947D2A168B4AA95452C870486BDD8E9976CACA8DE6DDE13400D0298A920DC3085A17E47421AD58E8DAB56B956432C9D75260CA5662E33BCD8C6EF386793967B373750AF66623C3EF36B36F6D6DA92FBFFC72AEAFAF8FE7799ECA66B34A369B55ED6CEAE65CA4D75BDB361AD4B73A625E3B8075006500094B6CB7F3CA2E168B5AA150D0EC1169F78A5C7073AE563D1E5ADD44FBF26EB1B69773150A05AD582C6A344DEF4805D58EDEA669BA1E5E601886E6E06E996823DD5343A7018041D37489A228B02C0B8661EA372C1C0E739614D8AD422493C0757ADC562CD60EA876E3F376AED32B28BD946B371E2CCB695055D53A9ED6C09E6DC8C4ED685E8AA6E982A66964EB087DECD8B15E4110545555F572B95C6CC54EED5670BAF59B76B230B6C3BA8DEA035ED9B7DD87C2EB83DEC96F9A2D43A1903544966295154DD3906599645EC33637655EB7E0DDA179198629D6724DC1300C689A665CBC787193F478BD6AD1460069D78A6A76FE76C64073F32036CBC8D80C906E80EC06CC6EA44A3B2076F3F0B59AFAFBFB833CCF33636363F4D4D454C6625E45512CEDAB36006E43F9C0BA645DD22A03C771CB8AA2D4C3D9BAA93B3B01AC1B86F60ADC76F3E576FAEA6D048E4E01DCEE2BBF1DB9464EF3F3F345D271A8B94C2897CB5684599578BB3B01D8B3E6351D2A6B06C771CB16F3B22CDBB0405B318BD7A7B793579DD3E7F67D8D80D2EA3F39ADBBB90EFB7AAB73352AE356FFAB9B20F622155AFD279665210882055E8900AE2B00D36D380D5A2010D8015EB75649B72B026ED8A0D56BAF53E0360394D3ECE521770BE0662CECA66CDAD5B79DDE6B8B79699A86AAAA550B5F787F385712C0B755DCDCA0EEB6E09C542AB540D3341886A983F74EB16F376AC5DD04AE1393B6AA3CB961DE6E0178B75C9C4E5817401D3BF97C1E344D435114A1065C12BC3A9A6447A7BD80D69A3FF9C94F6E320C936759161CC781E338F269A2C3E130D789B6EA14B0CDD8D6ED2BD86BC5CA89599BB16E3BC7772B7576BB0C3BBDAF1445C1CA9A238A2200688AA25409F06A6E64839760F41D9DD358969D320CE3A415095F1B67AB87A228AA5AADAAE572B9E0A596DE2AB6B5535BAC910BE0767C07B70E43BBFEB357E6EA44F77A6558A7378697652C16F3A9AAAA5BFDD72CC9B9BDBD4D56D634BC3F1ABC1380DD5965B78691302DE052B503D004804D9EE7AFEBBA7E924CF3343333935355D570B2CBBC02B81BCE845BD0B602B197144CAD1EB64EAD33376CEF15C4ED3C705EE4427F7F7F20180C720070F5EAD56D9665C1F33C32998CA5770502BC9A4D3E74CCBC1680EB430BB12C7B81A2A8FF99BC51E572D970EB997AB1A11ADDF866C76D05DA46F6969B7C0A6E738779655DAFDADA8B74F052796B57F736FACECCCC4C81A228F03C4F0300CFF3E0380E2B2B2B564345018042CCAACD7568BB9102B87D3C2C8365D973D60DB32A6F954AC51383B96904702B1F1A31DF6E49063BB81BDDC45611779DBA1A5E01EB16A06EE4829756438AA2A0699A415114028100689AC6D2D2121886812008794232B8960D5E7B0FD72B6EBFF33BBFB349D374DD32F3F97C6018A66BAEC36E55CE9A55D0DCBA008DF6B9ADE034038557E6ED443AB4E3DC74EA32701C079FCF8752A98472B90CD334155996051BEBAA846C303CFBBC1445358AF0316A17435314F58E6579F03C8F5028D4F62BD1ED93ED06B05E40EBA656EF05B8CD3CDE66B69AD7F376A27F5B959D5766F5F2A6080683E0791E4B4B4B565459B9065AB9362B0E5E6F47CC5B67E01AA86900B4AAAA6F5B61911CC7211C0ED7BF188944B86432E9EF0603B75BE970035AB7C0EC1670BD00D82DC0BD82B85D4FBA53E0D670018EE370F5EA55300C0359968B0EE0B598B7A3C01C7BAB865579A30050B3B3B3678E1E3D0AD334C1711C12890472B91CBB6FDFBE84AAAA46369B15DD0E3CE7A429C3E130333939190A0683B4A228E6CCCC4C757373536D56B36F9658B995C3E0B6A2E625C99D1B09E195DDBCF8CC5E591700FAFAFAB8BEBE3E3E93C928DBDBDBAA57205BEBFDFDFD015996F572B9AC58FB1289040CC3C0D5AB57C1B22C8AC5E26603E0EA36B7A123E6B558B79EE6FFDBDFFEF6A6699AEF5A2D6CB564C1DACD9B37F3D7AF5FCF6E6E6E56BD6A3AF23BA74E9D8A0F0C0CF832998C1A0C0699279F7C32110E87996ECA857674672B0675DB48E18569DD5C6F37E483CFE7A31E79E491E8E4E464A8B7B7976F758F9A5D0F4DD3D4F0F070F8C1071FECE5388E8EC562E0791E0B0B0BD6E851154992CA002402C0A474686FEC61"
$vBin_BG &= "42F7A2C10128005014E58295FD84E338A452294892A479D5BE4EFB028100333F3F5F9D9A9A122E5FBE5C0680502844BB7D2576532E78AD30B98D6F68D5CC7CA7E483351D387020C8711CEDD5BA73BAC71B1B1BD5A9A9A9DCF4F47456D334A3B7B7171CC7E1DD77DFB5C2214B35B08AB55972701BCC6E695ED23603006A7E7EFEE55ADB745D3AB40314A742D034CD8CC5622CC771D4E0E0A0CFDAE7964DBAE52E78A9F5B7AB7BBB7D1D5EE50345510887C3CCBE7DFB82737373D5566F27B7F793A228A8AA6A0040229100C771387BF6AC1594B35503AC5403AFC5BCA44D86B698D7C6BE76005300A86F7EF39B57755DBF08DC4ADF138944D0DFDFDF518DDE5A4E4D4D95FBFBFB7D5FFAD2977AF7EEDD1B5C5E5E96C874506E5EC95E40EB45D2B879EDB7AAD1BB3956BBC0F5522ED6BE871E7A28ACAAAA71F5EA55A15D0BAFD1FD1E1818402412C1CCCC0C72B91C745D170A85C2B68D75659BE635DB960D0E20A69C6484200817298A82288A6059168383836DB39D35F33C4F1D3E7C38522E97B537DE7823BFBCBC2C8D8C8CF8FBFBFB392FFAB655AB5427AF6BB7BAD68BB4E844BE342BF35612A2BFBF9F4BA7D3BECB972F575A1DA79D87697070102CCBE295575E69261948F036D5BBAEC1DB807DEBFBDE7EFBED5FD1348D4AA5029665914EA7110A8540511452A994FFE0C183C95028C479A9285972E1C68D1BC2F6F6B67AE9D2A532702B195FBB52A1DD4A9A97CA5A273699D720984E2B6FE4B9FAFAFA78003871E244EC2B5FF94A1F004C4C4C844E9D3A156FF7DCD6140E8731383808C330F0F2CB2F83E338E4F3F9B51A68ABB559222A6BBA1BE6653DEA5DC7837DE73BDF997DF2C927DFE638EE114110904824303E3E8E42A110E5799ED9DCDC14AAD5AAEAD6A2B24524B1ABABAB72229160815B49FABC8C3BE62576A1E59F6F118CD369507737FCF07675EFC2C28294C964EA196E4E9E3C9958595991E6E7E7AB5E587F606020D0D3D313D8DEDEAEE6723989A228ECD9B3071CC7E1F4E9D39065191445954AA5528E00AEC5BC6403055A31AF57F03604F2EAEAEACBE3E3E38FE47239F4F6F6229D4EE3CA952B25321D543300D8D7B3D9AC5A2E97B5898989507F7FBF2F1289B0AAAA9A6B6B6B72AB08B156E06A9652B49DF4A39DE413EB66207C2BC9D0EC4D2508825EAD5675F2734992742B47835B89B0B9B929EABA6EF6F5F5051986A132998C984EA7C1B22C7EF6B39F816559944A254BEB0A36E6B57C5EBD55650D00A83632BB58292859DC1A33CB1AAD3BF0F39FFFFCFF651866EFA14387108944F0DE7BEFE1FAF5EBB725DFB36F375B1F1818F045A3515610047D7575555614C5743B8A7ABB0363375B365B6F77EA663C483B2076922C7D7D7D9C288A86288A3A99A6C9EDBAB53D393989871F7E18972E5DC29FFCC99F806559F1FAF5EBE7006C0058ADCD6B003200F235404B8D004C9637DD26E3C216A8630230F3F9FC855A1640B02C8BD1D151C75715C771F4810307E2636363E1563A716363439E9E9E1696969624CB26F3E22A7452A36FE534B8A9B8B5721BDC1CBFDDEB735B7175FA3C93C9A81670DBB1FBACEDD1D151B02C8BE79E7B0E1CC7415194628D69050095DAD2920DAE5C864EC06B076E3D6CED99679EF9179AA691CBE520CB32D2E9340E1E3C483E89D4E0E060F8E8D1A33DF178DCD7D3D3136018866AD7CAF27273DA6990705BA1EAD46DF072FC6E355C34EB14EAE61E300C43F13C4F373BD781030730383888D5D555BCFAEAABE0791EABABABF336E03A490657AFB36E815707A0BFFEFAEBF9CDCDCDFF6E9A26E6E7E7C1300CF6EDDB879A41ED3F72E4484F3A9D0E511445653219F1CA952B59D334CD4E4CFF7B89753B7D18EE05F6757B5DC3C3C3A1871F7EB867646424CC300CE5749E898909300C831FFCE007605916D56A355B0BC4B1C05B21C0ABBA6955EB06781BB1AFFECFFFFCCF3FA965BF46B55AC5D0D0101E7CF0412412093FC77174A55251AF5FBF9E5B5C5C2C59C1C9CD0AB01D4078F129BBC9BA9DCCDD62DF4ECAC4CBF9FD7E3F537B93868E1D3BD6D3D3D3E327CFF1C0030F606868084B4B4BF8C52F7E019EE7B1BEBE3EEF005C9188E5752D193AD1BC8ECC0BC0F8C52F7EB1BEB6B6F69FA669E2FAF5EB75D1BEB2B2525A585828CECCCCE44451543BF54ADBA99CB4D38AE595C13B016B27AD6D5EAEAD93A66DEBFB376FDE2C4E4F4FE74551545996A5F7ECD9139B9C9C4C5A2C7CF8F061D0348DBFF99BBF014DD310453153A954B2B89561B4545B0A44B3B0EED665E836F3EA443085FEBDEF7DEF795DD74B2B2B2BC866B3E8E9E9C1A38F3E6A148B45C94B8455BBACEBA545EA4EC8803B2533DA2D87761B554AA59272F5EAD5DCF2F27249D33443D775C3344DF3139FF8047A7A7A70E1C205BCF4D24B6059565F5E5E9EABB16DD9C6BC641499B9DBCC6B07B06E07F0F9F3E7B38B8B8BAF02C03BEFBC038AA260D9675E2B2D6EBFE3B5CDBFDD63DFC9B91BD7DBEDB270FACEF6F6B678EDDAB5ECD2D252291289E0C89123A0280ADFF9CE77C0711C0441D816453157635C6B6EE43260B799D76CC2BC1A00F54FFFF44FFFB952A92C6E6F6F637676163CCFE3D4A9536DBD429BCDA4B7E8E546B5DB23A25399D3E9F1BCF4C070531E766FB65D99A3EBBAA1699A71F2E449F03C8FFFF88FFFC0A54B9700409A9B9BBB41C88552938A9AE105C0DD605E10E0253BCFA9376EDC380300AFBFFE3A6459C6F8F8380E1F3EBCA300060707C396E5D2EEEC05C0BB2D05EE060BB71B30E316B86EAFEBF0E1C3D8B76F1F0A85029E7EFA69F87C3E94CBE50D1B709DC0EB9975BBD13C0CBC9FCFC16260D5F2ECBEF39DEFFCF7BFFEEBBF3E"
$vBin_BG &= "160E871F3C73E60C7EF3377F130F3DF410E6E6E6609A263B323212350CC3DCDADAF29490D9F129AC0DEED2A82938140A31E3E3E37E7BEBD8FCFCBC542E977537034EB7D32CECB6E9B89D380700D8B76F9F3F140A31D6BE6AB5AACFCFCF4BAD40DC0E70ADDF0F0F0F870198EBEBEB82B5DFE7F3E1E1871F06003CFDF4D328140A0050AA69DD3280626D261B2614AFF65837999794102470EBDD989F7FFEF9170CC350AF5EBD8AC5C545C462317CF2939F84CFE7630A858278F3E6CDBCAEEB463718AF11035314059FCF47F5F4F470BDBDBD5C6F6F2F373636E63F74E85088E7796A37D8B61108BBCDC2E3E3E3FE3D7BF6F8ADFF158FC7D956AFF84E181700F2F9BC148BC57C070E1C48701C475314854F7DEA5388C56278E38D37F06FFFF66FF0F97CC6EAEAEA4C0DB8851A702D97A16A0B7F34EF34F33A55DC48F9200390CF9F3FBF7AEAD4A9974747473FF7B39FFD0CDFF8C637B067CF1E6C6F6FCB172E5CF0C4646E188CA669C7B88642A1A0BDF2CA2B056BFBB39FFD6C12805E2814B46E8FFBDBECF7ED64AE6C9531727171512203C8775BFA88A2A8CDCCCCE47B7A7AFCBAAE1BC78F1FC7F8F83832990CBEF9CD6F82E77994CBE58D4AA592A90197046FC5C6BAA657ADDB4DCD4B9EDCCEBE3200F9BBDFFDEE4FB7B7B7AF562A15FCFBBFFF3B0CC3C0F1E3C7914EA73DB5FD774BA385C36126168BB1EBEBEB72375AAABAD10AD749CBE0D8D898FF539FFA54FC81071E08711C47755A466ECAD9300C737B7B5B1C1818C0F1E3C7611806BEF9CD6F229BCD42D3B4D2FCFCFCB40DB8059B3DE63A7A6C3765835D3AE804F35AFD93E4E79E7BEE0545510AB3B3B33873E60C0CC3C0E38F3F0E9EE76F2B18EB55B45B159EF1F171BFC558F752A5ACDDFF552C16B56AB56A4C4E4E863EF9C94F26EE548593E7799C3C79128661E099679EC1EBAFBF0E8661D4C5C5C5E91ACB5AE0CD138D1252BBBEEE6E695E10ECAB11AC5BEF5CB7B8B8B8FDC61B6FFC074DD3387DFA34E6E6E6108D4671F2E4C97A61300C43EDDFBF3F3E383818EA36FB92BF1B1D1DF55BE3C0DDEB2E43ABEB7BE595570A67CF9E2DBEFDF6DBA5E9E96921168BB1FDFDFD5C37CAC99A63B118EFF4DD93274F221A8DE2ADB7DEC27FF92FFF053E9F0FDBDBDBF3B22C5BE18DF91A789DB4AED109EB768D79CF9D3BE7D45CACDAFA28892FBDF4D27B2B2B2BEF00C0F3CF3F8F72B98CE1E1613CF6D863A0280AFBF7EF4F98A669AEADAD555A1570B39B637D4ECED6678944820D0402CCF2F2B2D4ED96B1BB152F61FD2E93C928A4046B560E6ECB94E7797A7C7C3C3A34341426F73FF6D86318191941369BC59FFDD99F816559489294C964324B04DBE61D5897940B6DB36E376503C9C206D158A1D8FA2989DFFFFEF7FF6B2E979B2D140AF8F18F7F0C4551B067CF1E4C4C4C607373B3B2B0B050B422CDDCB084971B54EB92E20780F5F575B99338833BCDB24ED7C0711C954824586B7BFFFEFD4160677A804ECB4CD334E3FAF5EBB9783CCEF7F4F4F8298AC2C4C404C6C7C7A1280AFEFCCFFF1CDBDBDBD034AD34373777B5A66FF3007236D6156DACDB1170BB0A5E827D2D00AB847CD8D1E5E3E73FFFF9BFABAA5A9A9E9EC68F7FFC63689A8663C78E211C0E2BBB0504EB260D0C0CF8CAE5B256AD5675FB4DEB04A4DD08CCF1FADB6432C97EFAD39F4E7EE10B5F487DFEF39F4FF5F7F7FB565757A552A9A475A3724B02F8E6CD9B855C2E270D0E0EE2A1871E82A669F8D6B7BE85F3E7CF836559757575F5460DB8B9DA6CB16EA9815CE8B80B4A3BDD809C800B0078ECB1C7EAF91C003000B85A17A12080308038802480C4DEBD7B273EFBD9CF7E439224FEE4C99378EAA9A70000AFBDF61AB2D9EC0EBB8BBA95AA1DBAAEDFD605A8D56CEF12D4D3D3C30982600882A037EA1AD44EB71FFBFEE1E161DF9E3D7BFC1CC751C56251BB70E142A51DDBAC95675CF376399EE7A9F5F575B9582CEE9A8E4FA55278E2892700007FF7777F871FFDE847F0FBFDFACACACA15411056016C02D8AA75F1D90690251A262C7BAC23F076DA0DC80BFB6A36ED2B5851457373738B67CE9CF9379AA6F19FFFF99F78E9A597A0AA2A8E1F3F5EEF364FB803D15A10BB67A6B5EFCF66B33BBAB738F5C1EAF466EFDDBBD7FFF8E38FC72CE0C66231B69B3282BCE66C36ABCECECE56AF5FBF2E34625C3772CA9A93C9A4DF697F381CC6238F3C025555F10FFFF00F78EEB9E7E0F3F9B0B1B1714310840D8271B335C62DDA2A691D79BABBD948B103C08F3DF6186CF281C2FB9D3639DCEAB8C94F4D4D4D330CF3B3071F7CF0B77EF6B39F21140AE1631FFB181E79E411BCFDF6DB100401434343118EE39885858592DB66563B8B36DADF2C7325C9C85E9B800F1D3A14CA64328AD528E2A571A2598385D71048AF1543BFDFCF8C8E8E86398E43369BADDB88A150088F3CF2084CD3C48B2FBE88679E79063E9F0F994CE666B1585C21409B25B46ED9217EC1E826D6BA0E5E62B22E54AB0157AE49099698B9CB972F5F090402F1919191277EF4A31FC1344D3CF8E08378F8E18771F1E245288AA26D6E6E0A6477212FA0B583D4E9BB6ED2B0BA9D1289041B0C06195114F593274FC6545535171717C5ADAD2DB51DF0769AE0DA4BE8A3A228FA8D1B37F2070F1E4C4A92A48BA2A846A3511C3B760C00F0F2CB2FE3AFFEEAAFC0F33C4AA5D2722E975B24809BB101B7EBEEC26EBB0DA47C201B2FAC6833A9F6349689608DD2F9F3E7DFCCE7F3D300F0C31FFE1067CF9E85611878F0C10761188648C63E78F17E9D5E977699606D3BC90772E9F4BD06C63D0500A9548A5755D5ECE9E9E14E9D3A950887C38C179FD5E99C8DAEB155F7F366E563DFA728"
$vBin_BG &= "8A3E3D3D9D1545514DA552D63DC08B2FBE88A79F7EDA1ABD27BBB5B5356303AEC5BAA4C6F5DC2FEDAE83D7C1FB25016C596725A2D9B0F0EB5FFFFABFE5F3F91B344DE3B9E79EC3E9D3A7A1280AF6EEDD8BDEDEDEDB0A9961186A686828CCB22CE5E6C634BBC9DD000CB90F00565656A477DE79A7F4DA6BAF150060CF9E3DFE46DFEFC683D4E8586E1E702777A1AFAF0F7BF7EE85A22878E18517F0DDEF7ED7FA2CBBB4B474A906D44CAD62967100AED2ADC6883B0EDE068D17A4755621D8B700A0F8DA6BAFBDB8B8B8788E6559FCF4A73FC5BFFCCBBF4096650C0C0C607878784701A7D3E950341AE59D3CE1818101FFF8F878C46A666EC5BE5E01635F277FAB699A0900A228EAB5BE5BBABDD1A011889BAD7BB96E37DB63636391743A1D74FADEC8C80806060620CB32BEF7BDEFE1EFFFFEEFAD609BA5E5E5E54B3596DD26809BB5E95CBB9F8B6EB3EE6E6B5E27FD0BA2026755E2AC9901405FBB76ED1D511495B1B1B1275F7DF555140A057CF5AB5F452814C2E0E020363636C0711C9B4AA502D3D3D359BB666418861A1E1E8EB02C4B974A253597CB496E2B694EFB5A0D5B65DF2E954A9A24497A2A95E22C2B0B783FC75A3BA9FDBD6A5F00482693BEFEFEFEC08D1B370A4E3A786B6BAB3A393999AC542AAA288AAA1591373838885028846AB58AEF7FFFFB78E38D37E0F3F990CFE7E78AC5E20221133236E0927EAEB25B3A77D77CDE4693CDFFA509C72100200420062051F3805300527D7D7DFBF6EFDFFF194551D8F1F171FCDEEFFD1E82C120244942269381699AB4AAAA86DDD31D191989F4F6F6064BA592323D3D9D6F95F6A9D93E2F7E2FB93D3A3AEA3F7AF4685414453D100830A552493B7BF66C5E5555B31B6190AD00CC300C75F4E8D1A4DFEF679796964A9B9B9BA213801389849F6559E4723989E338F4F6F6C2EFF74310043CF3CC33989A9A02C77146369B9DAEF9B83902B4DB0470AD2C38223C6479ECD4E7BD23E06DD080C102F0D51A31C200A27600C762B19103070E7C46D3B4602412C1EFFFFEEFA3BFBF1FA669A25C2ED7072DB4FE03C771CCE1C387530070FDFAF5BC20086AB781DB0CB4E4148BC5D88181015FB55AD5373636643B70BBC1BCCD009C4AA5FCFBF7EF8F699A665CB97225ABEBBAD1C8890887C38846A3A0280AABABAB78E6996790CD66C1308C9AC964AE4992B4D940E3922D68BB0EDCBB065E1B80E9060C4C02380920150C0607F7EEDD7B9261983ED334F1C52F7EB16EDD288A824AA552EFFEB377EFDE78341AF56D6D6D55979797CBDD00AE9796362F969A5B8BAC15709B01F8C08103F1582CE6DBDEDEAE2E2F2F979D6CB34824029EBF95F2F8FCF9F378FEF9E7AD72A9643299695555B76A2025A5428E082EBF63C0BDABE06D01609281E33510A7ACE6E483070F7ED2E7F38D288A8203070EE0B77EEBB7E0F3F9601806144581AAAA181D1D8D85C3617E7A7A3AAB288AB1DB1922BD02D62BF3BA056E23208742216E727232517B13E5AC51D7AD585C9EE741D3342449C2F3CF3F8FCB972F83E338689A96DBDCDC9C22E21332442344DEA111E28E00F7AE83B70980391B03C76C2C9C181A1A3A168BC58EE8BACE0502013CF5D453181F1FBF5523340CE8BA0E9AA6694DD30C279046A3515FA55251ADCF3B01EEBDC6BC8D003C3A3A1A894422FCF2F27249100495A228B02C0B9ABE6534CDCCCCE085175E802008601846134571B55028CC11618D64CB9905DC8A43E56CD7817B4F80B70180C97CBF210011071991080402038383831F6718A657D3344C4E4EE2339FF90C7C3E9FA30B608198E338FAF0E1C3A9AB57AFDEC6CA5E74EEDD66DE46603D72E448726666A6A0699A417EC6711C6D9AA66918C68E0B952409BFF8C52F70F9F265300C03C330CA85426146555532903C67635B2B499EBD2B8F0EC07CF6D967CDAF7FFDEBB853E0BD535659B31808BB9D624F6642263551455154676767CB8383831F0B85427BAF5DBBC6CCCECEE289279EC0A1438760593E0CC3C01A5AB6962C3998CFE7652BB95FAB112EEDB6993D86A1D99002BBC5BCCDD8B65C2E2BE9743AB4B2B2B243DBEABA6E586F25AB6E70E5CA159C3E7D1A9224816118435194CD7C3E3F4378EE79EC0C6B249B7C45DCDE07CD7CF6D967CD3B8DA1BB065E1B802D10AB689C8D47255A6D94B5B5B5737EBF7FA1AFAFEF6145517A7EF5AB5FE1C2850B78F2C927D1DFDF7FEBCFB12C188681CFE743B55A556559D69D801B8944B89E9E9EE0FCFC7CB111809DD66F7B8DBD3F8E061F8D46F952A9A4148B45A51BCC0B00F178DC67188651A954543B80B7B6B6AA7BF7EE8D9392415114689A065DBF35C4C3FAFA3A4E9F3E8DADAD2D300C03D3344BB95C6EB6C6B6F5D64E9B4428E1F6FE673BE272EF0670EF3A781B0058C3CE7E7164B7220BC0120045922479696929DFD3D3732410088C663299C80B2FBC80F1F1717CEC631F433299AC83581004D90AB5B44FF178DCA7288A23B05B81D6897963B1186FF5C32B954A4A3BCCEB04629EE7A9582C161404A16807AFA669C6CCCC4C8EA22854ABD53A70012093C9E0FCF9F398999901C330A0284A922469B3542A2DD89BE96D1281ECAAEE989AE9DCB973E6CCCC0C3E92E0B501987C8265A290C83C688AAD9959CA643232809BFDFDFD0F711C37383F3FCFDDBC7913C3C3C33876EC18FAFAFA2008022A950AFC7E3F42A1105896AD83349148F86767670B4EE0E9EFEF0FB22C4BAFACAC549C58D669DF8EF677BA750B3CF9BB4422E1F7FBFDF4C6C646D5FE79A95452C6C6C6A20CC35066EDC4C468A1A856AB902409AA7A2B806D636303EFBCF30E9696962C29A56B9A9629140A3335505AC02D3600ADC5B64EE3A3"
$vBin_BG &= "994400D64717BC0480299B0676D2BE64F7226BD84F1180B8B9B97996E7F99E582C768865D9DED5D5557E6969097D7D7D78E8A187D0DFDF0F411090CD66110C06110E87110E8771F3E6CDBCA228BA95B08464DA6030C80982A090AF63EBB34422E1671806994C46720271A3E6E0582CE60B8542ECFAFABA60FF4C55553D9D4E07ED838E0380AEEBC6F2F2728965594AD334D3300C94CB6554AB5588A258FFDEFAFA3ADE79E71D6C6C6C583112AAAEEBC552A9B4A8695A0E44441FC1BA56F078C95629B3CB04C3BA5F771B33F70C78C90271A8C8D9534A91F2C102701580A0284A757B7B3BC7304C221E8F1F6459B6777B7B3BF0D24B2F21954A61DFBE7D181B1B83A22828140A605916C160508F46A30887C33B00689A2682C120BBBDBD5DB5BFC24DD344381C66C90AA087CA96198D467D1B1B1B829D816559D6FC7E3F43B22BF9DB5C2E2795CB6558B335298A82858505DCBC7913994CC60AB651745DCF572A9545C3302CA7A0849DB9C32CD09609D08A0E6C6BDC0B6C7BCF82B7898CD0707B2A55D5C6BED608330280A8AEEB42369B2D5014158EC7E3875996EDC9E572A14C2683B7DF7E1B232323181B1B434F4F0FAAD52A32990C1886412814AA3797F23C8FEBD7AF67ADD7BF9D5D7D3E1F238AA2D66828592B32CC815D0D9FCF473BD960A6699A737373053271A0AAAA28954AA8542A1004A15E01334D13ABABAB585858C0CACA4A5DA6501425699A562897CB73449994B1332BB91DB47627E1B620F27B09B85DF379C9E9D9679FEDDAC57DFDEB5FB72EC4F28329BCDF9588C3ADD888006E75F00CD55AE8AC56BA08318700842291C83E9EE7D3344DC70CC3806118F0FBFD181E1E463A9D462A95DA717E9EE7EB60F6FBFDF0F97CF0FBFDAE3B617AB5CA00409665C8B20C4992EA6055949D75BE4C2683E5E565ACACAC4096E5FA43A2EB7A4955D5AC288A2BD8395C54C506DC32F1193902A54C90C38E8E926E1D853BE9F3DED3E0B581D8A951C30AEEB1027C2C105B408ED8966100019EE7FBFC7EFF30C330319AA623D6C0852CCBA2A7A707FDFDFD48A5520804028ED7130A85E0F7FBEB3345510806833B2A69D6B6A5A1ABD56A9D4901A05AADC2344D4892549F0541703C9F288AC86432585F5F47369B85A228F5185CC330045DD70BB22C6FE8BA6EC51A54890A5719CEE9F4EDC3A692A3ADD7D9D6AB0DF69168A4F0F840582D374E1539A74A1CC93A2423870184144529298AB20620E0F3F9FA789E1F60182666184678636303EBEBEB304D133E9F0FF1781CF1781CE17018C16010A150C8CA3DBB2B9320087567A45028209FCF4396E53AA9D458B6AAEB7A5951942D5555730ED2A9D26059C5CE51D649D0DED6BBF76EF9B71F68CDDB08C0C493ADD758D8A92183D4C1428D8DCB35105BF9232C760ECAB25C90657919809F619888CFE7EB67182641D3745455556E6B6B0B9B9B9B3B9A8A23910882C120028100028100689ADE51D9B36F03D811FD466E5B4E41B55AAD57C01CF2E9AA866108AAAA161445C918865171705B049BEE27C7F52559562234AD5DD71A1F04D0EE9A6CB893D76E9BADDE18764D6CE9624B56901A99DCB6BEE3C7AD180B1FC330618EE3120CC3C4699A0E5214E5A328CAD72C41895BEDDBA8C9D7300CC5344DC9344D49D7F592A669455DD705C2B69261CB0167036995D827113359117362DA5D0FAAB9E735EF3D06622BD8C79A4920071AAC5BB3A5A3AD0781B78EC9715C8CA6E9204DD3019AA603B7C8960E98A659AF60D234ED272FD2300C890487611822455186AEEB1650AB9AA6950819A439D882B203E33AAD93DF556CC7D33F88A0FDB082B71588ED6C6C819827004A82955CFA6CE0B78E611D8F21669A7044AC250879031B68EC03306A361BD03E44020960724932AB62032C5909D31B78E71FA8E9C30A5E12C4767B8D6900644B5AD841CD37002E4FFCDE6276F2B8940DC464413A0E77EB005E0B708A0380658775D52609EC80B5332D3E88A0FDC0BA0D5EFF1FB16E55EC0C629DA9DD74525A700EECCC36605BD6065CD6C6F2B4ED4D60072F6CC02563379C404CB2B0E6B0546DBFD71B48830F34683FD06E438720B66E2045806547977B07403ACDE46734B18F72900E70900DB0C906DD2590EDB36E6B4CB0F764303EAC80FDA880D70E62D32629ACF1E3349B46A66D953E3BAB3AE95CBA815CA01CAEC3209646131961DF26F71B0E1AD670F8BF1FEAE9A300DE5640265FF11A9C13A23402A9D3369A306F2306361A54E44C07809B0D2A5DE647EC5E7EE4C0DB4C56504D9C0BD8404D356059CA41EB3A9DD7097886C36BDF6CF29B8F2460EF83D71D989D18140E606DF4B9DB37805385CE6C724DF7A7FBE06D1BD0700152CAE531BD7C767FB2177237BA6EDF9FEE4F7763A2EF17C1FDE93E78EF4FF7A73B3CFDFF03003971B282AD863D950000000049454E44AE426082"

;###-^-BINARY_DATA-^-###

$nTrans = $nTransMin

_CreateTmpFile("Clock.png", $vBin_BG)

Global Const $Pi_Div_180 = ACos(-1) / 180
Global Const $Pi_Div_2 = ACos(-1) / 2

Dim $aV_H[2]
Dim $aV_M[2]
Dim $aV_S[2]
Dim $aV_Norm[2] = [0, -1]

$tPoint = DllStructCreate($tagPOINT)
DllStructSetData($tPoint, "X", 0)
DllStructSetData($tPoint, "Y", 0)
$tSize = DllStructCreate($tagSIZE)
$pSize = DllStructGetPtr($tSize)
DllStructSetData($tSize, "X", $iGUIWidth)
DllStructSetData($tSize, "Y", $iGUIHeight)
$tDest = DllStructCreate($tagPOINT)
$pDest = DllStructGetPtr($tDest)
DllStructSetData($tDest, "X", @DesktopWidth / 2 - $iGUIWidth / 2)
DllStructSetData($tDest, "Y", @DesktopHeight / 2 - $iGUIHeight / 2)
$tSource = DllStructCreate($tagPOINT)
$pSource = DllStructGetPtr($tSource)
$tBlend = DllStructCreate($tagBLENDFUNCTION)
$pBlend = DllStructGetPtr($tBlend)
DllStructSetData($tBlend, "Alpha", 255)
DllStructSetData($tBlend, "Format", 1)

$bClick = False
$tMousePos_Cur = 0
$tMousePos_Rel = 0

$nSleepTime = 1000 / $nFPS

$nFPS_Display = $nFPS
$nFPS_Average = $nFPS

$vNTdll = DllOpen("ntdll.dll")
$vUser32Dll = DllOpen("user32.dll")

$tPrecSleep = DllStructCreate("int64 time;")
$pPrecSleep = DllStructGetPtr($tPrecSleep)

$hMain = GUICreate("Clock by name22", $iGUIWidth, $iGUIHeight, Default, Default, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_TOOLWINDOW))
$cContext = GUICtrlCreateContextMenu()
$cQuit = GUICtrlCreateMenuItem("Quit", $cContext, 1)
$cMenu_Settings = GUICtrlCreateMenu("Settings", $cContext, 0)
$cSettings_ShowSeconds = GUICtrlCreateMenuItem("Show Seconds", $cMenu_Settings, 0)
If $bShowSeconds = 1 Then GUICtrlSetState(-1, $GUI_CHECKED)
$cSettings_FluidMovement = GUICtrlCreateMenuItem("Fluid Movement", $cMenu_Settings, 1)
If $bFluidMode = 1 Then GUICtrlSetState(-1, $GUI_CHECKED)
$cSettings_SetTime = GUICtrlCreateMenuItem("Set System Time", $cMenu_Settings, 2)
$cSettings_Transparency = GUICtrlCreateMenuItem("Transparency", $cMenu_Settings, 3)
GUISetState()
WinSetOnTop($hMain, "", $bOnTop)

$hSetTime = GUICreate("Set System Time", 200, 55, Default, Default)
GUICtrlCreateLabel("H:", 5, 5)
GUICtrlCreateLabel("M:", 45, 5)
GUICtrlCreateLabel("S:", 85, 5)
$cInput_Hours = GUICtrlCreateInput(@HOUR, 5, 20, 35, 20)
GUICtrlSetLimit(-1, 2)
$cUpDown_Hours = GUICtrlCreateUpdown(-1)
GUICtrlSetLimit(-1, 12, 1)
$cInput_Minutes = GUICtrlCreateInput(@MIN, 45, 20, 35, 20)
GUICtrlSetLimit(-1, 2)
$cUpDown_Minutes = GUICtrlCreateUpdown(-1)
GUICtrlSetLimit(-1, 59, 0)
$cInput_Seconds = GUICtrlCreateInput(@SEC, 85, 20, 35, 20)
GUICtrlSetLimit(-1, 2)
$cUpDown_Seconds = GUICtrlCreateUpdown(-1)
GUICtrlSetLimit(-1, 59, 0)
$cButton_SetTime = GUICtrlCreateButton("Set Time", 130, 20, 60, 20)

$hTransparency = GUICreate("Transparency", 200, 150, Default, Default)
GUICtrlCreateLabel("Minimum Value (0-1):", 5, 5)
GUICtrlCreateLabel("Maximum Value (0-1):", 5, 55)
GUICtrlCreateLabel("Transition Speed:", 5, 105)
$cInput_TransMin = GUICtrlCreateInput($nTransMin, 5, 25, 35, 20)
$cInput_TransMax = GUICtrlCreateInput($nTransMax, 5, 75, 35, 20)
$cInput_TransSpeed = GUICtrlCreateInput($nTransSpeed, 5, 125, 35, 20)

$hDC_Main = _WinAPI_GetDC($hMain)
$hDC_Buffer = _WinAPI_CreateCompatibleDC($hDC_Main)
$hBitmap_Buffer = _WinAPI_CreateCompatibleBitmap($hDC_Main, $iGUIWidth, $iGUIHeight)
_WinAPI_SelectObject($hDC_Buffer, $hBitmap_Buffer)

_GDIPlus_Startup()

$hGraphics = _GDIPlus_GraphicsCreateFromHDC($hDC_Buffer)
_GDIPlus_GraphicsSetSmoothingMode($hGraphics, 2)
_GDIPlus_GraphicsSetTextRenderingHint($hGraphics, 3)
_GDIPlus_GraphicsSetInterpolationMode($hGraphics, 7)

$hImage_Clock = _GDIPlus_ImageLoadFromFile(@TempDir & "\Clock.png")

$hBrush_Black = _GDIPlus_BrushCreateSolid(0xFF000000)
$hBrush_Grey = _GDIPlus_BrushCreateSolid(0xFF909090)

$hPen_H = _GDIPlus_PenCreate(0xD0A0A0A0, 3)
$hPen_M = _GDIPlus_PenCreate(0xD0D0D0D0, 2)
$hPen_S = _GDIPlus_PenCreate(0xD0FFFFFF)

$tAlphaMatrix = _GDIPlus_ColorMatrixCreate()
$pAlphaMatrix = DllStructGetPtr($tAlphaMatrix)

$hIA_Alpha = _GDIPlus_ImageAttributesCreate()
_GDIPlus_ImageAttributesSetColorMatrix($hIA_Alpha, 0, True, $pAlphaMatrix)

$hStringFormat = _GDIPlus_StringFormatCreate()
$hFamily_FPS = _GDIPlus_FontFamilyCreate("DejaVu Sans")
$hFont_FPS = _GDIPlus_FontCreate($hFamily_FPS, 5)

$aMeasure = _GDIPlus_GraphicsMeasureString($hGraphics, "FPS: 000", $hFont_FPS, _GDIPlus_RectFCreate(), $hStringFormat)
$tLayout_FPS = $aMeasure[0]
$aMeasure = ""
DllStructSetData($tLayout_FPS, "X", $iGUIWidth - DllStructGetData($tLayout_FPS, "Width") - 3)
DllStructSetData($tLayout_FPS, "Y", $iGUIHeight - DllStructGetData($tLayout_FPS, "Height"))
DllStructSetData($tLayout_FPS, "Width", DllStructGetData($tLayout_FPS, "Width") + 3)

OnAutoItExitRegister("_Shutdown")
GUISetOnEvent($GUI_EVENT_CLOSE, "_Close", $hMain)
GUISetOnEvent($GUI_EVENT_CLOSE, "_ExitClockTimeDialog", $hSetTime)
GUISetOnEvent($GUI_EVENT_CLOSE, "_ExitTransparencyDialog", $hTransparency)

GUISwitch($hMain)
GUICtrlSetOnEvent($cQuit, "_Close")
GUICtrlSetOnEvent($cSettings_ShowSeconds, "_ToggleSecondHand")
GUICtrlSetOnEvent($cSettings_FluidMovement, "_ToggleFluidMovement")
GUICtrlSetOnEvent($cSettings_SetTime, "_SetClockTimeDialog")
GUICtrlSetOnEvent($cSettings_Transparency, "_SetTransparencyDialog")
GUISwitch($hSetTime)
GUICtrlSetOnEvent($cButton_SetTime, "_SetClockTime")

$nT_Sleep = TimerInit() + $nSleepTime
$nT_UpdateFPS = TimerInit()
$nT_AdjustSleepTime = TimerInit()
While True
	DllStructSetData($tPrecSleep, "time", -10000 * ($nSleepTime - TimerDiff($nT_Sleep)))
	DllCall($vNTdll, "dword", "ZwDelayExecution", "int", 0, "ptr", $pPrecSleep)
	$nFrameTime = TimerDiff($nT_Sleep)
	$nT_Sleep = TimerInit()

	$nFPS_Cur = 1000 / $nFrameTime
	If TimerDiff($nT_UpdateFPS) >= 500 Then
		$nFPS_Display = $nFPS_Cur
		$nT_UpdateFPS = TimerInit()
	EndIf
	If TimerDiff($nT_AdjustSleepTime) >= 15000 Then
		$nFPS_Average = ($nFPS_Average + $nFPS_Cur) / 2
		If $nFPS_Average - $nFPS < -2 Then $nSleepTime += 0.05
		If $nFPS_Average - $nFPS < 2 Then $nSleepTime -= 0.05
		$nT_AdjustSleepTime = TimerInit()
	EndIf

	$tMousePos_Cur = _WinAPI_GetMousePos()
	DllStructSetData($tPoint, "X", 0)
	DllStructSetData($tPoint, "Y", 0)
	_WinAPI_ClientToScreen($hMain, $tPoint)

	Switch (DllStructGetData($tMousePos_Cur, "X") - (DllStructGetData($tPoint, "X") + $iX_ClockPos)) ^ 2 + (DllStructGetData($tMousePos_Cur, "Y") - (DllStructGetData($tPoint, "Y") + $iY_ClockPos)) ^ 2 <= 5700
		Case True
			Select
				Case $nTrans < $nTransMax
					$nTrans = Round($nTrans + $nTransSpeed / $nFPS_Cur, 2)
				Case $nTrans > $nTransMax
					$nTrans = $nTransMax
			EndSelect
		Case False
			If $nTrans > $nTransMin Then $nTrans = Round($nTrans - $nTransSpeed / $nFPS_Cur, 2)
			Select
				Case $nTrans > $nTransMin
					$nTrans = Round($nTrans - $nTransSpeed / $nFPS_Cur, 2)
				Case $nTrans < $nTransMin
					$nTrans = $nTransMin
			EndSelect
	EndSwitch

	Switch _IsPressed("01", $vUser32Dll)
		Case True
			Switch $bClick
				Case True
					DllStructSetData($tDest, "X", DllStructGetData($tMousePos_Cur, "X") - DllStructGetData($tMousePos_Rel, "X"))
					DllStructSetData($tDest, "Y", DllStructGetData($tMousePos_Cur, "Y") - DllStructGetData($tMousePos_Rel, "Y"))
				Case False
					If WinActive($hMain) Then
						$bClick = True
						$tMousePos_Rel = _WinAPI_GetMousePos(True, $hMain)
					EndIf
			EndSwitch
		Case False
			$bClick = False
	EndSwitch

	Switch $bFluidMode
		Case 1
			$aV_H = _Vector_RotateOnZAxis($aV_Norm, (@HOUR + @MIN / 60 + @SEC / 3600) * 30)
			$aV_M = _Vector_RotateOnZAxis($aV_Norm, (@MIN + @SEC / 60) * 6)
			$aV_S = _Vector_RotateOnZAxis($aV_Norm, (@SEC + @MSEC / 1000) * 6)
		Case 0
			$aV_H = _Vector_RotateOnZAxis($aV_Norm, (@HOUR + @MIN / 60 + @SEC / 3600) * 30)
			$aV_M = _Vector_RotateOnZAxis($aV_Norm, (@MIN + @SEC / 60) * 6)
			$aV_S = _Vector_RotateOnZAxis($aV_Norm, @SEC * 6)
	EndSwitch

	$nSinTrans = $nTransMin + Sin(($nTrans - $nTransMin) / ($nTransMax - $nTransMin) * $Pi_Div_2) * ($nTransMax - $nTransMin)

	_GDIPlus_ColorMatrixTranslate($tAlphaMatrix, 0, 0, 0, $nSinTrans - 1)
	_GDIPlus_ImageAttributesSetColorMatrix($hIA_Alpha, 0, True, $pAlphaMatrix)
	_GDIPlus_PenSetColor($hPen_H, "0x" & Hex(Int($nSinTrans * 255), 2) & "A0A0A0")
	_GDIPlus_PenSetColor($hPen_M, "0x" & Hex(Int($nSinTrans * 255), 2) & "D0D0D0")
	_GDIPlus_PenSetColor($hPen_S, "0x" & Hex(Int($nSinTrans * 255), 2) & "FFFFFF")
	_GDIPlus_BrushSetSolidColor($hBrush_Grey, "0x" & Hex(Int($nSinTrans * 255), 2) & "909090")

	_GDIPlus_GraphicsClear($hGraphics, $iARGB_BG)
	_GDIPlus_GraphicsDrawImageRectRectIA($hGraphics, $hImage_Clock, 0, 0, 175, 175, $iX_ClockPos - 175 / 2, $iY_ClockPos - 175 / 2, 175, 175, $hIA_Alpha)
	If $bShowSeconds = 1 Then _GDIPlus_GraphicsDrawLine($hGraphics, $iX_ClockPos, $iY_ClockPos, $iX_ClockPos + $aV_S[0] * $nLength_S, $iY_ClockPos + $aV_S[1] * $nLength_S, $hPen_S)
	_GDIPlus_GraphicsDrawLine($hGraphics, $iX_ClockPos, $iY_ClockPos, $iX_ClockPos + $aV_M[0] * $nLength_M, $iY_ClockPos + $aV_M[1] * $nLength_M, $hPen_M)
	_GDIPlus_GraphicsDrawLine($hGraphics, $iX_ClockPos, $iY_ClockPos, $iX_ClockPos + $aV_H[0] * $nLength_H, $iY_ClockPos + $aV_H[1] * $nLength_H, $hPen_H)
	_GDIPlus_GraphicsFillEllipse($hGraphics, $iX_ClockPos - 5, $iY_ClockPos - 5, 10, 10, $hBrush_Grey)
;~ 	_GDIPlus_GraphicsDrawStringEx($hGraphics, "FPS: " & Int($nFPS_Display), $hFont_FPS, $tLayout_FPS, $hStringFormat, $hBrush_Black)
	_WinAPI_UpdateLayeredWindow($hMain, $hDC_Main, $pDest, $pSize, $hDC_Buffer, $pSource, 0, $pBlend, $ULW_ALPHA)

	_GDIPlus_ColorMatrixTranslate($tAlphaMatrix, 0, 0, 0, -($nSinTrans - 1))
WEnd

Func _ToggleSecondHand()
	$bShowSeconds = BitXOR($bShowSeconds, 1)
	Switch $bShowSeconds
		Case True
			GUICtrlSetState($cSettings_ShowSeconds, $GUI_CHECKED)
		Case False
			GUICtrlSetState($cSettings_ShowSeconds, $GUI_UNCHECKED)
	EndSwitch
EndFunc   ;==>_ToggleSecondHand

Func _ToggleFluidMovement()
	$bFluidMode = BitXOR($bFluidMode, 1)
	Switch $bFluidMode
		Case True
			GUICtrlSetState($cSettings_FluidMovement, $GUI_CHECKED)
		Case False
			GUICtrlSetState($cSettings_FluidMovement, $GUI_UNCHECKED)
	EndSwitch
EndFunc   ;==>_ToggleFluidMovement

Func _SetClockTimeDialog()
	GUISetState(@SW_SHOW, $hSetTime)
EndFunc   ;==>_SetClockTimeDialog

Func _SetClockTime()
	$tSystemTime = _Date_Time_GetSystemTime()
	$pSystemTime = DllStructGetPtr($tSystemTime)

	DllStructSetData($tSystemTime, "Hour", GUICtrlRead($cInput_Hours))
	DllStructSetData($tSystemTime, "Minute", GUICtrlRead($cInput_Minutes))
	DllStructSetData($tSystemTime, "Second", GUICtrlRead($cInput_Seconds))
	DllStructSetData($tSystemTime, "MSeconds", 0)

	Switch _Date_Time_SetSystemTime($pSystemTime)
		Case True
			MsgBox(64, "SystemTime", "System Time updated. Current Time: " & StringFormat("%02d:%02d:%02d", @HOUR, @MIN, @SEC) & ".")
		Case False
			MsgBox(16, "Error", "Invalid Time String.")
	EndSwitch
EndFunc   ;==>_SetClockTime

Func _ExitClockTimeDialog()
	GUISetState(@SW_HIDE, $hSetTime)
EndFunc   ;==>_ExitClockTimeDialog

Func _SetTransparencyDialog()
	GUISetState(@SW_SHOW, $hTransparency)
EndFunc   ;==>_SetTransparencyDialog

Func _ExitTransparencyDialog()
	If Not ($nTransMin < $nTransMax And $nTransMin >= 0 And $nTransMin <= 1 And $nTransMax >= 0 And $nTransMax <= 1) Then Return GUISetState(@SW_HIDE, $hTransparency)
	$nTransMin = GUICtrlRead($cInput_TransMin)
	$nTransMax = GUICtrlRead($cInput_TransMax)
	$nTransSpeed = GUICtrlRead($cInput_TransSpeed)
	GUISetState(@SW_HIDE, $hTransparency)
EndFunc   ;==>_ExitTransparencyDialog

Func _Close()
	Exit
EndFunc   ;==>_Close

Func _Shutdown()
	_WinAPI_ReleaseDC($hMain, $hDC_Main)
	_WinAPI_DeleteDC($hDC_Buffer)
	_WinAPI_DeleteObject($hBitmap_Buffer)

	_GDIPlus_GraphicsDispose($hGraphics)
	_GDIPlus_BrushDispose($hBrush_Black)
	_GDIPlus_BrushDispose($hBrush_Grey)
	_GDIPlus_PenDispose($hPen_H)
	_GDIPlus_PenDispose($hPen_M)
	_GDIPlus_PenDispose($hPen_S)
	_GDIPlus_ImageDispose($hImage_Clock)
	_GDIPlus_ImageAttributesDispose($hIA_Alpha)
	_GDIPlus_StringFormatDispose($hStringFormat)
	_GDIPlus_FontFamilyDispose($hFamily_FPS)
	_GDIPlus_FontDispose($hFont_FPS)
	_GDIPlus_Shutdown()

	DllClose($vNTdll)
	DllClose($vUser32Dll)

	FileDelete(@TempDir & "\Clock.png")

	IniWrite(@ScriptDir & "\Settings.ini", "Boolean", "ShowSeconds", Number($bShowSeconds))
	IniWrite(@ScriptDir & "\Settings.ini", "Boolean", "FluidMode", Number($bFluidMode))
	IniWrite(@ScriptDir & "\Settings.ini", "Boolean", "OnTop", Number($bOnTop))

	IniWrite(@ScriptDir & "\Settings.ini", "Numeric", "TransMin", Number($nTransMin))
	IniWrite(@ScriptDir & "\Settings.ini", "Numeric", "TransMax", Number($nTransMax))
	IniWrite(@ScriptDir & "\Settings.ini", "Numeric", "TransSpeed", Number($nTransSpeed))
EndFunc   ;==>_Shutdown

Func _Vector_RotateOnZAxis(ByRef $aRotate, $iDegree)
	Local $aReturn[2]

	$aReturn[0] = $aRotate[0] * _Cos($iDegree) - $aRotate[1] * _Sin($iDegree)
	$aReturn[1] = $aRotate[1] * _Cos($iDegree) + $aRotate[0] * _Sin($iDegree)

	Return $aReturn
EndFunc   ;==>_Vector_RotateOnZAxis

Func _Cos($nValue)
	Return Cos($nValue * $Pi_Div_180)
EndFunc   ;==>_Cos

Func _Sin($nValue)
	Return Sin($nValue * $Pi_Div_180)
EndFunc   ;==>_Sin

Func _Tan($nValue)
	Return Tan($nValue * $Pi_Div_180)
EndFunc   ;==>_Tan

Func _CreateTmpFile($sFileName, $sBin)
	Local $sFile = @TempDir & "\" & $sFileName
	Local $hFileOut = FileOpen($sFile, 18)
	FileWrite($hFileOut, Binary($sBin))
	FileClose($hFileOut)
	Return $sFile
EndFunc   ;==>_CreateTmpFile



; #FUNCTION#;===============================================================================
;
; Name...........: _HighPrecisionSleep()
; Description ...: Sleeps down to 0.1 microseconds
; Syntax.........: _HighPrecisionSleep( $iMicroSeconds, $hDll=False)
; Parameters ....:  $iMicroSeconds      - Amount of microseconds to sleep
;                  $hDll  - Can be supplied so the UDF doesn't have to re-open the dll all the time.
; Return values .: None
; Author ........: Andreas Karlsson (monoceres)
; Modified.......:
; Remarks .......: Even though this has high precision you need to take into consideration that it will take some time for autoit to call the function.
; Related .......:
; Link ..........;
; Example .......; No
;
;;==========================================================================================
Func _HighPrecisionSleep($iMicroSeconds, $hDll = False)
	Local $hStruct, $bLoaded
	If Not $hDll Then
		$hDll = DllOpen("ntdll.dll")
		$bLoaded = True
	EndIf
	$hStruct = DllStructCreate("int64 time;")
	DllStructSetData($hStruct, "time", -1 * ($iMicroSeconds * 10))
	DllCall($hDll, "dword", "ZwDelayExecution", "int", 0, "ptr", DllStructGetPtr($hStruct))
	If $bLoaded Then DllClose($hDll)
EndFunc   ;==>_HighPrecisionSleep