Advertisement
UEZ

uFMOD.bi

UEZ
Feb 1st, 2018
714
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 'coded by UEZ build 2018-02-01
  2.  
  3. #Include once "windows.bi"
  4. #Include once "vbcompat.bi"
  5.  
  6. ' uFMOD constants :
  7. #Define XM_RESOURCE        0
  8. #Define XM_MEMORY          1
  9. #Define XM_FILE            2
  10. #Define XM_NOLOOP          8
  11. #Define XM_SUSPENDED       16
  12. #Define uFMOD_MIN_VOL      0
  13. #Define uFMOD_MAX_VOL      25
  14. #Define uFMOD_DEFAULT_VOL  25
  15.  
  16.  
  17. Declare function _uFMOD_Startup() as any Ptr
  18. Declare Sub _uFMOD_Shutdown(hLib as any Ptr)
  19. Declare FUnction _uFMOD_PlaySongFile(hLib as any Ptr, sFile as LPCSTR, iLoop as Uinteger = 1) as Integer
  20. Declare FUnction _uFMOD_PlaySongMem(hLib as any Ptr, tMem as any Ptr, iSize as uInteger, iLoop as Uinteger = 1) as Integer
  21. Declare FUnction _uFMOD_StopSong(hLib as any Ptr) as Integer
  22. Declare FUnction _uFMOD_SetVolume(hLib as any Ptr, iVolume as uInteger) as Integer
  23. Declare Function _uFMOD_Pause(hLib as any Ptr) as Integer
  24. Declare Function _uFMOD_Resume(hLib as any Ptr) as Integer
  25. Declare Function _uFMOD_GetStats(hLib as any Ptr) as UInteger
  26. Declare Function _uFMOD_GetTitle(hLib as any Ptr) as zstring ptr
  27. Declare Function _uFMOD_GetRowOrder(hLib as any Ptr) as UInteger
  28. Declare Function _uFMOD_GetTime(hLib as any Ptr) as UInteger
  29. Declare FUnction _uFMOD_Jump2Pattern(hLib as any Ptr, iPattern as UInteger) as Integer
  30. Declare Function _WinAPI_Base64Decode(sBase64 as String) as UByte Ptr
  31.  
  32. function _uFMOD_Startup() as any Ptr
  33.    If (FileExists(CurDir & "\ufmod.dll") = 0) or (FileLen(CurDir & "\ufmod.dll") <> 9728) Then
  34.       Restore __ufmoddll:
  35.       Dim as String aB64(1), sString
  36.       For i as uByte = 0 to 10
  37.          Read aB64(0)
  38.          sString &= aB64(0)
  39.       Next
  40.       Dim as Byte Ptr binB64Decoded = _WinAPI_Base64Decode(sString)
  41.       Dim as long iFileNum = FreeFile
  42.       Open CurDir & "\ufmod.dll" For Binary As #iFileNum
  43.       If Err > 0 Then
  44.          Close
  45.          Return 0
  46.       End If
  47.       Put #iFileNum, 0, binB64Decoded[0], 9728
  48.       Close
  49.    End If
  50.    Dim as any Ptr hLib = Dylibload("ufmod.dll")
  51.    if hLib = 0 then
  52.       return 0
  53.    end if
  54.    Return hLib
  55. End function
  56.  
  57. Sub _uFMOD_Shutdown(hLib as any Ptr)
  58.    Dylibfree(hLib)
  59. End Sub
  60.  
  61. FUnction _uFMOD_PlaySongFile(hLib as any Ptr, sFile as LPCSTR, iLoop as Uinteger = 1) as Integer
  62.    dim puFMOD_PlaySong as Function _
  63.       ( _
  64.          byval as LPCTSTR, _ 'Long Pointer Constant TChar
  65.          byval as uinteger, _
  66.          byval as Uinteger _
  67.       ) as Integer
  68.    puFMOD_PlaySong = Dylibsymbol(hLib, "uFMOD_PlaySong")
  69.    if puFMOD_PlaySong = 0 then
  70.       return -2
  71.    End If
  72.    If iLoop = 0 Then
  73.       iLoop = XM_NOLOOP
  74.    Else
  75.       iLoop = 0
  76.    End If
  77.    var result = puFMOD_PlaySong(sFile, 0, XM_FILE + iLoop)
  78.    Return result
  79. End FUnction
  80.  
  81. FUnction _uFMOD_PlaySongMem(hLib as any Ptr, tMem as any Ptr, iSize as uInteger, iLoop as Uinteger = 1) as Integer
  82.    dim puFMOD_PlaySong as Function _
  83.       ( _
  84.          byval as any Ptr, _
  85.          byval as uinteger, _
  86.          byval as Uinteger _
  87.       ) as Integer
  88.    puFMOD_PlaySong = Dylibsymbol(hLib, "uFMOD_PlaySong")
  89.    if puFMOD_PlaySong = 0 then
  90.       return -2
  91.    End If
  92.    If iLoop = 0 Then
  93.       iLoop = XM_NOLOOP
  94.    Else
  95.       iLoop = 0
  96.    End If
  97.    var result = puFMOD_PlaySong(tMem, iSize, XM_MEMORY + iLoop)
  98.    Return result
  99. End FUnction
  100.  
  101. FUnction _uFMOD_StopSong(hLib as any Ptr) as Integer
  102.    dim puFMOD_StopSong as Function _
  103.       ( _
  104.          byval as any ptr, _
  105.          byval as Integer, _
  106.          byval as Integer _
  107.       ) as Integer
  108.    puFMOD_StopSong = Dylibsymbol(hLib, "uFMOD_PlaySong")
  109.    if puFMOD_StopSong = 0 then
  110.       return -2
  111.    End If
  112.    var result = puFMOD_StopSong(0, 0, 0)
  113.    Return result
  114. End FUnction
  115.  
  116. FUnction _uFMOD_SetVolume(hLib as any Ptr, iVolume as uInteger) as Integer
  117.    dim puFMOD_SetVolume as Function _
  118.       ( _
  119.          byval as uInteger _
  120.       ) as Integer
  121.    puFMOD_SetVolume = Dylibsymbol(hLib, "uFMOD_SetVolume")
  122.    if puFMOD_SetVolume = 0 then
  123.       return -2
  124.    End If
  125.    
  126.    var result = puFMOD_SetVolume(iif(iVolume < 0, uFMOD_MIN_VOL, IIf(iVolume > uFMOD_MAX_VOL, uFMOD_MAX_VOL, iVolume)))
  127.    Return result
  128. End FUnction
  129.  
  130. Function _uFMOD_Pause(hLib as any Ptr) as Integer
  131.    dim puFMOD_Pause as Function () as Integer
  132.    puFMOD_Pause = Dylibsymbol(hLib, "uFMOD_Pause")
  133.    if puFMOD_Pause = 0 then
  134.       return -2
  135.    End If
  136.    var result = puFMOD_Pause()
  137.    Return result
  138. End Function
  139.  
  140. Function _uFMOD_Resume(hLib as any Ptr) as Integer
  141.    dim puFMOD_Resume as Function () as Integer
  142.    puFMOD_Resume = Dylibsymbol(hLib, "uFMOD_Resume")
  143.    if puFMOD_Resume = 0 then
  144.       return -2
  145.    End If
  146.    var result = puFMOD_Resume()
  147.    Return result
  148. End Function
  149.  
  150. Function _uFMOD_GetStats(hLib as any Ptr) as UInteger
  151.    dim puFMOD_GetStats as Function () as UInteger
  152.    puFMOD_GetStats = Dylibsymbol(hLib, "uFMOD_GetStats")
  153.    var result = puFMOD_GetStats()
  154.    Return result
  155. End Function
  156.  
  157. Function _uFMOD_GetTitle(hLib as any Ptr) as zstring ptr
  158.    dim puFMOD_GetTitle as Function () as zstring ptr
  159.    puFMOD_GetTitle = Dylibsymbol(hLib, "uFMOD_GetTitle")
  160.    var result = puFMOD_GetTitle()
  161.    Return result
  162. End Function
  163.  
  164. Function _uFMOD_GetRowOrder(hLib as any Ptr) as UInteger
  165.    dim puFMOD_GetRowOrder as Function () as UInteger
  166.    puFMOD_GetRowOrder = Dylibsymbol(hLib, "uFMOD_GetRowOrder")
  167.    var result = puFMOD_GetRowOrder()
  168.    Return result
  169. End Function
  170.  
  171. Function _uFMOD_GetTime(hLib as any Ptr) as UInteger
  172.    dim puFMOD_GetTime as Function () as UInteger
  173.    puFMOD_GetTime = Dylibsymbol(hLib, "uFMOD_GetTime")
  174.    var result = puFMOD_GetTime()
  175.    Return result
  176. End Function
  177.  
  178. FUnction _uFMOD_Jump2Pattern(hLib as any Ptr, iPattern as UInteger) as Integer
  179.     dim puFMOD_Jump2Pattern as Function _
  180.       ( _
  181.          byval as UInteger _
  182.       ) as Integer
  183.    puFMOD_Jump2Pattern = Dylibsymbol(hLib, "uFMOD_Jump2Pattern")
  184.    if puFMOD_Jump2Pattern = 0 then
  185.       return -2
  186.    End If
  187.    
  188.    var result = puFMOD_Jump2Pattern(iPattern)
  189.    Return result  
  190. End Function
  191.  
  192. Function _WinAPI_Base64Decode(sBase64 as String) as UByte Ptr
  193.    #Define CRYPT_STRING_BASE64 1
  194.    Dim as any Ptr hLib = Dylibload("Crypt32.dll")
  195.    dim pCryptStringToBinary as Function _
  196.                               (byval pszString as zstring Ptr, _
  197.                                byval pcchString as Long, _
  198.                                byval dwFlags as Long, _
  199.                                byval pbBinary as UBYTE Ptr, _
  200.                                byval pcbBinary as Long Ptr, _
  201.                                byval pdwSkip as Long Ptr, _
  202.                                byval pdwFlag as Long Ptr) As Boolean
  203.    pCryptStringToBinary = Dylibsymbol(hLib, "CryptStringToBinaryA") 'https://msdn.microsoft.com/en-us/library/windows/desktop/aa380285(v=vs.85).aspx
  204.    Dim as Long iSize = Len(sBase64)
  205.    Dim as UByte aDecodeB64(0 to iSize)
  206.    Dim as Boolean result = pCryptStringToBinary( StrPtr(sBase64), _
  207.                                       0, _
  208.                                       1, _
  209.                                       @aDecodeB64(0), _
  210.                                       @iSize, _
  211.                                       0, _
  212.                                       0)
  213.    Dylibfree(hLib)
  214.    If result = 0 then Return 0
  215.    
  216.    hLib = Dylibload("Ntdll.dll")
  217.    dim pRtlDecompressBuffer as Function _
  218.                         (Byval CompressionFormat as UShort, _
  219.                          Byval UncompressedBuffer as Ubyte ptr, _
  220.                          Byval UncompressedBufferSize as ULong, _
  221.                          Byval CompressedBuffer as UByte Ptr, _
  222.                          Byval CompressedBufferSize as ULong, _
  223.                          Byval FinalUncompressedSize as ULong ptr) as Ulong
  224.    pRtlDecompressBuffer = Dylibsymbol(hLib, "RtlDecompressBuffer") 'https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/content/ntifs/nf-ntifs-rtldecompressbuffer
  225.  
  226.    static as UByte aDecompress()
  227.    Redim aDecompress(0 to 9728)
  228.    Dim as ULong iUSize
  229.    Dim as Ulong iReturn = pRtlDecompressBuffer( COMPRESSION_FORMAT_LZNT1, _
  230.                                                 @aDecompress(0), _
  231.                                                 9728, _
  232.                                                 @aDecodeB64(0), _
  233.                                                 iSize, _
  234.                                                 @iUSize)
  235.    Dylibfree(hLib)
  236.    If iReturn <> 0 then Return 0
  237.    
  238.    Return @aDecompress(0)
  239. End Function
  240.  
  241.  
  242. __ufmoddll:
  243. Data "WL0ATVqQAAMAAACCBAAw//8AALgAOC0BAEAEOBkAyAAMDh8Aug4AtAnNIbgAAUzNIVRoaXMAIHByb2dyYW0AIGNhbm5vdCAAYmUgcnVuIGkAbiBET1MgbW+AZGUuDQ0KJASGAFlY9N8dOZqMQQUDfyaJjBgCC5sUjAgEExwAAzr/4IUEB+ICB1JpY2gBGwEFi1BFAABMAQQgANsykkoFE+AAAAIhCwEIAAAaSQAMLAECEw0TAAQQ1QADMAIOEAILAoN/AQD5hQMAgIAXBAYADwMagRWDhgMDA3AyAAAVABUKXIAnPBmWcAEAnBcDQSsAgCtcGA8udGXkeHSAAyMZBEiBdQZiAQMAIAAAYC5yZMBhdGEAAIUB9oF9TYERHosTwHxALoMJABxuIgArFIGABcAucoBlbG9jAACQAUfrwDbCEyLOCUJwPD8APwAvPwA/AD8AIAABoFtErAlAR7ECQDgQAAYRqAAQ16BiBegAMGAACnhgAPZgAItEJAQAuSRAABAPt8AAg2EEAGY7QRwAGdIh0IkBwgQBgAmCAKQAzwAEAAFIAZ0BBwKOAAI3AwwEGQVqAAYUCCsKzQwdABBJFIoZJyB6ACj1MidAw1CtAGUAgFpYg/gZAHYDahlYZouEBABNQA6jhGEAEAD/4rAB6wIxwASicYABw2oI6wIAagxZurhhARAAiwIByosEwsMEobyAAcNQagn/CDVcQQAGFRAwAAAQhcB1A1pbySDDV1aXvuBYEK0AidEDFjnCfAMAKwaRhcl+D60AAwaJVvyKEIgAF0BHSXX3Xl8IuEBioAhqClaNAHXsg2YEAP82iP8VLAAJUP82QAAI/xU0YAGJBv8VAjDhAEYIw2oAaAKAwCZqA2oAagFCaOGEVv8VIIADahD/agG6QQ6JQwgAj0IIjwLDMdIEoWwAE1JUVldQgFJSUVD/FSjgBAj/FSSgAMNTVlcAVZeF0n8FXV8gXlvDvXgAB4t1gAArdQR4HrkB"
  244. Data "doAp8X4VgcZw4AcAKcp5AgHRAU2AAPOkhdJ+0AAaAE0AgeEA4P//ACtNAH4UKcqJIM5Si0UAAASR6ACJ////AfdaiwhNAFdDBFKJTQRKvuEJv0EJ6GngA1oAX+uH/3MI/xUKBOAQugEPdAIDAgCFwHgHO0L8d0ACiQLD6AfgeVgIWo8FwRlZhdJQJHTswRW7ZEAIvYgBYAIxwIlF8PbBCAG+GMA1dQv2wQACjXYMdQONdgDs9sEID5VF6ACA4RCITemJ7wClpaWJ1jlF/AB1BmbHRfwAgApQAgBowa5q/1P/FBVAAiIUAjeJQ/iAdA6JdfToHSC2AJf/VQiF/w+EkoEgLL6YAD3HRgCMAAEAg04U/2oMCMcGmKAQj0YQaoAgVv8z/xVEAAgQMf/oGcAWOXsEoHX2iXsIJANQY0IAPVVXV2iTEwBAEFdX/xUIxA38UHQmag+gMgzgAZOLwjCAWwigBQXoBsAOQDHAQMIMAAEfvQZgAB9ALIXAdBKJ8EUMUFWABmCoIBdBKAAx24ldAIt9BASJXSAWdB+JXQSwV2ogaGEWgQ1I4gSKTKIAVKAAi0X8wAhQF4ld/IAIGCEPuUojgA2/IVvzq6IQVQhWvVAADmoEj0UAAGoMVf91FP8EFTxBB3UEwe4MAIPmD2oF/xUcAQACg30cAHQFXgJdIG85dRh0zoBCPYFlAHUPuKEJ/gAAgDgQfAPGAMgAaLQgH7kAwCqhGUEiQTHAV1e+wXjzCKs4BVEDlQ+F4gVwCL1xXIte5IXbCA+FiPAAOV7siwBO3HViS4sWiwBGBIkehdKJXgAEfAOJVvSFwAFgAEb46F4KAAAAg34E/3VDi0YA+EBmOwN8MIsAVvQPt04cQjEAwDnKfCA4BXAFMSYOUhRbj0UM6QDK/v//D7dWHgA5yhnJIcqJFgCJRgTrBej/DgGQB0bwi14Y/0YA7ANG/DlG7HwACINm/ACDZuwAAInvOftzAokA31op/Y0E+lAE"
  245. Data "6DmgHo0Ev5nBEOACuXIgbffxAQIF8UAp+4XtD4UCPmAuiV7kixVoISAHjRTVxGFDTvgAC07yiQpYXjGC25AKweAMjbhRJAFyEZCQrVeZicdAVjHQvsA/wDfQADHS9/aB+uAfAAAAXoPY/z0AATA/GdL30gnQwaD/HyX/fwAHJVFKIMHoD9HJ4E/CARjV0cEBApAA0zH4ACn4X0lmq3WrgqHxB0CD+BB8kEwCo8EAwe0KweMGgGaJ64kcxcBQCQECHwAMGSUxPEcAUVpianB1en0Afn9+fXp1cGoAYlpRRzwxJRkADAACAwUGCAkACwwOEBETFBYAFxgaGx0eICEAIiQlJicpKisALC0uLzAxMjMANDU2Nzg4OToAOzs8PD09Pj4gPj8/P0ABAKuqQKo9AABWQXAAOgAArAJGi04QUwBVVotxLIX2DwSEGwB8UlKLWRQAV4B5PgCLVgQAi0EwdREDVggAKdp3BIsWKdog99r32BFQAAHaCA+I62AXi2kYDwCs0AWLWRzB6gAFD6zdBXUMvQCL2wEAx0EYYABxOwD39THt90DaEegPhDvAArsB4UI5+A+XQ+pzAAGXD7dBPItRAAyLaRDB5RAJAtVAOHvwdAU7aQAgdDCJaSDB4gAHZjHtK1E0MQDAwfoHiVEkdAACsIDB7QkraYA4wf0HiWko8QAAhcBmiUE8dAYAOcd2AonHi0EAJIkDi0EoiUMQBIl77EAMjVxeBBRWggx0JAiLUQIcwAp0CPfd99IAg9r/kFdSD78AOw+/QwKLUTAAKfjR6vfqwecABg+kwgcB+pIgicf3aThwDQbRAMKD4gEB0NH4QAEGl/dpNCgBiww9jMAMgAFGBIsVAXENAXk4AVE0WgAxwAFpMF8R0ACDxghPjRxDdUCYi3wkIInwBykA98HvA16NRhQAKcPR64lZFA8At1E8hdJ0JqEBcVWZZilBPHUaDCsFEVjADvfYiVEAKBnShdcPhXNB8DEx0jgV"
  246. Data "cpABdQB7D7ZGEkh1HQHgN4tuCAHoOcMAdgUpw5P39SkI1SnrIifT60xIAPfYg9L/IVEwACFRFCFRLHRGIDhBPnQYIAP33QBIg+0B/kk+GQDYi14EAcM7RggIfBtwAQNGCI2AUP8Z2Pfdk/ABQBHT/kE+O4A9zSCJaTCF/6EKhe4A/f//X1hag8EAQF47ThQPjMxB8ABdW8O6hFBBVwApwlaFwFIPvgBBDYnXdAOZ0QDiQtsEJNgN5AAVABDZwNn83ADp2cnZ8Nno3gDB2f3d2dgN6AFwAdscJIX2WXQACSnXVzH2ic8A684p+YXSeQIA99n36YPifwEA0MH4B14B+F8Aww+2TnGKRnoAicoCVnKD4j8Ag+ADiFZxdBoAwcEbGdKD8n8Ag8oBSHUhweoAGMHJFwHK99oA6xWJyIPhH8FA6AYPtpGEcAYZAMAxwinCD75GgnPgHfgFw+irwEAA0fiJRhKADgGAw1aDxgPomRABAF6JRg6ADgLDAUABi0YGi05aDwC2VnDB4gIpyAB/BgHQfwjrBAAp0HwCAcGJTgAGw1dTVYnljQS50EFh24tXNYkAVeSKTzkPtlcAMQgGPAKNRj0AdRaDw/SLRzIUiUWAATiAATCNRgA8g8fQODB1agBRUI1MHiqNRCgeLlBAAE5BAEqNAFweJlCLATnQEFMPjYtQBQ+3BACHOQN1efZF/AAEdBQPtkXmOYgBdQxwAOWJAbEBATAuAYlF3I0EhwBKD7cYORGLeAAED7dAAol94ACLVfCJAnUHiwBF+P4A60/B4IAQKceXZjHAgAQAAnQOD7ZV5DkAVdx1BThGOnQAMv8Bi03siTkEi33AWU3ggycAACnZdBGZ9/mJAAfrCotF9IsIAItF7AEIWlhZAIsA/wLB+BCJAAHJW1/Dg+oQQHIIg/pAdzBfCgCJ0IPiD8HoBACD6AV0LEh0KwBIdCZIdCWD6AgCdiSiACpIdCmASHURwOIEdFAbAHCAJveL"
  247. Data "RlKJCEZaw9BDVgrDiABUBnPDweIEiQhWFpIRARaADgQBABgCZotWdzjyAHYIi04K99mJIE4OAnZ54AACsgD/QohWd8OFySC4qq4BAGAm9/HEozwga8P/VWDqgAAgVYnGulBARv9VAASJ5THJi0Y8AFGNQDzoKPf/AP+DxIxTahSNCFYRv/GdWYoCQgA8IHwBqkl19QSRq7BpQA+3XkYQ99uJ97Bb0ffbAEkPttKJXfQ5ENEPh4zAZIpWUAA5wnYBkkZJeQD0iUX4QIn+ORDYcwGTkClIackCEAAHZolGRo08IMGJ+CnPQAFEgwD5QH4CMcmJTgAwicvB4wcPhAJHQASJTfCNBFgA6Fz1//+NFBiAiUY0iVY4u6GjAMZAHAGJQgQBANgB2v9N8HXwEIkWAdcgCU6JfmAEidfoDrAp0ABMAGpAj0YMiU4UAZAZagmNRbxa/wIV0UeLRcGLTjAh0FwBAIkHILgPgjKaIAU9AUAJUbgPhBLM4Fz34eCZjQSACOjf9HBwRwSTVgSLNcEDMdKNRewIQv/WcCHs9sKABHRBYE2jvQB0BInY/9b2RQDsAnQIMdKNQ1QBQgJoBANoAgNoCEUDNAMDNBB0FQE0BABC6wuF0nQCiAITAGqyBP/WXkMAilZIOBN2A8YAAwCDwwT/TfAAdYb/RfyLRfQAg8cIO0X8D4cAMv///4tN+DkAwXIrix6LRjAAVo00y408gMEA5wb/TfiJ+MYABkDoLPT//4kgRgSD7ggANzlFAPhz5V4xwIlGAAiJRhCNfiCrAKurikZIhMAPQITjAQAAiABcXgAEaiGNRYha/wAVjGEAEIt1iACKVaOD7iGE0gB0JTHAg32lKQAZyffRCcqA+hAQD4ewADO60ACAAACNQ0Ap1gMxQDHJlkHo9gA6jQSTDgAPMcBmiwoA0eGAevICZokACnMDiEL6gHoE8wIBBPs4RaMPBIRcABKJRfiJXYD0jUXIi1WlhTsAzIt90IpF"
  248. Data "1okAwcHoBCQBiEUA1nQH0W3I0e4A0e+LRcg58H8AAonGjRQ+KcIAeAIp14PhA3QABIX/dQYx9jEAyYnHiXXMiX0A0IhN2o1EABoI6CvzgZH0iQH/AEX4g0X0BGoFAJeLRfhZOkWjAI11yPOlcoiJAE34izSLMcCLABaKbhGKTg73AMIAAMD/D4XSAQBsg8YUgP2tdQBPQon30fpTUgCNFFIB141QEIkAVYnDg1RaifgDBACJ8jHJOfp9IQCKB4jEJA/XwADsBEcAxYjg1wAA6MHgGAnBiQAKwekQg8IE6wDbW+s40+KJ8AEEOk7sjTwxjQQADzHSOFb6dQ4ASE9Iijc5+GYAiRB39DHSifAIZgMQwAJJjUACAH/0eCSLRvSLAE7wAciAfv4CAI0ERnUGZotICP7rCoADAXUHZsCLDE5miQiAOYCEQDpNow+CJYCHgQTDEEBY/k38D4UAI/7//0BbycMBQBFVD7ZcMCyJAOWLRviNHNmLgE4MiG329+GAjhCLUwRWAKHaAdcAg+wYweEHdNAAVot2FFNGRgEA8VGKXwSKRwMAg+MPPAN0AjwABQ+URfSKTwEAdBL+yXgDiE6AAYoPSYD5YEB2AE7+D7ZOAYtFCPxpycEeA0jgDwC2Rv6ZikQIQAA8EIlN5HMDiwAUgYXSdQW6WABiARCJVfiLTgAGi0YKiU3oiwBOFolF7IlN8AHAGTwHdAyAfmcAB3UGi04OAU4QCohGZwB3Tg6JIE4SxgYDBBtEDyC+QhABwcAaiE6AZvZAJgF0GgB3AA++QA2ZweEGACnQ0fiNhAEAAOL///fY6wmREcBF6Iz4wcNSgH0A9AB1A4lGBoAADgiAfwEAdEQBwA1XagkPtkgMAIlOClkPtkAPAIlGFmpAMcCPAEZCaiCNfhqPAEZOx0ZGAAABAADzq4pOel+AAPlPfQOIRnT2CMEMdcABcYAOBgAPtlcC6Br6/wD/gD9hcwaAfwADFHUD/kY6iyBN"
  249. Data "5PaBCEAhAXRgCbAC6P1AEIE2OoAAdASDZkIAwgOCCcIDB7AE6N7AA4OBA8ACdBAPt4HBaBApRkZ5YAVGAA8QtkcDSMAMBDwgAHcJhdL/FIWTACAAEP915P91EPjoqwYgVu6AWQCDxwU5zg+MSwHgPVteycMXIQCqEGEAHWAAM2AAJGAACkRgAE5gAHUmABAqXuAAiGAAjmAAfiMIABCm4ACrIgAQqsPgAJXgA9bgAJKgDLVlAN/sAWBgBeEAaeQAFnXkAGUAheABdAOIiFZow6EAcOsFwQAEbIuAMCb2iUZaEMPB6gQhAnKF2yHAAF5zMcDiA+mTKPf//0QDdUMDdsMAweIIdAOJVlYBIDmLUQQDUQiLAEZWOdCLTgJyAAsxwIAm94lBgBSJQTCJQQhCDQRswwBDg2AEAIkAEP5F9g+3SByAOQh8A4MgAEEOQI0Uko0MUwAEiQBIBIB99gB16gCLSPRBiQjr14CA+iCJ0XMHQgMQ8MPpzOAxdAaLQE38iFEhw+U4M4iNmaTggw+2ieBBAaGcOxN2CznIdAAHQGY7FIN39QCJRh5JOcgPnQBGPHwJD7dEiwD+iUZCw4lWGgCLTIP8icoPtwDJiU3siwyDiQLIQAFmMdIrTewAUnQJZjHAKdAAmff5kYlOIosARhorRez36VoAAdCJRj7B6BABAAj/Rh7DdAaIAFZtgA4Ew3QJgYAYiN5miVZuaAGIeOn8wyZKdQ6DJkJrgG9rKUYGBgJqIQACagFGBoEgSoAA+g139oXb/yRUlb2gNPVgAAUgQKpV4AAV4AAdYAAkYABIVWAAU+QCXeAAX2QBbC3gAIJgAMEKfMAKfMFM4AJADYEvXn3gAX0D4AEhDYBmevAIXgJ6wDH4iFgNw3UCCmAri0D4iUZiAMOKTl7+yXkCAInZiE5edAmLREZiAC2JQQRBBg8YweMEoQbAAIleFgVhHvcCGHsPvkZ7CClGCsAJ6ItV7BGAeItF8IB1xgYA"
  250. Data "DIlWoAJgna9Z8Ik0WfwinYoAncCc92YADItU2QSNBICAhdKJ5Q+E/qA3AAHQVlCLRgzBDOAHgZxgnPBQD7aAfgGLVfxp/yGX0cGWA3rgIJc4IJfBlgKHxpYx21dSiV4ADoleEoge9ocBhnuJ+ege9f//RPaH8zwJsAQQAQwBEAE4Xjp0Eg+3AofVPAOJXkaADiIC0Uq2QAJiboDhAA8sBnQsSHQrACwEdBtISHQPAEh0Ckh1I+iogeB06xz32SlOURCA6xKITnPodTEBWAj32ZBRYQRVYARaCASJ2dBZD7ZCA4DA6QQ8HXcH4EGArCQAEOiSAoJBAFiDRfgFOcYPDIwVgGGAQWwlABAKZTAASTAAABkAEKDhGAAQK7AAJDAA2u+wAKuwAzEAMvAAtQBtMQCcQEG1AHy4AD8AAJQQUvQBujQEgRrwCEK4MHnrB+jQYAAxAMmKTmyJyIPgiA/B6bA+kffYkB0hEA3DikZocGGNDACBg/kBfQNqAQBZiU4Gg2YSABiADgGxAQBd4DhqCAR2SKIk7GoDmQBf9/9KdAVKddgzidkwAcJgCEBg8GIE6yCQHGaJxwHIAItMJAToifL/FP+XkgB/kAApx4kEfhJCBU5vhcl0DivzBFA4oB4eik5uqIPhDzBiSQBqeIAAIAL/FI0WIA2JRgAKSEjDg+gIg0ToBCAAw9HgEAhZAPf5w40EQNH4AMNAQMODwAiDTMAEIACwAcPr0A/qVTAA8zAA8DAA7TAA91UwAAOgBBUwAAcwAAZVMAAPMAAMMAAJMAAARTAAEzAAik5t8hGLBFYWIBJ1CCnCeQAPicrrCwHRmRD+yjnRkJDKiVYD4jGQL4tR6IpBIbCo8HUHEAMwEgNwJQQBwjE1UejDgPkACXR1gOkMdGAQ/sl1W0ABMcA5AFnsdU+LVCQEAaRtD7ZSDI1ICRFwNItWQkBvOdEZgNKD4kCJVkJCbzM9b0FcDgsSOAAoUAJk6R0gHYgGkQiR"
  251. Data "BQdIg2YKABsCw5BHEBWFFfuAFQNQA8OJ8wBWV4t0JBAxwBAPtpYKcDGNezYASnglsIB0FkoAdA2ygCsXD7YC0jF86zeLFynCAOvxOQcZ0iHCQI1CwOsmiyAQgwDhf4P5QYPQ/xAxwSWB4TzBweoACA+2gaQVABBAGdIx0CnQcAUMJXE8r5AAhguQAIXAAHQMV5eLQzL3AOr3/5KXX8H6AAYBUxKLUzJCoDnCfgGSUAINEYsAB4lTMvbcgAsCAUAA3ACJB4tzAAL2Awh0RIN+ACwAdCeJ8SsNADRAABDB6QcZAP+D54CNfD5AAFdqC4l7AlnzAKWJTtSJTuCJAE7kXo1+LItESCQMq5ClVgiAtqsBUbdWFDHJ/sn2AAMCdEaLQwoDAEMOicLB4AgpEND3LQwQBffSIQDQPQDwDwB+BQK4YQD3Y0L3Y0YAweoDi0YEiRYEiddQC/mJRgyJQMgrRgT377EAEID2AwR0Q7+A4A9Ai0MWKfiZYQ8pAMeLQ07B/wWDAOgg9+8DQxaZAXEFiz45yInKlyRzBoID+pJAwYlWIAz20PcudAQBdABhi0sGMdIDSwASjUIofkX2BQJKIAkBdQu4kHcA2gD38THS6zEAuAASAAArQwYAA0MSUNsEJNgEDeywFtnA2fzcAOnZydnw2ejeAMHZ/d3Z2A3wAXAB2xwkWLtErIAAAPfziUYcQQDgGF9ewgigCg8ADwD/DwAPAA8ADwAPAA8ADwAPAAcPAA8AAAD0MAAAClAxAAAYMAAoMAA8VTAASDAAVjAAZDAAbFUwAHowAIYwAJgwAKitMAC4MAABAOhwAP4wAKAMMgAAJDAANDAAak4wANj0AZiwBQUAyqsxAfAA1DgBXrACPPgAP38Jfwl/CX8Jfwl7Cc4CAFdhaXRGb3JTAGluZ2xlT2JqAGVjdAAbAENsAG9zZUhhbmRsAGUASgBDcmVhEHRlVGhgAGQAACCHAlNldMMAUHIAaW9yaXR5AJkA"
  252. Data "AUhlYXBBbGwwb2MAm7IAMwMAAAKd0gBEZXN0cm8AeQCWAlNsZWUIcAA0NAVGaWxlYEEAGAJSwASxAAAMAGrRBaEAUG9pbgB0ZXIAAKMARgBpbmRSZXNvdQRyY9ACxwFMb2EB9gAAAJUCU2l6CGVvZhcBS0VSTgBFTDMyLmRsbAAAAKwAd2F2ZYhPdXRCDQAAtfUAAEdldFBvc2l0CGlvbhATAAKzAHdhdmVPdXRPQHBlbgC6AATQUAByZXBhcmVIZYBhZGVyAAC7BVwAUmVzZXQAAMBRBTxVbnALpMEFMlcAcml0ZQAAV0kATk1NLmRsbAAhCQDbMpJKAQ7yMqgAAAEABwkEA5gADwq8AAPgAAOqEAAACqYAA7oAAwARAAAKMAAHmgADFBIAACqeAAeBAAP8ACcOM6gAAB0AAysAAzoAA6pNAANZAANoAAN1AAMBAWECAAMABAAFAAAGAAcACAB1EGZtb2QCk3VGTQBPRF9HZXRSbxh3T3IBYIYIU3RhhHRzBwdUaW1liQYEdGwFB0p1bXAygFBhdHRlcm4ECRBQYXVzBQ9QbGFgeVNvbmcEBwCgdYGGJFNldFZvbIEHC3kAwFHEgQEwFDAYADAcMCAwJDAoADAsMDUwjzCUADChMK4wuzDFADDLMNswATEUADEgMSgxRTFOADFeMW0xczGHADGeMekx+zEAADIdMiwyMTI+ADJ1Mn4yhDKkADK3MsUy3zLrADLzMgMzJTM4ADM+M1gzYDNmADNsM30ziDOWADOnM7gzzjPWADPlM/Mz/DMEADRkNGs0yzTeADTlNP00OjVeADVrNXs1YDYtADc4N3U3gjecADdNOGU4zTivADq4OuE6qzvoADvKPPw8Qj3sAD31PSs+LT8AECAAANjAMHEwkwAwlzCbMJ8wowAwpzCrMK8wswQwt8AvvzDDMMdBwDDPMNMw10Ay3wAw4zDnMOsw7wAw8zD3MPsw/wAwAzEHMQsxDwAxEzG5Mr0y"
  253. Data "wQFAL8kyzTLRMtUAMtky3TLhMuUAMuky7TLxMuQAM5A0rDSwNLQANLg0vDTANMQANMg0zDTQNNQANNg03DTgNOQANOg07DTwNPQANPg0/DQANQQANQg1DDUQNRQANRg1HDUgNeMANRY2GjYeNiIANiY2KjYuNjIANjY2OjY+NkIANkY2SjZONoMAN+c3OTjMOO/4OAc5v3Y/AB8AHwAfAP8fAB8AHwAfAB8AHwAfAB8ADx8AHwAfAAMA"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement