Neue Dateien

This commit is contained in:
koehlerf committed 2023-09-07 08:41:01 +02:00
1 parent f83989d589
commit ee5a3e0267
22 files changed
+783 -1

No files matched your search

+312
View File
@@ -0,0 +1,312 @@
cls
@echo off
setlocal enabledelayedexpansion
echo.
echo **************************************
echo *** Willkommen beim c't-Keyfinder ***
echo *** ***
echo *** Anleitungen, Downloads, Forum: ***
echo *** https://ct.de/keyfinder ***
echo **************************************
echo.
rem --------- Variablen setzen, es gibt nichts anzupassen -----------
Set workdir=%~d0%~p0Sources\
Set Datei=%~d0%~p0ctKey.txt
Set tmpdir=%workdir%Keyfindertmp
Set Generic=%tmpdir%\generic.txt
Set vbs=%workdir%\DecodeKey.vbs
Set checkpid=%workdir%\Check-Pid.ps1
Set Admin=1
Set PE=0
Set SRP=0
rem ----------- Aufraeumen, falls Skript beim letzten Mal nicht bis zum Ende durchlief -----------
if exist %tmpdir% (
For %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist "%tmpdir%\%%a:\Software" (
reg unload HKLM\_Laufwerk_%%aSoftware >nul 2>nul
reg unload HKLM\_Laufwerk_%%aSystem >nul 2>nul
)
if exist %generic% del %generic%
)
rem ----------- 32/64-Bit-Zuordnungen -----------
Set Strings=%workdir%Strings64.exe
Set BIOS=%tmpdir%\ctBiosKey64.exe
if "%ProgramW6432%" EQU "" set Strings=%workdir%Strings.exe && Set BIOS=%tmpdir%\ctBiosKey32.exe
if not exist %Strings% echo Fehler: %Strings% fehlt. && echo. && pause && goto :eof
rem ----------- Laeuft das Skript unter PE? -----------
if exist %windir%\system32\wpeinit.exe set PE=1
rem ----------- Admin-Rechte vorhanden? -----------
if "%PE%" NEQ "1" %windir%\system32\whoami.exe /groups | %windir%\system32\find.exe "S-1-16-12288" > nul
if errorlevel 1 set Admin=0
rem --------- Software Restriction Policies aktiv? -----------
If "%PE%" EQU "0" For /f %%a in ('powershell $ExecutionContext.SessionState.LanguageMode') do if "%%a" EQU "ConstrainedLanguage" set SRP=1
rem ------ F�uer Auswertung der PID-Datenbank sind Adminrechte erforderlich --------
if "%PE%" EQU "0" if "%SRP%" EQU "1" (
echo ###############################################
echo ### Achtung^^! ###
echo ### Die PowerShell laeuft im Modus ###
echo ### "ConstrainedLanguage". Das ist normal, ###
echo ### wenn Software Restriction Policies as ###
echo ### aktiv sind. Auswertung der Infos ###
echo ### aus der PID-Datenbank sind in diesem ###
echo ### Modus allerdings nicht moeglich. ###
echo ### ###
echo ### Taste druecken, um Skript trotzdem ###
echo ### fortzusetzen. Oder Fenster ###
echo ### schliessen und Skript via Kontextmenue ###
echo ### "als Administrator" erneut starten. ###
echo ###############################################
echo.
pause
)
rem ------ F�uer Auswertung von Parallelinstallationen sind ebenfalls Adminrechte erforderlich --------
if "%PE%" EQU "0" if "%Admin%" EQU "0" (
For %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist "%%a:\windows" (
if "%%a:" NEQ "%systemdrive%" (
echo.
echo ###############################################
echo ### Achtung^^! ###
echo ### Parallelinstallation auf %%a: gefunden. ###
echo ### Schluesselsuche darin erfordert Admin- ###
echo ### rechte, Skript laeuft aber gerade ohne. ###
echo ### ###
echo ### Taste druecken, um Skript ohne Admin- ###
echo ### rechte fortzusetzen. Oder Fenster ###
echo ### schliessen und Skript via Kontextmenue ###
echo ### "als Administrator" erneut starten. ###
echo ###############################################
echo.
pause
)
)
)
rem ------ Unter PE ist keine Auswertung der PID-Datenbank moeglich --------
if "%PE%" EQU "1" (
echo ###############################################
echo ### Hinweis: Skript laeuft unter Windows PE.###
echo ### ###
echo ### Auswertung der Informationen aus der ###
echo ### PID-Datenbank daher nicht moeglich. ###
echo ### Taste druecken zum Fortsetzen. ###
echo ###############################################
echo.
pause
)
rem ------ Unter Windows 7 kein Auslesen des BIOS-Schluessels --------
if "%PE%" EQU "0" (
for /f "tokens=3 delims=.]" %%z in ('ver') do (
set build=%%z
if !Build! LSS 9200 (
echo .
echo ###############################################
echo ### Hinweis: Skript laeuft unter Windows 7 ###
echo ### oder aelter. Es findet hier zwar die ###
echo ### Schluessel in der Registry, aber die ###
echo ### Suche im BIOS ist hier nicht moeglich. ###
echo ### ###
echo ### Um auch im BIOS zu suchen, starten Sie ###
echo ### den c't-KeyFinder unter ###
echo ### Windows 8, 8.1, 10, 11 oder unter dem ###
echo ### c't-Notfall-Windows oder unter ###
echo ### Windows PE. ###
echo ### ###
echo ### Taste druecken zum Fortsetzen. ###
echo ###############################################
pause
)
)
)
rem ------ Unter PE ctBiosKey.exe entpacken --------
if "%PE%" EQU "1" (
if not exist %workdir%ctbioskey.7z echo Fehler: %workdir%ctbioskey.7z fehlt. && echo. && pause
set decrypt=%workdir%7z-64\7z.exe
if "%ProgramW6432%" EQU "" set decrypt=%workdir%7z-32\7z.exe
!decrypt! e -pctkeyfinder -o%tmpdir% %workdir%ctbioskey.7z >nul 2>nul
)
rem ----------- los gehts -----------
md %tmpdir% >nul 2>nul
echo ### %COMPUTERNAME% ### %date% ### %time% >> %datei% ###
echo.
echo Suche in Systemdateien nach nicht-aktivierbaren Schluesseln...
echo.
For %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist "%%a:\windows" (
echo Durchforste Laufwerk %%a: ...
For %%d in ("%%a:\windows\System32\LicensingWinRT.dll" "%%a:\windows\System32\clipwinrt.dll" "%%a:\windows\System32\ClipUp.exe" "%%a:\windows\System32\pkeyhelper.dll" "%%a:\windows\System32\reseteng.dll" "%%a:\windows\System32\Dism\TransmogProvider.dll" "%%a:\windows\System32\oobe\winsetup.dll" "%%a:\windows\System32\Secinit.exe") do (
if exist %%d echo Auswertung: %%d
For /F %%g in ('%strings% -n 29 %%d -accepteula -nobanner 2^>nul') do (
set Genkey=%%g
if "!GenKey:~5,1!" EQU "-" if "!GenKey:~11,1!" EQU "-" if "!GenKey:~17,1!" EQU "-" if "!GenKey:~23,1!" EQU "-" echo %%g >> %generic%
)
if "%%a:" NEQ "%systemdrive%" (
copy %%a:\windows\system32\Config\software %tmpdir%\%%aSoftware >nul 2>nul
reg load HKLM\_Laufwerk_%%a_Software %tmpdir%\%%aSoftware >nul 2>nul
copy %%a:\windows\system32\Config\system %tmpdir%\%%aSystem >nul 2>nul
reg load HKLM\_Laufwerk_%%a_System %tmpdir%\%%aSystem >nul 2>nul
)
)
echo.
)
if "%PE%" EQU "0" if !Build! LSS 9200 (
echo. >> %datei%
echo Suchlauf unter Windows 7 oder aelter. >> %datei%
echo Damit ist das Auslesen des BIOS-Schluessels nicht moeglich. >> %datei%
echo. >> %datei%
goto reg
)
echo.
echo Suche Schluessel in ACPI-Tabelle MSDM der Mainboard-Firmware ...
echo.
if "%PE%" EQU "1" for /f "tokens=* delims=" %%k in ('%BIOS%') do set prodkey=%%k
if "%PE%" EQU "0" for /f "tokens=*" %%k in ('wmic path softwarelicensingservice get OA3xOriginalProductKey 2^>nul') do (
set tmpKey=%%k
if "!tmpKey:~5,1!" EQU "-" if "!tmpKey:~11,1!" EQU "-" if "!tmpKey:~17,1!" EQU "-" if "!tmpKey:~23,1!" EQU "-" set prodkey=%%k
)
)
if "%prodkey%" EQU "" set prodkey=Kein Product Key gefunden.
echo. >> %datei%
echo BIOS-Schluessel >> %datei%
echo ### %prodkey% ### >> %datei%
echo %prodkey%
if "%prodkey%" NEQ "Kein Product Key gefunden." (
if "%PE%" EQU "0" if "%SRP%" EQU "0" (
for /f "delims=;" %%n in ('powershell -NoLogo -NoProfile -NonInteractive -EP Bypass -File %checkpid% ^"%prodkey%^" -SimpleOutput') do (
if "%%n" NEQ "Produkt unbekannt" echo Laut PID-Datenbank: %%n >> %datei%
)
)
)
:reg
echo.
echo Suche Schluessel in der Registry ...
echo.
for /f "delims=" %%d in ('reg query HKLM /s /v "DigitalProductId"') do (
set Treffer=%%d
if "!Treffer:~0,4!" EQU "HKEY" (
echo Schluessel gefunden in %%d
echo.
for /f "tokens=* delims=" %%k in ('cscript.exe /nologo %vbs% "!Treffer!\DigitalProductId"') do set prodkey=%%k
echo. >> %datei%
echo. >> %datei%
echo ### !prodkey! ### >> %datei%
if "%PE%" EQU "0" if "%SRP%" EQU "0" (
for /f "delims=;" %%n in ('powershell -NoLogo -NoProfile -NonInteractive -EP Bypass -File %checkpid% ^"^!prodkey^!^" -SimpleOutput') do (
if "%%n" NEQ "Produkt unbekannt" echo Laut PID-Datenbank: %%n >> %datei%
)
)
for /f "tokens=3*" %%i in ('reg query "!Treffer!" /v ProductName 2^>nul ^| %windir%\system32\find.exe "ProductName"') do if "%%i" neq "" for /f "tokens=3*" %%i in ('reg query ^"!Treffer!^" /v ProductName 2^>nul ^| %windir%\system32\find.exe "REG_SZ"') do echo Laut Registry: %%i %%j >> %datei%
for /f "tokens=3*" %%m in ('reg query "!Treffer!" /v CurrentBuild 2^>nul ^| %windir%\system32\find.exe "CurrentBuild"') do if "%%m" neq "" for /f "tokens=3*" %%m in ('reg query ^"!Treffer!^" /v CurrentBuild 2^>nul ^| %windir%\system32\find.exe "REG_SZ"') do echo Laut Registry: Build %%m %%n >> %datei%
echo Fundort: !Treffer! >> %datei%
if not exist %generic% echo ### Bewertung: Keine Aussage zur Aktivierbarkeit moeglich. ### >> %datei%
set gen=0
if exist %generic% For /F %%t in (%generic%) do if %%t EQU !prodkey! set gen=1
if !gen! EQU 1 (
echo Bewertung: Nicht aktivierbarer Schluessel >> %datei%
) else (
if exist %generic% (
echo Bewertung: >> %datei%
echo ###################################################################### >> %datei%
echo ######### Schluessel ist eventuell aktivierbar. AUSPROBIEREN^^! ######## >> %datei%
echo ###################################################################### >> %datei%
)
)
)
)
echo. >> %datei%
if "%PE%" EQU "1" (
echo Achtung^^! Durchlauf unter PE. >> %datei%
echo Auswertung der Informationen aus der >> %datei%
echo PID-Datenbank war daher nicht moeglich. >> %datei%
echo. >> %datei%
)
If not exist %generic% (
echo Achtung^^! KeyFinder hat in diesem Durchlauf >> %datei%
echo keine Schluessel in Systemdateien gefunden. >> %datei%
echo Einordnung der Schluessel dadurch nicht moeglich. >> %datei%
echo. >> %datei%
)
For %%A in (%generic%) do (
set Gensize=%%~zA
if !Gensize! LEQ 10000 (
echo Achtung^^! KeyFinder hat in diesem Durchlauf >> %datei%
echo nur sehr wenige Infos ueber nicht aktivierbare >> %datei%
echo Schluessel in Systemdateien gefunden. >> %datei%
echo Einschaetzung der Schluessel dadurch eingeschraenkt. >> %datei%
echo. >> %datei%
)
)
echo. >> %datei%
echo. >> %datei%
echo. >> %datei%
For %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist "%%a:\windows" (
if "%%a:" NEQ "%systemdrive%" (
reg unload HKLM\_Laufwerk_%%a_Software >nul 2>nul
reg unload HKLM\_Laufwerk_%%a_System >nul 2>nul
)
)
if exist %tmpdir% rd /q /s %tmpdir%
start notepad %datei%
goto :eof
REM Erstellt 2022 von Axel Vahldiek/c't (axv)
REM mailto: axv@ct.de
REM Urheber der VBS-Routine leider unbekannt. Sachdienliche Hinweise bitte an axv, danke.
REM Version 1.44
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+371
View File
@@ -0,0 +1,371 @@
[CmdletBinding(DefaultParameterSetName = 'LiteralKeys')]
param (
[Parameter(Position=0, Mandatory=$true, ValueFromPipeline=$true, ParameterSetName='LiteralKeys')]
[string[]] $ProductKey,
[Parameter(Mandatory=$true, ValueFromPipeline=$true, ParameterSetName='KeyFile')]
[string] $KeyFile,
[switch] $SimpleOutput
)
$source = @"
using System;
using System.Text;
using System.Runtime.InteropServices;
public static class PidChecker
{
// Quelle: https://github.com/chughes-3/UpdateProductKey/blob/master/UpdateProductKeys/PidChecker.cs
[DllImport("pidgenx.dll", EntryPoint = "PidGenX", CharSet = CharSet.Auto)]
static extern int PidGenX(string ProductKey, string PkeyPath, string MSPID, int UnknownUsage, IntPtr ProductID, IntPtr DigitalProductID, IntPtr DigitalProductID4);
public static string CheckProductKey(string productKey, out string skuId)
{
string result = "";
skuId = "";
int RetID;
byte[] gpid = new byte[0x32];
byte[] opid = new byte[0xA4];
byte[] npid = new byte[0x04F8];
IntPtr PID = Marshal.AllocHGlobal(0x32);
IntPtr DPID = Marshal.AllocHGlobal(0xA4);
IntPtr DPID4 = Marshal.AllocHGlobal(0x04F8);
string PKeyPath = Environment.SystemDirectory + @"\spp\tokens\pkeyconfig\pkeyconfig.xrm-ms";
string MSPID = "00000";
gpid[0] = 0x32;
opid[0] = 0xA4;
npid[0] = 0xF8;
npid[1] = 0x04;
Marshal.Copy(gpid, 0, PID, 0x32);
Marshal.Copy(opid, 0, DPID, 0xA4);
Marshal.Copy(npid, 0, DPID4, 0x04F8);
RetID = PidGenX(productKey, PKeyPath, MSPID, 0, PID, DPID, DPID4);
if (RetID == 0)
{
Marshal.Copy(PID, gpid, 0, gpid.Length);
Marshal.Copy(DPID, opid, 0, opid.Length);
Marshal.Copy(DPID4, npid, 0, npid.Length);
skuId = "{" + GetString(npid, 0x0088, Encoding.Unicode) + "}";
result = "Valid";
}
else if (RetID == -2147024809)
{
result = "PidChecker: Invalid Arguments";
}
else if (RetID == -1979645695)
{
result = "PidChecker: Not a Windows 7 Product Key";
}
else if (RetID == -2147024894)
{
result = "PidChecker: pkeyconfig.xrm.ms file is not found";
}
else
{
result = string.Format("PidChecker: Invalid input! ({0} ≙ 0x{0:x})", RetID);
}
Marshal.FreeHGlobal(PID);
Marshal.FreeHGlobal(DPID);
Marshal.FreeHGlobal(DPID4);
//FreeLibrary(dllHandle);
return result;
}
static string GetString(byte[] bytes, int index, Encoding enc)
{
int n = index;
while (!(bytes[n] == 0 && bytes[n + 1] == 0)) n++;
return enc.GetString(bytes, index, n - index + 1);
}
}
"@
Add-Type -TypeDefinition $source
$result = @{}
$PKeyPath = [Environment]::SystemDirectory + '\spp\tokens\pkeyconfig\pkeyconfig.xrm-ms'
$Namespace = @{tm = "http://www.microsoft.com/DRM/XrML2/TM/v2"}
$XPath = "//tm:infoBin[@name='pkeyConfigData']"
$configDataBase64 = Select-Xml -Path $PKeyPath -Namespace $Namespace -XPath $XPath | Select-Object -ExpandProperty Node
if(-not $configDataBase64) {
Write-Host "Datei pkeyconfig.xrm-ms nicht gefunden oder unerwarteter Inhalt."
return
}
$configDataXml = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($configDataBase64.InnerText))
if($KeyFile) {
Write-Verbose "Lese $KeyFile ..."
$ProductKey = @()
Get-Content $KeyFile | ForEach-Object {
if($_ -match '([A-Z0-9]{5}-){4}[A-Z0-9]{5}') {
Write-Verbose ("Schlüssel gefunden: {0}" -f $Matches[0])
$ProductKey += $Matches[0]
}
}
}
foreach($Key in $ProductKey) {
if($result[$Key]) {
Write-Verbose "Überspringe ${Key}: Schon bekannt."
continue
}
Write-Verbose "Verarbeite $Key ..."
$Product = [PSCustomObject]@{
Key = $Key
}
$ConfigId = ""
$IsValid = [PidChecker]::CheckProductKey($Key, [ref]$ConfigId)
if($IsValid -ne "Valid") {
$Product | Add-Member -MemberType NoteProperty -Name 'Error' -Value $IsValid
}
else {
$Namespace = @{ns = "http://www.microsoft.com/DRM/PKEY/Configuration/2.0"}
$XPath = "//ns:Configuration[ns:ActConfigId='{0}']" -f $ConfigId
$Configuration = Select-Xml -Content $configDataXml -Namespace $Namespace -XPath $XPath
if(-not $Configuration) {
$Product | Add-Member -MemberType NoteProperty -Name 'Error' -Value "Unbekannter Produktschlüssel"
}
else {
$Product | Add-Member -MemberType NoteProperty -Name 'Product' -Value $Configuration.Node.ProductDescription
$Product | Add-Member -MemberType NoteProperty -Name 'Edition' -Value $Configuration.Node.EditionId
$Product | Add-Member -MemberType NoteProperty -Name 'KeyType' -Value $Configuration.Node.ProductKeyType
}
}
$result[$Key] = $Product
}
if($SimpleOutput) {
$out = ""
foreach($r in $result.GetEnumerator())
{
if($out -ne "") {
$out += "`r`n"
}
if($result.Count -ne 1) {
$out += "$($r.Name): "
}
if($r.Value.Error) {
$out += "Produkt unbekannt"
}
else {
$out += $r.Value.Product
}
}
return $out
}
else {
return $result.Values # | Sort-Object Key
}
# SIG # Begin signature block
# MIImxgYJKoZIhvcNAQcCoIImtzCCJrMCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUWtKxkAX5tFiVubVKwoRKK/JJ
# gLyggh/XMIIFbzCCBFegAwIBAgIQSPyTtGBVlI02p8mKidaUFjANBgkqhkiG9w0B
# AQwFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVy
# MRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEh
# MB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTIxMDUyNTAwMDAw
# MFoXDTI4MTIzMTIzNTk1OVowVjELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1NlY3Rp
# Z28gTGltaXRlZDEtMCsGA1UEAxMkU2VjdGlnbyBQdWJsaWMgQ29kZSBTaWduaW5n
# IFJvb3QgUjQ2MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjeeUEiIE
# JHQu/xYjApKKtq42haxH1CORKz7cfeIxoFFvrISR41KKteKW3tCHYySJiv/vEpM7
# fbu2ir29BX8nm2tl06UMabG8STma8W1uquSggyfamg0rUOlLW7O4ZDakfko9qXGr
# YbNzszwLDO/bM1flvjQ345cbXf0fEj2CA3bm+z9m0pQxafptszSswXp43JJQ8mTH
# qi0Eq8Nq6uAvp6fcbtfo/9ohq0C/ue4NnsbZnpnvxt4fqQx2sycgoda6/YDnAdLv
# 64IplXCN/7sVz/7RDzaiLk8ykHRGa0c1E3cFM09jLrgt4b9lpwRrGNhx+swI8m2J
# mRCxrds+LOSqGLDGBwF1Z95t6WNjHjZ/aYm+qkU+blpfj6Fby50whjDoA7NAxg0P
# OM1nqFOI+rgwZfpvx+cdsYN0aT6sxGg7seZnM5q2COCABUhA7vaCZEao9XOwBpXy
# bGWfv1VbHJxXGsd4RnxwqpQbghesh+m2yQ6BHEDWFhcp/FycGCvqRfXvvdVnTyhe
# Be6QTHrnxvTQ/PrNPjJGEyA2igTqt6oHRpwNkzoJZplYXCmjuQymMDg80EY2NXyc
# uu7D1fkKdvp+BRtAypI16dV60bV/AK6pkKrFfwGcELEW/MxuGNxvYv6mUKe4e7id
# FT/+IAx1yCJaE5UZkADpGtXChvHjjuxf9OUCAwEAAaOCARIwggEOMB8GA1UdIwQY
# MBaAFKARCiM+lvEH7OKvKe+CpX/QMKS0MB0GA1UdDgQWBBQy65Ka/zWWSC8oQEJw
# IDaRXBeF5jAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zATBgNVHSUE
# DDAKBggrBgEFBQcDAzAbBgNVHSAEFDASMAYGBFUdIAAwCAYGZ4EMAQQBMEMGA1Ud
# HwQ8MDowOKA2oDSGMmh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL0FBQUNlcnRpZmlj
# YXRlU2VydmljZXMuY3JsMDQGCCsGAQUFBwEBBCgwJjAkBggrBgEFBQcwAYYYaHR0
# cDovL29jc3AuY29tb2RvY2EuY29tMA0GCSqGSIb3DQEBDAUAA4IBAQASv6Hvi3Sa
# mES4aUa1qyQKDKSKZ7g6gb9Fin1SB6iNH04hhTmja14tIIa/ELiueTtTzbT72ES+
# BtlcY2fUQBaHRIZyKtYyFfUSg8L54V0RQGf2QidyxSPiAjgaTCDi2wH3zUZPJqJ8
# ZsBRNraJAlTH/Fj7bADu/pimLpWhDFMpH2/YGaZPnvesCepdgsaLr4CnvYFIUoQx
# 2jLsFeSmTD1sOXPUC4U5IOCFGmjhp0g4qdE2JXfBjRkWxYhMZn0vY86Y6GnfrDyo
# XZ3JHFuu2PMvdM+4fvbXg50RlmKarkUT2n/cR/vfw1Kf5gZV6Z2M8jpiUbzsJA8p
# 1FiAhORFe1rYMIIGGjCCBAKgAwIBAgIQYh1tDFIBnjuQeRUgiSEcCjANBgkqhkiG
# 9w0BAQwFADBWMQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVk
# MS0wKwYDVQQDEyRTZWN0aWdvIFB1YmxpYyBDb2RlIFNpZ25pbmcgUm9vdCBSNDYw
# HhcNMjEwMzIyMDAwMDAwWhcNMzYwMzIxMjM1OTU5WjBUMQswCQYDVQQGEwJHQjEY
# MBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMSswKQYDVQQDEyJTZWN0aWdvIFB1Ymxp
# YyBDb2RlIFNpZ25pbmcgQ0EgUjM2MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB
# igKCAYEAmyudU/o1P45gBkNqwM/1f/bIU1MYyM7TbH78WAeVF3llMwsRHgBGRmxD
# eEDIArCS2VCoVk4Y/8j6stIkmYV5Gej4NgNjVQ4BYoDjGMwdjioXan1hlaGFt4Wk
# 9vT0k2oWJMJjL9G//N523hAm4jF4UjrW2pvv9+hdPX8tbbAfI3v0VdJiJPFy/7Xw
# iunD7mBxNtecM6ytIdUlh08T2z7mJEXZD9OWcJkZk5wDuf2q52PN43jc4T9OkoXZ
# 0arWZVeffvMr/iiIROSCzKoDmWABDRzV/UiQ5vqsaeFaqQdzFf4ed8peNWh1OaZX
# nYvZQgWx/SXiJDRSAolRzZEZquE6cbcH747FHncs/Kzcn0Ccv2jrOW+LPmnOyB+t
# AfiWu01TPhCr9VrkxsHC5qFNxaThTG5j4/Kc+ODD2dX/fmBECELcvzUHf9shoFvr
# n35XGf2RPaNTO2uSZ6n9otv7jElspkfK9qEATHZcodp+R4q2OIypxR//YEb3fkDn
# 3UayWW9bAgMBAAGjggFkMIIBYDAfBgNVHSMEGDAWgBQy65Ka/zWWSC8oQEJwIDaR
# XBeF5jAdBgNVHQ4EFgQUDyrLIIcouOxvSK4rVKYpqhekzQwwDgYDVR0PAQH/BAQD
# AgGGMBIGA1UdEwEB/wQIMAYBAf8CAQAwEwYDVR0lBAwwCgYIKwYBBQUHAwMwGwYD
# VR0gBBQwEjAGBgRVHSAAMAgGBmeBDAEEATBLBgNVHR8ERDBCMECgPqA8hjpodHRw
# Oi8vY3JsLnNlY3RpZ28uY29tL1NlY3RpZ29QdWJsaWNDb2RlU2lnbmluZ1Jvb3RS
# NDYuY3JsMHsGCCsGAQUFBwEBBG8wbTBGBggrBgEFBQcwAoY6aHR0cDovL2NydC5z
# ZWN0aWdvLmNvbS9TZWN0aWdvUHVibGljQ29kZVNpZ25pbmdSb290UjQ2LnA3YzAj
# BggrBgEFBQcwAYYXaHR0cDovL29jc3Auc2VjdGlnby5jb20wDQYJKoZIhvcNAQEM
# BQADggIBAAb/guF3YzZue6EVIJsT/wT+mHVEYcNWlXHRkT+FoetAQLHI1uBy/YXK
# ZDk8+Y1LoNqHrp22AKMGxQtgCivnDHFyAQ9GXTmlk7MjcgQbDCx6mn7yIawsppWk
# vfPkKaAQsiqaT9DnMWBHVNIabGqgQSGTrQWo43MOfsPynhbz2Hyxf5XWKZpRvr3d
# MapandPfYgoZ8iDL2OR3sYztgJrbG6VZ9DoTXFm1g0Rf97Aaen1l4c+w3DC+IkwF
# kvjFV3jS49ZSc4lShKK6BrPTJYs4NG1DGzmpToTnwoqZ8fAmi2XlZnuchC4NPSZa
# PATHvNIzt+z1PHo35D/f7j2pO1S8BCysQDHCbM5Mnomnq5aYcKCsdbh0czchOm8b
# kinLrYrKpii+Tk7pwL7TjRKLXkomm5D1Umds++pip8wH2cQpf93at3VDcOK4N7Ew
# oIJB0kak6pSzEu4I64U6gZs7tS/dGNSljf2OSSnRr7KWzq03zl8l75jy+hOds9TW
# SenLbjBQUGR96cFr6lEUfAIEHVC1L68Y1GGxx4/eRI82ut83axHMViw1+sVpbPxg
# 51Tbnio1lB93079WPFnYaOvfGAA0e0zcfF/M9gXr+korwQTh2Prqooq2bYNMvUoU
# KD85gnJ+t0smrWrb8dee2CvYZXD5laGtaAxOfy/VKNmwuWuAh9kcMIIGWDCCBMCg
# AwIBAgIQJ9duLUO9FDxmyM5o3NajBDANBgkqhkiG9w0BAQwFADBUMQswCQYDVQQG
# EwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMSswKQYDVQQDEyJTZWN0aWdv
# IFB1YmxpYyBDb2RlIFNpZ25pbmcgQ0EgUjM2MB4XDTIyMTIwNjAwMDAwMFoXDTI0
# MDEwODIzNTk1OVowbzELMAkGA1UEBhMCREUxFjAUBgNVBAgMDU5pZWRlcnNhY2hz
# ZW4xIzAhBgNVBAoMGkhlaXNlIE1lZGllbiBHbWJIICYgQ28uIEtHMSMwIQYDVQQD
# DBpIZWlzZSBNZWRpZW4gR21iSCAmIENvLiBLRzCCAiIwDQYJKoZIhvcNAQEBBQAD
# ggIPADCCAgoCggIBAJb++5FeuAjKhFSXbwoAxxmkmBMjLocELgkOP0E4mNmy1tyP
# cqAYE2Jspg3X+KE/X4swbnCU8wBI3MX0RkjTM06kDb9YetDnLHMSzk0BhnrUf7um
# FfmyuowlEhWrrGQGwiL/kYGo0z5vi0+2Xro7Dc9Yd6TPOxCXhOAQF+ltcCk47Zza
# y1GsW63G8cBowQLYuBAn5tiNj4Y9qT0iJ40GSNEFWUg3SCl9Bmy1/ANpVepT4/aV
# Vd0r6WP71jSiQltAHQ51QV1tsolgBBbnfwBfEfMKBvyvXG+46WszJ9fywVj9pkLA
# IwUU+e03ix5+xQ5icMAjvNi9ZNNr0gj2NShXf2k//oOUdqgkFvmXKdlWISbqLBXl
# h8K5LU9BgrK3GiELPj6P4T5y00p6TfnsCica2mP0JeuUR+GD8dtnus1F481vNLdV
# 0kBPIpPdFR5/W7o2E9gEzvLjc3UlR+lMiZ39a5plv1ne55IkvpHpWdJLEoi0O8Hz
# HUn0wvGaOYOU2XaJLyy5Lcl4FXDuW3s4SNBgB482+CyxlXA+TNCNxOplNwok73iq
# Z/Lt/IIwwfWVGWbdOf9HXh07EfRvMMaot66uUKfp3s+ffPI53lUDq0g8+fdQFC+A
# uUtfHyE5jFKL7TW0teZOovUtC5nBJB6kcfMl/SzcLsv+rjhH+tDgC3mADC6fAgMB
# AAGjggGJMIIBhTAfBgNVHSMEGDAWgBQPKssghyi47G9IritUpimqF6TNDDAdBgNV
# HQ4EFgQURR6a6AkwL9LB7PPGFHi0Fds7NkswDgYDVR0PAQH/BAQDAgeAMAwGA1Ud
# EwEB/wQCMAAwEwYDVR0lBAwwCgYIKwYBBQUHAwMwSgYDVR0gBEMwQTA1BgwrBgEE
# AbIxAQIBAwIwJTAjBggrBgEFBQcCARYXaHR0cHM6Ly9zZWN0aWdvLmNvbS9DUFMw
# CAYGZ4EMAQQBMEkGA1UdHwRCMEAwPqA8oDqGOGh0dHA6Ly9jcmwuc2VjdGlnby5j
# b20vU2VjdGlnb1B1YmxpY0NvZGVTaWduaW5nQ0FSMzYuY3JsMHkGCCsGAQUFBwEB
# BG0wazBEBggrBgEFBQcwAoY4aHR0cDovL2NydC5zZWN0aWdvLmNvbS9TZWN0aWdv
# UHVibGljQ29kZVNpZ25pbmdDQVIzNi5jcnQwIwYIKwYBBQUHMAGGF2h0dHA6Ly9v
# Y3NwLnNlY3RpZ28uY29tMA0GCSqGSIb3DQEBDAUAA4IBgQAtQeD4SqSJdR4OsP2w
# ybXWKyEV/0pG9ruAOBR60MKpR3u+jCM0P/dzO1tU1dcyozlIGgMHdPqzECJzOQmO
# cCb32Rpm+pV0vDmmcn34x10bzGMoCqcgqdoKBk2sC9wJTsM4nzKwSTFyXGUlmo1T
# sVNXmDogyT2hXDuLZe6MNFoQ3MuevUyrT8srUixtCTh4eQKNwO7AMtQ/RrococTi
# EsxJkrhiU1AiEObKnhrc2GCF4nN/pir9iUR8h7NfS+JuGh4v3+0E7aUzo4kNz0GW
# eLou03eRhUj1c6zkfePZxCN3NVq+WuBF2zZmT36w2PhxDGCxYaYxWVWikzdWdK8P
# kIzU4OGx9976l7Ehw9MfTW7ZLiylBQvCKMgcdcDXt6QzltGzyrk0mCbkcOZ9xUDw
# y+6kWNTev3cvjzCL8rYHM1RNdb10/bjO9pIGsyFXPmMU/XKbu0oUWJgxam4wHzuP
# GXMjAhUAXADXYV38dvavSmWgGrkrv8PvSUStS5rQft16JFkwggbsMIIE1KADAgEC
# AhAwD2+s3WaYdHypRjaneC25MA0GCSqGSIb3DQEBDAUAMIGIMQswCQYDVQQGEwJV
# UzETMBEGA1UECBMKTmV3IEplcnNleTEUMBIGA1UEBxMLSmVyc2V5IENpdHkxHjAc
# BgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEuMCwGA1UEAxMlVVNFUlRydXN0
# IFJTQSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xOTA1MDIwMDAwMDBaFw0z
# ODAxMTgyMzU5NTlaMH0xCzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1h
# bmNoZXN0ZXIxEDAOBgNVBAcTB1NhbGZvcmQxGDAWBgNVBAoTD1NlY3RpZ28gTGlt
# aXRlZDElMCMGA1UEAxMcU2VjdGlnbyBSU0EgVGltZSBTdGFtcGluZyBDQTCCAiIw
# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMgbAa/ZLH6ImX0BmD8gkL2cgCFU
# k7nPoD5T77NawHbWGgSlzkeDtevEzEk0y/NFZbn5p2QWJgn71TJSeS7JY8ITm7aG
# PwEFkmZvIavVcRB5h/RGKs3EWsnb111JTXJWD9zJ41OYOioe/M5YSdO/8zm7uaQj
# QqzQFcN/nqJc1zjxFrJw06PE37PFcqwuCnf8DZRSt/wflXMkPQEovA8NT7ORAY5u
# nSd1VdEXOzQhe5cBlK9/gM/REQpXhMl/VuC9RpyCvpSdv7QgsGB+uE31DT/b0OqF
# jIpWcdEtlEzIjDzTFKKcvSb/01Mgx2Bpm1gKVPQF5/0xrPnIhRfHuCkZpCkvRuPd
# 25Ffnz82Pg4wZytGtzWvlr7aTGDMqLufDRTUGMQwmHSCIc9iVrUhcxIe/arKCFiH
# d6QV6xlV/9A5VC0m7kUaOm/N14Tw1/AoxU9kgwLU++Le8bwCKPRt2ieKBtKWh97o
# aw7wW33pdmmTIBxKlyx3GSuTlZicl57rjsF4VsZEJd8GEpoGLZ8DXv2DolNnyrH6
# jaFkyYiSWcuoRsDJ8qb/fVfbEnb6ikEk1Bv8cqUUotStQxykSYtBORQDHin6G6Ui
# rqXDTYLQjdprt9v3GEBXc/Bxo/tKfUU2wfeNgvq5yQ1TgH36tjlYMu9vGFCJ10+d
# M70atZ2h3pVBeqeDAgMBAAGjggFaMIIBVjAfBgNVHSMEGDAWgBRTeb9aqitKz1SA
# 4dibwJ3ysgNmyzAdBgNVHQ4EFgQUGqH4YRkgD8NBd0UojtE1XwYSBFUwDgYDVR0P
# AQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQAwEwYDVR0lBAwwCgYIKwYBBQUH
# AwgwEQYDVR0gBAowCDAGBgRVHSAAMFAGA1UdHwRJMEcwRaBDoEGGP2h0dHA6Ly9j
# cmwudXNlcnRydXN0LmNvbS9VU0VSVHJ1c3RSU0FDZXJ0aWZpY2F0aW9uQXV0aG9y
# aXR5LmNybDB2BggrBgEFBQcBAQRqMGgwPwYIKwYBBQUHMAKGM2h0dHA6Ly9jcnQu
# dXNlcnRydXN0LmNvbS9VU0VSVHJ1c3RSU0FBZGRUcnVzdENBLmNydDAlBggrBgEF
# BQcwAYYZaHR0cDovL29jc3AudXNlcnRydXN0LmNvbTANBgkqhkiG9w0BAQwFAAOC
# AgEAbVSBpTNdFuG1U4GRdd8DejILLSWEEbKw2yp9KgX1vDsn9FqguUlZkClsYcu1
# UNviffmfAO9Aw63T4uRW+VhBz/FC5RB9/7B0H4/GXAn5M17qoBwmWFzztBEP1dXD
# 4rzVWHi/SHbhRGdtj7BDEA+N5Pk4Yr8TAcWFo0zFzLJTMJWk1vSWVgi4zVx/AZa+
# clJqO0I3fBZ4OZOTlJux3LJtQW1nzclvkD1/RXLBGyPWwlWEZuSzxWYG9vPWS16t
# oytCiiGS/qhvWiVwYoFzY16gu9jc10rTPa+DBjgSHSSHLeT8AtY+dwS8BDa153fL
# nC6NIxi5o8JHHfBd1qFzVwVomqfJN2Udvuq82EKDQwWli6YJ/9GhlKZOqj0J9QVs
# t9JkWtgqIsJLnfE5XkzeSD2bNJaaCV+O/fexUpHOP4n2HKG1qXUfcb9bQ11lPVCB
# bqvw0NP8srMftpmWJvQ8eYtcZMzN7iea5aDADHKHwW5NWtMe6vBE5jJvHOsXTpTD
# eGUgOw9Bqh/poUGd/rG4oGUqNODeqPk85sEwu8CgYyz8XBYAqNDEf+oRnR4GxqZt
# Ml20OAkrSQeq/eww2vGnL8+3/frQo4TZJ577AWZ3uVYQ4SBuxq6x+ba6yDVdM3aO
# 8XwgDCp3rrWiAoa6Ke60WgCxjKvj+QrJVF3UuWp0nr1Irpgwggb2MIIE3qADAgEC
# AhEAkDl/mtJKOhPyvZFfCDipQzANBgkqhkiG9w0BAQwFADB9MQswCQYDVQQGEwJH
# QjEbMBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3Jk
# MRgwFgYDVQQKEw9TZWN0aWdvIExpbWl0ZWQxJTAjBgNVBAMTHFNlY3RpZ28gUlNB
# IFRpbWUgU3RhbXBpbmcgQ0EwHhcNMjIwNTExMDAwMDAwWhcNMzMwODEwMjM1OTU5
# WjBqMQswCQYDVQQGEwJHQjETMBEGA1UECBMKTWFuY2hlc3RlcjEYMBYGA1UEChMP
# U2VjdGlnbyBMaW1pdGVkMSwwKgYDVQQDDCNTZWN0aWdvIFJTQSBUaW1lIFN0YW1w
# aW5nIFNpZ25lciAjMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJCy
# cT954dS5ihfMw5fCkJRy7Vo6bwFDf3NaKJ8kfKA1QAb6lK8KoYO2E+RLFQZeaoog
# NHF7uyWtP1sKpB8vbH0uYVHQjFk3PqZd8R5dgLbYH2DjzRJqiB/G/hjLk0NWesfO
# A9YAZChWIrFLGdLwlslEHzldnLCW7VpJjX5y5ENrf8mgP2xKrdUAT70KuIPFvZgs
# B3YBcEXew/BCaer/JswDRB8WKOFqdLacRfq2Os6U0R+9jGWq/fzDPOgNnDhm1fx9
# HptZjJFaQldVUBYNS3Ry7qAqMfwmAjT5ZBtZ/eM61Oi4QSl0AT8N4BN3KxE8+z3N
# 0Ofhl1tV9yoDbdXNYtrOnB786nB95n1LaM5aKWHToFwls6UnaKNY/fUta8pfZMdr
# KAzarHhB3pLvD8Xsq98tbxpUUWwzs41ZYOff6Bcio3lBYs/8e/OS2q7gPE8PWsxu
# 3x+8Iq+3OBCaNKcL//4dXqTz7hY4Kz+sdpRBnWQd+oD9AOH++DrUw167aU1ymeXx
# Mi1R+mGtTeomjm38qUiYPvJGDWmxt270BdtBBcYYwFDk+K3+rGNhR5G8RrVGU2zF
# 9OGGJ5OEOWx14B0MelmLLsv0ZCxCR/RUWIU35cdpp9Ili5a/xq3gvbE39x/fQnuq
# 6xzp6z1a3fjSkNVJmjodgxpXfxwBws4cfcz7lhXFAgMBAAGjggGCMIIBfjAfBgNV
# HSMEGDAWgBQaofhhGSAPw0F3RSiO0TVfBhIEVTAdBgNVHQ4EFgQUJS5oPGuaKyQU
# qR+i3yY6zxSm8eAwDgYDVR0PAQH/BAQDAgbAMAwGA1UdEwEB/wQCMAAwFgYDVR0l
# AQH/BAwwCgYIKwYBBQUHAwgwSgYDVR0gBEMwQTA1BgwrBgEEAbIxAQIBAwgwJTAj
# BggrBgEFBQcCARYXaHR0cHM6Ly9zZWN0aWdvLmNvbS9DUFMwCAYGZ4EMAQQCMEQG
# A1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwuc2VjdGlnby5jb20vU2VjdGlnb1JT
# QVRpbWVTdGFtcGluZ0NBLmNybDB0BggrBgEFBQcBAQRoMGYwPwYIKwYBBQUHMAKG
# M2h0dHA6Ly9jcnQuc2VjdGlnby5jb20vU2VjdGlnb1JTQVRpbWVTdGFtcGluZ0NB
# LmNydDAjBggrBgEFBQcwAYYXaHR0cDovL29jc3Auc2VjdGlnby5jb20wDQYJKoZI
# hvcNAQEMBQADggIBAHPa7Whyy8K5QKExu7QDoy0UeyTntFsVfajp/a3Rkg18PTag
# adnzmjDarGnWdFckP34PPNn1w3klbCbojWiTzvF3iTl/qAQF2jTDFOqfCFSr/8R+
# lmwr05TrtGzgRU0ssvc7O1q1wfvXiXVtmHJy9vcHKPPTstDrGb4VLHjvzUWgAOT4
# BHa7V8WQvndUkHSeC09NxKoTj5evATUry5sReOny+YkEPE7jghJi67REDHVBwg80
# uIidyCLxE2rbGC9ueK3EBbTohAiTB/l9g/5omDTkd+WxzoyUbNsDbSgFR36bLvBk
# +9ukAzEQfBr7PBmA0QtwuVVfR745ZM632iNUMuNGsjLY0imGyRVdgJWvAvu00S6d
# OHw14A8c7RtHSJwialWC2fK6CGUD5fEp80iKCQFMpnnyorYamZTrlyjhvn0boXzt
# VoCm9CIzkOSEU/wq+sCnl6jqtY16zuTgS6Ezqwt2oNVpFreOZr9f+h/EqH+noUgU
# kQ2C/L1Nme3J5mw2/ndDmbhpLXxhL+2jsEn+W75pJJH/k/xXaZJL2QU/bYZy06LQ
# wGTSOkLBGgP70O2aIbg/r6ayUVTVTMXKHxKNV8Y57Vz/7J8mdq1kZmfoqjDg0q23
# fbFqQSduA4qjdOCKCYJuv+P2t7yeCykYaIGhnD9uFllLFAkJmuauv2AV3Yb1MYIG
# WTCCBlUCAQEwaDBUMQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1p
# dGVkMSswKQYDVQQDEyJTZWN0aWdvIFB1YmxpYyBDb2RlIFNpZ25pbmcgQ0EgUjM2
# AhAn124tQ70UPGbIzmjc1qMEMAkGBSsOAwIaBQCgeDAYBgorBgEEAYI3AgEMMQow
# CKACgAChAoAAMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcC
# AQsxDjAMBgorBgEEAYI3AgEVMCMGCSqGSIb3DQEJBDEWBBRYuHYX0/Psx3DVYlbr
# NEghmE7f1TANBgkqhkiG9w0BAQEFAASCAgBKzSvvyJRd+hesdPhVVnwQ/KdNkmEi
# ecxtqiiPF83A+ld1iq/7M8qqClceal+frAqt+sL06jZhIYhsz1M6uC3fABvPGWhj
# fnoLOEsBX5U8myJ9+dfQYnFN+q0lD6m80R+8iuj8daxc4HI/3TXJzFCgh9v8U76C
# MnKShkhG6DLPW1VWpa82xwI682tgvAYNMSnYzaVsZeHb8OB7QLX2yAokl2Te+KxZ
# uj2CkzX7qvGvDQ8uZt6+IndWCAlXdcqOH7j3b7flA+v39lwqzyvl6qgkKpuP0b/d
# IluvMuUXdwEB+fU81ovpg2x7VSXKRwrZIvTCi+sYYdOHVCmsXXUdqmCdACJ1qHsN
# teu/+LJPCNMl1FdMHGN9wMUUaGdh0/obKTGA1J3yH/Tb8SPMpwZjAFsKaH40MuhW
# 5VuoYGU5cTwrwlAEz4crimClHkumxIrw58W4cfAdSjY2UvdnZGQ5ILv4yEBWoVEJ
# JAIyjrUGAV3LLpo7K6Sk969tyarz0gOpgzBAYguQes2gBuinQPxpneSOrVUWaOF5
# 3xEGmtG8lFNXPoiTwNiKBUuh0vgnXkapxBUa3j5RwrbiaFzjeBSUfHKrmAZfQXAl
# NGKxLbbEqr4vJD0CfuyKKTInvoZs4wS6J8k+kWhckKyMtTGr4RjLbmU1qf2pU6x5
# u1hirHFBF123g6GCA0wwggNIBgkqhkiG9w0BCQYxggM5MIIDNQIBATCBkjB9MQsw
# CQYDVQQGEwJHQjEbMBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQH
# EwdTYWxmb3JkMRgwFgYDVQQKEw9TZWN0aWdvIExpbWl0ZWQxJTAjBgNVBAMTHFNl
# Y3RpZ28gUlNBIFRpbWUgU3RhbXBpbmcgQ0ECEQCQOX+a0ko6E/K9kV8IOKlDMA0G
# CWCGSAFlAwQCAgUAoHkwGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG
# 9w0BCQUxDxcNMjMwMzA2MTUxNTMxWjA/BgkqhkiG9w0BCQQxMgQwOy4V957f9rpC
# Kp3+dqwZ4DkAZvVMrS6U1lcyoR/OJBEAkbENDWuQtXrt7/v/DuD7MA0GCSqGSIb3
# DQEBAQUABIICAIBnGaeWCd7n/dfX4wFKJbzQjXBig9YwKyGP2xlKDcAgEJQsJ3A5
# mBU2JvrPu5G4tsY7G03nU42HL2vwcilJs/NYIHP65SSYwXk2UCgOnuJ308iV+wQK
# /FYj0lM3v7rXmQo5BBRI3oN0u4Hdp6haStQnjtHf0PwuW77r/XwXC9Sb1cPM+dlf
# UG0tkPrc/B3wnbz2aV77TASkceaUzgJgaFDR60KrnvmqUCGf/N0nOu9OzV//U0V1
# I4qAc88QVhYue14YZoUVxxgV46bH/PtSYWumjPmZFMlfUeZJpFrYp/Qe9AcC4bo1
# LpZIcLwoyGSHfTyoR1PpG55qWFVHUL7tXVreUAG9MBk2viKV/hhWwpA2kA9bOOHE
# dnVAaFDLDg9pCLVd42gprTjBu53t2R34gyizG+zeVdreMDbjo0DG2m26Y9mfYj9g
# 68/FeP8s6nOHkMI6CNYZK6/0Vum01lH3YH8aZSv2UZrPN4E5/v8BG04PKFeaeQiU
# GfS+Q60DbbEol1/Y9qSEZFhowhHiXzfJF9JvpCBlE8fjFwWuPgOzqxBz7T0DkzI9
# KU/nyj57VcUzQw7xt3TmM+ANJMKQFhigcCbOM3I2j+cpCFNwRC9CRfbIrwMbzIHH
# Jf+hVTvL4gpn3R/Or2XGqqvyxkvzLWMYAPLkeMoO3SOUFvFXmhX61vnE
# SIG # End signature block
+33
View File
@@ -0,0 +1,33 @@
Set WshShell = CreateObject("WScript.Shell")
WScript.echo decode(WshShell.RegRead(WScript.Arguments(0)))
Function decode(id)
Dim WinNew, Map, Out, A, B, C, D, E, F
WinNew = (id(66) \ 6) And 1
id(66) = (id(66) And &HF7) Or ((WinNew And 2) * 4)
A = 24
Map = "BCDFGHJKMPQRTVWXY2346789"
Do
B = 14
C = 0
Do
C = C * 256
C = id(B + 52) + C
id(B + 52) = (C \ 24)
C = C Mod 24
B = B -1
Loop While B >= 0
A = A - 1
Out = Mid(Map, C + 1, 1) & Out
E = C
Loop While A >= 0
If (WinNew = 1) Then
D = Mid(Out, 2, E)
F = "N"
Out = Replace(Out, D, D & F, 2, 1, 0)
If E = 0 Then Out = F & Out
End If
decode = Mid(Out, 1, 5) & "-" & Mid(Out, 6, 5) & "-" & Mid(Out, 11, 5) & "-" & Mid(Out, 16, 5) & "-" & Mid(Out, 21, 5)
End Function
' Urheber der Funktion leider unbekannt. Sachdienliche Hinweise bitte an axv@ct.de, danke.
+6
View File
@@ -0,0 +1,6 @@
@echo off
Set workdir=%~d0%~p0
Set checkpid=%workdir%\Check-Pid.ps1
powershell -NoLogo -NoProfile -NonInteractive -EP Bypass -File %checkpid% %* -SimpleOutput
Binary file not shown.
Binary file not shown.
Binary file not shown.