' Copyright (c) Microsoft Corporation. All rights reserved.
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
'Dism params
CONST DISM_PARAM_GETVLROLEINFO_VL         = " /online /get-featureinfo /featurename:volumeactivation-full-role /NoRestart"
CONST DISM_PARAM_ENABLEROLE_VL             = " /online /enable-feature /featurename:volumeactivation-full-role /NoRestart"
CONST DISM_PARAM_ENABLEROLE_VMW         = " /online /enable-feature /featurename:security-spp-vmw /NoRestart"
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
CONST wshOK                    =0
CONST VALUE_ICON_WARNING            =16
CONST wshYesNoDialog                =4
CONST VALUE_ICON_QUESTIONMARK            =32
CONST VALUE_ICON_INFORMATION            =64
CONST WindowsAppId                          = "55c92734-d682-4d71-983e-d6ec3f16059f"
CONST OfficeKmsSkuid                = "2e28138a-847f-42bc-9752-61b03fff33cd"
CONST VALUE_APPNAME                 = "Microsoft Office 2013 Volume License Pack"
CONST LocResource                = "kms_host.xml"
CONST MSG_SLUIEXE                = "slui.exe 0x2a 0x"
CONST MSG_RESOURCE_NONE                = "File not found: "
CONST MSG_MSXML_ERR                = "An error occured with MSXML6.0"
CONST SUPP_WIN7_ENT                = "Microsoft Windows 7, Volume Editions"
CONST SUPP_WIN2K8_R2                = "Microsoft Windows Server 2008 R2"
CONST SUPP_WIN8_ENT                = "Microsoft Windows 8, Volume Editions"
CONST SUPP_WIN8_R2                = "Microsoft Windows 8 Server"
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Set WshShell = WScript.CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
workingDir = Left(WScript.ScriptFullName, InStrRev(WScript.ScriptFullName, "\"))

getEngine()
Set objWMIService = GetObject("winmgmts:" _
                & "{impersonationLevel=impersonate}!\\" & "." & "\root\cimv2")
Dim globalValue, tmpValue, tmpValue1, isCmdline, isVLRole, windowsDir, isDismWow, objParams, intYesNoPatch, intYesNoRsat, isSppsvcPatched, instld_sppsvc_ver, instld_sppsvc_ver_minor, minLdr_ver_minor, minLdr_sppsvc_ver_minor, minGdr_ver_minor, minGdr_sppsvc_ver_minor

minLdr_ver_minor = "20000"
minLdr_sppsvc_ver_minor = "22105"
minGdr_ver_minor = "16000"
minGdr_sppsvc_ver_minor = "17946"
isCmdline = False
isIE = False
isDismWow = False
isSppsvcPatched = False
    
Select Case WSCript.Arguments.Count
    Case 0
    Case 1
        var1 = WSCript.Arguments(0)
        isCmdline = True
End Select

Call Main(var1)
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Sub Main(strProductKey)
   
On Error Resume Next

verifyFileExists LocResource

folder = "unknown"
For Each objOS in GetObject("winmgmts:").InstancesOf("Win32_OperatingSystem")
    Ver = Split(objOS.Version, ".", -1, 1)    
    'win7/r2
    If (Ver(0) = "6" And Ver(1) = "1") Then
       folder = "win7"
       Exit For
    End If
    
    'win8 or greater
    If (Ver(0) = "6" And Ver(1) >= "2") Or (Ver(0) >= "7") Then
       folder = "win8"
       Exit For
    End If
Next

If folder = "unknown" Then
    getResource "MSG_UNSUPPOS"
    tmpValue = globalValue
    getResource "MSG_SUPPOS"
    WshShell.Popup tmpValue & vbCr & vbCr & globalValue & vbCr & SUPP_WIN7_ENT & vbCr & _
    SUPP_WIN2K8_R2 & vbCr & SUPP_WIN8_ENT & vbCr & SUPP_WIN8_R2,,VALUE_APPNAME, wshOK + VALUE_ICON_WARNING
    pauseExit()
End If

For Each objService in objWMIService.InstancesOf("SoftwareLicensingService")
    Set objSpp = objService
    Exit For
Next

Set productinstances = objWMIService.InstancesOf("SoftwareLicensingProduct")

Select Case folder
    Case "win7", "win8"
        isVL = False
        For Each instance in productinstances
            If (LCase(instance.ApplicationId) = WindowsAppId) Then
                intOccur = InStr(UCase(instance.Description),"VOLUME_KMS")
                If intOccur <> 0 Then
                    intOccurClient = InStr(UCase(instance.Description),"VOLUME_KMSCLIENT")
                    If intOccurClient = 0 Then
                        isVL = True
                        Exit For
                    End If
                End If            
            End If
        Next
                
        If isVL = False Then
            getResource "MSG_WINRET"
            WshShell.Popup globalValue,,VALUE_APPNAME, wshOK + VALUE_ICON_WARNING
            pauseExit()
        End If
    Case Else
End Select
 
errHandle("")

windowsDir = WshShell.ExpandEnvironmentStrings("%windir%")

Set objFolder = fso.GetFolder(workingDir & folder)

If Not fso.FolderExists(objFolder) Then
    getResource "MSG_NODIR"
    WshShell.Popup globalValue,,VALUE_APPNAME, wshOK + VALUE_ICON_WARNING
    pauseExit()
End If

getResource "MSG_INSTALLPACK"
WScript.Echo globalValue
WScript.Echo vbcr
Err.Clear()

Set fileList = objFolder.Files
For Each objFile in fileList
    fileName = objFile.name
    If 0 <> InStr(fileName, "xrm-ms") Then
        InstallKMSLicense objSpp, workingDir & folder & "\" & fileName, folder
    End If
Next
    
WScript.Echo vbCr

If folder = "win7" Then
    If fso.FileExists(windowsDir & "\SysNative\SPPSVC.EXE") Then
        instld_sppsvc_ver = fso.GetFileVersion(windowsDir & "\SysNative\SPPSVC.EXE")
    ElseIf fso.FileExists(windowsDir & "\System32\SPPSVC.EXE") Then
        instld_sppsvc_ver = fso.GetFileVersion(windowsDir & "\System32\SPPSVC.EXE")
    End If
    
    'Check if sppsvc is patched. Note Windows has two type of patching: 
    'GDR: Found on Windows Update where minor version is between: .16000 & .20000
    'LDR: Quick fixes for smaller subset of customers where minor version is greater than: .20000
        
    instld_sppsvc_ver_minor = Right(instld_sppsvc_ver,5)
    
    If instld_sppsvc_ver_minor > minLdr_ver_minor Then
        If instld_sppsvc_ver_minor >= minLdr_sppsvc_ver_minor Then
            'LDR patch installed
            isSppsvcPatched = True
        End If
    ElseIf instld_sppsvc_ver_minor >= minGdr_ver_minor And instld_sppsvc_ver_minor <= minLdr_ver_minor Then
        If instld_sppsvc_ver_minor >= minGdr_sppsvc_ver_minor Then
            'GDR patch installed
            isSppsvcPatched = True
        End If
    End If
        
    If isSppsvcPatched = False Then
        getResource "MSG_ERR_PATCH"
        tmpValue = globalValue
        getResource "MSG_INSTALLNOW"
        intYesNoPatch = WshShell.Popup (tmpValue & vbCr & vbCr & globalValue,,VALUE_APPNAME, wshYesNoDialog + VALUE_ICON_QUESTIONMARK)
        If intYesNoPatch = 6 Then
            invokeUrl "http://officeredir.microsoft.com/r/rlidWin7SPPPatch?clid=" & GetLocale()
            pauseContinue()
        End If
    End If
End If

If folder = "win8" Then
    isVLRoleInstalled()
    pauseExit()
End If

'Win7 - Prompt to install/activate key
If isCmdline = False Then
    getResource "MSG_INSTALLSUCCESS"
    tmpValue = globalValue
    getResource "MSG_ENTERKEYPROMPT"    
    intSuccess = WshShell.Popup (tmpValue & vbCr & vbCr & globalValue,,VALUE_APPNAME, wshYesNoDialog + VALUE_ICON_QUESTIONMARK)
    'User declined key entry
    If intSuccess = 7 Then
        getResource "MSG_SLMGR"
        WshShell.Popup globalValue,,VALUE_APPNAME, wshOK + VALUE_ICON_INFORMATION
        pauseExit()
    End If
            
    getResource "MSG_ENTERKEY"
    strProductKey = inputbox(globalValue, VALUE_APPNAME)
End If
    
If Len(strProductKey) <> 29 Then
    getResource "MSG_UNRECOGKEY"
    tmpValue = globalValue
    getResource "MSG_RERUN"
    WshShell.Popup tmpValue & vbCr & globalValue,,VALUE_APPNAME, wshOK + VALUE_ICON_WARNING
    pauseExit()
End If
    
'Install Key
Err.Clear()
objSpp.InstallProductKey(strProductKey)
errHandle(folder)
    
Set winproductinstances = objWMIService.InstancesOf("SoftwareLicensingProduct")
isOffLic = False
    
'Activate Key
For Each instance in winproductinstances
    instance.refresh_
    If (LCase(instance.ID) = OfficeKmsSkuid) Then
        If instance.ProductKeyID <> "" Or instance.ProductKeyID <> null Then
            isOffLic = True
            instance.Activate
            errHandle(folder)
            getResource "MSG_KEYSUCCESS"
            tmpValue = globalValue
            getResource "MSG_SLMGR"
            If isCmdline = False Then
                WshShell.Popup tmpValue & vbCr & vbCr & globalValue,,VALUE_APPNAME, wshOK + VALUE_ICON_INFORMATION
                pauseExit()
            Else
                WScript.Echo tmpValue & " " & globalValue
                WScript.Quit
            End If
        End If
    End If
Next

If isOffLic = False Then
    getResource "MSG_NOOFFICELIC"
    tmpValue = globalValue
    getResource "MSG_RERUN"
    WshShell.Popup tmpValue & " " & strProductKey & vbCr & vbCr & globalValue,,VALUE_APPNAME, wshOK + VALUE_ICON_WARNING
End If

pauseExit()        
    
End Sub
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Function getEngine()

strEngine = LCase(Right(WScript.FullName,12))
If strEngine <> "\cscript.exe" Then
    getResource "MSG_CSCRIPT_NONE"
    WshShell.Popup globalValue & " cscript " & WSCript.ScriptName,,VALUE_APPNAME, wshOK + VALUE_ICON_WARNING
    WScript.Quit
End If

End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Function CheckSPP(wmiObject)
    Dim colListOfServicesRefresh, objService, installed, running

    installed = False
    running = False
    Set colListOfServicesRefresh = wmiObject.ExecQuery("Select * from Win32_Service ")

    For Each objService in colListOfServicesRefresh
        If objService.Name = "sppsvc" Then
            installed = True
            If LCASE(objService.State) = "running" Then
                running = True
            End If
            Exit For
        End If
    Next

    If installed <> True Then
        getResource "MSG_KMS_ERR_NOINSTALL"
        WshShell.Popup globalValue,,VALUE_APPNAME, wshOK + VALUE_ICON_WARNING
        pauseExit()
    Else
        If running <> True Then
            getResource "MSG_KMS_ERR_NORUN"
            WshShell.Popup globalValue & " " & objService.State,,VALUE_APPNAME, wshOK + VALUE_ICON_WARNING
            pauseExit()
        End If
    End If
    
End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Function pauseExit()

If intYesNoPatch <> 6 Then
    If intYesNoRsat <> 6 Then
        getResource "MSG_EXIT"
        WScript.Echo globalValue
        Do While Not WScript.StdIn.AtEndOfLine
            Input = WScript.StdIn.Read(1)
        Loop
    End If
End If
    
WScript.Quit

End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Function getResource(resource)

On Error Resume Next
Err.Clear
Set xmlDoc = CreateObject("Msxml2.DOMDocument.6.0")
'If an error occurs instantiating the ActiveX control we can't load the string resource. 
'In this unlikely event display non localized err and exit.
If Err.Number <> 0 Then
    WshShell.Popup MSG_MSXML_ERR,,VALUE_APPNAME, wshOK + VALUE_ICON_WARNING
    WScript.Quit
End If

xmlDoc.load(workingDir & "kms_host.xml")  
Set ElemList = xmlDoc.getElementsByTagName(resource) 
resValue = ElemList.item(0).text
globalValue = resValue 

End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Function verifyFileExists(file)

If Not fso.FileExists(workingDir & file) Then
    WshShell.Popup MSG_RESOURCE_NONE & vbCr & workingDir & file,,VALUE_APPNAME, wshOK + VALUE_ICON_WARNING
    WScript.Quit
End If

End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Function errHandle(OS)

strErrCode = Hex(Err.Number)

Select Case Err.Number
    Case 0
        'Success
    Case Else
        If Hex(Err.Number) = "C004F050" Then
            getResource "MSG_ERRCODE"
            tmpValue = globalValue
            getResource "MSG_SL_E_INVALID_PRODUCT_KEY"
            tmpValue1 = globalValue
            getResource "MSG_RERUN"
            WshShell.Popup tmpValue & " 0x" & strErrCode & vbCr & tmpValue1 & vbCr & globalValue,,VALUE_APPNAME, wshOK + VALUE_ICON_WARNING
            pauseExit()
        End If
        
        Select Case OS
            Case "win7", "win8"
                getResource "MSG_ERRCODE"
                tmpValue = globalValue
                getResource "MSG_SLUI"
                WshShell.Popup tmpValue & " 0x" & strErrCode & vbCr & globalValue & vbCr & MSG_SLUIEXE & strErrCode,,VALUE_APPNAME, wshOK + VALUE_ICON_WARNING
            Case Else
                getResource "MSG_ERRCODE"
                WshShell.Popup globalValue & " 0x" & strErrCode,,VALUE_APPNAME, wshOK + VALUE_ICON_WARNING
        End Select
        pauseExit()
End Select

Err.Clear

strErrCode = Empty

End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Function InstallKMSLicense(objSPP, licFile, OS)

    getResource "MSG_INSTALLLIC"
    WScript.Echo globalValue & " " & licFile

    LicenseData = ReadAllTextFile(licFile)
    errHandle(OS)

    objSpp.InstallLicense(LicenseData)
    errHandle(OS)
    
End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
' Returns the encoding for a givven file.
' Possible return values: ascii, unicode, unicodeFFFE (big-endian), utf-8
Function GetFileEncoding(strFileName)
    Dim strData
    Dim strEncoding

    Set oStream = CreateObject("ADODB.Stream")

    oStream.Type = 1 'adTypeBinary
    oStream.Open
    oStream.LoadFromFile(strFileName)

    ' Default encoding is ascii
    strEncoding =  "ascii"

    strData = BinaryToString(oStream.Read(2))

    ' Check for little endian (x86) unicode preamble
    If (Len(strData) = 2) and strData = (Chr(255) + Chr(254)) Then
        strEncoding = "unicode"
    Else
        oStream.Position = 0
        strData = BinaryToString(oStream.Read(3))

        ' Check for utf-8 preamble
        If (Len(strData) >= 3) and strData = (Chr(239) + Chr(187) + Chr(191)) Then
            strEncoding = "utf-8"
        End If
    End If

    oStream.Close

    GetFileEncoding = strEncoding
    
End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
' Converts binary data (VT_UI1 | VT_ARRAY) to a string (BSTR)
Function BinaryToString(dataBinary)  
    Dim i
    Dim str

    For i = 1 To LenB(dataBinary)
        str = str & Chr(AscB(MidB(dataBinary, i, 1)))
    Next

    BinaryToString = str
    
End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
' Returns string containing the whole text file data. 
' Supports ascii, unicode (little-endian) and utf-8 encoding.
Function ReadAllTextFile(strFileName)
    Dim strData
    Set oStream = CreateObject("ADODB.Stream")

    oStream.Type = 2 'adTypeText
    oStream.Open
    oStream.Charset = GetFileEncoding(strFileName)
    oStream.LoadFromFile(strFileName)

    strData = oStream.ReadText(-1) 'adReadAll

    oStream.Close

    ReadAllTextFile = strData
    
End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Function isVLRoleInstalled()

If fso.FileExists(windowsdir & "\SysNative\Dism.exe") Then
    isDismWow = True
    objParams = windowsdir & "\SysNative\Dism.exe" & DISM_PARAM_GETVLROLEINFO_VL 
ElseIf fso.FileExists(windowsdir & "\System32\Dism.exe") Then
    objParams = "Dism" & DISM_PARAM_GETVLROLEINFO_VL
Else
    errVLRole()
End If
    
Set objScriptExec = WshShell.Exec (objParams)
    readOut = objScriptExec.StdOut.ReadAll
        
'Wait for process/exit if it takes to long
iTimer = 0
Do While objScriptExec.Status = 0
    iTimer = iTimer + 1
    WScript.Sleep 100
    If iTimer = 50 Then
        Exit Do
    End If
Loop
        
'Check the ExitCode & parse the output
If objScriptExec.ExitCode = 0 Or objScriptExec.ExitCode = -2146498548 Or objScriptExec.ExitCode = 3010 Then
    'if string contains return code role not installed
    pos = InStr(LCase(readOut),"800f080c")
    If pos = 0 Then
        'VL Role Installed so enable role/invoke wizard
        objScriptExec.Terminate
        enableVLRole()
    Else
        'If VMW.exe is already on the system (user has already downloaded RSAT case) invoke  then Exit.
        inVokeVMWnonServer()
        'Verify IE is available
        isIExplore()
        If isIE = True Then
            'Prompt user to download VL pack
            getResource "MSG_PACKSUCCESS"
            tmpValue = globalValue
            getResource "MSG_RSAT"
            tmpValue1 = globalValue
            getResource "MSG_GOONLINE"
            intYesNoRsat = WshShell.Popup (tmpValue & " " & tmpValue1 & vbCr & vbCr & globalValue,,VALUE_APPNAME, wshYesNoDialog + VALUE_ICON_QUESTIONMARK)
            'User clicked Yes
            If intYesNoRsat = 6 Then
                'invoke redirect
                invokeUrl "http://officeredir.microsoft.com/r/rlidVLLicensePackRSATDownload?clid=" & GetLocale()
                'Wait for user hit Enter to continue after downloading RSAT
                pauseContinue()
                'VMW should now be installed so invoke then Exit.
                inVokeVMWnonServer()
            Else
                errVLRole()
            End If
            pauseExit()
        Else
            errVLRole()
        End If
    End If
Else
    objScriptExec.Terminate
    errVLRole()
End If
    
End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Function inVokeVMW()

If fso.FileExists(windowsdir & "\SysNative\Vmw.exe") Then
    objParams = windowsdir & "\SysNative\Vmw.exe"
ElseIf fso.FileExists(windowsdir & "\System32\Vmw.exe") Then
    objParams = windowsdir & "\System32\Vmw.exe"
Else
    errVLRole()
End If
            
Set objScriptExec = WshShell.Exec (objParams)
    readOut = objScriptExec.StdOut.ReadAll
    
'Wait for process/exit if it takes to long
iTimer = 0
Do While objScriptExec.Status = 0
    iTimer = iTimer + 1
    WScript.Sleep 100
    If iTimer = 50 Then
        Exit Do
    End If
Loop
    
'Verify no err was returned
If objScriptExec.ExitCode = 0 Then
    objScriptExec.Terminate
Else
    objScriptExec.Terminate
    errVLRole()
End If

pauseExit()

End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Function enableVLRole()

If isDismWow = True Then
    objParams = windowsdir & "\SysNative\Dism.exe" & DISM_PARAM_ENABLEROLE_VL
Else
    objParams = "Dism" & DISM_PARAM_ENABLEROLE_VL
End If

Set objScriptExec = WshShell.Exec (objParams)
    readOut = objScriptExec.StdOut.ReadAll
    
'Wait for process/exit if it takes to long
iTimer = 0
Do While objScriptExec.Status = 0
    iTimer = iTimer + 1
    WScript.Sleep 100
    If iTimer = 50 Then
        Exit Do
    End If
Loop

'Verify no err was returned
If objScriptExec.ExitCode = 0 Or objScriptExec.ExitCode = 3010 Then
    WScript.Echo readOut
    objScriptExec.Terminate
    enableVmw()
Else
    objScriptExec.Terminate
    errVLRole()
End If
    
End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Function errVLRole()

getResource "MSG_PACKSUCCESS"
tmpValue = globalValue
getResource "MSG_SLMGRVL"
WshShell.Popup tmpValue & vbCr & globalValue,,VALUE_APPNAME, wshOK + VALUE_ICON_INFORMATION
pauseExit()

End Function    
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Function invokeUrl(strPath)

Set objExplorer = CreateObject("InternetExplorer.Application")
    With objExplorer
        .Visible = 1
        .Navigate strPath
    End With
        
End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Function isIExplore()

progFiles = WshShell.ExpandEnvironmentStrings("%ProgramFiles%")

If fso.FileExists(progFiles & "\Internet Explorer\iexplore.exe") Then
    isIE = True
Else
    progFilesX86 = WshShell.ExpandEnvironmentStrings("%ProgramFiles(x86)%")
    If fso.FileExists(progFilesX86 & "\Internet Explorer\iexplore.exe") Then
        isIE = True
    End If
End If    
        
End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Function enableVmw()

If isDismWow = True Then
    objParams = windowsdir & "\SysNative\Dism.exe" & DISM_PARAM_ENABLEROLE_VMW
Else
    objParams = "Dism" & DISM_PARAM_ENABLEROLE_VMW 
End If

Set objScriptExec = WshShell.Exec (objParams)
    readOut = objScriptExec.StdOut.ReadAll
    
'Wait for process/exit if it takes to long
iTimer = 0
Do While objScriptExec.Status = 0
    iTimer = iTimer + 1
    WScript.Sleep 100
    If iTimer = 50 Then
        Exit Do
    End If
Loop

'Verify no err was returned
If objScriptExec.ExitCode = 0 Or objScriptExec.ExitCode = 3010 Then
    WScript.Echo readOut
    objScriptExec.Terminate
    inVokeVMW()
Else
    objScriptExec.Terminate
    errVLRole()
End If
    
End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Function pauseContinue()

getResource "MSG_CONTINUE"
WScript.Echo globalValue

Do While Not WScript.StdIn.AtEndOfLine
    Input = WScript.StdIn.Read(1)
Loop
    
End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
Function inVokeVMWnonServer()

foundVmwNonServer = False

If fso.FileExists(windowsdir & "\SysNative\Vmw.exe") Then
    objParams = windowsdir & "\SysNative\Vmw.exe"
    foundVmwNonServer = True
ElseIf fso.FileExists(windowsdir & "\System32\Vmw.exe") Then
    objParams = windowsdir & "\System32\Vmw.exe"
    foundVmwNonServer = True
End If

If foundVmwNonServer = True Then             
    Set objScriptExec = WshShell.Exec (objParams)
        readOut = objScriptExec.StdOut.ReadAll
        
    'Wait for process/exit if it takes to long
    iTimer = 0
    Do While objScriptExec.Status = 0
        iTimer = iTimer + 1
        WScript.Sleep 100
        If iTimer = 50 Then
            Exit Do
        End If
    Loop
        
    'Verify no err was returned
    If objScriptExec.ExitCode = 0 Then
        objScriptExec.Terminate
        pauseExit()
    Else
        objScriptExec.Terminate
    End If
End If

End Function
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
'' SIG '' Begin signature block
'' SIG '' MIIhkgYJKoZIhvcNAQcCoIIhgzCCIX8CAQExDzANBglg
'' SIG '' hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor
'' SIG '' BgEEAYI3AgEeMCQCAQEEEE7wKRaZJ7VNj+Ws4Q8X66sC
'' SIG '' AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg
'' SIG '' gLgyvJSELg+uWpkXQSQpYcNVinLzYLMA/NUb4Y2/Bvag
'' SIG '' ggswMIIEuDCCA6CgAwIBAgITMwAAABYRBLSIOIy+wwAA
'' SIG '' AAAAFjANBgkqhkiG9w0BAQsFADB+MQswCQYDVQQGEwJV
'' SIG '' UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH
'' SIG '' UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
'' SIG '' cmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBT
'' SIG '' aWduaW5nIFBDQSAyMDEwMB4XDTEyMDgzMDE3NDkwM1oX
'' SIG '' DTEzMTEzMDE3NDkwM1owgYMxCzAJBgNVBAYTAlVTMRMw
'' SIG '' EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt
'' SIG '' b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRp
'' SIG '' b24xDTALBgNVBAsTBE1PUFIxHjAcBgNVBAMTFU1pY3Jv
'' SIG '' c29mdCBDb3Jwb3JhdGlvbjCCASIwDQYJKoZIhvcNAQEB
'' SIG '' BQADggEPADCCAQoCggEBAKBQnx1OlLoHCty+lknhPaAG
'' SIG '' 75W++b1WKluc7x4RLsbW4S2yb8wzLZ4epLGCFspkMamK
'' SIG '' JoH04y7yHg4cyOFZ4dQjPWV3/+rlt7ONCPYS129JV6SF
'' SIG '' 4wQe0EKop7LbMAoV0ck1bX+8hl6lPraQZAUkHD6gcWgK
'' SIG '' Mfd+1JXpLZvKZQV6FAIMCfaz3XFdJh9aCy8JumcybJwV
'' SIG '' 2Jw8iehHOu+mFN9CPiEeuzHiLNFU9uqAkiuTNHdtkmcm
'' SIG '' NsEqMdt4E0mrk5XcbKoMAHHAzc3dY+2RV5evjCqExd4N
'' SIG '' dWWM4NEfQTu7tZLSaTl1mABMbEw9GEMDzmY7nF1OUXiR
'' SIG '' Qjt+0FrgX0MCAwEAAaOCAScwggEjMB8GA1UdJQQYMBYG
'' SIG '' CCsGAQUFBwMDBgorBgEEAYI3PQYBMB0GA1UdDgQWBBRr
'' SIG '' 2fF2+KN4NKT3Rp4n8bC5bM82pjAfBgNVHSMEGDAWgBTm
'' SIG '' /F97uyIAWORyTrX0IXQjMubvrDBWBgNVHR8ETzBNMEug
'' SIG '' SaBHhkVodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtp
'' SIG '' L2NybC9wcm9kdWN0cy9NaWNDb2RTaWdQQ0FfMjAxMC0w
'' SIG '' Ny0wNi5jcmwwWgYIKwYBBQUHAQEETjBMMEoGCCsGAQUF
'' SIG '' BzAChj5odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtp
'' SIG '' L2NlcnRzL01pY0NvZFNpZ1BDQV8yMDEwLTA3LTA2LmNy
'' SIG '' dDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4IB
'' SIG '' AQBSQvO9uPl8uzKyi9ukLZAQqUK3SJ69+UtczCFgpL2A
'' SIG '' l2MuKon2m9a8IpIBc56D+/KLa70wWuztMD7uyOF/qDcp
'' SIG '' 90wfrd4j1yptJQrRMD5D8aq1RTirbkTj0KEDM9daNOUh
'' SIG '' MSuOKC547WVyB4e1/rwWxKwvZMuizcnqB2p1YuvM5map
'' SIG '' PMEyOcXRwGxr+gU8K22z+0f9urwcgF0ShtQr2tIsKDJ9
'' SIG '' VwWEJ4Ef8EFlUgHwaq95DbjtwGOnRNb5ngJVRQ54Xlzb
'' SIG '' AHrpZSRzEni2UPk2JkiUBO3YQNXhPUM3H5hFnSzjNtpz
'' SIG '' MFSXah4gXBP5DtiMMLbrPnWEpetjkgotSUu2MIIGcDCC
'' SIG '' BFigAwIBAgIKYQxSTAAAAAAAAzANBgkqhkiG9w0BAQsF
'' SIG '' ADCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp
'' SIG '' bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoT
'' SIG '' FU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMp
'' SIG '' TWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9y
'' SIG '' aXR5IDIwMTAwHhcNMTAwNzA2MjA0MDE3WhcNMjUwNzA2
'' SIG '' MjA1MDE3WjB+MQswCQYDVQQGEwJVUzETMBEGA1UECBMK
'' SIG '' V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG
'' SIG '' A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSgwJgYD
'' SIG '' VQQDEx9NaWNyb3NvZnQgQ29kZSBTaWduaW5nIFBDQSAy
'' SIG '' MDEwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
'' SIG '' AQEA6Q5kUHlntcTj/QkATJ6UrPdWaOpE2M/FWE+ppXZ8
'' SIG '' bUW60zmStKQe+fllguQX0o/9RJwI6GWTzixVhL99COMu
'' SIG '' K6hBKxi3oktuSUxrFQfe0dLCiR5xlM21f0u0rwjYzIjW
'' SIG '' axeUOpPOJj/s5v40mFfVHV1J9rIqLtWFu1k/+JC0K4N0
'' SIG '' yiuzO0bj8EZJwRdmVMkcvR3EVWJXcvhnuSUgNN5dpqWV
'' SIG '' XqsogM3Vsp7lA7Vj07IUyMHIiiYKWX8H7P8O7YASNUwS
'' SIG '' pr5SW/Wm2uCLC0h31oVH1RC5xuiq7otqLQVcYMa0Kluc
'' SIG '' IxxfReMaFB5vN8sZM4BqiU2jamZjeJPVMM+VHwIDAQAB
'' SIG '' o4IB4zCCAd8wEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0O
'' SIG '' BBYEFOb8X3u7IgBY5HJOtfQhdCMy5u+sMBkGCSsGAQQB
'' SIG '' gjcUAgQMHgoAUwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAP
'' SIG '' BgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNX2VsuP
'' SIG '' 6KJcYmjRPZSQW9fOmhjEMFYGA1UdHwRPME0wS6BJoEeG
'' SIG '' RWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3Js
'' SIG '' L3Byb2R1Y3RzL01pY1Jvb0NlckF1dF8yMDEwLTA2LTIz
'' SIG '' LmNybDBaBggrBgEFBQcBAQROMEwwSgYIKwYBBQUHMAKG
'' SIG '' Pmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2Vy
'' SIG '' dHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3J0MIGd
'' SIG '' BgNVHSAEgZUwgZIwgY8GCSsGAQQBgjcuAzCBgTA9Bggr
'' SIG '' BgEFBQcCARYxaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
'' SIG '' L1BLSS9kb2NzL0NQUy9kZWZhdWx0Lmh0bTBABggrBgEF
'' SIG '' BQcCAjA0HjIgHQBMAGUAZwBhAGwAXwBQAG8AbABpAGMA
'' SIG '' eQBfAFMAdABhAHQAZQBtAGUAbgB0AC4gHTANBgkqhkiG
'' SIG '' 9w0BAQsFAAOCAgEAGnTvV08pe8QWhXi4UNMi/AmdrIKX
'' SIG '' +DT/KiyXlRLl5L/Pv5PI4zSp24G43B4AvtI1b6/lf3mV
'' SIG '' d+UC1PHr2M1OHhthosJaIxrwjKhiUUVnCOM/PB6T+DCF
'' SIG '' F8g5QKbXDrMhKeWloWmMIpPMdJjnoUdD8lOswA8waX/+
'' SIG '' 0iUgbW9h098H1dlyACxphnY9UdumOUjJN2FtB91TGcun
'' SIG '' 1mHCv+KDqw/ga5uV1n0oUbCJSlGkmmzItx9KGg5pqdfc
'' SIG '' wX7RSXCqtq27ckdjF/qm1qKmhuyoEESbY7ayaYkGx0aG
'' SIG '' ehg/6MUdIdV7+QIjLcVBy78dTMgW77Gcf/wiS0mKbhXj
'' SIG '' pn92W9FTeZGFndXS2z1zNfM8rlSyUkdqwKoTldKOEdqZ
'' SIG '' Z14yjPs3hdHcdYWch8ZaV4XCv90Nj4ybLeu07s8n07Ve
'' SIG '' afqkFgQBpyRnc89NT7beBVaXevfpUk30dwVPhcbYC/GO
'' SIG '' 7UIJ0Q124yNWeCImNr7KsYxuqh3khdpHM2KPpMmRM19x
'' SIG '' HkCvmGXJIuhCISWKHC1g2TeJQYkqFg/XYTyUaGBS79ZH
'' SIG '' maCAQO4VgXc+nOBTGBpQHTiVmx5mMxMnORd4hzbOTsNf
'' SIG '' svU9R1O24OXbC2E9KteSLM43Wj5AQjGkHxAIwlacvyRd
'' SIG '' UQKdannSF9PawZSOB3slcUSrBmrm1MbfI5qWdcUxghW6
'' SIG '' MIIVtgIBATCBlTB+MQswCQYDVQQGEwJVUzETMBEGA1UE
'' SIG '' CBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEe
'' SIG '' MBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSgw
'' SIG '' JgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBTaWduaW5nIFBD
'' SIG '' QSAyMDEwAhMzAAAAFhEEtIg4jL7DAAAAAAAWMA0GCWCG
'' SIG '' SAFlAwQCAQUAoIHAMBkGCSqGSIb3DQEJAzEMBgorBgEE
'' SIG '' AYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3
'' SIG '' AgEVMC8GCSqGSIb3DQEJBDEiBCCo4oI/Ze0YDLeu79Hf
'' SIG '' cLq8GL8tkg09IkV2J7Femrsh5TBUBgorBgEEAYI3AgEM
'' SIG '' MUYwRKAigCAATQBpAGMAcgBvAHMAbwBmAHQAIABPAGYA
'' SIG '' ZgBpAGMAZaEegBxodHRwOi8vb2ZmaWNlLm1pY3Jvc29m
'' SIG '' dC5jb20gMA0GCSqGSIb3DQEBAQUABIIBAEsgQf834Z8z
'' SIG '' m8cNxckY1VHzyiVPsjQytr6Jakp2fl1rGxlNV7Thc1q4
'' SIG '' IQ60ZLgnlNdMcJgu9aNK8IV92G535CyEK+ls73auIMud
'' SIG '' xEc/774YGd49SiXCPf0XhncuvXYIY49sipO7McYrYHad
'' SIG '' 0rPVuBDU+QenRc3WfBpBlrwRDeHRDGFa7RvdFxgo+BLq
'' SIG '' qgTMvSygGnmOTUUwJEE/AsotXkD1Che0dIe5s5wnLSqD
'' SIG '' FHm2O8AYQYkzYmoLpEQgsxfyXMu+IoyMBSvyPWnT4tVH
'' SIG '' 9Zb4Qd871GI2SRrs6cNzYBQqrv1yVR4dSEgyZRJB4bVo
'' SIG '' 9VHV9MCex0K8LuP6WnnhgYKhghMyMIITLgYKKwYBBAGC
'' SIG '' NwMDATGCEx4wghMaBgkqhkiG9w0BBwKgghMLMIITBwIB
'' SIG '' AzEPMA0GCWCGSAFlAwQCAQUAMIIBPQYLKoZIhvcNAQkQ
'' SIG '' AQSgggEsBIIBKDCCASQCAQEGCisGAQQBhFkKAwEwMTAN
'' SIG '' BglghkgBZQMEAgEFAAQgTwfg37fjiR3g1Rm/TaraEaA1
'' SIG '' r4ZFrngvul4IH79gTU8CBlEBPwoUARgTMjAxMzAyMjEw
'' SIG '' OTEzMTEuMTU2WjAHAgEBgAIB9KCBuaSBtjCBszELMAkG
'' SIG '' A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAO
'' SIG '' BgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29m
'' SIG '' dCBDb3Jwb3JhdGlvbjENMAsGA1UECxMETU9QUjEnMCUG
'' SIG '' A1UECxMebkNpcGhlciBEU0UgRVNOOkJCRUMtMzBDQS0y
'' SIG '' REJFMSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFt
'' SIG '' cCBTZXJ2aWNloIIOxzCCBnEwggRZoAMCAQICCmEJgSoA
'' SIG '' AAAAAAIwDQYJKoZIhvcNAQELBQAwgYgxCzAJBgNVBAYT
'' SIG '' AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH
'' SIG '' EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
'' SIG '' cG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBSb290
'' SIG '' IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDEwMB4XDTEw
'' SIG '' MDcwMTIxMzY1NVoXDTI1MDcwMTIxNDY1NVowfDELMAkG
'' SIG '' A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAO
'' SIG '' BgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29m
'' SIG '' dCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0
'' SIG '' IFRpbWUtU3RhbXAgUENBIDIwMTAwggEiMA0GCSqGSIb3
'' SIG '' DQEBAQUAA4IBDwAwggEKAoIBAQCpHQ28dxGKOiDs/BOX
'' SIG '' 9fp/aZRrdFQQ1aUKAIKF++18aEssX8XD5WHCdrc+Zitb
'' SIG '' 8BVTJwQxH0EbGpUdzgkTjnxhMFmxMEQP8WCIhFRDDNdN
'' SIG '' uDgIs0Ldk6zWczBXJoKjRQ3Q6vVHgc2/JGAyWGBG8lhH
'' SIG '' hjKEHnRhZ5FfgVSxz5NMksHEpl3RYRNuKMYa+YaAu99h
'' SIG '' /EbBJx0kZxJyGiGKr0tkiVBisV39dx898Fd1rL2KQk1A
'' SIG '' UdEPnAY+Z3/1ZsADlkR+79BL/W7lmsqxqPJ6Kgox8NpO
'' SIG '' BpG2iAg16HgcsOmZzTznL0S6p/TcZL2kAcEgCZN4zfy8
'' SIG '' wMlEXV4WnAEFTyJNAgMBAAGjggHmMIIB4jAQBgkrBgEE
'' SIG '' AYI3FQEEAwIBADAdBgNVHQ4EFgQU1WM6XIoxkPNDe3xG
'' SIG '' G8UzaFqFbVUwGQYJKwYBBAGCNxQCBAweCgBTAHUAYgBD
'' SIG '' AEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8w
'' SIG '' HwYDVR0jBBgwFoAU1fZWy4/oolxiaNE9lJBb186aGMQw
'' SIG '' VgYDVR0fBE8wTTBLoEmgR4ZFaHR0cDovL2NybC5taWNy
'' SIG '' b3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvTWljUm9v
'' SIG '' Q2VyQXV0XzIwMTAtMDYtMjMuY3JsMFoGCCsGAQUFBwEB
'' SIG '' BE4wTDBKBggrBgEFBQcwAoY+aHR0cDovL3d3dy5taWNy
'' SIG '' b3NvZnQuY29tL3BraS9jZXJ0cy9NaWNSb29DZXJBdXRf
'' SIG '' MjAxMC0wNi0yMy5jcnQwgaAGA1UdIAEB/wSBlTCBkjCB
'' SIG '' jwYJKwYBBAGCNy4DMIGBMD0GCCsGAQUFBwIBFjFodHRw
'' SIG '' Oi8vd3d3Lm1pY3Jvc29mdC5jb20vUEtJL2RvY3MvQ1BT
'' SIG '' L2RlZmF1bHQuaHRtMEAGCCsGAQUFBwICMDQeMiAdAEwA
'' SIG '' ZQBnAGEAbABfAFAAbwBsAGkAYwB5AF8AUwB0AGEAdABl
'' SIG '' AG0AZQBuAHQALiAdMA0GCSqGSIb3DQEBCwUAA4ICAQAH
'' SIG '' 5ohRDeLG4Jg/gXEDPZ2joSFvs+umzPUxvs8F4qn++ldt
'' SIG '' GTCzwsVmyWrf9efweL3HqJ4l4/m87WtUVwgrUYJEEvu5
'' SIG '' U4zM9GASinbMQEBBm9xcF/9c+V4XNZgkVkt070IQyK+/
'' SIG '' f8Z/8jd9Wj8c8pl5SpFSAK84Dxf1L3mBZdmptWvkx872
'' SIG '' ynoAb0swRCQiPM/tA6WWj1kpvLb9BOFwnzJKJ/1Vry/+
'' SIG '' tuWOM7tiX5rbV0Dp8c6ZZpCM/2pif93FSguRJuI57BlK
'' SIG '' cWOdeyFtw5yjojz6f32WapB4pm3S4Zz5Hfw42JT0xqUK
'' SIG '' loakvZ4argRCg7i1gJsiOCC1JeVk7Pf0v35jWSUPei45
'' SIG '' V3aicaoGig+JFrphpxHLmtgOR5qAxdDNp9DvfYPw4Ttx
'' SIG '' Cd9ddJgiCGHasFAeb73x4QDf5zEHpJM692VHeOj4qEir
'' SIG '' 995yfmFrb3epgcunCaw5u+zGy9iCtHLNHfS4hQEegPsb
'' SIG '' iSpUObJb2sgNVZl6h3M7COaYLeqN4DMuEin1wC9UJyH3
'' SIG '' yKxO2ii4sanblrKnQqLJzxlBTeCG+SqaoxFmMNO7dDJL
'' SIG '' 32N79ZmKLxvHIa9Zta7cRDyXUHHXodLFVeNp3lfB0d4w
'' SIG '' wP3M5k37Db9dT+mdHhk4L7zPWAUu7w2gUDXa7wknHNWz
'' SIG '' fjUeCLraNtvTX4/edIhJEjCCBNEwggO5oAMCAQICCmEH
'' SIG '' 6j4AAAAAABAwDQYJKoZIhvcNAQELBQAwfDELMAkGA1UE
'' SIG '' BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV
'' SIG '' BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBD
'' SIG '' b3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRp
'' SIG '' bWUtU3RhbXAgUENBIDIwMTAwHhcNMTIwMTA5MjEzNTM3
'' SIG '' WhcNMTMwNDA5MjE0NTM3WjCBszELMAkGA1UEBhMCVVMx
'' SIG '' EzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl
'' SIG '' ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh
'' SIG '' dGlvbjENMAsGA1UECxMETU9QUjEnMCUGA1UECxMebkNp
'' SIG '' cGhlciBEU0UgRVNOOkJCRUMtMzBDQS0yREJFMSUwIwYD
'' SIG '' VQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNl
'' SIG '' MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
'' SIG '' rLKRs8Ez2L8FlySOHC3g7HEsvCifzy1JVeHvu/zjwUeM
'' SIG '' jKHpXrLzNxtMlcXvcRU+GocXarhoJaGzJQ405JHlqhit
'' SIG '' YI9UXw74r+pQ3XJlOyEFABlNPE6HPY7JSRcrTQKXH6XP
'' SIG '' ndfvdKYzWrzNRcna9lrEd8/G7IZ6sBvr2JMYJ1sA2LxR
'' SIG '' MOMZO7ZNPW8ZEwH6q2qIXHyrAUPszTV3MocYl9I/q7UL
'' SIG '' 8VUrElE4mNlXcFHXcpdanPIZMuqCK7r2shLy1YlcL8zr
'' SIG '' XktoX8q0CIDMKoge+nFmJoVgoIBBn6tBTj5JxH/YlWjR
'' SIG '' Baa8lRbWQENtJ6Xn2kiPB1Dy/m/hsJn0sQIDAQABo4IB
'' SIG '' GzCCARcwHQYDVR0OBBYEFBw+TiQkOFKmsJaLPYP6QBzU
'' SIG '' l3mAMB8GA1UdIwQYMBaAFNVjOlyKMZDzQ3t8RhvFM2ha
'' SIG '' hW1VMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwu
'' SIG '' bWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01p
'' SIG '' Y1RpbVN0YVBDQV8yMDEwLTA3LTAxLmNybDBaBggrBgEF
'' SIG '' BQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cu
'' SIG '' bWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljVGltU3Rh
'' SIG '' UENBXzIwMTAtMDctMDEuY3J0MAwGA1UdEwEB/wQCMAAw
'' SIG '' EwYDVR0lBAwwCgYIKwYBBQUHAwgwDQYJKoZIhvcNAQEL
'' SIG '' BQADggEBAIx4LOwvQWC+3K/ovFms3igerIdnL2iSbmko
'' SIG '' KdUklRC3S2LU6FmnTwPzyY2nDeZk2AW8VEqGr62SXhWm
'' SIG '' 6KJ0C6iU+gDItDYfCZsT19FQQd5TuoFwnDzqbtdFMnl2
'' SIG '' ykE4xVLpWvqXYkTms2oFJJ1Py6IH44wUtQkfWbIqacDB
'' SIG '' QGAL4zDsSLA7i6cYJbka/mGQbsv7lxb+Dav3Vxql4hhP
'' SIG '' /rC6arhdr/J+EAEmhUcgX8bSTPTirnJs2GVgS2mKZhUM
'' SIG '' EpMhztXnrToJ8VSvwmh6R9SlWXW0wQNjc0SO+clpfJ3/
'' SIG '' MXhdKqAQBi7Kg0cLYw1Et9wPLKYMEGUUAdOuqnzPMQCh
'' SIG '' ggN5MIICYQIBATCB46GBuaSBtjCBszELMAkGA1UEBhMC
'' SIG '' VVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
'' SIG '' B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw
'' SIG '' b3JhdGlvbjENMAsGA1UECxMETU9QUjEnMCUGA1UECxMe
'' SIG '' bkNpcGhlciBEU0UgRVNOOkJCRUMtMzBDQS0yREJFMSUw
'' SIG '' IwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2
'' SIG '' aWNloiUKAQEwCQYFKw4DAhoFAAMVAMkjHgxVD5VtMurd
'' SIG '' bnMaFzgx80X/oIHCMIG/pIG8MIG5MQswCQYDVQQGEwJV
'' SIG '' UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH
'' SIG '' UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
'' SIG '' cmF0aW9uMQ0wCwYDVQQLEwRNT1BSMScwJQYDVQQLEx5u
'' SIG '' Q2lwaGVyIE5UUyBFU046QjAyNy1DNkY4LTFEODgxKzAp
'' SIG '' BgNVBAMTIk1pY3Jvc29mdCBUaW1lIFNvdXJjZSBNYXN0
'' SIG '' ZXIgQ2xvY2swDQYJKoZIhvcNAQEFBQACBQDUz+g+MCIY
'' SIG '' DzIwMTMwMjIxMDAyNjM4WhgPMjAxMzAyMjIwMDI2Mzha
'' SIG '' MHcwPQYKKwYBBAGEWQoEATEvMC0wCgIFANTP6D4CAQAw
'' SIG '' CgIBAAICGXUCAf8wBwIBAAICFykwCgIFANTROb4CAQAw
'' SIG '' NgYKKwYBBAGEWQoEAjEoMCYwDAYKKwYBBAGEWQoDAaAK
'' SIG '' MAgCAQACAxbjYKEKMAgCAQACAwehIDANBgkqhkiG9w0B
'' SIG '' AQUFAAOCAQEAm6OKvZn2DjFVy6j8UGoFfl1KHXctYZgZ
'' SIG '' Rt0k+Dan3Ma/Kb9Wt6X1tYMNH93yXUg3Z3HYt8r+vFmL
'' SIG '' MUfGVM3ONYLdebX7eth+IWGmvMp53wjzOQNDUhDvQIkb
'' SIG '' bQ7unnFKH5qaaQIJwO7Y0ijAH3VB5QP6vFfk6rE/urX/
'' SIG '' OewzePmlurQB84vy6eqoNDhymo3pCAv+JyuK4S+9/73i
'' SIG '' rhNt1nuYeJzLUHiWyonWRB7VoKrulcq/mZFrsBKI6992
'' SIG '' r6aZuCWqICM/MMYskoxM4J1gN9bNrd8+5oG/jcWRRCoq
'' SIG '' iRZo4oku+MzSDu8eAflwZFM1B0sqFE/GWjLa+jmKnwwa
'' SIG '' ljGCAuMwggLfAgEBMIGKMHwxCzAJBgNVBAYTAlVTMRMw
'' SIG '' EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt
'' SIG '' b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRp
'' SIG '' b24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1w
'' SIG '' IFBDQSAyMDEwAgphB+o+AAAAAAAQMA0GCWCGSAFlAwQC
'' SIG '' AQUAoIIBKTAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQ
'' SIG '' AQQwLwYJKoZIhvcNAQkEMSIEIBVGb4JbIuW9jqqBNK0b
'' SIG '' 7NWfvN/xUmSSP7+2CJPvczW9MIHZBgsqhkiG9w0BCRAC
'' SIG '' DDGByTCBxjCBwzCBqAQUySMeDFUPlW0y6t1ucxoXODHz
'' SIG '' Rf8wgY8wgYCkfjB8MQswCQYDVQQGEwJVUzETMBEGA1UE
'' SIG '' CBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEe
'' SIG '' MBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYw
'' SIG '' JAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0Eg
'' SIG '' MjAxMAIKYQfqPgAAAAAAEDAWBBRAwzU3Td/+oeLgDdRU
'' SIG '' wpuBmvb5rjANBgkqhkiG9w0BAQsFAASCAQBrh21RYBGf
'' SIG '' GPpUVBtxfRDAOQbv/YpRCcioJoTqTBdbgvmgM/HxHNo+
'' SIG '' hx/2MVMzELFnx01V0+Wo4m4DzkVV0BdaXGDPYVs5RvMu
'' SIG '' sTivZO2zTfFTEk0cvLvytn6HgnFeveSc339Y2XIYS8ey
'' SIG '' Pg/NMXkhHrxE947H111ubIv7woLxednX/5cuzOhF5hWX
'' SIG '' Tx4A4Tm9GVa1K7FG9YWr1bS4Vvm5J3p79I4/V3GTJ/MG
'' SIG '' ThOnQbG2JQd0B8KBYAgO8XQJjrHj/MUVhO711Ltp1hdR
'' SIG '' HmR5ZYPBTx/fkT9/7lS888/l8wtORR9ZHDm5gFY8I5kd
'' SIG '' 9mfEzEz6RS/DRXsEzL1HL/yW
'' SIG '' End signature block
