#
.SYNOPSIS
Enables the Secure Boot Update scheduled task.
.DESCRIPTION
This script ensures the Windows Secure Boot Update scheduled task
(\Microsoft\Windows\PI\Secure-Boot-Update) is enabled. If disabled,
it enables it. If the task was deleted, it can recreate it.
.PARAMETER Action
The action to perform. Valid values: check, enable, create
- check: Only check the task status
- enable: (default) Enable the task if disabled. If task is missing, prompts to create.
- create: Create the task if it doesn't exist
.PARAMETER ComputerName
Optional. Array of computer names to check/enable the task on.
If not specified, runs on the local machine.
.PARAMETER Credential
Optional. Credentials for remote computer access.
.PARAMETER Quiet
Suppresses prompts and automatically answers Yes. Useful for automation.
.EXAMPLE
.\Enable-SecureBootTask.ps1
# Enables the task status on local machine
.EXAMPLE
.\Check-SecureBootScheduledTask.ps1 enable
# Enables the task if disabled. Prompts to create if missing.
.EXAMPLE
.\Check-SecureBootScheduledTask.ps1 create
# Creates the task if it was deleted, then checks its status
.EXAMPLE
.\Check-SecureBootScheduledTask.ps1 check -ComputerName "PC1", "PC2"
# Checks the task on remote machines
.NOTES
Requires administrator privileges to enable or create the task.
Task Path: \Microsoft\Windows\PI\Secure-Boot-Update
Task runs taskhostw.exe every 12 hours with elevated privileges.
#>
[CmdletBinding(SupportsShouldProcess)]
param(
[Parameter(Position=0)]
[ValidateSet('check', 'enable', 'create', '')]
[string]$Action = 'enable',
[Parameter()]
[string[]]$ComputerName,
[Parameter()]
[PSCredential]$Credential,
[Parameter()]
[Alias('Force', 'Silent')]
[switch]$Quiet
)
# Convert Action to switches for backward compatibility
$Enable = $Action -eq 'enable'
$Create = $Action -eq 'create'
# Download URL: https://aka.ms/getsecureboot -> "Deployment and Monitoring Samples"
# Note: This script runs on endpoints to enable the Secure Boot Update task.
$TaskPath = "\Microsoft\Windows\PI\"
$TaskName = "Secure-Boot-Update"
function Get-SecureBootTaskStatus {
[CmdletBinding()]
param(
[string]$Computer = $env:COMPUTERNAME
)
$result = [PSCustomObject]@{
ComputerName = $Computer
TaskExists = $false
TaskState = $null
IsEnabled = $false
LastRunTime = $null
NextRunTime = $null
Error = $null
}
try {
if ($Computer -eq $env:COMPUTERNAME -or $Computer -eq "localhost" -or $Computer -eq ".") {
# Use schtasks.exe for more reliable task detection
$schtasksOutput = schtasks.exe /Query /TN "$TaskPath$TaskName" /FO CSV 2>&1
if ($LASTEXITCODE -ne 0) {
# Task not found is not an error - just means task doesn't exist
$result.TaskExists = $false
return $result
}
# Parse CSV output
$taskData = $schtasksOutput | ConvertFrom-Csv
if ($taskData) {
$result.TaskExists = $true
$result.TaskState = $taskData.Status
$result.IsEnabled = ($taskData.Status -eq 'Ready' -or $taskData.Status -eq 'Running')
# Try to get next run time from the data
if ($taskData.'Next Run Time' -and $taskData.'Next Run Time' -ne 'N/A') {
try {
$result.NextRunTime = [DateTime]::Parse($taskData.'Next Run Time')
} catch { }
}
}
}
else {
# Remote computer - use Invoke-Command with schtasks
$remoteResult = Invoke-Command -ComputerName $Computer -ScriptBlock {
param($fullTaskName)
$output = schtasks.exe /Query /TN $fullTaskName /FO CSV 2>&1
@{
ExitCode = $LASTEXITCODE
Output = $output
}
} -ArgumentList "$TaskPath$TaskName" -ErrorAction Stop
if ($remoteResult.ExitCode -ne 0) {
# Task not found is not an error - just means task doesn't exist
$result.TaskExists = $false
return $result
}
$taskData = $remoteResult.Output | ConvertFrom-Csv
if ($taskData) {
$result.TaskExists = $true
$result.TaskState = $taskData.Status
$result.IsEnabled = ($taskData.Status -eq 'Ready' -or $taskData.Status -eq 'Running')
}
}
}
catch {
$result.Error = $_.Exception.Message
}
return $result
}
function New-SecureBootTask {
[CmdletBinding(SupportsShouldProcess)]
param(
[string]$Computer = $env:COMPUTERNAME
)
$success = $false
$errorMsg = $null
# Task definition - matches the original Windows Secure Boot Update task
# Uses ComHandler with SBServicing class, runs as LocalSystem
$taskXml = @"
2012-02-07T16:39:20
O:BAG:BAD:P(A;;FA;;;BA)(A;;FA;;;SY)(A;;FRFX;;;LS)
`$(@%SystemRoot%\system32\TpmTasks.dll,-601)
`$(@%SystemRoot%\system32\TpmTasks.dll,-600)
`$(@%SystemRoot%\system32\TpmTasks.dll,-604)
\Microsoft\Windows\PI\Secure-Boot-Update
S-1-5-18
false
false
PT1H
IgnoreNew
true
true
false
true
PT5M
PT12H
{5014B7C8-934E-4262-9816-887FA745A6C4}
"@
try {
if ($Computer -eq $env:COMPUTERNAME -or $Computer -eq "localhost" -or $Computer -eq ".") {
if ($PSCmdlet.ShouldProcess("$TaskPath$TaskName", "Create scheduled task")) {
# Save XML to temp file and import
$tempFile = [System.IO.Path]::GetTempFileName()
$taskXml | Out-File -FilePath $tempFile -Encoding Unicode -Force
$output = schtasks.exe /Create /TN "$TaskPath$TaskName" /XML $tempFile /F 2>&1
Remove-Item $tempFile -Force -ErrorAction SilentlyContinue
if ($LASTEXITCODE -eq 0) {
$success = $true
} else {
$errorMsg = $output -join " "
}
}
}
else {
if ($PSCmdlet.ShouldProcess("$Computer\$TaskPath$TaskName", "Create scheduled task")) {
$result = Invoke-Command -ComputerName $Computer -ScriptBlock {
param($taskPath, $taskName, $xml)
$tempFile = [System.IO.Path]::GetTempFileName()
$xml | Out-File -FilePath $tempFile -Encoding Unicode -Force
$output = schtasks.exe /Create /TN "$taskPath$taskName" /XML $tempFile /F 2>&1
Remove-Item $tempFile -Force -ErrorAction SilentlyContinue
@{ ExitCode = $LASTEXITCODE; Output = $output }
} -ArgumentList $TaskPath, $TaskName, $taskXml -ErrorAction Stop
if ($result.ExitCode -eq 0) {
$success = $true
} else {
$errorMsg = $result.Output -join " "
}
}
}
}
catch {
$errorMsg = $_.Exception.Message
}
return @{
Success = $success
Error = $errorMsg
}
}
function Enable-SecureBootTask {
[CmdletBinding(SupportsShouldProcess)]
param(
[string]$Computer = $env:COMPUTERNAME
)
$success = $false
$errorMsg = $null
try {
if ($Computer -eq $env:COMPUTERNAME -or $Computer -eq "localhost" -or $Computer -eq ".") {
if ($PSCmdlet.ShouldProcess("$TaskPath$TaskName", "Enable scheduled task")) {
$output = schtasks.exe /Change /TN "$TaskPath$TaskName" /ENABLE 2>&1
if ($LASTEXITCODE -eq 0) {
$success = $true
} else {
$errorMsg = $output -join " "
}
}
}
else {
if ($PSCmdlet.ShouldProcess("$Computer\$TaskPath$TaskName", "Enable scheduled task")) {
$result = Invoke-Command -ComputerName $Computer -ScriptBlock {
param($fullTaskName)
$output = schtasks.exe /Change /TN $fullTaskName /ENABLE 2>&1
@{ ExitCode = $LASTEXITCODE; Output = $output }
} -ArgumentList "$TaskPath$TaskName" -ErrorAction Stop
if ($result.ExitCode -eq 0) {
$success = $true
} else {
$errorMsg = $result.Output -join " "
}
}
}
}
catch {
$errorMsg = $_.Exception.Message
}
return @{
Success = $success
Error = $errorMsg
}
}
# Main execution
Write-Host ""
Write-Host "========================================" -ForegroundColor Cyan
Write-Host " Secure Boot Update Task Enabler" -ForegroundColor Cyan
Write-Host "========================================" -ForegroundColor Cyan
Write-Host ""
Write-Host "Task: $TaskPath$TaskName" -ForegroundColor Gray
Write-Host ""
# Determine target computers
$targets = if ($ComputerName) { $ComputerName } else { @($env:COMPUTERNAME) }
$results = @()
foreach ($computer in $targets) {
Write-Host "Checking: $computer" -ForegroundColor Yellow
$status = Get-SecureBootTaskStatus -Computer $computer
if ($status.Error) {
Write-Host " Error: $($status.Error)" -ForegroundColor Red
}
elseif (-not $status.TaskExists) {
Write-Host " Task does not exist on this system" -ForegroundColor Red
# Create if requested, or prompt if Enable was specified
$shouldCreate = $Create
if (-not $shouldCreate -and $Enable) {
Write-Host ""
Write-Host " The task may have been deleted." -ForegroundColor Yellow
if ($Quiet) {
Write-Host " Auto-creating task (Quiet mode)" -ForegroundColor Cyan
$shouldCreate = $true
} else {
$confirm = Read-Host " Do you want to recreate the task? (Y/N)"
if ($confirm -eq 'Y' -or $confirm -eq 'y') {
$shouldCreate = $true
}
}
}
if ($shouldCreate) {
Write-Host " Creating task..." -ForegroundColor Yellow
$createResult = New-SecureBootTask -Computer $computer
if ($createResult.Success) {
Write-Host " Task created successfully" -ForegroundColor Green
# Re-check status
$status = Get-SecureBootTaskStatus -Computer $computer
if ($status.TaskExists) {
$stateColor = if ($status.IsEnabled) { "Green" } else { "Red" }
Write-Host " State: $($status.TaskState)" -ForegroundColor $stateColor
}
}
else {
Write-Host " Failed to create: $($createResult.Error)" -ForegroundColor Red
}
}
}
else {
$stateColor = if ($status.IsEnabled) { "Green" } else { "Red" }
Write-Host " State: $($status.TaskState)" -ForegroundColor $stateColor
if ($status.LastRunTime -and $status.LastRunTime -ne [DateTime]::MinValue) {
Write-Host " Last Run: $($status.LastRunTime)" -ForegroundColor Gray
}
if ($status.NextRunTime -and $status.NextRunTime -ne [DateTime]::MinValue) {
Write-Host " Next Run: $($status.NextRunTime)" -ForegroundColor Gray
}
# Enable if requested and currently disabled
if ($Enable -and -not $status.IsEnabled) {
Write-Host " Enabling task..." -ForegroundColor Yellow
$enableResult = Enable-SecureBootTask -Computer $computer
if ($enableResult.Success) {
Write-Host " Task enabled successfully" -ForegroundColor Green
# Re-check status
$status = Get-SecureBootTaskStatus -Computer $computer
}
else {
Write-Host " Failed to enable: $($enableResult.Error)" -ForegroundColor Red
}
}
elseif ($Enable -and $status.IsEnabled) {
Write-Host " Task is already enabled" -ForegroundColor Green
}
}
$results += $status
Write-Host ""
}
# Summary
Write-Host "========================================" -ForegroundColor Cyan
Write-Host " Summary" -ForegroundColor Cyan
Write-Host "========================================" -ForegroundColor Cyan
$enabled = ($results | Where-Object { $_.IsEnabled }).Count
$disabled = ($results | Where-Object { $_.TaskExists -and -not $_.IsEnabled }).Count
$notFound = ($results | Where-Object { -not $_.TaskExists }).Count
$errors = ($results | Where-Object { $_.Error }).Count
Write-Host "Total Checked: $($results.Count)"
Write-Host "Enabled: $enabled" -ForegroundColor Green
if ($disabled -gt 0) { Write-Host "Disabled: $disabled" -ForegroundColor Red }
if ($notFound -gt 0) { Write-Host "Not Found: $notFound" -ForegroundColor Yellow }
if ($errors -gt 0) { Write-Host "Errors: $errors" -ForegroundColor Red }
# Return results for pipeline
$results
# SIG # Begin signature block
# MIIpuAYJKoZIhvcNAQcCoIIpqTCCKaUCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDW2L0Cr34oYUhi
# YeOd6UyDWY4txYaleGp9z3B7llvZcqCCDdYwgga9MIIEpaADAgECAhMzAAAAHEif
# gd+hsLd3AAAAAAAcMA0GCSqGSIb3DQEBDAUAMIGIMQswCQYDVQQGEwJVUzETMBEG
# A1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWlj
# cm9zb2Z0IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUm9vdCBDZXJ0
# aWZpY2F0ZSBBdXRob3JpdHkgMjAxMDAeFw0yNDA4MDgyMTM2MjNaFw0zNTA2MjMy
# MjA0MDFaMF8xCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y
# YXRpb24xMDAuBgNVBAMTJ01pY3Jvc29mdCBXaW5kb3dzIENvZGUgU2lnbmluZyBQ
# Q0EgMjAyNDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJp9a30nwXYq
# Lq7j1TT/zCtt7vxU+CCj+7BkifS/B2gXKGU7OV9SXRJGP1yFs5p6jpsYi4cYzF56
# AV0AEmmEjV8wT2lvPU5BhN3wV30HqYPIYEj5P3WXf0kXD9fvjUf1GAtXEriJ8w7A
# LNaVEm9Rs4ePA0ZsYHaCbU5kBUJQDXv76hafOcQgdFCA3I3zYtfzX2vOwx87uDOa
# CuyKORZih9c3zTf+TLC5QYLyhVMBnDXEHDOrvaw92DSyIqpdgRWpufzqDFy1egVj
# koXZhb+9pZ9heUzNXTXhOoXzexh6YzAL4flBWm+Bc1hQyESenEvBJznV+25u3h77
# jjgMUY44+WXQ4u9qddDe/U5SeAaKRvvibmi4z7QRpLvZsla0CPiOUGz00Do5sfkC
# 0EwlsSzfM3+8A9rsyFVOgWDVPzt98OJP2EoaEOq8GE9GCoN2i7/4C2FCwff1BSCT
# JWZO1Wcr2MteJE6UxGV+ihA8nN51YPKD2dYGoewrXvRzC/1HoUeSvlZf0mf9GHEt
# vvkbJVRRo6PBf0md5t87Vb1mM/fIp1eypyaxmXkgpcBwuylsOq2kSVOJ5wBPoaEs
# sJkeMcKnEuuu++UKdDHlS0DtsYjN0QnOucvTdSsdvhzKOSjJF3XVqr9f2C945LXT
# 5rxKIHUIEDBcNYU6BKDDH6rfpKOOCSilAgMBAAGjggFGMIIBQjAOBgNVHQ8BAf8E
# BAMCAYYwEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFB6C3w7XjLPXAjSDDtqr
# rWW5r7jsMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMA8GA1UdEwEB/wQFMAMB
# Af8wHwYDVR0jBBgwFoAU1fZWy4/oolxiaNE9lJBb186aGMQwVgYDVR0fBE8wTTBL
# oEmgR4ZFaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMv
# TWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3JsMFoGCCsGAQUFBwEBBE4wTDBKBggr
# BgEFBQcwAoY+aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNS
# b29DZXJBdXRfMjAxMC0wNi0yMy5jcnQwDQYJKoZIhvcNAQEMBQADggIBAENf+N8/
# u+mUjDtc9btoA52RBc0XVDSBMQBMqxu56hXHBwuctUWs1XBqDDMIFCHu9c6Y/UF+
# TN8EIgjnujApKYmHP4f4EM3ARSmlzrpF5ozOJx0BA5FUv1jmpdf/2ZbqpvCxlxv/
# G1R4KjrSmmqPHzs6igw3b7RTbj7BxIS8fOIkwYWQhB2fLjlg+3HSrDGPFIhpIJWV
# amMIR7a72OGonjdf45rspwqIHuynZU4avy9ruB/Rhhbwm+fMb8BMecIaTmkohx/E
# ZZ5GNWcN6oTYW3G2BM3B3YznWkl9t4shP60fMue+2ksdHGWSE8EVTdSmGUdj0jrU
# c46lGVFJISF3/MxcxnlNeP1Khyr+ZzT4Ets/I7mufpaLnLalzMR2zIuhGOAWWswe
# sbjtFzkVUFgDR2SW903I0XKlbPEA6q8epHGJ9roxh85nsEKcBNUw4Scp68KCqSpF
# BaKiyV1skd+l8U50WNePMb9Bzz0OfASal8v5sQG+DW01kN+I+RKUIbM5I50wJjiH
# ymQFNDsbobFx9I95mCEEPU7fUZ3VT/HOUVbkmX7ltIC/eQAu5GO8fu+ceETMybvb
# oxUM4dYNC+PzooUxfmC0DuKRwB21bX9+acuIBkxIm4Ed3O19w1VLoA7UNOUuJ7z6
# NQ2W/+q7cnfOPl2QVL4qlgCblUT2vmQpllV3MIIHETCCBPmgAwIBAgITMwAAASPV
# jwJDBgPuLgAAAAABIzANBgkqhkiG9w0BAQwFADBfMQswCQYDVQQGEwJVUzEeMBwG
# A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTAwLgYDVQQDEydNaWNyb3NvZnQg
# V2luZG93cyBDb2RlIFNpZ25pbmcgUENBIDIwMjQwHhcNMjYwMzA1MTk1ODI2WhcN
# MjcwMzAzMTk1ODI2WjB0MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv
# bjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0
# aW9uMR4wHAYDVQQDExVNaWNyb3NvZnQgQ29ycG9yYXRpb24wggIiMA0GCSqGSIb3
# DQEBAQUAA4ICDwAwggIKAoICAQDRofDhyqNp9ilU2DM6Ctcq1F931sSAyfMEmR3c
# E/fpq4C15SQYoNRfyQ1YXmcjtfWjaAB4Dsqr+po0Q6IXSERF31/leCtiRtPrS8/1
# T9FA9AeOUTaFYyqHRz1M4MVeTwu89ZHo9xR26SVQmOHbFWLinZzlBV9WUJxfz0TN
# MdWwAXzxnY9nln8Fn3Y0BnCXU8V3wjeCCAxoqM0v2gPG25eNn665gv7Zt3zh3vQY
# hDkb48hXJPi4DvCrpBVwCd0Iv2Sgt4qftn5STyqhdu5WWqva+pk+Sa71Db9OAy6b
# L640bGmzlUek1LAP97Ey8exl0c9azmLEQB97q4JRvhCSeejBM96a8Y6ccrrfhg/h
# ZJEOka1eIDJxCuKdZaWCec0v+V7oI3RStJu1BEcF9d4FQaDSaWDAbDxqXUm1fHUJ
# 9Xqky1yftpTfKFw3/gqsyXV44PE7EVHwwTCAGE5Z+skXRt4HEHuIhcOGxIFbH3nA
# l5KvFxopRs2zExvh2WheW8Pu79sr3baamlQA2v4k9FqJl4k1RfwO5e0/9CKyDZ6c
# ck/lV8zHM7PJtNtQUHc1FoyZ78GSlX6UFiJxDWzUzPbIHMcV4PSBV8/O7bs5h/bx
# r3B4PxjIpWUztZhzXBhU9vhUjQgOX5ZLV7bmSJ+IrxtaN+5w2Nsewt9N+mfUUFyK
# Av38uQIDAQABo4IBrzCCAaswDgYDVR0PAQH/BAQDAgeAMB8GA1UdJQQYMBYGCisG
# AQQBgjc9BgEGCCsGAQUFBwMDMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFNlj7H2k
# ZtpiMmz55wigojWkWZZSMEUGA1UdEQQ+MDykOjA4MR4wHAYDVQQLExVNaWNyb3Nv
# ZnQgQ29ycG9yYXRpb24xFjAUBgNVBAUTDTIzMDg2NSs1MDY5NTYwHwYDVR0jBBgw
# FoAUHoLfDteMs9cCNIMO2qutZbmvuOwwagYDVR0fBGMwYTBfoF2gW4ZZaHR0cDov
# L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwV2luZG93
# cyUyMENvZGUlMjBTaWduaW5nJTIwUENBJTIwMjAyNC5jcmwwdwYIKwYBBQUHAQEE
# azBpMGcGCCsGAQUFBzAChltodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3Bz
# L2NlcnRzL01pY3Jvc29mdCUyMFdpbmRvd3MlMjBDb2RlJTIwU2lnbmluZyUyMFBD
# QSUyMDIwMjQuY3J0MA0GCSqGSIb3DQEBDAUAA4ICAQAu6aVarz1Rb5/9eAD9oHOw
# QS4jDknbBYnDwLcgMy/h995knuPL6/5K0XSUICUrjU3/bL56UD1tVwXsRehrHMkR
# kgOMQk+7eH+Xvp6cyyTxwgIM7xy5YSf3VmJD3GI87lkGUqPFFOqGWjzZc3e/UQU7
# VbN4Elh4zJeKOdokXNuE3a5U1lAr1hnD6WpfIHO2nzGUHVSXDLMktWKMO89pMgLh
# 6BXHdx1cAth+ugl86sdXC+VxCQJ28a2JvNq5RQcEBEuqSISe3/YRWYRTSLqhn8ea
# v4lK4n+3fnAy2bmz76Z7UJ92X5KgTaHD+r8cvXmssFH3UbOj6EtE+c4SPNaFdIUW
# GJyZBhLbThhlh1QlbTg0X47GhI89qZ/lxuYeEDYbPGaDry/KpMoUQxU+l49iQ6zd
# kWSPGczB4ZDVRSrkDqz2K70tIvFaz8YfMhzTy5hhMNGvonCcguaFTgUsxr+OrvGC
# WadOV/pZ3BcRafKvBDX+ney3HFcUByI3VPzIU7saoUbcujqTVA6GeNSybo8AI+71
# 9omBObyf2lriZb9a2/oVe5SiKhH/BDQVn+14Q26UxrUA/8zVOlzJS5eJQYhkHM9h
# /Y2Nnmr2xLtFN0vW/aad7i104dVRaTLMBzbKIlCBOruBjM87frQc2Ncfb5Kme4u9
# o6GQVZf3kVy+p8uv8YgnQTGCGzgwghs0AgEBMHYwXzELMAkGA1UEBhMCVVMxHjAc
# BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEwMC4GA1UEAxMnTWljcm9zb2Z0
# IFdpbmRvd3MgQ29kZSBTaWduaW5nIFBDQSAyMDI0AhMzAAABI9WPAkMGA+4uAAAA
# AAEjMA0GCWCGSAFlAwQCAQUAoIH6MBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEE
# MC8GCSqGSIb3DQEJBDEiBCCCZIC1CJgnXdiJTcEQNSI49cf3+WHc7jqWcE7Zb3hi
# CTBQBgorBgEEAYI3CgMcMUIMQEQ0MzRDQjVBNDE1M0ZCODA2NDhFNTI1MjE4MjZD
# NzE2OUM5NTUwOEREODAyRTVBMDg3MDIwNTdCOUZDNzZBQjcwWgYKKwYBBAGCNwIB
# DDFMMEqgJIAiAE0AaQBjAHIAbwBzAG8AZgB0ACAAVwBpAG4AZABvAHcAc6EigCBo
# dHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vd2luZG93czANBgkqhkiG9w0BAQEFAASC
# AgBwFciU/U40j9vHfxDXZ/kSXkwpJOMc6rtYUxE+BCcRzUrWx2ZM26ya0/SSIpFW
# 0JO4zaVHmU8Jzw+fKEs10oPdX2vj8EaHEbObt/4H6w2uVamFfuATINflELK4aGUQ
# sDK//z3cJajdkB3lD2L+yKF8AQl6hZU6OhtHbMWiem3X/Zy39AjUbHPSwSF+QtfV
# XP3UFbpHfAN0/e6Y7VAOwC8EkF2IF3LpiaIvqNJE46Ha0IF6SdP3oiShI2NfeZ8L
# B9YDKqcMGRJ7+Q5gjGSt514qqSZQbVWQoFzrQ0g78F34OiB2iOPiPVsW6fzCDbry
# MMdBz9NGL6/ktjESRqR8wyAF+6ET+TsRXRz83aR9cFT2M3N8GThGJ/cQ23NSgT8N
# NOywrDv2L9vpCtHUH40ciNXUdGOKHDhvtPnnZ3/XGAKJOXZRWoZahLcELymkiDZc
# Z7tcb9gtIzGbrXv/kPf4rqjd/fmpJ2N76p4t0B0GW29BPpjiZbme9szS3TH/BuwR
# JPotbAWizlMWOIGjPxbGZkaSeH0fE0oGBH2AboxFC+rYlws2/QXuMY3/M+1Y//CL
# Xf9Yf5XfmYsMnuZrTvdp0pxrga2dr6N7TizvTbelte0t/Z/NtiwNBhwFNrY3yR8v
# FJdzJ6RQxkguXpKqaSOSWIHPmqgWc0JawPdiOWG0xp7bFaGCF5YwgheSBgorBgEE
# AYI3AwMBMYIXgjCCF34GCSqGSIb3DQEHAqCCF28wghdrAgEDMQ8wDQYJYIZIAWUD
# BAIBBQAwggFSBgsqhkiG9w0BCRABBKCCAUEEggE9MIIBOQIBAQYKKwYBBAGEWQoD
# ATAxMA0GCWCGSAFlAwQCAQUABCDCHAUbTAGvmxBQSClrBHZRfSrYfIW9r3VBGCsx
# 70uYsgIGaftEftJVGBMyMDI2MDUwNjE1NDA0OS40MzJaMASAAgH0oIHRpIHOMIHL
# MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk
# bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSUwIwYDVQQLExxN
# aWNyb3NvZnQgQW1lcmljYSBPcGVyYXRpb25zMScwJQYDVQQLEx5uU2hpZWxkIFRT
# UyBFU046QTQwMC0wNUUwLUQ5NDcxJTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0
# YW1wIFNlcnZpY2WgghHsMIIHIDCCBQigAwIBAgITMwAAAijwpYfX88geQAABAAAC
# KDANBgkqhkiG9w0BAQsFADB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGlu
# Z3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
# cmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDAe
# Fw0yNjAyMTkxOTQwMDZaFw0yNzA1MTcxOTQwMDZaMIHLMQswCQYDVQQGEwJVUzET
# MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMV
# TWljcm9zb2Z0IENvcnBvcmF0aW9uMSUwIwYDVQQLExxNaWNyb3NvZnQgQW1lcmlj
# YSBPcGVyYXRpb25zMScwJQYDVQQLEx5uU2hpZWxkIFRTUyBFU046QTQwMC0wNUUw
# LUQ5NDcxJTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2UwggIi
# MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCujvbk/sqcCSReZaJfCuf1NwRc
# c7XknhE6wkLofkNj1mxEAg35qy2xcFjgjartVvA09W8QHcpyMqVSXOTxNHJsmk0q
# P2CDLvUAulWg7aS5oBORpEX1oz3n0R2nPqeH0IHK1zJxjxaHW21AbuZ0Z+wM3WYN
# zkBlcHmVe03ZG7rlk28h72r5P5ME8FGpFmYW5Hl7psKbgLEfrYAitpttsb+sZsBU
# I+hMKl4uLJYotKyZv1ewOIinBfRU8QosivjofaBezUf9NdV+iGrWh321WnSsK3A/
# Jl6GLtbSWXcJWULgbxuqnobPK+YlB3174TMWTgX4YWjG7o0Otz/pjHNCKBbB788d
# ynhLdGY6B08E9+4SGrRpsty4iJHOydHCA5M4i5yYRwsdut+gmvxIpT8yNXJcjJCg
# 0vO8mv/nFY9Wytv2qmCtCFFivGUWqU20/sUeRooQZGiQOJQn095Cj3isIsvRP8KU
# 7hN/EDI8HVsb/NPzMFLvRznrRnj0TOnDiOTUcnYwmk+XfoS1owskcCCCwHnbC00D
# 58z83y7K5ZJB745hcn4CE2nR3e6RGsr42y5qtt6Mdz/s7MTnDS2UmVHWX1X/HZe3
# UlX8gj/t63L50xIPqkRCBEdM1ADNUaSfo9OQiKb/bj1diZCGTfEDUBBLop1mhkwI
# F82faplV2busZ+U4kQIDAQABo4IBSTCCAUUwHQYDVR0OBBYEFKrJpYz48tzouvVk
# BVthASFpQ93DMB8GA1UdIwQYMBaAFJ+nFV0AXmJdg/Tl0mWnG1M1GelyMF8GA1Ud
# HwRYMFYwVKBSoFCGTmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
# L01pY3Jvc29mdCUyMFRpbWUtU3RhbXAlMjBQQ0ElMjAyMDEwKDEpLmNybDBsBggr
# BgEFBQcBAQRgMF4wXAYIKwYBBQUHMAKGUGh0dHA6Ly93d3cubWljcm9zb2Z0LmNv
# bS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVGltZS1TdGFtcCUyMFBDQSUyMDIw
# MTAoMSkuY3J0MAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgw
# DgYDVR0PAQH/BAQDAgeAMA0GCSqGSIb3DQEBCwUAA4ICAQCQ6NfLmrRahgVtgWg3
# 83GaS07fHyod6bhcUONt2tet+6BaNuH0r7ABkVHheOpxBdrUrOEYVEaIii9dK3cu
# ZLNmp1iUAx/VbmOZYl7xz+tNrjCWqrg1jQmq0oRB8iE4QJpwNhGP67oY5huYIU0D
# 4lhDoahqfgKJn/0Bk+9UKDPw5XlUYmreFmJlj9YQzcPPep8MxBXxh/Y5I7vQeRaW
# 5SjtiLQOLRk3ggvraDs5Sf49MJV6/BwxXC2rvUfEFX6SUDooqKIE9NgVIRq0RZu7
# Ot0i0Is+HvPP0hB6KwOxMg1SWKOfTtFpWpdo8MJvgKCHkPpXEzgprP+pyIHuO7gV
# RlSTsbYBFLh2yId/itM4uYL0R+2SSBBTpSSRthrGuEmElI5BCHMxzMg/oqHSPwZA
# IAkM2C4xxi0St7qMuA+m+ZzFYkfoF41QoSJn+HjqhqWYQ0m/SO9/KnJRJJUwMd5T
# iMnjZ+E/DJiUry5udiWyQpvfj2hQFI0djhahoAXDazeEciLF2uEnTur9UfjcwOun
# /oMY+ULftnOi2jKLMrreV097akzz/JxpnDgYJU/tgU7fQflg7IqiL9+0276+joQH
# o21mVeY5YD8Kh/kUaY6Jm/OTM88G7evTz/qnRumxovTjMStvpbAHNRhmSTdIPTV3
# 2CyuxDKS/V5a5iwA+f9ViBo+wjCCB3EwggVZoAMCAQICEzMAAAAVxedrngKbSZkA
# AAAAABUwDQYJKoZIhvcNAQELBQAwgYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpX
# YXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg
# Q29ycG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBSb290IENlcnRpZmljYXRl
# IEF1dGhvcml0eSAyMDEwMB4XDTIxMDkzMDE4MjIyNVoXDTMwMDkzMDE4MzIyNVow
# fDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl
# ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMd
# TWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwggIiMA0GCSqGSIb3DQEBAQUA
# A4ICDwAwggIKAoICAQDk4aZM57RyIQt5osvXJHm9DtWC0/3unAcH0qlsTnXIyjVX
# 9gF/bErg4r25PhdgM/9cT8dm95VTcVrifkpa/rg2Z4VGIwy1jRPPdzLAEBjoYH1q
# UoNEt6aORmsHFPPFdvWGUNzBRMhxXFExN6AKOG6N7dcP2CZTfDlhAnrEqv1yaa8d
# q6z2Nr41JmTamDu6GnszrYBbfowQHJ1S/rboYiXcag/PXfT+jlPP1uyFVk3v3byN
# pOORj7I5LFGc6XBpDco2LXCOMcg1KL3jtIckw+DJj361VI/c+gVVmG1oO5pGve2k
# rnopN6zL64NF50ZuyjLVwIYwXE8s4mKyzbnijYjklqwBSru+cakXW2dg3viSkR4d
# Pf0gz3N9QZpGdc3EXzTdEonW/aUgfX782Z5F37ZyL9t9X4C626p+Nuw2TPYrbqgS
# Uei/BQOj0XOmTTd0lBw0gg/wEPK3Rxjtp+iZfD9M269ewvPV2HM9Q07BMzlMjgK8
# QmguEOqEUUbi0b1qGFphAXPKZ6Je1yh2AuIzGHLXpyDwwvoSCtdjbwzJNmSLW6Cm
# gyFdXzB0kZSU2LlQ+QuJYfM2BjUYhEfb3BvR/bLUHMVr9lxSUV0S2yW6r1AFemzF
# ER1y7435UsSFF5PAPBXbGjfHCBUYP3irRbb1Hode2o+eFnJpxq57t7c+auIurQID
# AQABo4IB3TCCAdkwEgYJKwYBBAGCNxUBBAUCAwEAATAjBgkrBgEEAYI3FQIEFgQU
# KqdS/mTEmr6CkTxGNSnPEP8vBO4wHQYDVR0OBBYEFJ+nFV0AXmJdg/Tl0mWnG1M1
# GelyMFwGA1UdIARVMFMwUQYMKwYBBAGCN0yDfQEBMEEwPwYIKwYBBQUHAgEWM2h0
# dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvRG9jcy9SZXBvc2l0b3J5Lmh0
# bTATBgNVHSUEDDAKBggrBgEFBQcDCDAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMA
# QTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBTV9lbL
# j+iiXGJo0T2UkFvXzpoYxDBWBgNVHR8ETzBNMEugSaBHhkVodHRwOi8vY3JsLm1p
# Y3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNSb29DZXJBdXRfMjAxMC0w
# Ni0yMy5jcmwwWgYIKwYBBQUHAQEETjBMMEoGCCsGAQUFBzAChj5odHRwOi8vd3d3
# Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Jvb0NlckF1dF8yMDEwLTA2LTIz
# LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAnVV9/Cqt4SwfZwExJFvhnnJL/Klv6lwU
# tj5OR2R4sQaTlz0xM7U518JxNj/aZGx80HU5bbsPMeTCj/ts0aGUGCLu6WZnOlNN
# 3Zi6th542DYunKmCVgADsAW+iehp4LoJ7nvfam++Kctu2D9IdQHZGN5tggz1bSNU
# 5HhTdSRXud2f8449xvNo32X2pFaq95W2KFUn0CS9QKC/GbYSEhFdPSfgQJY4rPf5
# KYnDvBewVIVCs/wMnosZiefwC2qBwoEZQhlSdYo2wh3DYXMuLGt7bj8sCXgU6ZGy
# qVvfSaN0DLzskYDSPeZKPmY7T7uG+jIa2Zb0j/aRAfbOxnT99kxybxCrdTDFNLB6
# 2FD+CljdQDzHVG2dY3RILLFORy3BFARxv2T5JL5zbcqOCb2zAVdJVGTZc9d/HltE
# AY5aGZFrDZ+kKNxnGSgkujhLmm77IVRrakURR6nxt67I6IleT53S0Ex2tVdUCbFp
# AUR+fKFhbHP+CrvsQWY9af3LwUFJfn6Tvsv4O+S3Fb+0zj6lMVGEvL8CwYKiexcd
# FYmNcP7ntdAoGokLjzbaukz5m/8K6TT4JDVnK+ANuOaMmdbhIurwJ0I9JZTmdHRb
# atGePu1+oDEzfbzL6Xu/OHBE0ZDxyKs6ijoIYn/ZcGNTTY3ugm2lBRDBcQZqELQd
# VTNYs6FwZvKhggNPMIICNwIBATCB+aGB0aSBzjCByzELMAkGA1UEBhMCVVMxEzAR
# BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1p
# Y3Jvc29mdCBDb3Jwb3JhdGlvbjElMCMGA1UECxMcTWljcm9zb2Z0IEFtZXJpY2Eg
# T3BlcmF0aW9uczEnMCUGA1UECxMeblNoaWVsZCBUU1MgRVNOOkE0MDAtMDVFMC1E
# OTQ3MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNloiMKAQEw
# BwYFKw4DAhoDFQB1rbmFkzS7qAK1Oav08AUnhbNIUqCBgzCBgKR+MHwxCzAJBgNV
# BAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4w
# HAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29m
# dCBUaW1lLVN0YW1wIFBDQSAyMDEwMA0GCSqGSIb3DQEBCwUAAgUA7aXC/jAiGA8y
# MDI2MDUwNjEzMzkxMFoYDzIwMjYwNTA3MTMzOTEwWjB2MDwGCisGAQQBhFkKBAEx
# LjAsMAoCBQDtpcL+AgEAMAkCAQACARgCAf8wBwIBAAICGqwwCgIFAO2nFH4CAQAw
# NgYKKwYBBAGEWQoEAjEoMCYwDAYKKwYBBAGEWQoDAqAKMAgCAQACAwehIKEKMAgC
# AQACAwGGoDANBgkqhkiG9w0BAQsFAAOCAQEAT6EkdYYjTml+xMQsR1DrRk+W2xRm
# rsRm9n+SwZDchaH9d5onozIUBNfIHEEBfIrbnO95qowm3xQaez/W6GYxbW6TlwEx
# D4U+V2zl96jf/D0ISo1YbC67ZR3yPMCuiuExKqAQriUxElcvq64+C5KkXJDGRdKr
# xyGGT/qaUS3JwrUEw0j8Gvc5GCJAeDpKmScoKCK8wssKatCikBybTesauJIuhUia
# KI+J4CNw8F+nxZrZwvX/4h//znEWzMthH3LbMpDhxos1J9coGxbTiKNgqHtLloSt
# grEHqlz4nyJXk6VirCy2dlCNLP8pbB2ocF0IYpivrXzUUG7tEvTSFsNrYjGCBA0w
# ggQJAgEBMIGTMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAw
# DgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
# JjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwAhMzAAACKPCl
# h9fzyB5AAAEAAAIoMA0GCWCGSAFlAwQCAQUAoIIBSjAaBgkqhkiG9w0BCQMxDQYL
# KoZIhvcNAQkQAQQwLwYJKoZIhvcNAQkEMSIEIBsVJx+O1nRjLCZ1Jyc63H/FvUpc
# 4drHa+O0czwEITXZMIH6BgsqhkiG9w0BCRACLzGB6jCB5zCB5DCBvQQgVbGKRlFg
# Y1/igRVkrV5Pjkf7cZDf+rFXvlXC4G36ItcwgZgwgYCkfjB8MQswCQYDVQQGEwJV
# UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE
# ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGlt
# ZS1TdGFtcCBQQ0EgMjAxMAITMwAAAijwpYfX88geQAABAAACKDAiBCDyLxQ/0LYX
# 0onWCra/5k8qJX+4w1cilMyNFf8f7j0IyjANBgkqhkiG9w0BAQsFAASCAgBA6BPX
# NiOLQ+Y7RFbewUZVGpsvadqfNGWcfdMlu+tNQ6yHcY3XFl9qJ0Ref0Z05slHjoY4
# LVq6+ONpLtrnq8aVci2tdAtpEHGQjekY6TPzSxl3yIVVt2XxTm7iGri4aKJdMyoZ
# 6/0f9fdh6X+UGHpU7Djc6kSYfJ/QsgQvwdZmYcgk8O740SVxn7MxsOC7zFpVknjk
# o/0zTFQWB412zTyz0+/6dWnvhQbaVjPsJlVXVjIBJwa6rCofVnwrgt/IRlRzSx7E
# xAWaw3JYl+WRLHKXBMP+AAEp8KA0EOATiiTKyWZqGGr0hI5MSdDmKq+wp2Zmhdi8
# ugYut937Y91xQg2tOINoivEMjTeg+tyGxatTR1CXAzAXDikTNhCUyJYKWONfuw1F
# mEZDKFARdurMOekTGOzL4620v+52FZHzPG8/GmTDlSChZs8dn7bgUVoDQcLcGykt
# DL2SGm3AKAunDEU7i6us4InyZs7+YCCpBBheIwfXWWOhDrW//JnMHv6OnYr5pMub
# fSRvNV9OCGz5GA+tL1lkQT8ZoJXQu8pgfwnwS1ydFdCtcUFq8lC9AK4u/GA6uSsw
# 6mRTzuckauxOo2RWEJ9DL1s7jWVlQAKbjAiwV92Q/mIfkC57QGR9UCZTaqSUthYU
# ml9VV/9tnEfSweY+bHg6HsSkPI/FgqFsbbLf6A==
# SIG # End signature block
x
Windows NT KPTV 6.2 build 9200 (Windows Server 2012 Datacenter Edition) i586