Public/ps1/Configuration/Help/Get-ApprxrInstallationHelp.ps1

    <#
    .SYNOPSIS
        Shows installation help and options for Apprxr setup.
    .DESCRIPTION
        Presents a menu for SQL Gateway or File Watcher setup help, and shows the relevant instructions based on user input.
    #>


function Get-ApprxrInstallationHelp {
    [CmdletBinding()]
    param()

    Write-Host "Apprxr Installation Help Menu" -ForegroundColor Cyan
    Write-Host ("=" * 40) -ForegroundColor DarkGray
    Write-Host "1. SQL Gateway Setup" -ForegroundColor Yellow
    Write-Host "2. File Watcher Setup" -ForegroundColor Yellow
    Write-Host "3. Log File Management" -ForegroundColor Yellow
    Write-Host "4. Service Management" -ForegroundColor Yellow
    Write-Host "5. Printer Setup" -ForegroundColor Yellow
    Write-Host "Q. Quit" -ForegroundColor Yellow
    Write-Host ("=" * 40) -ForegroundColor DarkGray
    $choice = Read-Host "Select an option (1/2/3/4/5/Q)"

    switch ($choice) {
                        '4' {
                            Write-Host ""; Write-Host "Service Management" -ForegroundColor Cyan
                            Write-Host ("-" * 40) -ForegroundColor DarkGray
                            Write-Host "1. Install the Apprxr Service:" -ForegroundColor Yellow
                            Write-Host " Use the following command to install the service (requires admin):" -ForegroundColor White
                            Write-Host " Install-ApprxrService" -ForegroundColor Green
                            Write-Host ""
                            Write-Host "2. Start the Service:" -ForegroundColor Yellow
                            Write-Host " Start-ApprxrService" -ForegroundColor Green
                            Write-Host ""
                            Write-Host "3. Stop the Service:" -ForegroundColor Yellow
                            Write-Host " Stop-ApprxrService" -ForegroundColor Green
                            Write-Host ""
                            Write-Host "4. Restart the Service:" -ForegroundColor Yellow
                            Write-Host " Restart-ApprxrService" -ForegroundColor Green
                            Write-Host ""
                            Write-Host "For more details, see the documentation or use Get-ApprxrHelp for command-specific help." -ForegroundColor DarkGray
                            Write-Host ("-" * 40) -ForegroundColor DarkGray
                        }
                '3' {
                    Write-Host ""; Write-Host "Log File Management" -ForegroundColor Cyan
                    Write-Host ("-" * 40) -ForegroundColor DarkGray
                    Write-Host "1. View the Apprxr Log File:" -ForegroundColor Yellow
                    Write-Host " Use the following command to display the log file contents:" -ForegroundColor White
                    Write-Host " Get-ApprxrLog" -ForegroundColor Green
                    Write-Host ""
                    Write-Host "2. Clean (Rotate) the Log File:" -ForegroundColor Yellow
                    Write-Host " Use the following command to rotate and clean the log file:" -ForegroundColor White
                    Write-Host " Move-ApprxrLogFile" -ForegroundColor Green
                    Write-Host ""
                    Write-Host "For more details, see the documentation or use Get-ApprxrHelp for command-specific help." -ForegroundColor DarkGray
                    Write-Host ("-" * 40) -ForegroundColor DarkGray
                }
        '1' {
            Write-Host ""; Write-Host "SQL Gateway Installation" -ForegroundColor Cyan
            Write-Host ("-" * 40) -ForegroundColor DarkGray
            Write-Host "1. Install SQL Gateway Configuration:" -ForegroundColor Yellow
            Write-Host " Use the following command to install the SQL gateway configuration:" -ForegroundColor White
            Write-Host " Install-ApprxrRemoteControllerSQL -Tenant '<tenant>' -Credential (Get-Credential) -SqlConnectionString '<connection string>' -LogFolder '<log folder>'" -ForegroundColor Green
            Write-Host ""
            Write-Host "2. Test SQL Connection:" -ForegroundColor Yellow
            Write-Host " Use the following command to test the SQL connection:" -ForegroundColor White
            Write-Host " Start-ApprxrSqlCommand -Command 'SELECT 1'" -ForegroundColor Green
            Write-Host ""
            Write-Host "For more details, see the documentation or use Get-ApprxrHelp for command-specific help." -ForegroundColor DarkGray
            Write-Host ("-" * 40) -ForegroundColor DarkGray
        }
        '2' {
            Write-Host ""; Write-Host "File Watcher Setup" -ForegroundColor Cyan
            Write-Host ("-" * 40) -ForegroundColor DarkGray
            Write-Host "1. Configure a File Watcher Location:" -ForegroundColor Yellow
            Write-Host " Use the following command to set up a file watcher location:" -ForegroundColor White
            Write-Host " Set-ApprxrFileWatcherLocation -Name '<LocationName>' -InputFolder '<InputPath>' -VdbName '<VDBName>' -InProgressFolder '<InProgressPath>' -Filter '<Filter>'" -ForegroundColor Green
            Write-Host ""
            Write-Host "2. Start All File Watchers:" -ForegroundColor Yellow
            Write-Host " Start-ApprxrFileWatchers" -ForegroundColor Green
            Write-Host ""
            Write-Host "For more details, see the documentation or use Get-ApprxrHelp for command-specific help." -ForegroundColor DarkGray
            Write-Host ("-" * 40) -ForegroundColor DarkGray
        }
        '5' {
            Write-Host ""; Write-Host "Printer Setup" -ForegroundColor Cyan
            Write-Host ("-" * 60) -ForegroundColor DarkGray
            Write-Host "PRINT jobs auto-detect the most reliable PDF print tool on the host."
            Write-Host "Priority: SumatraPDF -> Adobe Reader -> Foxit -> Edge --kiosk-printing -> Windows 'printto' verb."
            Write-Host "SumatraPDF is by far the most reliable option; the others have UX issues or only work for some payloads."
            Write-Host ""
            Write-Host "Step 1: confirm the print spooler is healthy and the printer is visible." -ForegroundColor Yellow
            Write-Host " Get-Service Spooler" -ForegroundColor Green
            Write-Host " Get-Printer | Format-Table Name,DriverName,PortName,PrinterStatus" -ForegroundColor Green
            Write-Host " Get-ApprxrPrinters" -ForegroundColor Green
            Write-Host " # If Get-Printer hangs or shows fewer printers than expected, see step 5 below."
            Write-Host ""
            Write-Host "Step 2: install SumatraPDF (silent print, no UI prompts, no admin required)." -ForegroundColor Yellow
            Write-Host " Install-ApprxrSumatra" -ForegroundColor Green
            Write-Host " # Downloads the portable SumatraPDF.exe (~16 MB) into %LOCALAPPDATA%\SumatraPDF\"
            Write-Host " # and stores the path in Apprxr config under 'SumatraPDFPath'."
            Write-Host " # Idempotent: a re-run with no -Force returns AlreadyInstalled=true."
            Write-Host " # Override the install folder:"
            Write-Host " # Install-ApprxrSumatra -InstallPath 'D:\Tools\SumatraPDF'"
            Write-Host " # Force a re-download:"
            Write-Host " # Install-ApprxrSumatra -Force"
            Write-Host ""
            Write-Host " To install remotely from the server, dispatch the action:" -ForegroundColor Yellow
            Write-Host " { ""Action"": ""INSTALL_SUMATRAPDF"" }" -ForegroundColor Green
            Write-Host " { ""Action"": ""INSTALL_SUMATRAPDF"", ""arguments"": { ""Force"": true } }" -ForegroundColor Green
            Write-Host ""
            Write-Host "Step 3: send a test PRINT job (locally or via the server)." -ForegroundColor Yellow
            Write-Host " # Server-side payload:"
            Write-Host " { ""Action"": ""PRINT"", ""arguments"": {" -ForegroundColor Green
            Write-Host " ""Base64File"": ""<base64-encoded PDF>""," -ForegroundColor Green
            Write-Host " ""PrinterName"": ""<exact name from Get-Printer>""," -ForegroundColor Green
            Write-Host " ""DocumentName"": ""TestPrint.pdf""," -ForegroundColor Green
            Write-Host " ""Copies"": 1," -ForegroundColor Green
            Write-Host " ""PrintMode"": """" // empty = auto-detect" -ForegroundColor Green
            Write-Host " } }" -ForegroundColor Green
            Write-Host ""
            Write-Host " The host log will show, in order:" -ForegroundColor Yellow
            Write-Host " PRINT [DEBUG]: Found N printer(s) on system: A | B | C" -ForegroundColor White
            Write-Host " PRINT [DEBUG]: Resolved printer info -> ..." -ForegroundColor White
            Write-Host " PRINT [DEBUG]: Detected payload format: PDF (PrintMode=PDF)" -ForegroundColor White
            Write-Host " PRINT [DEBUG]: [PDF] Print mechanism: SumatraPDF at <path>" -ForegroundColor White
            Write-Host " PRINT [DEBUG]: [PDF] Launching SumatraPDF with args: -print-to ""<printer>"" ..." -ForegroundColor White
            Write-Host " PRINT [DEBUG]: [PDF] SumatraPDF copy 1 exited with code=0 after Xms" -ForegroundColor White
            Write-Host " PRINT [DEBUG]: Queue AFTER send for '<printer>': ..." -ForegroundColor White
            Write-Host ""
            Write-Host "Step 4: inspect the queue at any time." -ForegroundColor Yellow
            Write-Host " Get-ApprxrPrintQueue # all printers" -ForegroundColor Green
            Write-Host " Get-ApprxrPrintQueue -PrinterName 'X' # one printer" -ForegroundColor Green
            Write-Host " # Or remotely: { ""Action"": ""GET_PRINT_QUEUE"" }"
            Write-Host ""
            Write-Host "Step 5: recovery if the spooler / Get-Printer cmdlets hang." -ForegroundColor Yellow
            Write-Host " Reset-ApprxrSpooler # graceful Restart-Service Spooler" -ForegroundColor Green
            Write-Host " Reset-ApprxrSpooler -Mode Restart # force-stop + restart, no file cleanup" -ForegroundColor Green
            Write-Host " Reset-ApprxrSpooler -Mode Clean # + delete spool\PRINTERS (DESTRUCTIVE)" -ForegroundColor Green
            Write-Host " Reset-ApprxrSpooler -Mode Full # + restart PrintNotify and Winmgmt" -ForegroundColor Green
            Write-Host " # Equivalent remote actions:"
            Write-Host " # REFRESH_SPOOLER / RESTART_SPOOLER / CLEAN_SPOOLER / FULL_SPOOLER"
            Write-Host " # Use FULL_SPOOLER when Get-Printer hangs even though Spooler itself is fine"
            Write-Host " # (WMI / PrintNotify wedged - usually caused by an offline network printer)."
            Write-Host ""
            Write-Host "Common gotchas:" -ForegroundColor Yellow
            Write-Host " * 'Microsoft Print to PDF' blocks on a Save-As dialog when printed silently."
            Write-Host " Use it only for queue-presence tests, not for end-to-end output validation."
            Write-Host " * If Get-Printer reports fewer printers than Win32_Printer (raw CIM), the"
            Write-Host " missing one is likely a per-user / WSD network printer that PrintManagement"
            Write-Host " can't see. Both views are logged at service start - look for the count"
            Write-Host " mismatch warning in the Apprxr log."
            Write-Host " * Sending a PDF (or PNG/JPEG) payload to a Zebra/label printer wedges the"
            Write-Host " spooler. Apprxr's magic-byte guard refuses such jobs up-front - check"
            Write-Host " the PrintMode / printer driver if you see refusal messages."
            Write-Host ""
            Write-Host "For more details, see the documentation or use Get-ApprxrHelp for command-specific help." -ForegroundColor DarkGray
            Write-Host ("-" * 60) -ForegroundColor DarkGray
        }
        'Q' { return }
        'q' { return }
        default {
            Write-Host "Invalid selection. Please run Get-ApprxrInstallationHelp again and choose a valid option (1, 2, 3, 4, 5, or Q)." -ForegroundColor Red
        }
    }
}

# SIG # Begin signature block
# MIInKgYJKoZIhvcNAQcCoIInGzCCJxcCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCC0FtzMYzlXaRbB
# 3qGPNUAHNUc1HB5G0i1P2N9+wZqHWKCCIKYwggWNMIIEdaADAgECAhAOmxiO+dAt
# 5+/bUOIIQBhaMA0GCSqGSIb3DQEBDAUAMGUxCzAJBgNVBAYTAlVTMRUwEwYDVQQK
# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xJDAiBgNV
# BAMTG0RpZ2lDZXJ0IEFzc3VyZWQgSUQgUm9vdCBDQTAeFw0yMjA4MDEwMDAwMDBa
# Fw0zMTExMDkyMzU5NTlaMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2Vy
# dCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lD
# ZXJ0IFRydXN0ZWQgUm9vdCBHNDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC
# ggIBAL/mkHNo3rvkXUo8MCIwaTPswqclLskhPfKK2FnC4SmnPVirdprNrnsbhA3E
# MB/zG6Q4FutWxpdtHauyefLKEdLkX9YFPFIPUh/GnhWlfr6fqVcWWVVyr2iTcMKy
# unWZanMylNEQRBAu34LzB4TmdDttceItDBvuINXJIB1jKS3O7F5OyJP4IWGbNOsF
# xl7sWxq868nPzaw0QF+xembud8hIqGZXV59UWI4MK7dPpzDZVu7Ke13jrclPXuU1
# 5zHL2pNe3I6PgNq2kZhAkHnDeMe2scS1ahg4AxCN2NQ3pC4FfYj1gj4QkXCrVYJB
# MtfbBHMqbpEBfCFM1LyuGwN1XXhm2ToxRJozQL8I11pJpMLmqaBn3aQnvKFPObUR
# WBf3JFxGj2T3wWmIdph2PVldQnaHiZdpekjw4KISG2aadMreSx7nDmOu5tTvkpI6
# nj3cAORFJYm2mkQZK37AlLTSYW3rM9nF30sEAMx9HJXDj/chsrIRt7t/8tWMcCxB
# YKqxYxhElRp2Yn72gLD76GSmM9GJB+G9t+ZDpBi4pncB4Q+UDCEdslQpJYls5Q5S
# UUd0viastkF13nqsX40/ybzTQRESW+UQUOsxxcpyFiIJ33xMdT9j7CFfxCBRa2+x
# q4aLT8LWRV+dIPyhHsXAj6KxfgommfXkaS+YHS312amyHeUbAgMBAAGjggE6MIIB
# NjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTs1+OC0nFdZEzfLmc/57qYrhwP
# TzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzAOBgNVHQ8BAf8EBAMC
# AYYweQYIKwYBBQUHAQEEbTBrMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdp
# Y2VydC5jb20wQwYIKwYBBQUHMAKGN2h0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNv
# bS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcnQwRQYDVR0fBD4wPDA6oDigNoY0
# aHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0QXNzdXJlZElEUm9vdENB
# LmNybDARBgNVHSAECjAIMAYGBFUdIAAwDQYJKoZIhvcNAQEMBQADggEBAHCgv0Nc
# Vec4X6CjdBs9thbX979XB72arKGHLOyFXqkauyL4hxppVCLtpIh3bb0aFPQTSnov
# Lbc47/T/gLn4offyct4kvFIDyE7QKt76LVbP+fT3rDB6mouyXtTP0UNEm0Mh65Zy
# oUi0mcudT6cGAxN3J0TU53/oWajwvy8LpunyNDzs9wPHh6jSTEAZNUZqaVSwuKFW
# juyk1T3osdz9HNj0d1pcVIxv76FQPfx2CWiEn2/K2yCNNWAcAgPLILCsWKAOQGPF
# mCLBsln1VWvPJ6tsds5vIy30fnFqI2si/xK4VC0nftg62fC2h5b9W9FcrBjDTZ9z
# twGpn1eqXijiuZQwggaXMIIEf6ADAgECAhAfsijAKebq6quDMIHCRvIfMA0GCSqG
# SIb3DQEBCwUAMGoxCzAJBgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBT
# eXN0ZW1zIFMuQS4xODA2BgNVBAMTL0NlcnR1bSBFeHRlbmRlZCBWYWxpZGF0aW9u
# IENvZGUgU2lnbmluZyAyMDIxIENBMB4XDTI2MDIwMzEzNTE0NFoXDTI4MDIwMzEz
# NTE0M1owgaExHTAbBgNVBA8TFFByaXZhdGUgT3JnYW5pemF0aW9uMRMwEQYLKwYB
# BAGCNzwCAQMTAk5MMREwDwYDVQQFEwg5NjMyNDU2MjELMAkGA1UEBhMCTkwxEDAO
# BgNVBAgMB1V0cmVjaHQxEzARBgNVBAcMCkFtZXJzZm9vcnQxETAPBgNVBAoMCEFQ
# UFJYIEJWMREwDwYDVQQDDAhBUFBSWCBCVjCCAaIwDQYJKoZIhvcNAQEBBQADggGP
# ADCCAYoCggGBAOF+mHloTjmkknba8mOejw0Gq3Aczy1dtatfdLM70ken0n07zIlY
# 2jNmyTv5I5RixXAt3LJUwWnUQH8okGFJYvnLZRPyjpCxnEqq8GL6puhKjIIcTs8W
# VhoADX+mFtLXygLrfk1j6A+dnNXjoCQMsVSEYppSGrpMpKsPQONb1mmFRx66vqro
# HcP93qWYTm/f3TpRzlscIxcQ/3Ab+KLeW0sHgC/a8MVHLicbdUe/pka4jMM98Djj
# BtkBc18dI6ECtrDfB2FXXFomvgm5UyPaf2sYxMPL+X/iCNhaQevoT3vttxMvKzAD
# JxJK7VsV2nrCvxfTaP4cVd9FfoxUqjCE0eA/IH3qrKqAv3eONjMrRzoO9jJumusi
# t91wYT1dwTe/o2FAwfmZ7qxofCXTlO008weUDY5UBw8d+BavVvnDNR08eEcCJN37
# wBJn1hhjFZZD6OxVcMEoyhIG5tJqvmBPyR5A1oYeGSL+/xBbLpAQR0oAhAivxvn4
# POX2r4M/wXGJewIDAQABo4IBfzCCAXswDAYDVR0TAQH/BAIwADBBBgNVHR8EOjA4
# MDagNKAyhjBodHRwOi8vY2V2Y3NjYTIwMjEuY3JsLmNlcnR1bS5wbC9jZXZjc2Nh
# MjAyMS5jcmwwdwYIKwYBBQUHAQEEazBpMC4GCCsGAQUFBzABhiJodHRwOi8vY2V2
# Y3NjYTIwMjEub2NzcC1jZXJ0dW0uY29tMDcGCCsGAQUFBzAChitodHRwOi8vcmVw
# b3NpdG9yeS5jZXJ0dW0ucGwvY2V2Y3NjYTIwMjEuY2VyMB8GA1UdIwQYMBaAFKxX
# yggW3D/FMRwKTdv78d6ZJy00MB0GA1UdDgQWBBSEZ5pbrzKazBz6ZCRYAbuQVlDy
# pDBKBgNVHSAEQzBBMAcGBWeBDAEDMDYGCyqEaAGG9ncCBQEHMCcwJQYIKwYBBQUH
# AgEWGWh0dHBzOi8vd3d3LmNlcnR1bS5wbC9DUFMwEwYDVR0lBAwwCgYIKwYBBQUH
# AwMwDgYDVR0PAQH/BAQDAgeAMA0GCSqGSIb3DQEBCwUAA4ICAQARtX2dHRUVP9uH
# 5FuVIvj22UsNMW2gsexnRxeL/xKxY4BXv6UkQmcgABKbYlWGH0wodaKRhrT9NyK1
# tt0P1C53zAkaiwNU7gSge7s/OPk2yA7g++iVBUDXRelZVCWi31V8yRVV+zXAFEkK
# timx00QcEhLFu1DAyjABmKouChHJyqF4dHWytvQZQHw1dfG1OSh6F82thRipW/q1
# ggWzm91QdieGlaSBZy9N881+h4V23R7oJVyWcCUtar19rBJH+/TaZHMo3VDVazhr
# CYUKMf/f6RA+iuSsPcpwMi7BZzTxawQtEe/1vG3RLVP94bWl69gY8LiTe0OU23tp
# 1PuTiHFLEXjTIb9WnBljH2PvUpJVaxQAMZrunKZvuafYSAvcEfSiRvgFg3r1UH9I
# nLjJVxsjfxjnbg5y/5SChh+OBbld7+NdvWVoFUGwqK2IuALD0O2/gtQBS/+UZuiB
# GsWpTv9PWI9/C2kPjEcBjC3sZedZOjkEJNSb8siUDItoswA+ddZRBBLdkNJCIKX4
# +lrKAAXdOqGu1QSu57G/OOLyjeUHEWx73XzoPMdgGfkcbdSBQoWBevDbC2xLzqr6
# EQZhplxGR39HZ4M4GyNFcpL4Xhuw1Gma8ldGTeuNw5ktP5Jmf9zvrjP5epHgMl6r
# jO0VG4wGU+R4e/FPQClKsyxI/cTJMjCCBrQwggScoAMCAQICEA3HrFcF/yGZLkBD
# Igw6SYYwDQYJKoZIhvcNAQELBQAwYjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERp
# Z2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTEhMB8GA1UEAxMY
# RGlnaUNlcnQgVHJ1c3RlZCBSb290IEc0MB4XDTI1MDUwNzAwMDAwMFoXDTM4MDEx
# NDIzNTk1OVowaTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMu
# MUEwPwYDVQQDEzhEaWdpQ2VydCBUcnVzdGVkIEc0IFRpbWVTdGFtcGluZyBSU0E0
# MDk2IFNIQTI1NiAyMDI1IENBMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC
# ggIBALR4MdMKmEFyvjxGwBysddujRmh0tFEXnU2tjQ2UtZmWgyxU7UNqEY81FzJs
# Qqr5G7A6c+Gh/qm8Xi4aPCOo2N8S9SLrC6Kbltqn7SWCWgzbNfiR+2fkHUiljNOq
# nIVD/gG3SYDEAd4dg2dDGpeZGKe+42DFUF0mR/vtLa4+gKPsYfwEu7EEbkC9+0F2
# w4QJLVSTEG8yAR2CQWIM1iI5PHg62IVwxKSpO0XaF9DPfNBKS7Zazch8NF5vp7ea
# Z2CVNxpqumzTCNSOxm+SAWSuIr21Qomb+zzQWKhxKTVVgtmUPAW35xUUFREmDrMx
# SNlr/NsJyUXzdtFUUt4aS4CEeIY8y9IaaGBpPNXKFifinT7zL2gdFpBP9qh8SdLn
# Eut/GcalNeJQ55IuwnKCgs+nrpuQNfVmUB5KlCX3ZA4x5HHKS+rqBvKWxdCyQEEG
# cbLe1b8Aw4wJkhU1JrPsFfxW1gaou30yZ46t4Y9F20HHfIY4/6vHespYMQmUiote
# 8ladjS/nJ0+k6MvqzfpzPDOy5y6gqztiT96Fv/9bH7mQyogxG9QEPHrPV6/7umw0
# 52AkyiLA6tQbZl1KhBtTasySkuJDpsZGKdlsjg4u70EwgWbVRSX1Wd4+zoFpp4Ra
# +MlKM2baoD6x0VR4RjSpWM8o5a6D8bpfm4CLKczsG7ZrIGNTAgMBAAGjggFdMIIB
# WTASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTvb1NK6eQGfHrK4pBW9i/U
# SezLTjAfBgNVHSMEGDAWgBTs1+OC0nFdZEzfLmc/57qYrhwPTzAOBgNVHQ8BAf8E
# BAMCAYYwEwYDVR0lBAwwCgYIKwYBBQUHAwgwdwYIKwYBBQUHAQEEazBpMCQGCCsG
# AQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wQQYIKwYBBQUHMAKGNWh0
# dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRSb290RzQu
# Y3J0MEMGA1UdHwQ8MDowOKA2oDSGMmh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9E
# aWdpQ2VydFRydXN0ZWRSb290RzQuY3JsMCAGA1UdIAQZMBcwCAYGZ4EMAQQCMAsG
# CWCGSAGG/WwHATANBgkqhkiG9w0BAQsFAAOCAgEAF877FoAc/gc9EXZxML2+C8i1
# NKZ/zdCHxYgaMH9Pw5tcBnPw6O6FTGNpoV2V4wzSUGvI9NAzaoQk97frPBtIj+ZL
# zdp+yXdhOP4hCFATuNT+ReOPK0mCefSG+tXqGpYZ3essBS3q8nL2UwM+NMvEuBd/
# 2vmdYxDCvwzJv2sRUoKEfJ+nN57mQfQXwcAEGCvRR2qKtntujB71WPYAgwPyWLKu
# 6RnaID/B0ba2H3LUiwDRAXx1Neq9ydOal95CHfmTnM4I+ZI2rVQfjXQA1WSjjf4J
# 2a7jLzWGNqNX+DF0SQzHU0pTi4dBwp9nEC8EAqoxW6q17r0z0noDjs6+BFo+z7bK
# SBwZXTRNivYuve3L2oiKNqetRHdqfMTCW/NmKLJ9M+MtucVGyOxiDf06VXxyKkOi
# rv6o02OoXN4bFzK0vlNMsvhlqgF2puE6FndlENSmE+9JGYxOGLS/D284NHNboDGc
# mWXfwXRy4kbu4QFhOm0xJuF2EZAOk5eCkhSxZON3rGlHqhpB/8MluDezooIs8CVn
# rpHMiD2wL40mm53+/j7tFaxYKIqL0Q4ssd8xHZnIn/7GELH3IdvG2XlM9q7WP/Uw
# gOkw/HQtyRN62JK4S1C8uw3PdBunvAZapsiI5YKdvlarEvf8EA+8hcpSM9LHJmyr
# xaFtoza2zNaQ9k+5t1wwggbNMIIEtaADAgECAhEAu/DMtbe4Mf0hrjJ3iuQMiTAN
# BgkqhkiG9w0BAQwFADCBgDELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8g
# VGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9u
# IEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAy
# MB4XDTIxMDUxOTA1MzIxM1oXDTM2MDUxODA1MzIxM1owajELMAkGA1UEBhMCUEwx
# ITAfBgNVBAoTGEFzc2VjbyBEYXRhIFN5c3RlbXMgUy5BLjE4MDYGA1UEAxMvQ2Vy
# dHVtIEV4dGVuZGVkIFZhbGlkYXRpb24gQ29kZSBTaWduaW5nIDIwMjEgQ0EwggIi
# MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCUvvjwlqjf9eedRTK+NoavZlVx
# mQTPIN1nK5XQRUQWyPWwHD54wa2aD2kRDrAjBf71/T0XN9Oqms5ML/Jolgryv3JW
# 7/yahp7lg/wn3PDnNwzC1BlFMyCdEktQmUXMmE4mmxSutRY1OGGagENWPjbQ1R/x
# 4HuTByWbG+TUV7dIPxE7TMy9Npco4f09DN6QFRXdk7bZTu58kxu6MFH6mzQkC3IX
# vExfo0c/CT4/hTZD2XknHjXLzi9jzInSHS9GQqeXd6nWbkwEu7znKpNEcSElorDS
# EcRhc1OSOLjUK0x0cOw8whzQ0fWGkPoqgCslbjZoko7U7kj/Fn4TWQ8s75LHjhVa
# o+w2SWMP0ELWYIkq1ComGq3wqBD7VU6rtCDoUf237HkgRBxLXFjwp444oKWnchYM
# Z7epWX8jqntSr4QHeidL72c6XswQIIZsFglV4BO28jO02yS7w4iyY0c6PQs34GZ7
# SWphsN1DaiX9ysc6hovVYoVA94t+3p4TI1RtK9Ayh0atmfYPJqtBfk5kJ1h4nNax
# 0lZmJL9chJjZQb+7XW8MQgstiQdsegaz2QL6Edm+94N8IW6TYaalyO9LeR35A9Mo
# TLo79rdB04naTqWdPTBKh7DpS53ZAQn5dYs2per+m7ZeIxnEWaNcG+PbRh+ZslFb
# 6M75JgN43szB+/VYVQIDAQABo4IBVTCCAVEwDwYDVR0TAQH/BAUwAwEB/zAdBgNV
# HQ4EFgQUrFfKCBbcP8UxHApN2/vx3pknLTQwHwYDVR0jBBgwFoAUtqFUOQLDoD+O
# irz61PgcptE6Dv0wDgYDVR0PAQH/BAQDAgEGMBMGA1UdJQQMMAoGCCsGAQUFBwMD
# MDAGA1UdHwQpMCcwJaAjoCGGH2h0dHA6Ly9jcmwuY2VydHVtLnBsL2N0bmNhMi5j
# cmwwbAYIKwYBBQUHAQEEYDBeMCgGCCsGAQUFBzABhhxodHRwOi8vc3ViY2Eub2Nz
# cC1jZXJ0dW0uY29tMDIGCCsGAQUFBzAChiZodHRwOi8vcmVwb3NpdG9yeS5jZXJ0
# dW0ucGwvY3RuY2EyLmNlcjA5BgNVHSAEMjAwMC4GBFUdIAAwJjAkBggrBgEFBQcC
# ARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwvQ1BTMA0GCSqGSIb3DQEBDAUAA4ICAQC7
# khlZjFbU+gsRdcraFFJKj1PL63MVudnm/AILuNaxm7LIZOYtrZaRWEpR0qd3uhSp
# UEI29fMBZvuu3CHXJsM58hbJFo4YoHnyDJgTkeVmc10fd1NI//cI3nRD1/Alx09y
# WhPZlze0A/Bvwc3LcZtTywfsL5tD3QAL8ZqelrHt1Eb8AnDEnAzKNbm1mwYmD/5d
# y1XkIKfsM1pmRM2ZDcJ4qpwVewE7g+4e+Y+iq42LuaHPvNAkwq0daA9Hp3qemk0c
# RFfM5257MvEsu+6w8+44mpQUOgpASVIjY3l2vdf6BUfBJfsd3pcp/2hfDnXaql9A
# oB7ps7eCZb9VXKm/u2lTRMf5esOcZFy4udsnGBaOwSSUe0chYusfJ9IjsmpoMl4C
# W5E0R/U55Bz6TpDo+gaXQJL4i/zv0UR5papGsDguBASp9g/OfnvGTeWrS9l5orEk
# tu9ExrFfPvAKxZK+4AO9bapPhMATraKo6kx6K51pS1ZO2pf1r3B+lXN5bTLgp8g/
# dygUZm2cmauBAzJA5v/iHOb0b4b4Muqc8dxgcX1jZRLtLvxnAWxkKIMfj7A4M0Jr
# N4rLBUpPFM0+Bp2sR7rtFqNZW56huaDkxO75eNRN2z4A959R5GBRnFWtgE65+B1R
# HAQQ/TOF4mU0Y3oIhVQr3rUh4tdSvIxr8QpsDKIvsDCCBu0wggTVoAMCAQICEAqA
# 7xhLjfEFgtHEdqeVdGgwDQYJKoZIhvcNAQELBQAwaTELMAkGA1UEBhMCVVMxFzAV
# BgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMUEwPwYDVQQDEzhEaWdpQ2VydCBUcnVzdGVk
# IEc0IFRpbWVTdGFtcGluZyBSU0E0MDk2IFNIQTI1NiAyMDI1IENBMTAeFw0yNTA2
# MDQwMDAwMDBaFw0zNjA5MDMyMzU5NTlaMGMxCzAJBgNVBAYTAlVTMRcwFQYDVQQK
# Ew5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNlcnQgU0hBMjU2IFJTQTQw
# OTYgVGltZXN0YW1wIFJlc3BvbmRlciAyMDI1IDEwggIiMA0GCSqGSIb3DQEBAQUA
# A4ICDwAwggIKAoICAQDQRqwtEsae0OquYFazK1e6b1H/hnAKAd/KN8wZQjBjMqiZ
# 3xTWcfsLwOvRxUwXcGx8AUjni6bz52fGTfr6PHRNv6T7zsf1Y/E3IU8kgNkeECqV
# Q+3bzWYesFtkepErvUSbf+EIYLkrLKd6qJnuzK8Vcn0DvbDMemQFoxQ2Dsw4vEjo
# T1FpS54dNApZfKY61HAldytxNM89PZXUP/5wWWURK+IfxiOg8W9lKMqzdIo7VA1R
# 0V3Zp3DjjANwqAf4lEkTlCDQ0/fKJLKLkzGBTpx6EYevvOi7XOc4zyh1uSqgr6Un
# bksIcFJqLbkIXIPbcNmA98Oskkkrvt6lPAw/p4oDSRZreiwB7x9ykrjS6GS3NR39
# iTTFS+ENTqW8m6THuOmHHjQNC3zbJ6nJ6SXiLSvw4Smz8U07hqF+8CTXaETkVWz0
# dVVZw7knh1WZXOLHgDvundrAtuvz0D3T+dYaNcwafsVCGZKUhQPL1naFKBy1p6ll
# N3QgshRta6Eq4B40h5avMcpi54wm0i2ePZD5pPIssoszQyF4//3DoK2O65Uck5Wg
# gn8O2klETsJ7u8xEehGifgJYi+6I03UuT1j7FnrqVrOzaQoVJOeeStPeldYRNMmS
# F3voIgMFtNGh86w3ISHNm0IaadCKCkUe2LnwJKa8TIlwCUNVwppwn4D3/Pt5pwID
# AQABo4IBlTCCAZEwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQU5Dv88jHt/f3X85Fx
# YxlQQ89hjOgwHwYDVR0jBBgwFoAU729TSunkBnx6yuKQVvYv1Ensy04wDgYDVR0P
# AQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMIMIGVBggrBgEFBQcBAQSB
# iDCBhTAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMF0GCCsG
# AQUFBzAChlFodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVz
# dGVkRzRUaW1lU3RhbXBpbmdSU0E0MDk2U0hBMjU2MjAyNUNBMS5jcnQwXwYDVR0f
# BFgwVjBUoFKgUIZOaHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0VHJ1
# c3RlZEc0VGltZVN0YW1waW5nUlNBNDA5NlNIQTI1NjIwMjVDQTEuY3JsMCAGA1Ud
# IAQZMBcwCAYGZ4EMAQQCMAsGCWCGSAGG/WwHATANBgkqhkiG9w0BAQsFAAOCAgEA
# ZSqt8RwnBLmuYEHs0QhEnmNAciH45PYiT9s1i6UKtW+FERp8FgXRGQ/YAavXzWjZ
# hY+hIfP2JkQ38U+wtJPBVBajYfrbIYG+Dui4I4PCvHpQuPqFgqp1PzC/ZRX4pvP/
# ciZmUnthfAEP1HShTrY+2DE5qjzvZs7JIIgt0GCFD9ktx0LxxtRQ7vllKluHWiKk
# 6FxRPyUPxAAYH2Vy1lNM4kzekd8oEARzFAWgeW3az2xejEWLNN4eKGxDJ8WDl/FQ
# USntbjZ80FU3i54tpx5F/0Kr15zW/mJAxZMVBrTE2oi0fcI8VMbtoRAmaaslNXdC
# G1+lqvP4FbrQ6IwSBXkZagHLhFU9HCrG/syTRLLhAezu/3Lr00GrJzPQFnCEH1Y5
# 8678IgmfORBPC1JKkYaEt2OdDh4GmO0/5cHelAK2/gTlQJINqDr6JfwyYHXSd+V0
# 8X1JUPvB4ILfJdmL+66Gp3CSBXG6IwXMZUXBhtCyIaehr0XkBoDIGMUG1dUtwq1q
# mcwbdUfcSYCn+OwncVUXf53VJUNOaMWMts0VlRYxe5nK+At+DI96HAlXHAL5SlfY
# xJ7La54i71McVWRP66bW+yERNpbJCjyCYG2j+bdpxo/1Cy4uPcU3AWVPGrbn5PhD
# Bf3Froguzzhk++ami+r3Qrx5bIbY3TVzgiFI7Gq3zWcxggXaMIIF1gIBATB+MGox
# CzAJBgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4x
# ODA2BgNVBAMTL0NlcnR1bSBFeHRlbmRlZCBWYWxpZGF0aW9uIENvZGUgU2lnbmlu
# ZyAyMDIxIENBAhAfsijAKebq6quDMIHCRvIfMA0GCWCGSAFlAwQCAQUAoIGEMBgG
# CisGAQQBgjcCAQwxCjAIoAKAAKECgAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcC
# AQQwHAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIE
# IOLrbnNYjdnyqgDZn8BpNSqSxUmnJaZs0lYA5ThoC9PIMA0GCSqGSIb3DQEBAQUA
# BIIBgLy7ZoOgAf/fE2B9UyI0HPFALzCn0C+fYAS/04ETBFz8stveK+1uYpgVjlBC
# DsGD5V1FIUtEQzjIrCjjNv9QaZ+dH1IRF/SrxYLJrQj5NVXQSlgA5GHy4MVqMRbR
# JjdwLV+2oD0yJd4A0CeFaEbZQm8cYTLHUH7mVQKH+vK/Lw6bfxrCQjNdJxbLhowk
# Wrla43NCz/hM2+Chgib2AGSR3JnmGfoZ3Kw4TME99IidYEzKY8UbdJd42VFJ5mS7
# lfZIyyLfhHtD3sFcBdoQJewJBUOfupTY1s4Fr4SzyhzgWreFeseHFlCmFLJwNVqY
# hbsbxCwqOXYyVfsFPA1NjDoW7aHqMsBSrzU8TdfVnbCQuPp0zziQt93hBpaMP37z
# PxlRJveO12wuFbxr+iBYDNOWIzhHnjxHS75MVnk89htvGp1P71fIg7k8v/yUg5VF
# a+Gz+jVrcGfxy8jd6XXP9bRcfedC46ydnu9yorIgrlJlJFTpDlWtNz+gd61zcruP
# dMY6lqGCAyYwggMiBgkqhkiG9w0BCQYxggMTMIIDDwIBATB9MGkxCzAJBgNVBAYT
# AlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQg
# VHJ1c3RlZCBHNCBUaW1lU3RhbXBpbmcgUlNBNDA5NiBTSEEyNTYgMjAyNSBDQTEC
# EAqA7xhLjfEFgtHEdqeVdGgwDQYJYIZIAWUDBAIBBQCgaTAYBgkqhkiG9w0BCQMx
# CwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0yNjA1MDQxMTA1MDVaMC8GCSqG
# SIb3DQEJBDEiBCAaRyirdz645NDFfhPkuoqLjmXeGjTjQz1+RGV8SFyAIjANBgkq
# hkiG9w0BAQEFAASCAgAYGjXnDY/+/6NbkhrKl933VL0rr68sP1qLXzn1ZceJ8q8G
# q21mNICz9WwTAdoWrVT7EE9BE8kzE2SacNPEr26IREqHJidE5buls6RmIw4myED/
# 8RfaL68WYfmKgTL2WPhd7j1NDjFeBHUPmcOngPzDxbSHTGp/0/XrbFr1ggcG3M1A
# XMv0AEm9cJkUCcbINtcqahyQswW2/YLoUCJiRKW2MrBVGWIQNvHAP1vheJrrm4/V
# ZxJMXIC2dQebGyUNLvFuKuUkt0SJvafzAVLutOsecQ4P6A4KjWGtY4EOxj4mVKGT
# D6LyVX+G6UK9uG/aqvI2E2BubNYXUvpLTbSK9Iv5XbdJA0ppGgCc76kFh6DAiUpT
# kxMFIaja1IX3nEhbRQRVyC342E7FqtSpFzqLxQZiBhpsyLt3OUV71xCAx6dbUYqt
# BRPrp5Vxmg1IJbL9y47DPW22PFQp5QqPCNP3Cha9/ZmgvR4GTpXRl1HJq+r2rAtq
# FR6lKTn4s3MMyqayPBR2KfkBGX88xttVb+9hG4x6ccvgxnYTkUcQqfxpJ1dUnnvC
# QhJYgxVOFZb0ttlnWF/FMOpHLrlchuH0qZ5Y+lwId8lcm8CAdk/DUg4RHxBfguZs
# 37+H/dx7JMboEVMWlObpcXHH3UbFRj60BDBT2gJGBEuXWUD0dF9Sd9R3AvKjtQ==
# SIG # End signature block