#AutoIt3Wrapper_Icon=CD.ico
#AutoIt3Wrapper_Run_Obfuscator=y
#Obfuscator_Parameters=/sf /sv /om /cs=0 /cn=0
#AutoIt3Wrapper_UseX64=n
#AutoIt3Wrapper_Res_Description=creates an ISO image from a CD or DVD
#AutoIt3Wrapper_Res_Fileversion=1.0.0.0
#AutoIt3Wrapper_Res_Language=1033
#AutoIt3Wrapper_Res_Field=Version|1.0.0
#AutoIt3Wrapper_Res_Field=Build|2011-08-03 beta
#AutoIt3Wrapper_Res_Field=Coded by|UEZ
#AutoIt3Wrapper_Res_Field=Compile date|%longdate% %time%
#AutoIt3Wrapper_Res_Field=AutoIt Version|%AutoItVer%
#AutoIt3Wrapper_UseUpx=n
;~ #AutoIt3Wrapper_UPX_Parameters=--ultra-brute --crp-ms=999999 --all-methods --all-filters
;~ #AutoIt3Wrapper_Run_After=..\..\..\ResourceHacker\ResHacker.exe -delete %out%, %out%, ICON, 1,
;~ #AutoIt3Wrapper_Run_After=..\..\..\ResourceHacker\ResHacker.exe -delete %out%, %out%, ICON, 2,
;~ #AutoIt3Wrapper_Run_After=..\..\..\ResourceHacker\ResHacker.exe -delete %out%, %out%, ICON, 3,
;~ #AutoIt3Wrapper_Run_After=..\..\..\ResourceHacker\ResHacker.exe -delete %out%, %out%, MENU, 166,
;~ #AutoIt3Wrapper_Run_After=..\..\..\ResourceHacker\ResHacker.exe -delete %out%, %out%, DIALOG, 1000,
;~ #AutoIt3Wrapper_Run_After=..\..\..\ResourceHacker\ResHacker.exe -delete %out%, %out%, ICONGROUP, 162,
;~ #AutoIt3Wrapper_Run_After=..\..\..\ResourceHacker\ResHacker.exe -delete %out%, %out%, ICONGROUP, 164,
;~ #AutoIt3Wrapper_Run_After=..\..\..\ResourceHacker\ResHacker.exe -delete %out%, %out%, ICONGROUP, 169,
#AutoIt3Wrapper_Run_After=del /f /q "%scriptdir%\%scriptfile%_Obfuscated.au3"
;~ #AutoIt3Wrapper_Run_After=upx.exe --ultra-brute --crp-ms=999999 --all-methods --all-filters "%out%"
#AutoIt3Wrapper_Run_After=upx.exe --best --lzma "%out%"
;~ #AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
#include <Array.au3>
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <Constants.au3>
#include <Date.au3>
#include <GDIPlus.au3>
#include <EditConstants.au3>
#include <File.au3>
#include <GuiComboBoxEx.au3>
#include <GUIConstantsEx.au3>
#include <GUIMenu.au3>
#include <Memory.au3>
#include <ProgressConstants.au3>
#include <String.au3>
#include <WindowsConstants.au3>
;~ #NoTrayIcon
Opt("TrayMenuMode", 1)
Opt("MustDeclareVars", 1)

Global Const $cd2iso = _TempFile(@TempDir, "~", ".exe", 8)
Global Const $hFile = FileOpen($cd2iso, 18)
FileWrite($hFile, ISOCreator())
FileClose($hFile)
_GDIPlus_Startup()
Global Const $ini_file = @ScriptDir & "\ISO Creator.ini"
Global $bg_pic = "0"
If FileExists($ini_file) Then
	$bg_pic = IniRead($ini_file, "Settings", "Background_Pic", "0")
	If $bg_pic <> "0" And Not FileExists($bg_pic) Then $bg_pic = "0"
EndIf
Global $ok = 0
Global Const $w = 615
Global Const $h = 157
Global Const $title = "ISO Creator v1.0.0 by UEZ 2011 v1"
Global Const $build = " build 2011-08-03 beta"
Global Const $hGUI = GUICreate($title, $w, $h, -1, -1)
Global Const $idPic = GUICtrlCreatePic("", 0, 0, $w, $h)
GUICtrlSetState(-1, $GUI_DISABLE)
Global Const $idButton_Create = GUICtrlCreateButton("&Create" & @LF & "ISO", 528, 8, 75, 73, BitOR($BS_CENTER, $BS_VCENTER, $BS_MULTILINE))
GUICtrlSetState(-1, $GUI_DISABLE)
GUICtrlSetTip(-1, "Start creating ISO")
GUICtrlSetFont(-1, 12, 400, 0, "Times New Roman")
Global Const $idButton_Abort = GUICtrlCreateButton("A&bort", 528, 8, 75, 73, BitOR($BS_CENTER, $BS_VCENTER, $BS_MULTILINE))
GUICtrlSetState(-1, $GUI_HIDE)
GUICtrlSetTip(-1, "Abort the ISO creation")
GUICtrlSetFont(-1, 14, 400, 0, "Times New Roman")
Global Const $idProgressbar = GUICtrlCreateProgress(8, 94, 595, 27, $PBS_SMOOTH)
Global Const $idInput_Filename = GUICtrlCreateInput("", 160, 31, 257, 24, $GUI_SS_DEFAULT_INPUT)
GUICtrlSetFont(-1, 11, 600, 0, "Times New Roman")
GUICtrlSetTip(-1, "Click on the Save As button to create a iso file")
Global Const $hInput_Filename = GUICtrlGetHandle($idInput_Filename)
Global Const $idInput_Filename_Color = 0x002000
Global Const $idLabel_filename = GUICtrlCreateLabel("Filename:", 96, 34, 60, 21)
GUICtrlSetFont(-1, 11, 800, 0, "Times New Roman")
GUICtrlSetBkColor(-1, -2)
GUICtrlSetColor(-1, 0x101080)
Global Const $idButton_Browse = GUICtrlCreateButton("&Save as", 426, 30, 75, 25)
GUICtrlSetTip(-1, "Save ISO image")
Global Const $idLabel_Drive = GUICtrlCreateLabel("Drive:", 8, 34, 37, 21)
GUICtrlSetFont(-1, 11, 800, 0, "Times New Roman")
GUICtrlSetBkColor(-1, -2)
GUICtrlSetColor(-1, 0xF0F0FF)
Global Const $idCB_MD5 = GUICtrlCreateCheckbox("", 8, 132, 12, 12)
GUICtrlSetTip(-1, "Create MD5 checksum")
Global Const $idLabel_MD5 = GUICtrlCreateLabel("Create MD5 checksum", 24, 132, 95, 18)
GUICtrlSetTip(-1, "Create MD5 checksum after ISO has been created")
GUICtrlSetFont(-1, 8, 800, 0, "Times New Roman")
GUICtrlSetBkColor(-1, -2)
GUICtrlSetColor(-1, 0x101060)

Global Const $IOCTL_STORAGE_MEDIA_REMOVAL = 0x002D4804
Global Const $IOCTL_SCSI_PASS_THROUGH = 0x0004D004
Global Const $IOCTL_STORAGE_EJECT_MEDIA = 0x002D4808
Global Const $IOCTL_STORAGE_LOAD_MEDIA = 0x002D480C
Global $aMediaTypes[0x10000]
$aMediaTypes[0x0000] = "No media"
$aMediaTypes[0x0008] =  "CD-ROM"
$aMediaTypes[0x0009] =  "CD-R"
$aMediaTypes[0x000A] =  "CD-RW"
$aMediaTypes[0x0010] =  "DVD-ROM"
$aMediaTypes[0x0011] =  "DVD-R Seq. Rec." ;Sequential Recording
$aMediaTypes[0x0012] =  "DVD-RAM"
$aMediaTypes[0x0013] =  "DVD-RW Restricted Overwrite"
$aMediaTypes[0x0014] =  "DVD-RW Seq. Rec." ;Sequential Recording
$aMediaTypes[0x0015] =  "DVD-R DL" ;Dual Layer
$aMediaTypes[0x0016] =  "DVD-R DL Jmp Rec." ;Dual Layer Jump Recording
$aMediaTypes[0x0017] =  "DVD-RW DL"
$aMediaTypes[0x0018] =  "DVD-Download Disc Rec."
$aMediaTypes[0x001A] =  "DVD+RW"
$aMediaTypes[0x001B] =  "DVD+R"
$aMediaTypes[0x0040] =  "BD-ROM"
$aMediaTypes[0x0041] =  "BD-R SRM" ;Sequential Recording Mode
$aMediaTypes[0x0042] =  "BD-R RRM" ;Random Recording Mode (RRM)
$aMediaTypes[0x0043] =  "BD-RE"
$aMediaTypes[0x0050] =  "HD DVD-ROM"
$aMediaTypes[0x0051] =  "HD DVD-R"
$aMediaTypes[0x0052] =  "HD DVD-RAM"
$aMediaTypes[0x0053] =  "HD DVD-RW"
$aMediaTypes[0x0058] =  "HD DVD-R DL"
$aMediaTypes[0x005A] =  "HD DVD-RW DL"
$aMediaTypes[0xFFFF] =  "Unknown"

Global $sDrives = GetDrivesInfo()
Global $drv_tmp = $sDrives
Global $aInfo_o = StringSplit($sDrives, "|", 2)
Global Const $idCombo = GUICtrlCreateCombo("", 48, 31, 38, 26, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL, $CBS_SORT, $CBS_UPPERCASE, $CBS_SORT), $WS_EX_TOPMOST)
GUICtrlSetData(-1, $sDrives)
GUICtrlSetTip(-1, "Select CD/DVD drive")
GUICtrlSetFont(-1, 9, 800, 0, "Times New Roman")
Global Const $hCombo = GUICtrlGetHandle($idCombo)

Global $nMsg, $saveas, $drv, $file, $pid, $aChild, $line, $aP, $po, $abort, $t, $i, $c, $fn, $td, $sek, $err, $mo, $dummy, $aM
Global $fs = False, $start_dummy = False, $combo_min = True, $started = False
Global $combo_size = 38

Global Const $dt = 1000 * 3600 ; if timer > 1h abort copy process

Global $hHBITMAP
If $bg_pic = "0" Then
	$hHBITMAP = Load_BMP_From_Mem(BackgroundPic(), True)
	_WinAPI_DeleteObject(GUICtrlSendMsg($idPic, 0x0172, 0, $hHBITMAP)) ;$STM_SETIMAGE = 0x0172, $IMAGE_BITMAP = 0
	_WinAPI_DeleteObject($hHBITMAP)
Else
	Change_Background_Pic($bg_pic)
	ControlFocus($hGUI, "", $idButton_Browse)
EndIf

GUISetIcon(@SystemDir & "\Shell32.dll", 189, $hGUI)

Global Const $hBitmap = Load_BMP_From_Mem(Texture(), True)
Global $aR = DllCall("Gdi32.dll", "Handle", "CreatePatternBrush", "Handle", $hBitmap)
Global $hBrush = $aR[0]
Global $mco = MouseGetCursor()
GUIRegisterMsg(0x0133, "WM_CTLCOLOREDIT") ;$WM_CTLCOLOREDIT = 0x0133

Global $auto_exit = False
If $CmdLine[0] > 3 And  $CmdLine[0] < 7 Then CheckCMDLine()

Global Const $AW_ACTIVATE = 0x00020000, $AW_BLEND = 0x00080000, $AW_HIDE = 0x00010000

If Not $auto_exit Then
	_WinAPI_AnimateWindow($hGUI, BitOR($AW_BLEND, $AW_ACTIVATE), 500)
	_GUICtrlComboBoxEx_SetCurSel($hCombo, 0)
	ControlFocus($hGUI, "", $idButton_Browse)
	GUICtrlSetPos($idCombo, 48, 31, 38, 27)
EndIf

GUISetState(@SW_SHOW, $hGUI)

Global Const $hDwmApiDll = DllOpen("dwmapi.dll")
Global Const $sChkAero = DllStructCreate("int;")
DllCall($hDwmApiDll, "int", "DwmIsCompositionEnabled", "ptr", DllStructGetPtr($sChkAero))
Global Const $aero = DllStructGetData($sChkAero, 1)
DllClose($hDwmApiDll)

DllCall('user32.dll', 'int', 'HideCaret', 'hwnd', $hGUI)
DllCall('user32.dll', 'int', 'DestroyCaret')

Global $_MD5_CodeBuffer, $_MD5_CodeBufferMemory
Global $_MD5_InitOffset, $_MD5_InputOffset, $_MD5_ResultOffset
Global $_HASH_MD5[4] = [16, 88, '_MD5_', '_MD5_']

Global Enum $idAbout = 1000, $idChangeBGPic, $id_EjectMedia, $id_LoadMedia
Global Const $hMenu = _GUICtrlMenu_GetSystemMenu($hGUI)
_GUICtrlMenu_InsertMenuItem($hMenu, 5, 0, 0)
_GUICtrlMenu_InsertMenuItem($hMenu, 6, "&About", $idAbout)
_GUICtrlMenu_InsertMenuItem($hMenu, 7, 0, 0)
_GUICtrlMenu_InsertMenuItem($hMenu, 8, "Change &Background Pic", $idChangeBGPic)

Global Const $hBmp_About = _WinAPI_CreateBitmapFromIcon(@SystemDir & "\Shell32.dll", 221, 22, 22)
_GUICtrlMenu_SetItemBmp($hMenu, 6, $hBmp_About)
Global $Icon_ChP = 301
If @OSBuild < 6000 Then $Icon_ChP = 117
Global Const $hBmp_ChangeBG = _WinAPI_CreateBitmapFromIcon(@SystemDir & "\Shell32.dll", $Icon_ChP, 24, 24)
_GUICtrlMenu_SetItemBmp($hMenu, 8, $hBmp_ChangeBG)

Global Const $hQMenu = _GUICtrlMenu_CreatePopup()
_GUICtrlMenu_InsertMenuItem($hQMenu, 0, "Eject media from the device", $id_EjectMedia)
_GUICtrlMenu_InsertMenuItem($hQMenu, 1, "", 0)
_GUICtrlMenu_InsertMenuItem($hQMenu, 2, "Load Media", $id_LoadMedia)

Global Const $hBmp_EjectMedia = _WinAPI_CreateBitmapFromIcon(@SystemDir & "\Shell32.dll", 78, 32, 32)
_GUICtrlMenu_SetItemBmp($hQMenu, 0, $hBmp_EjectMedia)
;~ Global Const $hBmp_LoadMedia = _WinAPI_CreateBitmapFromIcon(@SystemDir & "\Shell32.dll", 11, 32, 32)
Global Const $hBmp_LoadMedia = Load_BMP_From_Mem(Icon_LM(), True)
_GUICtrlMenu_SetItemBmp($hQMenu, 2, $hBmp_LoadMedia)

GUIRegisterMsg(0x0112, "WM_SYSCOMMAND") ;$WM_SYSCOMMAND = 0x0112
GUIRegisterMsg(0x0111, "WM_COMMAND") ;$WM_COMMAND = 0x0111
GUIRegisterMsg(0x007B, "WM_CONTEXTMENU") ; $WM_CONTEXTMENU = 0x007B

$dummy = GUICtrlCreateDummy()

AdlibRegister("Chk_Drive_Status", 2000) ; checks every 2 seconds whether new media has been inserted to update combo box

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			_Exit()
		Case $idButton_Browse
			$saveas = FileSaveDialog("Enter ISO file name", "", "ISO (*.iso)")
			If Not @error Then
				If StringRight($saveas, 4) <> ".iso" Then $saveas &= ".iso"
				GUICtrlSetData($idInput_Filename, $saveas)
				$ok += 1
				$fs = True
			EndIf
		Case $idButton_Create, $dummy
			$fn = GUICtrlRead($idInput_Filename)
			If FileExists($fn) Then
				$c = MsgBox(48 + 4, "Information", $fn & " already exists!" & @CRLF & @CRLF & "Overwrite?", 0, $hGUI)
				If $c = 6 Then
					If FileDelete($fn) Then
						Create_ISO()
					Else
						MsgBox(16, "Error", "Unable to delete " & $fn, 30, $hGUI)
					EndIf
				EndIf
			Else
				Create_ISO()
			EndIf
	EndSwitch
	If $ok > 0 Then
		If BitAND(GUICtrlGetState($idButton_Create), $GUI_ENABLE) <> $GUI_ENABLE Then GUICtrlSetState($idButton_Create, $GUI_ENABLE)
	Else
		If BitAND(GUICtrlGetState($idButton_Create), $GUI_DISABLE) <> $GUI_DISABLE Then GUICtrlSetState($idButton_Create, $GUI_DISABLE)
	EndIf

	If $start_dummy Then
		GUICtrlSendToDummy($dummy)
		$start_dummy = False
	EndIf

	$aM = GUIGetCursorInfo($hGUI)
	If IsArray($aM) Then
		If $aM[4] = $idCombo Then
			If $combo_size = 38 Then
				GUICtrlSetPos($idCombo, 48, 31, 310, 27)
				$combo_size = 310
				If Not $aero Then _WinAPI_RedrawWindow($hGUI)
			EndIf
		Else
			If $combo_size = 310 And $combo_min Then
				GUICtrlSetPos($idCombo, 48, 31, 38, 27)
				$combo_size = 38
			EndIf
		EndIf
	EndIf

WEnd

Func Chk_Drive_Status()
	Local $z, $info
	Local $drv_info = GetDrivesInfo()
	Local $aInfo_c = StringSplit($drv_info, "|", 2)
	Local $ci = _GUICtrlComboBox_GetCurSel($hCombo)
	If $drv_info <> $drv_tmp Then
		GUICtrlSetState($idCombo, $GUI_DISABLE)
		_GUICtrlComboBox_ResetContent($hCombo)
		GUICtrlSetData($idCombo, $drv_info)
		_GUICtrlComboBoxEx_SetCurSel($hCombo, $ci)
		GUICtrlSetState($idCombo, $GUI_ENABLE)
		$drv_tmp = $drv_info
		For $z = 0 To UBound($aInfo_c) - 1
			If $aInfo_c[$z] <> $aInfo_o[$z]  Then $info &= $aInfo_c[$z]  & @CRLF
		Next
		TrayTip("Information", "CD/DVD media change detected:" & @CRLF & @CRLF & $info, 1, 1)
		$aInfo_o = $aInfo_c
	EndIf
EndFunc   ;==>Chk_Drive_Status

Func GetDrivesInfo()
	Local $k
	Local $aDrives = DriveGetDrive("CDROM")
	If @error Then Return
	For $k = 1 To $aDrives[0]
		$aDrives[$k] = StringUpper($aDrives[$k])
		$aDrives[$k] &= " [" & $aMediaTypes[_WinAPI_GetCDType($aDrives[$k])] & ", " & DriveGetLabel($aDrives[$k]) & ", " & Round(DriveSpaceTotal($aDrives[$k]), 2) & " MB]"
	Next
	Return _ArrayToString($aDrives, "|", 1)
EndFunc   ;==>GetDrivesInfo

Func CheckCMDLine()
	Local $ps, $pd, $md5, $index, $sText, $exit
	$index = _ArraySearch($CmdLine, "-s")
	If @error Then Return
	$ps = $CmdLine[$index + 1]
	$index = _ArraySearch($CmdLine, "-d")
	If @error Then Return
	$md5 = _ArraySearch($CmdLine, "-md5" )
	$exit = _ArraySearch($CmdLine, "-exit" )
	$pd = $CmdLine[$index + 1]
	If StringRight($pd, 4) <> ".iso" Then $pd &= ".iso"
	If StringRegExp($ps, "(?i)\A[a-z]:", 0) And _GUICtrlComboBox_FindString($hCombo, $ps) > -1 And StringRegExp($pd, "((?<!.)([a-zA-Z]\:\\)(?!\s)(([\w-+.]*((?<!\s)(\s{1})(?!\\)|(?<!\\)(\\{1})(?!\s))*)*)(\\?)(?!.))", 0) Then
		_GUICtrlComboBox_GetLBText($hCombo, _GUICtrlComboBox_FindString($hCombo, $ps), $sText)
		GUICtrlSetData($idCombo, $sText)
		GUICtrlSetData($idInput_Filename, $pd)
		If $md5 > -1 Then GUICtrlSetState($idCB_MD5, $GUI_CHECKED)
		If $exit > -1 Then $auto_exit = True
		$ok = 2
		$start_dummy = True
	EndIf
EndFunc   ;==>CheckCMDLine

Func Create_ISO()
	Local $dl, $drvl, $speed
	$drvl = GUICtrlRead($idCombo)
	$dl = StringLeft($drvl, 1) & ":"
	If DriveStatus($dl) = "READY"  And ISO9660_Check($dl) Then
		AdlibUnRegister("Chk_Drive_Status")
		$abort = False
		$started = True
		GUICtrlSetState($idButton_Browse, $GUI_DISABLE)
		GUICtrlSetState($idCB_MD5, $GUI_DISABLE)
		GUICtrlSetState($idCombo, $GUI_DISABLE)
		GUICtrlSetState($idButton_Create, $GUI_HIDE)
		GUICtrlSetState($idButton_Abort, $GUI_SHOW)
		ControlFocus($hGUI, "", $idButton_Abort)
		$mo = MouseGetCursor()
		GUISetCursor(15, 1, $hGUI)
		$drv = " " & StringLeft($drvl, 1)
		$file = ' "' & $fn & '"'
		$pid = Run($cd2iso & $drv & $file, @ScriptDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
		$t = TimerInit()
		$err = TimerInit()
		While ProcessExists($pid)
			$line = StdoutRead($pid)
			If @error Or $abort Then ExitLoop
			$aP = StringRegExp($line, "(?U).*(\d+)\%", 3)
			If IsArray($aP) And $po <> $aP[0] Then
				GUICtrlSetData($idProgressbar, $aP[0])
				$po = $aP[0]
				$sek = Int(TimerDiff($t) / 1000)
				$td = Sec_2_Time_Format($sek)
				WinSetTitle($hGUI, "", $title & "  -  Created: " & $po & " % / Elapsed: " & $td)
			EndIf
			If GUIGetMsg() = $idButton_Abort Or TimerDiff($t) > $dt Then $abort = True
			Sleep(30)
		WEnd
		GUISetCursor($mo)
		If ProcessExists($pid) Then ProcessClose($pid)
		AdlibRegister("Chk_Drive_Status", 2000)
		GUISetState(@SW_DISABLE, $hGUI)
		If $abort Then
			$c = MsgBox(48 + 4, "Information", "Process aborted!" & @CRLF & @CRLF & _
					"Delete incomplete iso file?", 0, $hGUI)
			If $c = 6 Then
				If FileDelete($fn) Then
					MsgBox(64, "Information", $fn & " has been properly deleted!", 10, $hGUI)
				Else
					MsgBox(16, "Error", "Unable to delete " & $fn, 30, $hGUI)
				EndIf
			EndIf
		Else
			If TimerDiff($err) < 1000 Then
				FileDelete($fn)
				MsgBox(16, "Error", "An unexpected error has occured." & @CRLF & @CRLF & "Currently only ISO 9660 default CD/DVD format is supported :-(", 30, $hGUI)
			Else
				If Not $auto_exit Then
					$speed = Round((FileGetSize($fn) / 1024^2) / $sek, 2) ;mb/s
					MsgBox(64, "Information", "ISO file has been created successfully in " & $td & " (" & $speed & " mb/s)", 30, $hGUI)
				EndIf
				If BitAND(GUICtrlRead($idCB_MD5), $GUI_CHECKED) Then Create_MD5($fn)
			EndIf
		EndIf
		$started = False
		GUISetState(@SW_ENABLE, $hGUI)
		GUICtrlSetState($idButton_Browse, $GUI_ENABLE)
		GUICtrlSetState($idCB_MD5, $GUI_ENABLE)
		GUICtrlSetState($idCombo, $GUI_ENABLE)
		GUICtrlSetState($idButton_Create, $GUI_SHOW)
		GUICtrlSetState($idButton_Abort, $GUI_HIDE)
		GUICtrlSetData($idProgressbar, 0)
		WinSetTitle($hGUI, "", $title)
	Else
		GUISetState(@SW_DISABLE, $hGUI)
		MsgBox(16, "Error", "An error has occured." & @CRLF & @CRLF & _
										   "Maybe no media is inserted to the drive or not a ISO9660 CD/DVD with 2048 bytes/sector !?!", 30, $hGUI)
		GUISetState(@SW_ENABLE, $hGUI)
	EndIf
	If $auto_exit Then _Exit()
EndFunc   ;==>Create_ISO

Func ISO9660_Check($drv)
	Local Const $sector = 2048
	Local $hFile = FileOpen("\\.\" & $drv, 16)
	If @error Then Return SetError(1, 0, 0)
	Local $p = FileSetPos($hFile, 0x8000, $FILE_BEGIN)
	Local $bytes = FileRead($hFile, 0x0808)
	FileClose($hFile)
	If $bytes = "" Then Return SetError(2, 0, 0)
	Local $id1 =  BinaryToString(("0x" & StringMid($bytes, 3 + 2 * 1, 10))) ;get the ISO 9660 id -> CD001 (0x4344303031)
	If $id1 <> "CD001" Then Return SetError(3, 0, 0)
	Local $id2 =  BinaryToString(("0x" & StringMid($bytes, 3 + 2 * 0x0801, 10))) ;get the ISO 9660 id -> CD001 (0x4344303031) from EL TORITO SPECIFICATION
	If $id2<> "CD001" Then Return SetError(4, 0, 0)
	Local $blocks = "0x" & StringMid($bytes, 3 + 2 * 0x54, 8) ;get block size
	Local $logical_block_size = "0x" & StringMid($bytes, 3 + 2 * 0x82, 4) ;logical block size, default is 2048 or 0x0800
	If $logical_block_size <> 0x0800 Then Return SetError(5, 0, 0)
;~ 	Local $dir_rec = "0x" & StringMid($bytes, 3 + 2 * 0x9C, 6) ;24 bytes for the directory record
	Local $diff = DriveSpaceTotal($drv) * 1024^2 - ($blocks * $sector) ;if the CD/DVD is a standard ISO 9660 media then the difference must be zero
	If $diff Then Return SetError(6, 0, 0)
	Return 1
EndFunc   ;==>ISO9660_Check

Func Create_MD5($file)
	GUISetState(@SW_DISABLE, $hGUI)
	Local $aWinPos = WinGetPos($hGUI)
	Local Const $sw = 260
	Local Const $sh = 50
	Local Const $x = $aWinPos[0] + $aWinPos[2] / 2 - $sw / 2
	Local Const $y = $aWinPos[1] + $aWinPos[3] / 2 - $sh / 2
	Local Const $txt = "Creating MD5 checksum "
	Local Const $hSplash = SplashTextOn("MD5 Creation", $txt, $sw, $sh, $x, $y, 5, "Times New Roman", 16, 400)
	TrayTip("MD5 Checksum", "Started with creation of MD5 checksum...", 3, 1)
	Local $i, $j = 0
	Local $t = TimerInit()
	Local $BufferSize = 0x100000
	Local $State = _MD5Init()
	Local $hFile = FileOpen($file, 16)
	For $i = 1 To Ceiling(FileGetSize($file) / $BufferSize)
		_MD5Input_Thread($State, FileRead($hFile, $BufferSize))
		If TimerDiff($t) > 500 Then
			ControlSetText($hSplash, "Creating MD5 checksum...", "Static1", $txt & _StringRepeat(".", Mod($j, 4)))
			$t = TimerInit()
			$j += 1
		EndIf
	Next
	FileClose($hFile)
	Local $Hash = StringTrimLeft(_MD5Result($State), 2)
	Local $fname = " *" & StringRegExpReplace($file, ".*\\(.*)", "$1")
	Local $w = "# Generated on " & _Now() & @CRLF & @CRLF & $Hash & $fname
	$hFile = FileOpen($file & ".md5", 2)
	FileWrite($hFile, $w)
	FileClose($hFile)
	SplashOff()
	TrayTip("MD5 Checksum", "MD5 checksum creation has been finished", 2, 1)
	GUISetState(@SW_ENABLE, $hGUI)
	If Not $auto_exit Then MsgBox(64, "Information", "MD5 checksum creation has been finished", 10, $hGUI)
EndFunc   ;==>Create_MD5

Func Sec_2_Time_Format($time)
	Local $sec = Mod($time, 60)
	Local $min = Mod(Int($time / 60), 60)
	Local $hr = Int($time / 60 ^ 2)
	Return StringFormat("%02i:%02i:%02i", $hr, $min, $sec)
EndFunc   ;==>Sec_2_Time_Format

Func _WinAPI_CreateBitmapFromIcon($file, $iIndex = 0, $iW = 16, $iH = 16)
	If FileExists($file) Then
		Local $aRet, $hIcon, $hBitmap
		Local $hDC, $hBackDC, $hBackObj

		$aRet = DllCall("shell32", "long", "ExtractAssociatedIcon", "int", 0, "str", $file, "word*", $iIndex)
		If @error Then Return SetError(@error, @extended, 0)
		$hIcon = $aRet[0]

		$hDC = _WinAPI_GetDC(0)
		$hBackDC = _WinAPI_CreateCompatibleDC($hDC)
		$hBitmap = _WinAPI_CreateSolidBitmap(0, _WinAPI_GetSysColor($COLOR_MENU), $iW, $iH)
		$hBackObj = _WinAPI_SelectObject($hBackDC, $hBitmap)
		_WinAPI_DrawIconEx($hBackDC, 0, 0, $hIcon, $iW, $iH, 0, 0, 3)
		_WinAPI_DestroyIcon($hIcon)

		_WinAPI_SelectObject($hBackDC, $hBackObj)
		_WinAPI_ReleaseDC(0, $hDC)
		_WinAPI_DeleteDC($hBackDC)
		Return $hBitmap
	Else
		Return SetError(1, 0, 0)
	EndIf
EndFunc   ;==>_WinAPI_CreateBitmapFromIcon

Func Change_Background_Pic($new_pic)
	Local Const $hImage = _GDIPlus_ImageLoadFromFile($new_pic)
	If Not $hImage Then Return SetError(1, 0, 0)
	Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromScan0", "int", $w, "int", $h, "int", 0, "int", 0x0026200A, "ptr", 0, "int*", 0)
	Local Const $hBmp = $aResult[6]
	Local Const $hCtx = _GDIPlus_ImageGetGraphicsContext($hBmp)
	DllCall($ghGDIPDll, "uint", "GdipSetInterpolationMode", "handle", $hCtx, "int", 7)
	_GDIPlus_GraphicsDrawImageRect($hCtx, $hImage, 0, 0, $w, $h)
	Local Const $hHBMP = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBmp)
	_WinAPI_DeleteObject(GUICtrlSendMsg($idPic, 0x0172, 0, $hHBMP))
	_WinAPI_DeleteObject($hHBMP)
	_GDIPlus_ImageDispose($hImage)
	_GDIPlus_BitmapDispose($hBmp)
	_GDIPlus_GraphicsDispose($hCtx)
	_WinAPI_RedrawWindow($hGUI)
	Return 1
EndFunc   ;==>Change_Background_Pic

Func _Exit()
	_WinAPI_DeleteObject($hBmp_About)
	_WinAPI_DeleteObject($hBmp_ChangeBG)
	_WinAPI_DeleteObject($hBmp_EjectMedia)
	_WinAPI_DeleteObject($hBmp_LoadMedia)
	GUISetCursor($mco, 1, $hGUI)
	AdlibUnRegister("Chk_Drive_Status")
	GUIRegisterMsg(0x0111, "")
	GUIRegisterMsg(0x0112, "")
	GUIRegisterMsg(0x0133, "")
	_WinAPI_DeleteObject($hBitmap)
	DllCall("Gdi32.dll", "BOOL", "DeleteObject", "Handle", $hBrush)
	FileDelete($cd2iso)
	If Not $auto_exit Then _WinAPI_AnimateWindow($hGUI, BitOR($AW_BLEND, $AW_HIDE), 750)
	_GDIPlus_Shutdown()
	GUIDelete($hGUI)
	Exit
EndFunc   ;==>_Exit

;======================================================================================
; Function Name:		Load_BMP_From_Mem
; Description:			Loads an image which is saved as a binary string and converts it to a bitmap or hbitmap
;
; Parameters:    		$bImage:		the binary string which contains any valid image which is supported by GDI+
; Optional:  				$hHBITMAP:		if false a bitmap will be created, if true a hbitmap will be created
;
; Remark:					hbitmap format is used generally for GUI internal images, $bitmap is more a GDI+ image format
;
; Requirement(s):		GDIPlus.au3, Memory.au3
; Return Value(s):	Success: handle to bitmap or hbitmap, Error: 0
; Error codes:			1: $bImage is not a binary string
;
; Author(s):				UEZ
; Additional Code:	thanks to progandy for the MemGlobalAlloc and tVARIANT lines
; Version:					v0.95 Build 2011-06-14 Beta
;=======================================================================================
Func Load_BMP_From_Mem($bImage, $hHBITMAP = False)
	If Not IsBinary($bImage) Then Return SetError(1, 0, 0)
	Local $declared = True
	If Not $ghGDIPDll Then
		_GDIPlus_Startup()
		$declared = False
	EndIf
	Local Const $memBitmap = Binary($bImage) ;load image  saved in variable (memory) and convert it to binary
	Local Const $len = BinaryLen($memBitmap) ;get length of image
	Local Const $hData = _MemGlobalAlloc($len, $GMEM_MOVEABLE) ;allocates movable memory  ($GMEM_MOVEABLE = 0x0002)
	Local Const $pData = _MemGlobalLock($hData) ;translate the handle into a pointer
	Local $tMem = DllStructCreate("byte[" & $len & "]", $pData) ;create struct
	DllStructSetData($tMem, 1, $memBitmap) ;fill struct with image data
	_MemGlobalUnlock($hData) ;decrements the lock count  associated with a memory object that was allocated with GMEM_MOVEABLE
	Local $hStream = DllCall("ole32.dll", "int", "CreateStreamOnHGlobal", "handle", $pData, "int", True, "ptr*", 0)
	$hStream = $hStream[3]
	Local $hBitmap = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromStream", "ptr", $hStream, "int*", 0) ;Creates a Bitmap object based on an IStream COM interface
	$hBitmap = $hBitmap[2]
	Local Const $tVARIANT = DllStructCreate("word vt;word r1;word r2;word r3;ptr data; ptr")
	DllCall("oleaut32.dll", "long", "DispCallFunc", "ptr", $hStream, "dword", 8 + 8 * @AutoItX64, _
			"dword", 4, "dword", 23, "dword", 0, "ptr", 0, "ptr", 0, "ptr", DllStructGetPtr($tVARIANT)) ;release memory from $hStream to avoid memory leak
	$tMem = 0
	If $hHBITMAP Then
		Local Const $hHBmp = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap)
		_GDIPlus_BitmapDispose($hBitmap)
		If Not $declared Then _GDIPlus_Shutdown()
		Return $hHBmp
	EndIf
	If Not $declared Then _GDIPlus_Shutdown()
	Return $hBitmap
EndFunc   ;==>Load_BMP_From_Mem

#region Windows Message Code Section
Func WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
	Local $hWndFrom, $iIDFrom, $iCode, $d
	$hWndFrom = $lParam
	$iIDFrom = BitAND($wParam, 0xFFFF)
	$iCode = BitShift($wParam, 16)
	Switch $hWndFrom
		Case $hCombo
			Switch $iCode
				Case $CBN_SELENDOK, $CBN_CLOSEUP
					ControlFocus($hGUI, '', $idButton_Browse)
					$combo_min = True
				Case $CBN_DROPDOWN
					$combo_min = False
			EndSwitch
	EndSwitch

	Switch $wParam
		Case $id_EjectMedia
			$d = StringLeft(GUICtrlRead($idCombo), 1) & ":"
			If Not _WinAPI_IsDoorOpen($d) Then _WinAPI_EjectMedia($d)
		Case $id_LoadMedia
			$d = StringLeft(GUICtrlRead($idCombo), 1) & ":"
			If _WinAPI_IsDoorOpen($d) Then _WinAPI_LoadMedia($d)
	EndSwitch

	Switch $iIDFrom
		Case $idInput_Filename
			DllCall('user32.dll', 'int', 'HideCaret', 'hwnd', $hWnd)
			DllCall('user32.dll', 'int', 'DestroyCaret')
			If Not $fs Then
				If StringLen(GUICtrlRead($idInput_Filename)) < 2 Then GUICtrlSetData($idInput_Filename, "")
			Else
				GUICtrlSetData($idInput_Filename, $saveas)
			EndIf
	EndSwitch

	Return "GUI_RUNDEFMSG"
EndFunc   ;==>WM_COMMAND

Func WM_CONTEXTMENU($hWnd, $Msg, $wParam, $lParam)
	#forceref $hWnd, $Msg, $wParam, $lParam
	Local $mi = GUIGetCursorInfo()
	If IsArray($mi) Then
		If $mi[4] = $idCombo And Not $started Then
			_GUICtrlMenu_TrackPopupMenu($hQMenu, $hWnd)
			Return True
		EndIf
	EndIf
	Return "GUI_RUNDEFMSG"
EndFunc   ;==>WM_CONTEXTMENU

Func WM_SYSCOMMAND($hGUI, $Msg, $wParam, $lParam)
	#forceref $hGUI, $Msg, $lParam
	Switch BitAND($wParam, 0xFFFF)
		Case $idAbout
			GUISetState(@SW_DISABLE, $hGUI)
			MsgBox(64, "About", $title & $build & @CRLF & @CRLF & _
					"Credits:" & @CRLF & _
					"GUI coded by UEZ using AutoIt ;-)" & @CRLF & _
					"MD5 checksum code by Ward" & @CRLF & _
					"WinAPIEx by Yashied" & @CRLF & _
					"Thanks to smashly for pointing me to right direction ;-)" & @CRLF & _
					"And smartee for his efforts on this little project :-)", 90, $hGUI)
			GUISetState(@SW_ENABLE, $hGUI)

		Case $idChangeBGPic
			Local $chk_bg = MsgBox(3 + 48 + 4096, "Setting", 	"Change default background picture?" & @CRLF & @CRLF & _
																									"Yes = Browse and select a new picture" & @CRLF & _
																									"No = Reset to default picture" & @CRLF & _
																									"Cancel = Cancel this operation", 0, $hGUI)
			Switch $chk_bg
				Case 6
					Local  Const $new_pic = FileOpenDialog("Select an image (best dimension: 615x157)", "", "Images (*.jpg;*png;*.bmp;*.gif)", 3, "", $hGUI)
					If @error Then Return 0
					Local $Result = Change_Background_Pic($new_pic)
					If $Result Then IniWrite($ini_file, "Settings", "Background_Pic", $new_pic)
					ControlFocus($hGUI, "", $idButton_Browse)
					Return 1
				Case 7
					Local Const $hHBITMAP = Load_BMP_From_Mem(BackgroundPic(), True)
					_WinAPI_DeleteObject(GUICtrlSendMsg($idPic, 0x0172, 0, $hHBITMAP)) ;$STM_SETIMAGE = 0x0172, $IMAGE_BITMAP = 0
					_WinAPI_DeleteObject($hHBITMAP)
					_WinAPI_RedrawWindow($hGUI)
					IniWrite($ini_file, "Settings", "Background_Pic", "0")
			EndSwitch
	EndSwitch
	Return "GUI_RUNDEFMSG"
EndFunc   ;==>WM_SYSCOMMAND

Func WM_CTLCOLOREDIT($hGUI, $Msg, $wParam, $lParam)
	#forceref $hGUI, $Msg
	If $lParam = $hInput_Filename Then
		If Not $started Then GUISetCursor(2, 1, $hGUI)
		DllCall("Gdi32.dll", "UINT", "SetTextColor", "Handle", $wParam, "UInt", $idInput_Filename_Color)
		DllCall("Gdi32.dll", "Int", "SetBkMode", "Handle", $wParam, "Int", 1)
		Return $hBrush
	EndIf
	Return "GUI_RUNDEFMSG"
EndFunc   ;==>WM_CTLCOLOREDIT
#endregion

#region WinAPIEx functions
; #FUNCTION# ====================================================================================================================
; Name...........: _WinAPI_IsDoorOpen
; Description....: Checks if a CD (DVD) tray is open.
; Syntax.........: _WinAPI_IsDoorOpen ( $sDrive )
; Parameters.....: $sDrive - The drive letter of the CD tray to check, in the format D:, E:, etc.
; Return values..: Success - 1 - CD (DVD) tray is open.
;                            0 - Otherwise.
;                  Failure - 0 and sets the @error flag to non-zero.
; Author.........: G.Sandler (CreatoR)
; Modified.......: Yashied
; Remarks........: None
; Related........:
; Link...........: @@MsdnLink@@ IOCTL_SCSI_PASS_THROUGH
; Example........: Yes
; ===============================================================================================================================
Func _WinAPI_IsDoorOpen($sDrive)
	If @AutoItX64 Then Return SetError(1, 0, 0)
	Local $hFile = _WinAPI_CreateFileEx('\\.\' & $sDrive, 3, 0xC0000000, 0x03)
	If Not $hFile Then Return SetError(1, 0, 0)
	Local $tSPT = DllStructCreate('ushort Length;byte ScsiStatus;byte PathId;byte TargetId;byte Lun;byte CdbLength;byte SenseInfoLength;byte DataIn;byte Alignment[3];ulong DataTransferLength;ulong TimeOutValue;ulong_ptr DataBufferOffset;ulong SenseInfoOffset;byte Cdb[16];byte Hdr[8]')
	Local $tCDB = DllStructCreate('byte;byte;byte[6];byte[2];byte;byte;byte[4]', DllStructGetPtr($tSPT, 'Cdb'))
	Local $tHDR = DllStructCreate('byte;byte;byte[3];byte;byte[2]', DllStructGetPtr($tSPT, 'Hdr'))
	Local $Size = DllStructGetSize($tSPT) - 8
	DllStructSetData($tSPT, 'Length', $Size)
	DllStructSetData($tSPT, 'ScsiStatus', 0)
	DllStructSetData($tSPT, 'PathId', 0)
	DllStructSetData($tSPT, 'TargetId', 0)
	DllStructSetData($tSPT, 'Lun', 0)
	DllStructSetData($tSPT, 'CdbLength', 12)
	DllStructSetData($tSPT, 'SenseInfoLength', 0)
	DllStructSetData($tSPT, 'DataIn', 1)
	DllStructSetData($tSPT, 'DataTransferLength', 8)
	DllStructSetData($tSPT, 'TimeOutValue', 86400)
	DllStructSetData($tSPT, 'DataBufferOffset', $Size)
	DllStructSetData($tSPT, 'SenseInfoOffset', 0)
	DllStructSetData($tCDB, 1, 0xBD)
	DllStructSetData($tCDB, 2, 0)
	DllStructSetData($tCDB, 4, 0, 1)
	DllStructSetData($tCDB, 4, 8, 2)
	DllStructSetData($tCDB, 5, 0)
	DllStructSetData($tCDB, 6, 0)
	Local $Ret = DllCall('kernel32.dll', 'int', 'DeviceIoControl', 'ptr', $hFile, 'dword', $IOCTL_SCSI_PASS_THROUGH, 'ptr', DllStructGetPtr($tSPT), 'dword', $Size, 'ptr', DllStructGetPtr($tSPT), 'dword', DllStructGetSize($tSPT), 'dword*', 0, 'ptr', 0)
	If (@error) Or (Not $Ret[0]) Then $Ret = 0
	_WinAPI_CloseHandle($hFile)
	If Not IsArray($Ret) Then Return SetError(2, 0, 0)
	Return Number(BitAND(DllStructGetData($tHDR, 2), 0x10) = 0x10)
EndFunc   ;==>_WinAPI_IsDoorOpen

; #FUNCTION# ====================================================================================================================
; Name...........: _WinAPI_LoadMedia
; Description....: Loads media into a device.
; Syntax.........: _WinAPI_LoadMedia ( $sDrive )
; Parameters.....: $sDrive - The drive letter of the CD tray to load, in the format D:, E:, etc.
; Return values..: Success - 1.
;                  Failure - 0 and sets the @error flag to non-zero.
; Author.........: Yashied
; Modified.......:
; Remarks........: None
; Related........:
; Link...........: @@MsdnLink@@ IOCTL_STORAGE_LOAD_MEDIA
; Example........: Yes
; ===============================================================================================================================
Func _WinAPI_LoadMedia($sDrive)
	Local $hFile = _WinAPI_CreateFileEx('\\.\' & $sDrive, 3, 0x80000000, 0x01)
	If Not $hFile Then Return SetError(1, 0, 0)
	Local $Ret = DllCall('kernel32.dll', 'int', 'DeviceIoControl', 'ptr', $hFile, 'dword', $IOCTL_STORAGE_LOAD_MEDIA, 'ptr', 0, 'dword', 0, 'ptr', 0, 'dword', 0, 'dword*', 0, 'ptr', 0)
	If (@error) Or (Not $Ret[0]) Then $Ret = 0
	_WinAPI_CloseHandle($hFile)
	If Not IsArray($Ret) Then Return SetError(2, 0, 0)
	Return $Ret[0]
EndFunc   ;==>_WinAPI_LoadMedia

; #FUNCTION# ====================================================================================================================
; Name...........: _WinAPI_EjectMedia
; Description....: Ejects media from a device.
; Syntax.........: _WinAPI_EjectMedia ( $sDrive )
; Parameters.....: $sDrive - The drive letter of the CD tray to eject, in the format D:, E:, etc.
; Return values..: Success - 1.
;                  Failure - 0 and sets the @error flag to non-zero.
; Author.........: Yashied
; Modified.......:
; Remarks........: None
; Related........:
; Link...........: @@MsdnLink@@ IOCTL_STORAGE_EJECT_MEDIA
; Example........: Yes
; ===============================================================================================================================
Func _WinAPI_EjectMedia($sDrive)
	Local $hFile = _WinAPI_CreateFileEx('\\.\' & $sDrive, 3, 0x80000000, 0x01)
	If Not $hFile Then Return SetError(1, 0, 0)
	Local $Ret = DllCall('kernel32.dll', 'int', 'DeviceIoControl', 'ptr', $hFile, 'dword', $IOCTL_STORAGE_EJECT_MEDIA, 'ptr', 0, 'dword', 0, 'ptr', 0, 'dword', 0, 'dword*', 0, 'ptr', 0)
	If (@error) Or (Not $Ret[0]) Then $Ret = 0
	_WinAPI_CloseHandle($hFile)
	If Not IsArray($Ret) Then Return SetError(2, 0, 0)
	Return 1
EndFunc   ;==>_WinAPI_EjectMedia

; #FUNCTION# ====================================================================================================================
; Name...........: _WinAPI_GetCDType
; Description....: Retrieves a type of the media which is loaded into a specified CD-ROM device.
; Syntax.........: _WinAPI_GetCDType ( $sDrive )
; Parameters.....: $sDrive - The drive letter of the CD tray to retrieve information, in the format D:, E:, etc.
; Return values..: Success - The type of the media, it must be one of the following values.
;
;                            0x0000 - No media
;                            0x0008 - CD-ROM
;                            0x0009 - CD-R
;                            0x000A - CD-RW
;                            0x0010 - DVD-ROM
;                            0x0011 - DVD-R Sequential Recording
;                            0x0012 - DVD-RAM
;                            0x0013 - DVD-RW Restricted Overwrite
;                            0x0014 - DVD-RW Sequential Recording
;                            0x0015 - DVD-R Dual Layer
;                            0x0016 - DVD-R Dual Layer Jump Recording
;                            0x0017 - DVD-RW Dual Layer
;                            0x0018 - DVD-Download Disc Recording
;                            0x001A - DVD+RW
;                            0x001B - DVD+R
;                            0x0040 - BD-ROM
;                            0x0041 - BD-R Sequential Recording Mode (SRM)
;                            0x0042 - BD-R Random Recording Mode (RRM)
;                            0x0043 - BD-RE
;                            0x0050 - HD DVD-ROM
;                            0x0051 - HD DVD-R
;                            0x0052 - HD DVD-RAM
;                            0x0053 - HD DVD-RW
;                            0x0058 - HD DVD-R Dual Layer
;                            0x005A - HD DVD-RW Dual Layer
;                            0xFFFF - Unknown
;
;                  Failure - 0 and sets the @error flag to non-zero.
; Author.........: Yashied
; Modified.......:
; Remarks........: None
; Related........:
; Link...........: @@MsdnLink@@ IOCTL_SCSI_PASS_THROUGH
; Example........: Yes
; ===============================================================================================================================
Func _WinAPI_GetCDType($sDrive)
	If @AutoItX64 Then Return SetError(1, 0, 0)
	Local $hFile = _WinAPI_CreateFileEx('\\.\' & $sDrive, 3, 0xC0000000, 0x03)
	If Not $hFile Then Return SetError(1, 0, 0)
	Local $tSPT = DllStructCreate('ushort Length;byte ScsiStatus;byte PathId;byte TargetId;byte Lun;byte CdbLength;byte SenseInfoLength;byte DataIn;byte Alignment[3];ulong DataTransferLength;ulong TimeOutValue;ulong_ptr DataBufferOffset;ulong SenseInfoOffset;byte Cdb[16];byte Hdr[8]')
	Local $tCDB = DllStructCreate('byte;byte;byte[2];byte[3];byte[2];byte;byte[2];byte[4]', DllStructGetPtr($tSPT, 'Cdb'))
	Local $tHDR = DllStructCreate('byte[4];byte;byte;byte[2]', DllStructGetPtr($tSPT, 'Hdr'))
	Local $Size = DllStructGetSize($tSPT) - 8
	DllStructSetData($tSPT, 'Length', $Size)
	DllStructSetData($tSPT, 'ScsiStatus', 0)
	DllStructSetData($tSPT, 'PathId', 0)
	DllStructSetData($tSPT, 'TargetId', 0)
	DllStructSetData($tSPT, 'Lun', 0)
	DllStructSetData($tSPT, 'CdbLength', 12)
	DllStructSetData($tSPT, 'SenseInfoLength', 0)
	DllStructSetData($tSPT, 'DataIn', 1)
	DllStructSetData($tSPT, 'DataTransferLength', 8)
	DllStructSetData($tSPT, 'TimeOutValue', 86400)
	DllStructSetData($tSPT, 'DataBufferOffset', $Size)
	DllStructSetData($tSPT, 'SenseInfoOffset', 0)
	DllStructSetData($tCDB, 1, 0x46)
	DllStructSetData($tCDB, 2, 0)
	DllStructSetData($tCDB, 3, 0, 1)
	DllStructSetData($tCDB, 3, 0, 2)
	DllStructSetData($tCDB, 5, 0, 1)
	DllStructSetData($tCDB, 5, 8, 2)
	DllStructSetData($tCDB, 6, 0)
	DllStructSetData($tCDB, 7, 0, 1)
	DllStructSetData($tCDB, 7, 0, 2)
	Local $Ret = DllCall('kernel32.dll', 'int', 'DeviceIoControl', 'ptr', $hFile, 'dword', $IOCTL_SCSI_PASS_THROUGH, 'ptr', DllStructGetPtr($tSPT), 'dword', $Size, 'ptr', DllStructGetPtr($tSPT), 'dword', DllStructGetSize($tSPT), 'dword*', 0, 'ptr', 0)
	If (@error) Or (Not $Ret[0]) Then $Ret = 0
	_WinAPI_CloseHandle($hFile)
	If Not IsArray($Ret) Then Return SetError(2, 0, 0)
	Return BitOR(BitShift(DllStructGetData($tHDR, 4, 1), -8), DllStructGetData($tHDR, 4, 2))
EndFunc   ;==>_WinAPI_GetCDType

; #FUNCTION# ====================================================================================================================
; Name...........: _WinAPI_CreateFileEx
; Description....: Creates or opens a file or I/O device.
; Syntax.........: _WinAPI_CreateFileEx ( $sFile, $iCreation, $iAccess, $iShare [, $iFlagsAndAttributes [, $tSecurity [, $hTemplate]]] )
; Parameters.....: $sFile               - The name of the file or device to be created or opened.
;                  $iCreation           - The action to take on a file or device that exists or does not exist. This parameter must be
;                                         one of the following values, which cannot be combined.
;
;                                         $CREATE_NEW
;                                         $CREATE_ALWAYS
;                                         $OPEN_EXISTING
;                                         $OPEN_ALWAYS
;                                         $TRUNCATE_EXISTING
;
;                  $iAccess             - The requested access to the file or device, which can be summarized as read, write, both
;                                         or neither (zero).
;
;                                         $GENERIC_READ
;                                         $GENERIC_WRITE
;
;                                         (See MSDN for more information)
;
;                  $iShare              - The requested sharing mode of the file or device, which can be read, write, both,
;                                         delete, all of these, or none. If this parameter is 0 and _WinAPI_CreateFileEx() succeeds,
;                                         the file or device cannot be shared and cannot be opened again until the handle to
;                                         the file or device is closed.
;
;                                         $FILE_SHARE_READ
;                                         $FILE_SHARE_WRITE
;                                         $FILE_SHARE_DELETE
;
;                  $iFlagsAndAttributes - The file or device attributes and flags. This parameter can be one or more of the
;                                         following values.
;
;                                         $FILE_ATTRIBUTE_READONLY
;                                         $FILE_ATTRIBUTE_HIDDEN
;                                         $FILE_ATTRIBUTE_SYSTEM
;                                         $FILE_ATTRIBUTE_DIRECTORY
;                                         $FILE_ATTRIBUTE_ARCHIVE
;                                         $FILE_ATTRIBUTE_DEVICE
;                                         $FILE_ATTRIBUTE_NORMAL
;                                         $FILE_ATTRIBUTE_TEMPORARY
;                                         $FILE_ATTRIBUTE_SPARSE_FILE
;                                         $FILE_ATTRIBUTE_REPARSE_POINT
;                                         $FILE_ATTRIBUTE_COMPRESSED
;                                         $FILE_ATTRIBUTE_OFFLINE
;                                         $FILE_ATTRIBUTE_NOT_CONTENT_INDEXED
;                                         $FILE_ATTRIBUTE_ENCRYPTED
;
;                                         $FILE_FLAG_BACKUP_SEMANTICS
;                                         $FILE_FLAG_DELETE_ON_CLOSE
;                                         $FILE_FLAG_NO_BUFFERING
;                                         $FILE_FLAG_OPEN_NO_RECALL
;                                         $FILE_FLAG_OPEN_REPARSE_POINT
;                                         $FILE_FLAG_OVERLAPPED
;                                         $FILE_FLAG_POSIX_SEMANTICS
;                                         $FILE_FLAG_RANDOM_ACCESS
;                                         $FILE_FLAG_SEQUENTIAL_SCAN
;                                         $FILE_FLAG_WRITE_THROUGH
;
;                                         $SECURITY_ANONYMOUS
;                                         $SECURITY_CONTEXT_TRACKING
;                                         $SECURITY_DELEGATION
;                                         $SECURITY_EFFECTIVE_ONLY
;                                         $SECURITY_IDENTIFICATION
;                                         $SECURITY_IMPERSONATION
;
;                  $tSecurity           - $tagSECURITY_ATTRIBUTES structure that contains two separate but related data members:
;                                         an optional security descriptor, and a Boolean value that determines whether the returned
;                                         handle can be inherited by child processes. If this parameter is 0, the handle cannot
;                                         be inherited by any child processes the application may create and the file or device
;                                         associated with the returned handle gets a default security descriptor.
;                  $hTemplate           - Handle to a template file with the $GENERIC_READ access right. The template file supplies
;                                         file attributes and extended attributes for the file that is being created.
; Return values..: Success              - Handle to the specified file, device, named pipe, or mail slot.
;                  Failure              - 0 and sets the @error flag to non-zero.
; Author.........: Yashied
; Modified.......:
; Remarks........: When an application is finished using the object handle returned by this function, use the _WinAPI_CloseHandle()
;                  function to close the handle. This not only frees up system resources, but can have wider influence on things
;                  like sharing the file or device and committing data to disk.
; Related........:
; Link...........: @@MsdnLink@@ CreateFile
; Example........: Yes
; ===============================================================================================================================
Func _WinAPI_CreateFileEx($sFile, $iCreation, $iAccess, $iShare, $iFlagsAndAttributes = 0, $tSecurity = 0, $hTemplate = 0)
	Local $Ret = DllCall('kernel32.dll', 'ptr', 'CreateFileW', 'wstr', $sFile, 'dword', $iAccess, 'dword', $iShare, 'ptr', DllStructGetPtr($tSecurity), 'dword', $iCreation, 'dword', $iFlagsAndAttributes, 'ptr', $hTemplate)
	If (@error) Or ($Ret[0] = Ptr(-1)) Then Return SetError(1, 0, 0)
	Return $Ret[0]
EndFunc   ;==>_WinAPI_CreateFileEx

; #FUNCTION# ====================================================================================================================
; Name...........: _WinAPI_AnimateWindow
; Description....: Enables you to produce special effects when showing or hiding windows.
; Syntax.........: _WinAPI_AnimateWindow ( $hWnd, $iFlags [, $iDuration] )
; Parameters.....: $hWnd      - Handle to the window to animate.
;                  $iFlags    - The flags that specify the type of animation. This parameter can be one or more of the following
;                               values. Note that, by default, these flags take effect when showing a window. To take effect when
;                               hiding a window, use AW_HIDE and a logical OR operator with the appropriate flags.
;
;                               $AW_SLIDE
;                               $AW_ACTIVATE
;                               $AW_BLEND
;                               $AW_HIDE
;                               $AW_CENTER
;                               $AW_HOR_POSITIVE
;                               $AW_HOR_NEGATIVE
;                               $AW_VER_POSITIVE
;                               $AW_VER_NEGATIVE
;
;                  $iDuration - Specifies how long it takes to play the animation, in milliseconds. Default is 1000.
; Return values..: Success    - 1.
;                  Failure    - 0 and sets the @error flag to non-zero.
; Author.........: Yashied
; Modified.......:
; Remarks........: None
; Related........:
; Link...........: @@MsdnLink@@ AnimateWindow
; Example........: Yes
; ===============================================================================================================================
Func _WinAPI_AnimateWindow($hWnd, $iFlags, $iDuration = 1000)
	Local $Ret = DllCall('user32.dll', 'int', 'AnimateWindow', 'hwnd', $hWnd, 'dword', $iDuration, 'dword', $iFlags)
	If (@error) Or (Not $Ret[0]) Then Return SetError(1, 0, 0)
	Return 1
EndFunc   ;==>_WinAPI_AnimateWindow
#endregion WinAPIEx functions

#region MD5 checksum
Func _MD5Input_Thread(ByRef $Context, $Data)
	Local $Opcode
	If Not IsDllStruct($_MD5_CodeBuffer) Then _MD5_Startup()
	If Not IsDllStruct($Context) Then Return SetError(1, 0, 0)

	$Data = Binary($Data)
	Local $InputLen = BinaryLen($Data)
	Local $Input = DllStructCreate("byte[" & $InputLen & "]")
	DllStructSetData($Input, 1, $Data)

	If @AutoItX64 Then
		$Opcode = Binary('0x4883EC084989C8488B5110498B004D8B4820488B49084D8B40184883C408FFE0')
	Else
		$Opcode = Binary('0x83EC1C8B4424208B50108954240C8B500C895424088B5008895424048B5004891424FF1083EC1083C41CC20400')
	EndIf

	Local $CodeBufferMemory = _MemVirtualAlloc(0, BinaryLen($Opcode), $MEM_COMMIT, $PAGE_EXECUTE_READWRITE)
	Local $CodeBuffer = DllStructCreate("byte[" & BinaryLen($Opcode) & "]", $CodeBufferMemory)
	DllStructSetData($CodeBuffer, 1, $Opcode)

	Local $ThreadParam = DllStructCreate("ptr addr; ptr var1; ptr var2; uint var3; int var4")
	DllStructSetData($ThreadParam, 'addr', DllStructGetPtr($_MD5_CodeBuffer) + $_MD5_InputOffset)
	DllStructSetData($ThreadParam, 'var1', DllStructGetPtr($Context))
	DllStructSetData($ThreadParam, 'var2', DllStructGetPtr($Input))
	DllStructSetData($ThreadParam, 'var3', $InputLen)
	DllStructSetData($ThreadParam, 'var4', 0)

	Local $Ret = DllCall("kernel32.dll", "hwnd", "CreateThread", "ptr", 0, "uint", 0, "ptr", _
			DllStructGetPtr($CodeBuffer), "ptr", DllStructGetPtr($ThreadParam), "uint", 0, "uint", 0)
	Local $ThreadHandle = $Ret[0]
	Do
		Sleep(10)
		$Ret = DllCall("kernel32.dll", "int", "GetExitCodeThread", "hwnd", $ThreadHandle, "uint*", 0)
	Until $Ret[2] <> 259 ; STILL_ACTIVE
EndFunc   ;==>_MD5Input_Thread

Func _MD5_Exit()
	$_MD5_CodeBuffer = 0
	_MemVirtualFree($_MD5_CodeBufferMemory, 0, $MEM_RELEASE)
EndFunc   ;==>_MD5_Exit

Func _MD5_Startup()
	Local $Code
	If Not IsDllStruct($_MD5_CodeBuffer) Then
		If @AutoItX64 Then
			$Code = 'BQsAAIkO2+kECRwYhw5XCIPUBK4KD0GcnVYdVZxU/HcAU0iD7ChEiyHHBnoMZwKDWggZEnIECEkTWQMieRBBjbT4eKRqf9c/ifgGaRgx2C5jUV4h8PB8JBT3+PhHAY28OVa3x+j9bP0Q7AQG7t7BKPbBwAfYAfA9IcZ9d0EO94txCMPBxwx0FABEjawe23AgJDmJwzp0sxhQ82M2hCH7YBOKtDPuzjG9wdZcHcOwwxFG8CxjO977MdY+b+sKoIQ4rw98UPWLJNiKvonrxp7GFmo++0Wq7oSAriHzog0AhzcqxocoRwGfKYnzgAox64NGwxHANqwtE0YwUKi9HM2A3/oKjmjufURFDy7jlUb9Nijd6Tw2xRHmuP9We+OhBSBEcQJuXCQMgIwY2JiAVWmGo+t7hD+v94QWK3sgRw4VsVv/NXjb30L3eGzhuCyjcGXduQRDiR6+18+6+s7q74JsUv+mhUcwZSr3QYQiEZBrvzXIkhJ5NGBuiTwkpIkUk3GYunygjjHvdkEPwCHHRQrwCwwB/1A4rvgSRSH4QBI9jkN5ptk9pMVBukE8Avmb+aQy6UmQBtkI0UmbIELawGIlHmX2cs4ogYlm8abpSm/5DcLIi0xC9wSBBVj9D0Bys/iJ/5sy8YlQDc8Mag+8pA4EwScJAUZH7QpRWl4mmRzP1TGHN/fN16qStum'
			$Code &= 'NDu4TgA49zM1R+LQgQhi78jBdGxAv1hsyOv75FCw69/tRzyHPQJeMEVOYPWwCHfb4rIHRsO9jQCHvA9MFgeah2GUdLvlRfHTQbJCVihRxaIaBPsj70+ddeQlyAiMImnegBTjmzeFXIX9g/DnWBzdGw6Adhw0j1fTxDA8E7RRaRStRzwt9BAXp46ktCXYCRRiSe6ANOfij71L8g92gBC3ZAm9nOkhlg4pMKrV0i9KKHE16swz+JMjGfYJCOfr/Ac5EA6lFf02gMJo8FDiLRL+GxwTuBgGB9nGHiJJGknJd6A5t0jtT7wtE8YYFCyJhnW2sODTwwPE+DDjl/fTIx9bFiVzpELs+JCIG6r6k/9mDDMa7WmbbF0za321LsCijFG7YyeOpzyLeS9Bb5Y9ghrv2jbB4TQHBSXFUThYJcLy/vggYgYv4MaNQTA2HUonFhbn9CZQQLwYKzVgFiywkEmVR1IA8L4x+myhIzck4xSBrIPonoWbqXvUyJCwvcrQqiGsZCoUw79SyooRJ9X5SBEOoFMcL2YUB72SD2QvOoOkOBR2IUgSSVacxJQiHDGoO6kgUCIUmFx+BNTnQ1NmU5MaQZZr+kDcf5Zkk2+Zrtr0s7UZoGlXGjMD4fCSiH5lPzO5spAQlRCIp9JQFH5aoeokw77CDuqwvlxP/KkNQCWRJFDQQ8UC2MWVWrMSSz8D'
			$Code &= 'COKcjlKvVjQputcb31UJp8TIZ4wxWkyJJ1hsbCc45Kqb0RcbExAb0f8woCeXHSeA2GffQZu0lJYKtOaCT/IWjCkxG5Wzt3bCoxAOkHMNZW2UyIu98bGgAxw/JFAkGgOiuqicAoCuSzAxmj9IVjJAWCQnIicsPL0zTvMTzUKa8F30U9O//b2w640QkCeD7Irzu0RNdhIUVKPw2ENnTEwnriUoQ46qU35J3kg8GPE9+qG/T05Q2quEd+zHrjtmJ1Ggi00nOG0HOgfy0KODmLO6llxR21cgd4zHLwN6NnAcUQ/yjmIuQCmkK+KxwzOZNCVks4E6CoREITkD9AcOr/bHXwd0PULnzCdiQ7KongJcsgn5TUPekrAYuNfI6vd00id7uAZgJzzHfIncBvDO70tcqReQKhwaHhMgJxoCojTQu38k9fHTzJXIMg88cHwVPOZHThgDUwQMC99Hbw76QWggJTNnCAokCi0IEUDf+2Ni1EAiJfkoASIPEKFteX105QVxvCB28p8MYvEmJftVnVArMn8tMCfhmxR1NhcDBi3FQdF/w5j8DTI15QEG+nwwC6wANSQFcJFBIhR7/dEalo+T1KZdH6/A5+3YE9v372/vxM4rYhuq23ONgHEgGKd/osAJqBoP+QHXILGf6'
			$Code &= 'BuGRMPboMAH/41hGdVK6krPrhPRKSBiJ11YIzlPKaMOOjiBJgfh/dn5BkUFQ9OA/IHVHDGZAMe1A+cw+4szp30Q/m+h2r+WDOysGGvg/d+RENEPAOhvDXrtBYmcyVAeHhSbxAV5QkeMghcO9IdMpxUO06DMy75Drue7+u4gzorDx1cZ+NI0uoQtD6cZEUZcY6MejkXCHuFIHJAEjRWfrobCJq82blosgAxkI/ty6mAMRDHZUMhAbqkFAMG8rE5mXGEnYpRKGrCAKmCZmKArLBpB9aTAKAV44v4Cgq79/ZNpnxIFmwdP/mQrGIs1E8kTN99nkkNH10AEJwB74OEKIDBgDdnJIQbikz4H5Y6hqf5jUDSnAMdKaQYI/AUNL4j0W2ZRT9rdzDMMBujhRDzOFpQ1A+ccCkRSpiAQRsACJ0THAwekDKPbCzAzJ80irKq2LZBxRs0CD4gF0HybGBwoUGnIhOFDo0NAltQVDUIn2JXVMk8YOQw046Nb1+p4wQNxFMgxEBAQISBAIIExqDGIHT5CepARP8T9M0v9RKfTDxmADpI17AbIbN+lNhpBmxweohuoC0Da7GulGIwgQEhEEdCHpPmgPlUQykS8iP0hT7yTRbaxrKSAkW4nodBLNCqnfY+kmJhtWfpnPBtZAmsH88wqkX17DEETQMqpjogAA'
		Else
			$Code = 'XgsAAIkA24PsBItEJAjz26DoLgnhw/vE+cIQwYeRLxwbKIk3eRGKBCcgIVcICByJCR0PHxBhCqBVV1ZjU0JEix2EagxdMthaEHoEAIlMJDyNtDF4HqRq193px9kh+b7AAc6LSAQewcYHGP47OI0DrClWt8fo2Nkx+Tch8ULzTA2Ai2gIccE/DAF8Bpwd23Ag2kFc0fPZbOQ0MWH7Ngwhy5gOAyeNvAE97s69wYl8nT3PwMMRMfcBy8xLMEYQMyHfGgNhMfIurw/g9YlhdBbBxxbc3gHMMM5HLIAUIWb+FgMxAY2MKSrGh0dUiieTdfkQlYRkRygKGI9GAzGAhysTEEYwqJGXQYoEmRuBR/QKHIxwLwEZlUb9LSBWijLtWZYEkRCIjPDYmIBCaUGJFo7+g443YRxaSox4r/eQP4WMRBgIKHixW3H/hUQUCCx4vtfwiaSCiowzhSBHEFMwjMEiEZBrIhjaP42xCPZEIISN8PX8cBI0wcUKov2TPw6TcZjwkJBlYQgYhzY4IVLpjoAzjkN5polA0etUTg2Uiw71AZRA+4+eH96CWDyJyIrNnR/oM7TwQAydH+4IPrRJpsc+mzj5yvdgAAViACUe9on4MfAhb8gI70T8KoviwXjAJAH4EY5As16izMDBLRCZJLpl90BBw1FaXiabKzzz/AcJAU8izjHGrr+NAyNQBqr'
			$Code &= 'HtmnpQQbUfEEoxg6B8vcMMc8hxwgDwCONhChdEDAv1kEUiUSJx96Ii4RRA7Ej91MU4QIJAKIegeYpodiSoIeHgyF04Y10NUi4LKtpBPvI+9PnSBhIeNjmzX7hiQQagdYHN8OUQTB8R3XR+ASHDdX0SBzUCO0UWkWRCKgFEenjqSM0U/Cj7/zKQSCA1ArZAm9nfF6EbX31dM19LMqDDIyHikwqaRSE8DzxT4YDQjn6/4tDUIEmMWg9JigSkxwIdAROgYH2cYdJliQ3wcwxENYLmFTA9gYiYZ1tGYnoMTTI/camMSeSECBuBww4TOWkQcKTNPAoWheG9uobvqSJjCY0+FjkLAgEYKnP3kuE3Sk8XJVA3sE+Ac1pIIa/xdTnAA5gS0y7lEH4Zq9lMBQIau4OD3Blv77WyTSwnn0MUYvLZKoXiIQ4EsZ+m5M+QHQp0OeLIciQPGXiz0GL+ieh6lajNGz4wDEwoWn9AQaF6O/Uqusvva8EthI9JvrU0xgBeAUdiARMonSLQOSKwYZBGLni1Io5FdDU2aJmNPHAyjEMaSL0Ag3lmdvmia3QZHVMVjooBhj4fKIfyjIB+f/IGTQGzGDN/2VWrMSqlweB6PXGNq+9iegH7CIpYfQw99AJYrU/BNXWQBv'
			$Code &= 'ABgH98Iw5DZf/KkMhCZ0gJOkS99EJTQ0DGYHQPacjlKsxbsXXkuwKALkJzzHHjSR8PXdFKAmdDykGADw5oJP8izB4xi0M99ZcCfukgBHDWVtLZVtY7FQ32hXC+gH+CUcwsvz1D6GSzAyPRMtVme1IHc4UvZEKAZwZ4OYs/lC6ffTvSP+BakNTpA5SIH0G0V2ETIU+ajVvq20QHCYVD4CsNU9+qG+Yy4KQQAsJxqDSMf6zz7jBueykCU6o7hgLicPV99OS7pDYOxRDoqMuCAnmH/PBHB/Bww+BKiihEQhOsPQvLAHLyM3YRgfFwDYugn5T99rAN4V22ED2xjHejTRsN7s2KQI18jq9idkjNAFC92w2D9U2Biu70tcq7M03GOqh8mznkfKG6whowgMykWqJ4ItymAY5WgidSgyV3uMfiUKAg8REW15fH13DVQ/VV+PPVlMAoIPsTIXJi1DidBx5jUB+kuI/SXU8QMMc6z0ii1xWyTCuT4nHriUbA+JcoJlIUBFYAVSF/3RHvkCsJ6IBOf52AonSjy+S1lzmfvVRVPayd/TQehTyAttzJfDyg/oZQHWoFzxALeja93H/CjHS65eVEUyTiDIskopmSEFA2e38/n+okRwPOIaAVUTroEJQgwvgP3VEkPMx//bFsA1y2FzqpXl57zToi58P5jd/Rz936oBGwInCo86uWfZU'
			$Code &= 'ZBPqLlhhAXKhu3rrIeAslL+/gYnaKcdM6vk9AfsO/ujjeIrrop75zSqUbATChLIBBuu8cZhL0GA8Gum7UQasEEsHFI1QQMcuYQEjRWe9Du6lH5hCaqvNYO8OCP7cukCYDA12VDIQONYTeoiRcy4CCkS/1ETT5b5DccOydMbcSVBAQf2/jqjNkAr32SHRwJ4JR4gMA4LAAYDYOHZmupFyh8KNe4rqFQOeJAiZvMJCpiJQ8PqSEVR8ut/+e1H2o8zDATC6OD8PhZ7CDffHAqQMn0mJgNjAwekCOfbCmfOrJJ0VAC8BdCrGB6HpJaFmZiFjUe2EEY1DQIiUiyV7UAd90nBrVA+kDv0Dwed2CzsRgtRTPERq7kNQOIfoKPr1gf2ZWwYKRPxGBMgMSBAIIExJDNxkUnSiIFLLJkgDhsPGA7YDewGyN+lVcm4VZscHkhzqAuizK+lRELIbViFTMckgRBjZ+YwgbIGQmmLfpf7RCxggmBhbMelgG1ZXp78kgxCltCHm5C/8BIP5CHInggcBKQKWpElMEfQFEmalgwQLicqTEPPUhxnD4QO5pOu6FgZfXsNXd0QQMDEPttIMaSGHswOtCCF0AwUKqkkhCnX2Uj/8Qk0QQKpfYMMA'
		EndIf
		Local $Opcode = String(_MD5_CodeDecompress($Code))
		$_MD5_InitOffset = (StringInStr($Opcode, "89DB") - 3) / 2
		$_MD5_InputOffset = (StringInStr($Opcode, "87DB") - 3) / 2
		$_MD5_ResultOffset = (StringInStr($Opcode, "09DB") - 3) / 2
		$Opcode = Binary($Opcode)

		$_MD5_CodeBufferMemory = _MemVirtualAlloc(0, BinaryLen($Opcode), $MEM_COMMIT, $PAGE_EXECUTE_READWRITE)
		$_MD5_CodeBuffer = DllStructCreate("byte[" & BinaryLen($Opcode) & "]", $_MD5_CodeBufferMemory)
		DllStructSetData($_MD5_CodeBuffer, 1, $Opcode)
		OnAutoItExitRegister("_MD5_Exit")
	EndIf
EndFunc   ;==>_MD5_Startup

Func _MD5Init()
	If Not IsDllStruct($_MD5_CodeBuffer) Then _MD5_Startup()
	Local $Context = DllStructCreate("byte[" & $_HASH_MD5[1] & "]")
	DllCall("user32.dll", "none", "CallWindowProc", "ptr", DllStructGetPtr($_MD5_CodeBuffer) + $_MD5_InitOffset, _
			"ptr", DllStructGetPtr($Context), _
			"int", 0, _
			"int", 0, _
			"int", 0)

	Return $Context
EndFunc   ;==>_MD5Init

Func _MD5Input(ByRef $Context, $Data)
	If Not IsDllStruct($_MD5_CodeBuffer) Then _MD5_Startup()
	If Not IsDllStruct($Context) Then Return SetError(1, 0, 0)

	$Data = Binary($Data)
	Local $InputLen = BinaryLen($Data)
	Local $Input = DllStructCreate("byte[" & $InputLen & "]")
	DllStructSetData($Input, 1, $Data)
	DllCall("user32.dll", "none", "CallWindowProc", "ptr", DllStructGetPtr($_MD5_CodeBuffer) + $_MD5_InputOffset, _
			"ptr", DllStructGetPtr($Context), _
			"ptr", DllStructGetPtr($Input), _
			"uint", $InputLen, _
			"int", 0)
EndFunc   ;==>_MD5Input

Func _MD5Result(ByRef $Context)
	If Not IsDllStruct($_MD5_CodeBuffer) Then _MD5_Startup()
	If Not IsDllStruct($Context) Then Return SetError(1, 0, "")

	Local $Digest = DllStructCreate("byte[" & $_HASH_MD5[0] & "]")
	DllCall("user32.dll", "none", "CallWindowProc", "ptr", DllStructGetPtr($_MD5_CodeBuffer) + $_MD5_ResultOffset, _
			"ptr", DllStructGetPtr($Context), _
			"ptr", DllStructGetPtr($Digest), _
			"int", 0, _
			"int", 0)
	Return DllStructGetData($Digest, 1)
EndFunc   ;==>_MD5Result

Func _MD5($Data)
	Local $Context = _MD5Init()
	_MD5Input($Context, $Data)
	Return _MD5Result($Context)
EndFunc   ;==>_MD5

Func _MD5_CodeDecompress($Code)
	Local $Opcode
	If @AutoItX64 Then
		$Opcode = '0x89C04150535657524889CE4889D7FCB28031DBA4B302E87500000073F631C9E86C000000731D31C0E8630000007324B302FFC1B010E85600000010C073F77544AAEBD3E85600000029D97510E84B000000EB2CACD1E8745711C9EB1D91FFC8C1E008ACE8340000003D007D0000730A80FC05730783F87F7704FFC1FFC141904489C0B301564889FE4829C6F3A45EEB8600D275078A1648FFC610D2C331C9FFC1E8EBFFFFFF11C9E8E4FFFFFF72F2C35A4829D7975F5E5B4158C389D24883EC08C70100000000C64104004883C408C389F64156415541544D89CC555756534C89C34883EC20410FB64104418800418B3183FE010F84AB00000073434863D24D89C54889CE488D3C114839FE0F84A50100000FB62E4883C601E8C601000083ED2B4080FD5077E2480FBEED0FB6042884C00FBED078D3C1E20241885500EB7383FE020F841C01000031C083FE03740F4883C4205B5E5F5D415C415D415EC34863D24D89C54889CE488D3C114839FE0F84CA0000000FB62E4883C601E86401000083ED2B4080FD5077E2480FBEED0FB6042884C078D683E03F410845004983C501E964FFFFFF4863D24D89C54889CE488D3C114839FE0F84E00000000FB62E4883C601E81D01000083ED2B4080FD5077E2480FBEED0FB6042884C00FBED078D389D04D8D7501C1E20483E03041885501C1F804410845004839FE747B0FB62E4883C601E8DD00000083ED2B4080FD5077E6480FBEED0FB6042884C00FBED078D789D0C1E2064D8D6E0183E03C41885601C1F8024108064839FE0F8536FFFFFF41C7042403000000410FB6450041884424044489E84883C42029D85B5E5F5D415C415D415EC34863D24889CE4D89C6488D3C114839FE758541C7042402000000410FB60641884424044489F04883C42029D85B5E5F5D415C415D415EC341C7042401000000410FB6450041884424044489E829D8E998FEFFFF41C7042400000000410FB6450041884424044489E829D8E97CFEFFFF56574889CF4889D64C89C1FCF3A45F5EC3E8500000003EFFFFFF3F3435363738393A3B3C3DFFFFFFFEFFFFFF000102030405060708090A0B0C0D0E0F10111213141516171819FFFFFFFFFFFF1A1B1C1D1E1F202122232425262728292A2B2C2D2E2F3031323358C3'
	Else
		$Opcode = '0x89C0608B7424248B7C2428FCB28031DBA4B302E86D00000073F631C9E864000000731C31C0E85B0000007323B30241B010E84F00000010C073F7753FAAEBD4E84D00000029D97510E842000000EB28ACD1E8744D11C9EB1C9148C1E008ACE82C0000003D007D0000730A80FC05730683F87F770241419589E8B3015689FE29C6F3A45EEB8E00D275058A164610D2C331C941E8EEFFFFFF11C9E8E7FFFFFF72F2C32B7C2428897C241C61C389D28B442404C70000000000C6400400C2100089F65557565383EC1C8B6C243C8B5424388B5C24308B7424340FB6450488028B550083FA010F84A1000000733F8B5424388D34338954240C39F30F848B0100000FB63B83C301E8CD0100008D57D580FA5077E50FBED20FB6041084C00FBED078D78B44240CC1E2028810EB6B83FA020F841201000031C083FA03740A83C41C5B5E5F5DC210008B4C24388D3433894C240C39F30F84CD0000000FB63B83C301E8740100008D57D580FA5077E50FBED20FB6041084C078DA8B54240C83E03F080283C2018954240CE96CFFFFFF8B4424388D34338944240C39F30F84D00000000FB63B83C301E82E0100008D57D580FA5077E50FBED20FB6141084D20FBEC278D78B4C240C89C283E230C1FA04C1E004081189CF83C70188410139F374750FB60383C3018844240CE8EC0000000FB654240C83EA2B80FA5077E00FBED20FB6141084D20FBEC278D289C283E23CC1FA02C1E006081739F38D57018954240C8847010F8533FFFFFFC74500030000008B4C240C0FB60188450489C82B44243883C41C5B5E5F5DC210008D34338B7C243839F3758BC74500020000000FB60788450489F82B44243883C41C5B5E5F5DC210008B54240CC74500010000000FB60288450489D02B442438E9B1FEFFFFC7450000000000EB9956578B7C240C8B7424108B4C241485C9742FFC83F9087227F7C7010000007402A449F7C702000000740566A583E90289CAC1E902F3A589D183E103F3A4EB02F3A45F5EC3E8500000003EFFFFFF3F3435363738393A3B3C3DFFFFFFFEFFFFFF000102030405060708090A0B0C0D0E0F10111213141516171819FFFFFFFFFFFF1A1B1C1D1E1F202122232425262728292A2B2C2D2E2F3031323358C3'
	EndIf
	Local $AP_Decompress = (StringInStr($Opcode, "89C0") - 3) / 2
	Local $B64D_Init = (StringInStr($Opcode, "89D2") - 3) / 2
	Local $B64D_DecodeData = (StringInStr($Opcode, "89F6") - 3) / 2
	$Opcode = Binary($Opcode)

	Local $CodeBufferMemory = _MemVirtualAlloc(0, BinaryLen($Opcode), $MEM_COMMIT, $PAGE_EXECUTE_READWRITE)
	Local $CodeBuffer = DllStructCreate("byte[" & BinaryLen($Opcode) & "]", $CodeBufferMemory)
	DllStructSetData($CodeBuffer, 1, $Opcode)

	Local $B64D_State = DllStructCreate("byte[16]")
	Local $Length = StringLen($Code)
	Local $Output = DllStructCreate("byte[" & $Length & "]")

	DllCall("user32.dll", "none", "CallWindowProc", "ptr", DllStructGetPtr($CodeBuffer) + $B64D_Init, _
			"ptr", DllStructGetPtr($B64D_State), _
			"int", 0, _
			"int", 0, _
			"int", 0)

	DllCall("user32.dll", "int", "CallWindowProc", "ptr", DllStructGetPtr($CodeBuffer) + $B64D_DecodeData, _
			"str", $Code, _
			"uint", $Length, _
			"ptr", DllStructGetPtr($Output), _
			"ptr", DllStructGetPtr($B64D_State))

	Local $ResultLen = DllStructGetData(DllStructCreate("uint", DllStructGetPtr($Output)), 1)
	Local $Result = DllStructCreate("byte[" & ($ResultLen + 16) & "]")

	Local $Ret = DllCall("user32.dll", "uint", "CallWindowProc", "ptr", DllStructGetPtr($CodeBuffer) + $AP_Decompress, _
			"ptr", DllStructGetPtr($Output) + 4, _
			"ptr", DllStructGetPtr($Result), _
			"int", 0, _
			"int", 0)


	_MemVirtualFree($CodeBufferMemory, 0, $MEM_RELEASE)
	Return BinaryMid(DllStructGetData($Result, 1), 1, $Ret[0])
EndFunc   ;==>_MD5_CodeDecompress
#endregion MD5 checksum

#region binary strings
Func ISOCreator()
	Local _
			$ISOCreator = '0x4D5A90000300000004000000FFFF0000B800000000000000400000000000000000000000000000000000000000000000000000000000000000000000E00000000E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F742062652072756E20696E20444F53206D6F64652E0D0D0A240000000000000004A55B3240C4356140C4356140C435616702486141C4356167025B6142C435616702586155C4356167024E6145C4356140C4346170C435616702476141C4356167024D6141C435615269636840C4356100000000000000000000000000000000504500004C010400DEE060480000000000000000E00003010B010800000C0000000C0000000000005E16000000100000002000000000400000100000000200000400000000000000040000000000000000500000000400002A5F0000030000000000100000100000000010000010000000000000100000000000000000000000C42300003C00000000400000AC010000000000000000000000000000000000000000000000000000F02000001C000000000000000000000000000000000000000000000000000000C822000040000000000000000000000000200000C80000000000000000000000000000000000000000000000000000002E74657874000000840B000000100000000C000000040000000000000000000000000000200000'
	$ISOCreator &= '602E72646174610000FC070000002000000008000000100000000000000000000000000000400000402E64617461000000900B0000003000000002000000180000000000000000000000000000400000C02E72737263000000AC0100000040000000020000001A00000000000000000000000000004000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
	$ISOCreator &= '00568B35082040006A006A006A036A006A01680000008057FFD683F8FFA3703B400075205768EC214000FF15B820400083C04050FF15B420400083C40CB8010000005EC36A006A006A026A006A00680000004053FFD683F8FFA3743B40007508536800224000EBC233C05EC3CCCCCCCCCC83EC088B0D703B40006A008D442404506800080000687033400051C744241400000000FF150420400033C0813C24000800000F95C085C0752D508D54240852680008000089442410A1743B4000687033400050FF150C20400033C0817C2404000800000F95C083C408C3CCCCCCCCCCCC83EC0C538B1D04204000558B2D0C204000565733FF897C2418BE000800008BFF8B0D703B4000578D4424145056687033400051897C2424FFD333C0397424100F95C03BC77535A1743B4000578D5424185256687033400050897C2428FFD533C0397424140F95C03BC775108B4C241883C10183F910894C24187CA55F5E5D5B83C40CC3CCCCCCCCCCCCCCCCCCCCCCCCCC53E8FAFEFFFF8BD885DB0F85D0000000A0713340003C4374043C637528A0723340003C4474043C64751BB03038057333400075113805743340007509803D753340003174156818224000FF15BC20400083C404B8010000005BC355566838224000FF15BC2040000FB635C33340000FB605C23340000FB60DC13340000FB615C0334000C1E6080BF0C1E6080BF1C1E6'
	$ISOCreator &= '080BF2BD1100000083C4043BF57E3057BFA40600008BC799F7FE50684C224000FF15BC20400083C408E843FEFFFF8BD885DB750A83C50183C7643BEE7CD75F6860224000FF15BC20400083C4045E8BC35D5BC3CCCCCCCCCCCCCCCCCCCCCCCCCCCC81EC04020000A10030400033C48984240002000055568B35BC204000578BBC241802000033ED556A016874224000FFD683C40C83BC2414020000037D4B6814214000FFD6684C214000FFD6686C2140006870214000FFD6686C2140006890214000FFD668C0214000FFD683C41C5F5E83C8FF5D8B8C240002000033CCE8CB00000081C404020000C38B47040FBE08535168A42240008D942418010000680001000052FF15AC2040008B4708508D4C2424680001000051FF15B02040008D54242C528D8424300100005068AC224000FFD683C4288D5C24108DBC2410010000892D703B4000892D743B4000E8B1FCFFFF8BF03BF55B7512E885FDFFFF8BF03BF57507E80AFEFFFF8BF0A1703B40003BC58B3D00204000740950FFD7892D703B4000A1743B40003BC5740950FFD7892D743B40008B8C240C0200005F8BC65E5D33CCE80700000081C404020000C33B0D003040007502F3C3E9AD0200006899184000E89E040000A164334000C704242C304000FF3560334000A32C304000681C30400068203040006818304000FF15A420400083C41485C0A3283040007D086A08'
	$ISOCreator &= 'E8B403000059C36A106868234000E80606000033DB895DFC64A1180000008B7004895DE4BF803B4000535657FF15342040003BC374193BC6750833F6468975E4EB1068E8030000FF1538204000EBDA33F646A17C3B40003BC6750A6A1FE85703000059EB3BA17C3B400085C0752C89357C3B400068E020400068D4204000E890050000595985C07417C745FCFEFFFFFFB8FF000000E9DD000000893534304000A17C3B40003BC6751B68D020400068C8204000E8550500005959C7057C3B400002000000395DE475085357FF153C204000391D8C3B40007419688C3B4000E86E0400005985C0740A536A0253FF158C3B4000A11C3040008B0D902040008901FF351C304000FF3520304000FF3518304000E84BFDFFFF83C40CA330304000391D24304000753750FF15942040008B45EC8B088B09894DE05051E8810300005959C38B65E88B45E0A33030400033DB391D24304000750750FF159C204000391D343040007506FF15A0204000C745FCFEFFFFFFA130304000E8E2040000C366813D000040004D5A740433C0EB51A13C00400081B8000040005045000075EB0FB7881800400081F90B010000741B81F90B02000075D483B8840040000E76CB33C93988F8004000EB1183B8740040000E76B833C93988E80040000F95C18BC16A01A324304000FF15C02040006AFFFF15602040005959A3843B4000A3883B4000FF15'
	$ISOCreator &= '5C2040008B0D6C3340008908FF15582040008B0D683340008908A1542040008B00A3783B4000E84B020000E88E040000833D1430400000750C68BD1A4000FF155020400059E84B040000833D10304000FF75096AFFFF154C2040005933C0C3E85D040000E99EFDFFFF558BEC81EC28030000A340314000890D3C314000891538314000891D34314000893530314000893D2C314000668C1558314000668C0D4C314000668C1D28314000668C0524314000668C2520314000668C2D1C3140009C8F05503140008B4500A3443140008B4504A3483140008D4508A3543140008B85E0FCFFFFC7059030400001000100A148314000A344304000C70538304000090400C0C7053C30400001000000A1003040008985D8FCFFFFA1043040008985DCFCFFFFFF1520204000A3883040006A01E821040000596A00FF1524204000680C214000FF1528204000833D883040000075086A01E8FD0300005968090400C0FF152C20400050FF1530204000C9C38B4424048B00813863736DE0752A8378100375248B40143D2005931974153D21059319740E3D2205931974073D004099017505E8B603000033C0C20400686C174000FF152420400033C0C3CCFF25A82040006A146888234000E84E020000FF35883B40008B3580204000FFD6598945E483F8FF750CFF7508FF157C20400059EB676A08E878030000598365FC00FF35883B4000'
	$ISOCreator &= 'FFD68945E4FF35843B4000FFD659598945E08D45E0508D45E450FF75088B3560204000FFD65950E83B0300008945DCFF75E4FFD6A3883B4000FF75E0FFD683C414A3843B4000C745FCFEFFFFFFE8090000008B45DCE804020000C36A08E8FF02000059C3FF742404E852FFFFFFF7D81BC0F7D85948C35657B858234000BF582340003BC78BF0730F8B0685C07402FFD083C6043BF772F15F5EC35657B860234000BF602340003BC78BF0730F8B0685C07402FFD083C6043BF772F15F5EC3CCFF2598204000CCCCCCCCCCCCCCCCCCCCCCCC8B4C24046681394D5A740333C0C38B413C03C181385045000075F033C9668178180B010F94C18BC1C3CCCCCCCCCCCCCC8B4424048B483C03C80FB7411453560FB7710633D285F6578D440818761E8B7C24148B480C3BF972098B580803D93BFB720C83C20183C0283BD672E633C05F5E5BC3CCCCCCCCCCCCCCCCCCCCCCCCCCCC558BEC6AFE68A823400068711A400064A1000000005083EC08535657A1003040003145F833C5508D45F064A3000000008965E8C745FC000000006800004000E83CFFFFFF83C40485C074558B45082D00004000506800004000E852FFFFFF83C40885C0743B8B4024C1E81FF7D083E001C745FCFEFFFFFF8B4DF064890D00000000595F5E5B8BE55DC38B45EC8B088B0133D23D050000C00F94C28BC2C38B65E8C745FCFEFFFFFF33C08B4DF064890D'
	$ISOCreator &= '00000000595F5E5B8BE55DC3CCFF2564204000FF254820400068711A400064FF35000000008B442410896C24108D6C24102BE0535657A1003040003145FC33C5508965E8FF75F88B45FCC745FCFEFFFFFF8945F88D45F064A300000000C38B4DF064890D00000000595F5F5E5B8BE55D51C3FF742410FF742410FF742410FF74241068AC1340006800304000E8E200000083C418C3566800000300680000010033F656E8D700000083C40C85C0740D5656565656E8C000000083C4145EC333C0C3558BEC83EC10A1003040008365F8008365FC005357BF4EE640BB3BC7BB0000FFFF740D85C37409F7D0A304304000EB60568D45F850FF15402040008B75FC3375F8FF151020400033F0FF151420400033F0FF151820400033F08D45F050FF151C2040008B45F43345F033F03BF77507BE4FE640BBEB0B85F375078BC6C1E0100BF0893500304000F7D68935043040005E5F5BC9C3FF2568204000FF256C204000FF2570204000FF2574204000FF2578204000FF2584204000FF2588204000FF258C204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
	$ISOCreator &= '00C8240000D6240000E2240000F0240000CC270000B6270000A62700008C270000782700005A2700003E2700002A27000016270000F8260000F0260000DA260000E227000000000000AE250000BC250000D2250000E6250000F62500000626000014260000A2250000382600004E260000622600006C2600007A260000822600008C2600009E260000B8260000CA260000962500008E25000080250000782500006E2500005E25000050250000382500002C25000022250000142500000A250000262600000000000000000000BB13400000000000000000007C154000A91740000000000000000000000000000000000000000000DEE0604800000000020000003D000000102300001013000038304000903040004261636B757020612043442D524F4D206F72204456442D524F4D20746F20616E20696D6167652066696C65206F6E206469736B2E0A0A000055736167653A2063643269736F2064726976652066696C656E616D650A0A0000650000004578616D706C653A2063643269736F202573206261636B75702E69736F0A0000202054616B6573206261636B7570206F6620746865204344206F722044564420696E2064726976652025730A000000002020616E642077726974657320697420746F207468652066696C65206261636B75702E69736F2E0A00000000436F756C64206E6F74206F70656E2025732E0A'
	$ISOCreator &= '00436F756C64206E6F74206372656174652025732E0A0000004552524F523A2049534F39393630206E6F742064657465637465642E0A00000049534F393636302064657465637465642E0A00000D436F7079696E67202E2E2E20256425250000000D436F7079696E6720636F6D706C657465210A0063643269736F2025642E256420436F70797269676874203230303820486172616C6420566973746E65730A0A000000005C5C2E5C25633A00436F7079696E6720647269766520257320746F2025732E2E2E0A0000480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003040005023400001000000525344538B1BE33D9D8F9844BF2C2A5F6AF8968308000000633A5C736F75726365735C63643269736F5C72656C656173655C63643269736F2E70646200000000711A00000000000000000000000000000000000000000000FEFFFFFF00000000D0FFFFFF00000000FEFFFFFF2C1540004015400000000000FEFFFFFF00000000CCFFFFFF00000000FEFFFFFF000000005A18400000000000FEFFFFFF00000000D8FFFFFF00000000FEFFFFFFD9194000ED194000002400000000000000000000FC24000000200000482400000000000000000000442500004820000000000000000000000000000000000000000000'
	$ISOCreator &= '00C8240000D6240000E2240000F0240000CC270000B6270000A62700008C270000782700005A2700003E2700002A27000016270000F8260000F0260000DA260000E227000000000000AE250000BC250000D2250000E6250000F62500000626000014260000A2250000382600004E260000622600006C2600007A260000822600008C2600009E260000B8260000CA260000962500008E25000080250000782500006E2500005E25000050250000382500002C25000022250000142500000A25000026260000000000004300436C6F736548616E646C650068035265616446696C650000780043726561746546696C6541008D04577269746546696C65004B45524E454C33322E646C6C00003E057072696E74660000A4005F5F696F625F66756E630000EC04667072696E74660062057374726370795F7300005705737072696E74665F73004D5356435238302E646C6C001D015F616D73675F657869740000A2005F5F6765746D61696E617267730034015F6365786974000084015F657869740069005F5863707446696C74657200DC04657869740000A3005F5F696E6974656E760010025F696E69747465726D0011025F696E69747465726D5F650044015F636F6E6669677468726561646C6F63616C6500EB005F5F736574757365726D617468657272000013015F61646A7573745F666469760000CE005F5F705F5F636F'
	$ISOCreator &= '6D6D6F64650000D2005F5F705F5F666D6F6465000072015F656E636F64655F706F696E74657200E8005F5F7365745F6170705F74797065000053015F6372745F64656275676765725F686F6F6B000043003F7465726D696E6174654040594158585A00F3035F756E6C6F636B0099005F5F646C6C6F6E657869740082025F6C6F636B0028035F6F6E657869740068015F6465636F64655F706F696E746572007B015F6578636570745F68616E646C6572345F636F6D6D6F6E0017025F696E766F6B655F776174736F6E000047015F636F6E74726F6C66705F730000BD02496E7465726C6F636B656445786368616E6765002104536C65657000BA02496E7465726C6F636B6564436F6D7061726545786368616E676500002D045465726D696E61746550726F636573730000A90147657443757272656E7450726F63657373003E04556E68616E646C6564457863657074696F6E46696C74657200001504536574556E68616E646C6564457863657074696F6E46696C74657200D1024973446562756767657250726573656E740054035175657279506572666F726D616E6365436F756E7465720066024765745469636B436F756E740000AD0147657443757272656E7454687265616449640000AA0147657443757272656E7450726F636573734964004F0247657453797374656D54696D65417346696C6554696D6500000000'
	$ISOCreator &= '004EE640BBB119BF44FFFFFFFFFFFFFFFFFEFFFFFF0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
	$ISOCreator &= '000000000000000000040000000000010018000000180000800000000000000000040000000000010001000000300000800000000000000000040000000000010009040000480000005840000054010000E4040000000000003C617373656D626C7920786D6C6E733D2275726E3A736368656D61732D6D6963726F736F66742D636F6D3A61736D2E763122206D616E696665737456657273696F6E3D22312E30223E0D0A20203C646570656E64656E63793E0D0A202020203C646570656E64656E74417373656D626C793E0D0A2020202020203C617373656D626C794964656E7469747920747970653D2277696E333222206E616D653D224D6963726F736F66742E564338302E435254222076657273696F6E3D22382E302E35303732372E373632222070726F636573736F724172636869746563747572653D2278383622207075626C69634B6579546F6B656E3D2231666338623362396131653138653362223E3C2F617373656D626C794964656E746974793E0D0A202020203C2F646570656E64656E74417373656D626C793E0D0A20203C2F646570656E64656E63793E0D0A3C2F617373656D626C793E50414444494E47585850414444494E4750414444494E47585850414444494E4750414444494E47585850414444494E4750414444494E47585850414444494E4750414444494E47585850414444494E4750414444'
	Return Binary($ISOCreator)
EndFunc   ;==>ISOCreator

Func BackgroundPic()
	Local _
			$BackgroundPic = '0xFFD8FFE000104A46494600010101000000000000FFDB0043000A07070807060A0808080B0A0A0B0E18100E0D0D0E1D15161118231F2524221F2221262B372F26293429212230413134393B3E3E3E252E4449433C48373D3E3BFFDB0043010A0B0B0E0D0E1C10101C3B2822283B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BFFC2001108009D026703011100021101031101FFC4001A000002030101000000000000000000000003040001020506FFC4001801010101010100000000000000000000000001020304FFDA000C03010002100310000001E29084210842108421084210842CB2CD58E5354EC3D2E96F3579A253D73B41CD5292E6D904E809B69836B11072E173296CAB06236F1C4241466C8409500C51084216599210842108421084210842108421A2C84324288421642044DD197A146072B2D7421A6628668A84B98829B5E7461836B100CABCD614C935951399673C5A4A5B305108510B216421451084210842108421084210858594CD1D4C6D29034240A0C194510842CD06B1BB6E9A9AE9C37185CB4DB24664836D49D0B21F58D5CE250CD28ABEA0D94994E9592821830B0868D8494EAC290A30091740262A8842108421084210859B95B9B7669B8610D66D2EB342A022E2D6282F208C90859BA2A376CA755ACEA4D3835211'
	$BackgroundPic &= '98989A567410DDC12E460979629A8165681822885166D4EADCAE0CCAC062C899508B0A09229723B324210842108421B9589A766DECD6C6192D9A4D25D5D519334017A54E788C81B3242CD05B18D0ABB9BE8CAF62B11BB9B280B5CF9A650F723B39D673805CAF022CA288695B97A0D3AADC86089A4B2968C940D432ACA9223627703B2108421084092BB3A3F9D390CA193483B056102864DD4A864CCA3B57979C736C4591D9442D095B5755E9B733A66431A4A336A6A8CA6B9972858B32A812884343134FCDF4E572C32112EC8546012AE80A2C196E5CA8655550B9E7EB02B9A2108421A1DCF4E967A3B0799C502E52B94B5036683CAE8EC341AD2C9645C4A1551798733595AE28868B1956E747A69891A94A9205A2DA9CC4552ECCD8AC833242C24AECDF4E69E86109A9A4AA1C0046C5114016556A1895C9A726989702B6F3EE79D798AC84210B0F35D3C757F3A6105AC72F59E7DC8B509A86DCCE6ADCEC36312B6392B21E34B46556950B79D70AEB1442065766D89A773A665DC582D16B12D639CE61B21928858C4D3F9E8FAB72152905A0513B141740D94558F75C96852AF8A3CD3E6BF34F2E9A565E6DC23AE79210858E67A74B3D19CDC5CF2F7CD3D635B8E75CB3BC9510E3B5796A812C1AD4B945048DAC36608D173A52E57D628858795A9B6B3B3CD6D4B1950D89EF095E4BDCE4842C3CD359DED73736CD82B041353562'
	$BackgroundPic &= '52D41422674ECF7C37AC85578573A539E858AD66BAD99A519E5DE63210868766DA9B1489DC07593EE747B61DDE4925E6F1B874CE170A6AD577F50870E5572CA935376625A95ACECD9DA1AE62B984343734EE7A319D9564617007594F5C93BCF150B189B6A695B81DCDEA6C1CB24876751DAF3D2AF9A7918ABAECF5CBFAC8E8762B49677CEE1A0634CDAEA8639F718210B341E6B2092CD6A3FDB1D3EB86F23658CDE172D6F1332F375A0DADEA1EE73801A09D0EB973AE16954E7B0F3D398E8114D73C90D0FCDF4F3D19CEB6B4085EC5EC535CD373CD4092F471D41AC87AF267A65CD4BCDE571D17306B34D52B1995846E4AB7BBD33D1B300345696CF41F2E8966A4C5A680D9928B0AB086A52B4F364D677DF8B5AC39831999978D962E719BCD9B51629E4E863374AEEF5FAC7BA656D6529795C7A4E5D1CCF4475CC1734157A93A74E6D98D123205554E76B1CFBCC7658EE7A3134AF6E2EF7E6F58F657CF5E779E8791645AD5AA830FA31202DF41B348255EEB135ACE8534B6749C8BDC66C960916422BED36BB9773446B761EE37ACD6B16CB121239B624C8E514AB35561F319E61EA8B77D0E86D406F29EE733179FC7A3BCFB8C435C723735D79D7A0ACB3A246414AB4D229CADF1535924BD5CF50EB37E9E1D3E997F159E7779BC6CDE648DC9813B743321005BBB7B56ED6E51ADCB9970A3CEB32E6E6B591D8A2731935762E9FC'
	$BackgroundPic &= '5366D2D2DD9765B3AB292D362F67393305991DB9D4A9318A2DDE9B5D6B2AC168BEE21A9CDC6B1C7AB18E9CDBC816745BEC4E8F21D9D25C61472A937CE9391BE4B6B2DCD7533D55EBC5FF004727A46B9E8D9A480CBC105987CCAB59D424B89A16AB94C2C8B944B72DE6C5A224B33A80B11B395231ABD995DC8B9B08B4B0B665912D28959AA8B4C03B161619AEB043007505B80D44E90E5B671D79B329B3D26FB0DBF21D8D2432A29A55BE61C7BC97B9E8BA741A5BA71E8EA3F8A58B4DC6A55C4D4D1B0A68B32B84B5CCD5E6DC52C2EAD2AB298D01ACA35CA996EDEC8DE6933645AD90B292A2266ACCD55917490C92889A896E01D98ABA46B9B29A6954E64CF42EFB334F6630CEAC895289A5274E6DBC7BC40CF5AF47141675E46E4B33185B8C10B495448B5B9725CB95B349692D890A5CD99D406A73ECE548FDBD81AC899D48A9745A6922D464C4B9AA2ACCD6921410B2AA81AC4CAEACA5E6AD6A0759E4E63BAD7533A73392A4B2D294734B368DBCB730C9D9DEBA32DA33906514D662A5DA5D559A08692195A346A366D35642195CC6173A93590EA73AB8F88F576E9CCD245CA39AC9B908964281AE4C1168B32A22C960D4500B16B076314F1BB71728272A0D459776137826F3BB2A55F9EC19D6255A4CC75777AA6E54F3AE64991868D3460D66921B0A8582268B8D96428C995C033155A93795ECE5C72F0D574CEA8E8596A5C4'
	$BackgroundPic &= 'D48DAEAE749644854B452E4A056E2860695106504C2103A9AA9160110BA36E31D326DE2CA81E742CEAB20668F3494736A1802197A56BEA68DCA4351A4226CD442116EA1830081A86AAC9AC8751139D92F951A183A35DA19CDC67785DDBB908CDA44D10A2D6AB26494316B3975CD45232421084210859AB2EAA2108B76662A5A2108434323E7506E5D16B726CD2C4D2D452CAA3061422F43B33ACAF673A45734643FFC4002410000300020202020301010100000000000001020311101213200421143031414022FFDA0008010100010502FF009D32689C9A2330B20B20F20DEC844F0FD28FF67D1B37CB66466463A1BF44F43ADFFDFA3475346BF4AA3B93908CA3B3C84511C6CD8B9A3FD9E686CD8A8745E52F3157B1FEAD1A346BFE6502C42C2784F00F00F00F08F19D0D7E89A3B6C44D116761D0BEC5CB192F96345BD1E42B2957B2D9BE3637E9A3A8B193845F1CFC73F1CFC71E01E23AFF00C2A48C64E22718B19E33A1D0F18F10F08F01580AC23835EC989FD27F71479055B245CB2C9A1336363AFACB66CAA1D8DEFD9493889C04FC71601623C6743A1D078CAC45612B10E0D7EC489C64E327193029346B9D1A3A9D078C788BC05E02B1E8D7AAA133B8AB6631317A522BE9C51B299765B3B0EB8DFA29D918B64602708B18A4D1AF66872541588BC639FD491104C1302911B43CA91E7479D0B223B7A68D0E4AC65E12F08E'
	$BackgroundPic &= '75EA99B319344B157AE43BF52731594AA1B29FAE89C7B230918852246B9D9D90F2A2BE423F2059D0B2266C6392A0BC654FE848C724C933C3BD159F45FC92B3B67959E564FC864FCA27E48B3216446FD1C978CC984B8D7B4512C9A2684CD9B1D14CC877D1E41D0EBD54EC8C44622604B9EC3C88ACE8BF9257CA1FC86CF23676677689CEC8CE4E5D9B1952648297BC22112B8BC9A32662B2367DB140B1953AE55B42CEC9F924FCA17C93CE8F2A3CA8768A68B49971EB2C962641B3B1B1945966CDFACC118C94909A3B21E4479D15F24AF9457C863CCD9D9BE12271ECF10F18E0FB44E5688CE4DEC6CA46491FB63441D8ACBA32651BD933B2718A0EBF594EA39E11389B1C549DDA166679D9E7679D9E61643FA5CFACD0AC9B3C82B3B1D8A6515ED322FA3CA79CFC83F2079D9E564AAA2B0B1AD08D1A12FBC33F5D0705632B11507F08CA4DEF8C857AA20EC5652B26F889D918C50741CFD65FECA1C9489FEE0EBACD33AB9FB6B852743AF10CA5B54BD61132283A9AE59687E9106B4AA8FB3AB3A71AE3E3E8CAE7AE5FE92246BEF0234751C9525C96B88B1642E87EA84C766F6751498E48424245AFFCE49FFD4C968BE23368F3EC7F6393462C7B1E22B11506F44BDAB91F28C64A1234751C8E4A298F9944AD2B629D938C9C25E2FAA5A690D0ADC8F33637BE2448FF007E3AFAD70CA1C6C784BC5A1AD0A98D8FD149D4D33A364E2271'
	$BackgroundPic &= '1E014689251A297D649FBD148C93CC22647239FBC11F4E0A82E0B9219ADAB9E6518E4842468D1A1C95264829738E4AFA5FD710441305C7D668D394742A0D1A2608C635A52B7585696C6C675343296CAC6788788F11506894440B09F8E784F19D448E87417D09F19570C71B1E23C44E3D1A2998E7B5628D2D0E4B93241AD38FE6491F18D18D12848D1A3434522D191712885F566392249912347C8C44FD34548F18B10A35C53314FDCFD2F5EA753A1E33C6382E4B463931C8A4D1D4EA75342E35CDCECAC6C58CE8753A9AE35D9E0C22431948B92E09FA1ADAC8B8C48844A17A32CC8647C6246B53ADB8825085C648ECB2E2D39DF0B1938CF18F11E023168D73A35CE8D1AE29168C88C48842F7D73BE3AA3A23A1E31E32A07062C44AD70C636522E46BED7F32A3FDC44122F465194BE30A2BF8BFB04AE766CB854783EFC62846971A1AFD8CA321661205FAB5C3E366CDF1D1096B96F8D1A3222BFB06693FDC463245E8CA3299046145CFD447DE3C7CECD9D8762B3B1B366CEC76367637FAA8C85988817EAD9B366FD362A36763B0E8EE7905652D993191266435F78D10C568F2A3CA8F2A3CA87951568B66427FB80D6C99D1DB43CA798F29E43B9B3676366FD34753A9D4D1A35ED4642FFB868C6C5E9BF6D1A346BD76761D9E42B30FE41E727393987499B48CD637F73934798F333C8C56CECCEECAB67918F214C9662B27223BA3'
	$BackgroundPic &= '2662B30B2315316C5EA91A3A9D4D1AF5D9B366F8D94CCB45326B463CE46742B4FD77EBA3468D1D4EA393A9A1C948B1B362A1653CE3CE564DFA2A158ACF21E41D9BE1F0AB42CCCF395937C498F4294283A8A4EA293A9AFD0F86C6CD9D8AC85E52EF7CEC9C8CC7968C75BE1FEED0D1664A2E87FAF66CD9B366CDFE844DB232331D6FF7B1BE6E8AB63AE7FFC4001E11000300030101010101000000000000000001111020304050021260FFDA0008010301013F01F8CB0FFC5AC3F9D084213D2B0FC708421084278A0913DA8587DE109C6109DA13BCF8109DA109CD2F1C2705E384F13435C52DAF784D96D34BC209795A1EE85A52E6F76B65BC1F0489C2EB4A52E294A5C3DD65B1BCD2E172A52970D6C997663D92C5294A5297779A5D9EE8A365CDD16D75B94F0F542D98F54B0D97C4BADC4C3DAF178A51098F542DDE884378A5F0417E44884E13105F920D0D1365D10B0D68970687948637E18412D21084DA68F309ADC52F042133F5942D2E8C78423F43E5733109EB8427447E5E1E17163C2C7EB138C213E142109C561E17278431909DE7C68421098785BA161E16D08426F09F61328F84FA978D294FE8FE84CA5DE94A5F9F4BD610FE4825D294BFE93FFFC4001F1100030001050101010000000000000000000111100212203040507060FFDA0008010201013F01FEAE7E097F6984213E94213C689886D368D7D142D26D368F'
	$BackgroundPic &= '4909DF058485A498D5C66277CF042109884E28D3983D235DD098484B2D9A8B9597986D261F9E109D48452970C7DE8D2B34631AE34B9D2420D754EC4242D2418F85E2B8D1B1F7A13294B984E34421170D0D0FBAF2D284B0D8DF52E14BE2A52F441AC2E0B0D0D0FB970469586CBE2BD4FA2F4B2714278686BC5A5086C7E0A5F8B70FC48A5EFBF1A94A52F8EE697EDBE109F15FC2B8485A4D86C360F493A61084F33F8A98B51B8DC6E1EAF7CCDF914A5CDF87FFC400141001000000000000000000000000000000A0FFDA0008010100063F02409FFFC40020100101000202030101010100000000000001001011214120316151713040FFDA0008010100013F21FF009778D4E45F6B69803583C9702DCA20CC8A2658228CB8092D5735B30F868F91FF0046D6F6D6F86BCB76ED186AEEDDDDA4B75B6603C4C79F847190C92346E08488F0B83726A6DDBB7E1B5BDBDB5CFF00C81B9199EAF847CC7C5F197F253A94EA51D4B3CB70CC3715ED6A628DB1F378FC5C438E50611ADF6BF56066E343C43686CAF52BD5F0BF89F89F898EA63A9649AFF7095B6DF0BE37C607E45D64FE47F91FE5F3BE321D4A4A3C061B9E1C0698D495E2ADDBC9A5B7E49CE4F1A04C6F1A9191EA77ABE117E467503F2D2D24FE47F90BD5F3B5F53128FF004DB6EBE77CB26620B58353222FC8DEAF8DA3A923A6770E338D2451C4ADDB9B710638EE76A2F6CAB3'
	$BackgroundPic &= 'A96EB782E522F4BE319D44750C62D5AC3261385EA2FCB4F531FE5BFC1C2805AAEE2FB42F73BB80F76F2C68B1BD5F398EA7F06ED31CE569CF0DB96616EAFA5B8B66737E06D34F9447519849AC2492EE37703BB5DFB95DDD85AB0DDB33DA1FF0D8F839A02083DAFADDA610FB85DDF78DEE57733B82DBC3A8981EAF94AA4D780F38396D25B3191C0DE61B2B95C781779D4F37F519D425A230821770BBBEB27EDDC4E12581DDB7B83B4148EEDD874BE45B1CF1A0805F6BB0C08E0D09F76D2ED227731DDF489EE13BBED6CEE54FCE09AF0D59AF58846A9CAF6B725BE01BB7418A2C1770BB90EE03BBE92BBBBA98236E6D6BF9BE739963E9088189C434F898384008C7B957DC9570F4DC67B46D68986D80E319FAE0777DA3F4BED2DEEDADC1B44E47569C4B0A4C5C819F00DE065D0BFA85FB6DFB23B94EF0A13732C09A6B07646FC6F8E0D36D72985BD91E2F7F1F69C10B47724DEDC8B8B0D5462F15A31772570B5CD18665CA2E4CE9A5F02DD962B1963E24376C915C97284B624B6834CBBE0B4F5870D915C535F0F9CB723698356F2F7F268249504C9BF3D9C035705ED0E993BDB71DE16BDF1383D5F0B546DCB4359F68F869C3620989F39DEC31D648ADF7C2D1EB850D5AB1867BB6A22DA085BC4C131E524DB8CAE05B4B66D60246DCC05137EAE3F57F13D380BBF1470B61812D32ADC170F89C1C56A6D6CCF439DCF94B3E0B343831'
	$BackgroundPic &= '280F090DB8CB33B4E4A2DA56D10645D462DD8DED49E16FBF89226B9D2D8DB6DBD5FC413A82751AE3D19D64E1BC972DBD5CB13963E310D2D449815F04ECDEF00E9C6E7C981C88356A71B9B5C7B6E5C7AF03B17B9D438A02429735F38E7A9FD4CED263964B76E4DCC63B5FC4FC5A2E2B436C73C57C0784BBB5831A96C49BB893F37F33A4BAB68D1CA5A0861BF3BCDAC6E963DF8502D5A9230968B638DAE41E2B5C6110436E09FA5A5247ABE37F32DC9E482F089E4C78635E190C1C572668C16AD5AB56B3267B9488449C2B2ADCBC919B782C1B60D5A68DDE68F3638987B8F31EEE6B8D779DC36ADC5E519708120405A2D22219B59D5AF07229F30BD703C356B1AC83038BDF1E520C341376F03CE3EB2DC27230279A1C5E1ED1E73856E8200B648F181F002F3B5C9B8F1DDB9BD307CE1EB8191B7970E5B9EFC25C869A910309B9AD170E1EA848DDC78904540DA6E104EA8D5A08CEED7F6FEB02F3B844332369850A3C68CB2DBB72E27383B852513380C39498DDF1D61DCAF84BADA3BBE97BFBBED027BC0E941940FA84EE3F4C89C0D84B6DA18C904EAB4773AFB99DCCC1BC6ED3698DC914C93C0B318C66E72DD8CEED7DCCEEEF2DEE66DC41F32E27018B9B09D4DBB6949CEE1FECAF7255B6C36A821B5B581B464238582EEDBF64BBE67CDB264118BAC3023C9B9652F80DD613BBEF6C64445EEDE9C736E56E2187FC1B5B9105C094'
	$BackgroundPic &= '91BDBFCB70ADEDEDEDADADE5F35A898E8398C8C383C56596724B2C816F4CE7FFDA000C03010002000300000010924924924924926117EBF9E997D1F760FACC764C82904924CA49249249249249242488249064FA159C07C2F4CEC2E8B4FB000482926492492492492492B904F1B7049205D5C15C0337401B8BCF4D9202FF000927E492492492487ABF83247AC62492742D922FB5FB579A5A0800C5F108B4AE649249248B473C4F4D8FACE32046DA7EA81C7A30AD9013D9E0AF486F4E692492488767F344EC92A2CB993DCE8BBF1956BA9242629119BEF19E5C78492497C0F260D87F0D9D161644BC97176F3461206C7E14C8958766230B92482FD0C7349A5C756A9C9D92045AC862E41213A2CE291D5FA8AF14646492234C269C951A8AF12C3E249FF1127309253F6FEA2441603B891A04C92577EB24F11C5A4BEBDC294903B93E8672084B2A3EB01C006BE3E9559202B66F04EFC9E578FDF97E320C9BB8C0C0BE9A767C020F4CBBF19B202416E874B99E0DA92CE826EE4404DBEC6142AD2CDB3E268041621B4BD58DD92BBC3567831F928927E050DE211E639DDB8685A94503E8226B095F9C97773E6B1F092BCE856CBF65F123843D2AE1FDD1DF0AA10913D2F6FBA22AC81ACB418A1320120A7C4B22F76CEEC14E5FE3044DAF66790738A9B69F008BDDE2CEF83C67E798D076959C8DA43D38477758955298F56599ABAB4420'
	$BackgroundPic &= '0D511DF78DCF0CD525113F87545D865A5530190358021A920ECAEF56FB79F598C89E6594561A9CD5A83F9A2B72076144F7B6E9B782C86CD7DD5A095177CE37EC945369218846703315CDD36E57F82CFEAF98040B6EA84A526A8B8D65524924991BD914892483DBB8ED71F907699CBA4FFFC4001E11010101010101010101010100000000000100111020302140314150FFDA0008010301013F10FEB3844B2F02597CCF4B279B6CB6CBFF0089965967DC6197811331E27841649336FD32CB2CFE5C88788CB2CB2CF98C3CC838CF4424988B6599F8E5910F207867F09C270B2DB6F72CB2CB3E3B0C1D492CE14909221965B7E1910E19CDB6DB799C3199F408A4C96599F1B6F8CE12CF6436F1B2CE0C3249D5F804438DB6DB7D0DBC635F903805B2CB32DB6FBD8E64C7D08859659659C2D9999F59109992CB6FADB618622DBFDF9007209678B316DB6DB7B96781E31A9E8772CE32C978597D1C3996CB3E5B6DB6DB6186DF20F6216492E4C66CBC0F76DB6DF3B0DF8F04CF032882CB2C93813E83819BFC96DB79B6F1B6DB2CF0213621087067DCB7A1B2CC66F3B6F76DB6DB7C021FBEA1E041B7A91F40E06135F586F97ADE0836C30C3C3E9F4B16598BC084C71B781B78BC6C3C934867A082C83A233E64CE0CDB7C36C796CB2CE283830CB3E8666EDA9325365916E4C18E259C1E2B62117032781C0DB6CB6CB29E8861C96780F84B'
	$BackgroundPic &= '3C6F1E6591D4B54737CE719D8770CCE13C50F596D8924E0CA706965D0E596DB6DBC4E0387258725E641C6D87BB2DBDC88700431FB35EC4E1059100E2CA49278649647E44D98F044CC964A5C849C3C2CB6F1B0C78443F253B60B238CC36F1B644CE816459044B2CF1988E6C36F19B2CB2C9387864D9641C6C924E2E0BA43C565B6D86187C06FF00939FD881E5209382133C05907765979B2CC5B6DB6DB6CCC964F9CE1E8CE671B248270FE7876596DB61862631197E437B659659659659659DC8226776DB7C333D3C6DB6F52CB24B2CF19659659E47F11E467A7479387F6C9E6790CB2CB2C83A044CB6DB6F59B78F487A9DDB7B9659659659659659659670E3F92F06D965B6D861E0F021B65820B0E32CB2CB24B2CE6DB6DB2DBE996DB7C8C30F1B3C6DB6DBE32CB2CB265E362D96DE6DB318F2384E6B6DB6C5B30A705EECB6DB6DB6DBF06597E1B1CCB249F1B6DB6DB6DB6F0C597BB6FA498F23E136DB621F036DB6DFAACBF22238CFC36DB6DB6DFB659659CCF8EDB6DB6DBE8F82CBEBFFC4001D110101010101010101010100000000000001001110203021403150FFDA0008010201013F10FE71878F52C83DBD3C9DC93DEFFCCDB6DE649C67B7A719E11D7FE26DB6DB6DBF53ACFC16D878D905967DB6DB6DB6DFE2598B6DB6DB0C36DB6FCB6DB2492C96DB78CF0F044FCB6DB6DF3B6DB6DBF5D965B7E5B6DB6DBECB6DE32F'
	$BackgroundPic &= '07CEC3DCE6FBDB6DF39F0D861F932CBE420B3E1B6C36DBE76DE2CF77859647C96DB7F8463E2B2DBC08383A32CF1B6F76DB61F4B33DDB618B2C8F7B2CBC23CE5907819259CCE0C7B6596D84408842653DCB2C9EE596707DB2DB6F06187E0B6F823996596705A4C7818C4B2CE1ED92C8820B5E066409CF438499965965924FE43E926659CD8618F4CC1E402382736DE15B7E487A29CCB2CF6C9C102DAC63F25E0A60C741E06B85C90887CACB6DBE063CADB0442BD91C7C9704383FC11BD166286F008861E19B108126CE4923CA49332CB2C823C2CB1DEA0489C30C3C6F90DB0C3D6B6DB7EAF9318C5E9F0598B871076D390E0F859F4310EB06F319FCE933C3CBC6DB6F0D5D99B618F196716DE05FE467B2DB12CB6591C49FB08218650DB7211E32CB2CB2CE30CB8CB1DE5FE7262CD925B6F7620E6DB6CDBC2F08F04CADE6C36C36F0B0C32DB6C30CB6FD419D1970FF007B591D7C659249041C6CE4B38A99EB31C6C8B6DB65E18B6F488B384C9679DB6DB6D86D9B22DE16DBD2188BB192CEBEF20EE59CB99BB6CB6DBCCB3C6DB6CC5B6DF244164C12493EB6DB6DB61B7D6F763ACAF0964127A78742C87266DBD36DB6DF0DB6DBCCB2CB2CE904164C4CC9279CB2CF1B0DB6DB6DB6DB6DBE4B2CFD82165965AE12082620B249B67C167ACB2CB2CF6444F03C6492CB3CE5965967ACB399641D39B6C45DB4E270785CD9310DB3367478'
	$BackgroundPic &= '07BDB6DF80410412986DB79936FC77D659059DDE6DB6DB6C361040B32606519C939B6DBD38FDF2CB2C881C62FA667FB85B56AD5ADADA97FA888E2CBDFFC400211001010101010101010101000301000000010011213141105161203040A171FFDA0008010100013F10FF00D3D8626FE5981DB83B16907D61DEB2B1B12B8AE0278FC8EB04B85B4B99C0972F100C43D8F73634B8D98EB22EC0DC6557E03DFC01F8F37B2EFF00D29CCFFD6C584F91FCEFF191F928F938FF009DFC08679AFECCC9C033BA3191B3675B08361302DA7641CB2DA7917094BC926E48524ECC7F509D621066EF6D0F67ACF004BB6AD5AFD05F909F2FF19FE161F2489FFA6BF17C9FC0331D9ACE309FF0A339F2244FF8DB5310AEC31362F4C646D98EC63D8C3365D2E0219BB1948BF8EF2CC1762D76D59B2A7222766FBD906EDEC11AB2EFEA7C5F399298D19214B18FC036E7CB97E3FF003A333E4B8D23E41C21C240FE5B7C9E45C540EC63722CE4F9F39E7FC61F9E6657A9FAD6CE76FA9F83281B728FC1EC33B71EC4379B28CBB6E819E776CF9B26FB20B0BC95F827CBE3D8F3036061B0D9F8203E2FF227F94DF89335207723EB22FE5E81FF00911F922391F2119079C803C802042106C30BF247C9DF264D4808E46D6449E4DF1FA6251D90E2CCEC078C681800562E0439EC7E68B4AD1C38160786DD7673036C966C36673DC716B6D8ACC79206CD036604'
	$BackgroundPic &= '3C80F919F20FF2CD8902440C0FC91F2318CDC89AC8AF9267FE16672DF148F9C80CE408090F52F8C817C5F317C75E7082FDB49C60617E5F023586EE445C8E3C933F36238951D878B0E01B7C76F86C69EC71F93E468A1383B684D90664BB1A3DBF9B3BFF00865C250E5DCD8290539010100B42FA17B82F8682704BC6471091FBE011FC408F21EE13B724CFFB58DD34880E4467222FB716C5E8479C56EFADEF299354860D3CD307E3F05F42CB291510F21D818A451C957E8E58C4E7664762F4B57B71F6D4F6088FB6E1B7B5232B617B625E332FBFF184C8792236106C20E42204217A497CB41B820172B072B4E2BEF31AFACE7AD8A2AE2D9953D31078B33CBD1C9DB9FF005EA208C0E4004E49BA5AAE445C502FDBE44F9E471C711E659FF567EA90354786DF6AFCE5C7713F320BD215E96966582A13AFCDB6D50E1D914971D88FB167B684EEC80DB8DA16423D80F65DFD4533391714843C8CF486F17C65F350CE56EE4D4C57D04875651B2E2D90E4E08B913E0C2DF644D5B6C1813A457C887963AE7FD01D6EA32C17BA9084740A5BECA1CB88A478E41D32C08B6ECE7C8232E05BE0C46F6198ABEB2E7EAD7EAE1EBF38BD9B67A94218FEB2B61ADE5D8C7B23EC97D8596D32315D9B58E36FEA29D4520FB21E3287903F538CFB89BCD5E2EBB6FC33A180C509323FFEC25C833C8980ECCB7927923DC6C0367276C40EA1DFFCF84266DE'
	$BackgroundPic &= '8A708449ECAED6E39073918391DF96FF002D9173F227C429B39DFEC10E256E634C3F1676F0609E339E40B6882C5A16D49FADD25CC98724FE581E487CB41D89F624BD618BFBA324639F8A7507E2EF8C8B5198721BE4E3A45CE6D0CCF2694C196FE410DC7687969F21C79003C831E482C23FCD6D0595EED2ECF57FC65CB78CD9B06420B72F74B0CE4007234F21FE45AC3E4CAE7D8074B0796C53ED060281E9431B7F14A099611C8480C62EF9349E17B2122FDF29DC910B321DA4896A72D09811B4FD65F2D9B6EA96AAE2E5B4DE4F8B929F67F9B7684EF1CB20A9B460ACA4E4DA63209FEDAA64DCA41BB334133E46352EAC2F197024E904F251E9F88B09E4F988F2C6F90CA1B050313E910F2C306342E56C59372CBC5B1B7550947C8D3C8C5C7B189C81C87DB9148B3C83BCBAB92B39618C5A5B5C93F14ACC39703970F23FC4FF009B7F913F2347929A92B6FE0D72471CB992C861CBA9C8C0E46BCF933A1F623251E5B184E433E4C9C8B1A5F190061F6335E7235AF905B46B23F20CC08F5A47A425ECFE0973A4FBC2656672CE722303EFEA58DBC20CE97C65E9098CB43B3148F4E48D1B3D72C7E5FC975818E462D8084B9F6CBE7CB9F96E3CB93CB4D7278E3369AE5A91ED89CB30E5C4E5C3F0FE53C83B3940993ED870EE9720910A5A07200722085CCB6427447E09C721782D9821CB03E4CE22A88C90A4E1B206347279CAFF003B'
	$BackgroundPic &= 'F8ACC3C807C875C8A7221C39101C833C85F964F903F920391545C64376C5E58E4A919E127A2D784FB38600F2213905CD01302C2030879123C9F5422EABB9969C769A91E1702E315FCFC2F49DAD1BED877C1FCB7DFF00B1839714187E0273C91C04E89F3A462916910796E430C2C89033F094BB1013BF965F967F920F966F22C62D7E3D12E65C4B87E1ADF71CC75AC99C219DB0E5C1D2F68BD20493CBF822C708DE16731B8D802058990103CC84EE42465E1FF60C7FCB37C8E47E4DC21C21CB2C8C391630A4C9C3671392E1FE451B8324C721908BFDAC0C987081A04274BE4101F2148FE301A136E456E18609D462C80921712E360375D82478873F190C03F9227E1FE4E9B083F248EC03D49CE41F57BE496E178C5C7EC314B269370B7D25CEF672C2FB2F04F84B96DB2BC5C9968C1DDA5DB3933C914E7D88948DCDBFD6FE9923EC71ED83EC0FAC2FDBA956CB0FB206360F243770A4CAC6C4B319DC7A9E0DD3134BCAF109B7B041877F14B9632C9DDA10EBB1E5C3716059837DB3FD847D81F441FA5F464B2F6139E906EFFE8B9224D60BB067A5FE85CBD27FA161F4B7FA45BDBB2D0420463CB5197DAFCB69E4770DFDB6FB23EAFF004BB46965FB6EC8F2EF2E44D198C9F9410CFF00813C45A881B75000B00C624973F0F216DBFE5B65A13B24D2AE7E5A8793806104B3ED97DBBBB1EA21A4DB05CD858605E93A1A491061EE01EC'
	$BackgroundPic &= 'A793C88FFA91F5B97AC43D6D0F5BFB5927595F6C1B3F5866A43E1222E464114F57D592FC4CD0F20BFB1889DFCCFF00304F901F2C0996120FEC5FDBFDFF000264460F62C4DB6610EDCA309344418208F61B008CFE3BC3F99BF84D88647F20CF2FE649F9BBA737B307B6C76C3ECFFBF86290AC9EC32AEDFED3EF58BD7E417D92FB29F7F2974D201E5B8F27F8DF656E64DCECB751E36206E47197C57F8419D253E5FC513E40401F3F36DB67F070B3FB63F6FF0058EFD807B00C0C423B765D76D9CE32667FF5300BFF00D83C564843FC3135B0F61E7E924E07AFD4BA309A70B7F67BFF000D7FBFF423EC2FB7FBCFF7BFD65FEC17DB84EBFF006AB967E32D08662226C72DC9656DBAB3924B96C92CD396E91949765B5D92EB2ABF9FFFD9'
	Return Binary($BackgroundPic)
EndFunc   ;==>BackgroundPic

Func Texture()
	Local _
			$Texture = '0x89504E470D0A1A0A0000000D4948445200000016000000160103000000FE7AFE7800000006504C5445F9F2F2FCFEFC0B8BD4BF0000001D49444154785E8DC3411100000001C16BA27F2B41CC50C163A9B9A1BC065AC320BF32D4F72C0000000049454E44AE426082'
	Return Binary($Texture)
EndFunc   ;==>Texture

Func Icon_LM()
	Local _
			$Icon_LM = '0x89504E470D0A1A0A0000000D4948445200000020000000200802000000FC18EDA30000000674524E53000000FF0000D03E337C0000000970485973000017120000171201679FD2520000061149444154785EB5966B6C1B5516C7673C4F8FDF633BB19DC4B163BB2DA9A02D6DD30D6CD3DD6D9306148502698576C36B77417C800A0408A97CD808115428858A0F5008542055CD6E582A6077A520027D6C7753282A4A689AC67592DA6EE2B7C719DBF3F4CCEC95CA5AADFA5855DEFE3E8CEF5C5F9DFF3DFF7346F7C2AAAA42570126C7C6C6BAB7764335A3BBF403C3F015B33A5D6767E7F8C9F189C9891A05AA195C9BD9D9D95030545B063724100884CF876F9540D5AEDA046AA476014DD36A1280FF0B78A90EAAAD55BB45E8E5E1AE1C68D5712DA03774409B99096318FAFFB1E8EACD7EF7DDF7FBF77F005D9FD3DF1CFEEBD0EE4FF6BCF4D1E0CE03BB5FF8F3FBBB4FFD7314BA12F87A192412899E9E5E8B99069FF4AE5D2F425732353E528C27044DE3454D162B8A2C699AA22AE029EA61A471C3AF576FD8FA7306DAB54826937D7DDB794E002B2ECCC506FE34085D4678EA5B93D5E1F0FB4D369AD0530846A0388913A4D962F634783CCB9AB97C78FCEBCFAFDBA69148A4AF6F07BB54B4586C2B5B57BBDD0D284A8E8D1DBDF4EFB9D988C3B5C26075EBCD5683C140E0188221088AE02466B11A6C2EA7CDE3757A57C9A4'
	$Icon_LM &= '71E46F5F81F5C8C0C040B50082200C0D0DEDDCF92C0CE95A5A7CFDDD776295128E220486FEF4D3998766FA9FD6DE74B9EA301C47003A585365AE2C9E8F6692399617248FB7C1DEE497607B26574927727353A7F7370EFD6C91288A870E1D6A6FBF6BCF9EBD16B3C5EEB0757575B59B179FF487FFE039D5EF38799F7D32198D2C45938A2073BC222804A47784E70B22E279E0E1279F7AE1E52DF73F3A76626E2E5A4E461773F148311D059B3E7AF424D2DFDFFFDE7BEF3EF1C41F47FE3202C33A9AA6ED76FB7DBDDBEEBDB75B499D35494904D25048FAC7F83415DAB86E5DAB060A5A2A0A65812D4A3F9C3ADDF7BB1D288A2A8A423BE8E5AD2B0F7F3CB4DC82438582C6717C052A9404B4AD6D3D572E8312E10401D6E949B2734B5767D796266F132B6F2B7C7142AFD713986EFBA6D613305CE4D40ACB68108160C60AAC992C3659962727A6D6AE5F0D6990C3692F55A08ABD5126CB6AB96CE1CA5236AF032BF494C1E36EA46D4E97ABC1E9F4F8FD2D7E7F3330D916DA90D7CC87FF15993E1F53F9251B949F9A892D648C0CEF1635AB813232996C6221D5E86D800030B410BD58E7A0EABD7443B0D91D08D4FB57506E3F42122404C38196A0DBE53199AD40697131653299BCDE46E0582E9346DDADEEE56B2E4C9E1460236B08D4DB110BC51AB122896A6E5F23CF64401EA09D0AB9C2F1D14F7D4E0C5559545BD2EB780A53484C'
	$Icon_LM &= '87DC76DB4A90046834BFAFC5E36EB25AAC044ECCCF45E7E763388E37DFD18ED78558BDEFC3BF9F4E6773EE15EDC18087401192029FA0B5CE812395ECECC4BF7F1C3F76EED418A1491559114A65892B55F8822C9410831BE9D8B4111C5B34ED48A55204819B4C1682244103D4D73B1886191D3D76E6CCCC9123C71772A51FE7B3040A795D2E9BCB6FB45929BD86C8ACC22F55F852459421189724451425D0AF3C2F8ABCB8B0C8F43EBC13D9BBF7ED8E8E0E5055209E4C248BA525A3D14492C0395C83A0A54209D80B5E300CD754656E6EAE28E0A155ABECB4018778109DA4ACD6BA66DAD5ECF62FCB67D24C9E11A58A28C9B124136ABBE7E0B2611854BFCAF0F0C8B123C70551ACABAB379B2D384E8882A043504D558B4536BE104BA792658EEBE8EE7CA0A733D0E014D96421152F00EFF2E5429113784106DB54E5F84262CDC69EDF3EFA18888940035095CF6EFF749F6D5F387C9E61F24019B42C4519C13C4828CFE4EBEB6849921926373D399989A7C55296E5B278059265A9CC09B224711C7B7131CEF0CAF6C79FB9A7A7F7524C10E71A5795A1F70F5C8846699BCDE5F258AD764D83104469BFFB17FBDE7A27994A00B160303838F8CAC558243A3991CA24F36C99A2288FD7BB76C3C635EBD64355AA0257F3DAE0EBD367A729CAD0D4E4B5D10E70702E5C8CA53369809E2286870FD67AE8EF7AF9A5CD9B7F0306D1D8855C'
	$Icon_LM &= '36CD160AAA0AAAAD77B9EAABD16BBD553CF6FB477AB7F558CCE6783CAA280A8A220603F5FC8BCFDDE4A17F435A57AEF0F97C9F7FF6A5A2AA288AEE78E8C1503000DD04D51AFC2F5E7DE58DAEEECD6D6D6B6FD5CD6ED3AF7E598D7E53FC0791D0DEF3CDE657E60000000049454E44AE426082'
	Return Binary($Icon_LM)
EndFunc   ;==>Icon_LM
#endregion binary strings
