param([string]$DeviceConfig)

$ErrorActionPreference = 'Stop'
$principal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
if (-not $principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
    throw 'Run this installer as Administrator.'
}

$packageRoot = Split-Path -Parent $MyInvocation.MyCommand.Path
$sourceApp = Join-Path $packageRoot 'SecGateXSecureConnect.exe'
$sourceCore = Join-Path $packageRoot 'runtime\mihomo.exe'
$installRoot = Join-Path $env:ProgramFiles 'SecGateX'
$runtimeRoot = Join-Path $installRoot 'runtime'
$dataRoot = Join-Path $env:ProgramData 'SecGateX'
$targetConfig = Join-Path $dataRoot 'config.yaml'

foreach ($required in @($sourceApp, $sourceCore)) {
    if (-not (Test-Path -LiteralPath $required -PathType Leaf)) { throw "Missing installation file: $required" }
}

$expectedCoreHash = '6AC25FCB26AFE8E1BEA24B6E6E80805BF884A33232D12E2D78DFA0B6C529AC14'
$actualCoreHash = (Get-FileHash -Algorithm SHA256 -LiteralPath $sourceCore).Hash
if ($actualCoreHash -ne $expectedCoreHash) { throw 'Mihomo core hash validation failed.' }

if ($DeviceConfig) {
    if (-not (Test-Path -LiteralPath $DeviceConfig -PathType Leaf)) { throw "Missing installation file: $DeviceConfig" }
    $configText = Get-Content -Raw -LiteralPath $DeviceConfig
    foreach ($requiredPattern in @('(?im)^\s*device\s*:\s*SecGateX\s*$', '(?im)^\s*auto-route\s*:\s*true\s*$', '(?im)^\s*strict-route\s*:\s*false\s*$')) {
        if ($configText -notmatch $requiredPattern) { throw 'Device configuration failed SecGateX safety validation.' }
    }
    $transportTypes = [regex]::Matches($configText, '(?im)^\s*type\s*:\s*([a-z0-9_-]+)\s*$')
    if ($transportTypes.Count -ne 1 -or $transportTypes[0].Groups[1].Value -ine 'hysteria2') {
        throw 'Device configuration must contain exactly one approved transport.'
    }
    if ($configText -match 'CHANGE_ME') { throw 'Device configuration still contains a placeholder.' }
}

New-Item -ItemType Directory -Force -Path $installRoot, $runtimeRoot, $dataRoot | Out-Null
Copy-Item -LiteralPath $sourceApp -Destination (Join-Path $installRoot 'SecGateXSecureConnect.exe') -Force
Copy-Item -LiteralPath $sourceCore -Destination (Join-Path $runtimeRoot 'mihomo.exe') -Force
Copy-Item -LiteralPath (Join-Path $packageRoot 'runtime\LICENSE-Mihomo.txt') -Destination (Join-Path $runtimeRoot 'LICENSE-Mihomo.txt') -Force
if ($DeviceConfig) { Copy-Item -LiteralPath $DeviceConfig -Destination $targetConfig -Force }

& icacls.exe $dataRoot /inheritance:r /grant:r 'SYSTEM:(OI)(CI)F' 'Administrators:(OI)(CI)F' | Out-Null
if ($LASTEXITCODE -ne 0) { throw 'Unable to secure the configuration directory.' }

$shortcutPath = Join-Path ([Environment]::GetFolderPath('CommonDesktopDirectory')) 'SecGateX Secure Connect.lnk'
$shell = New-Object -ComObject WScript.Shell
$shortcut = $shell.CreateShortcut($shortcutPath)
$shortcut.TargetPath = Join-Path $installRoot 'SecGateXSecureConnect.exe'
$shortcut.WorkingDirectory = $installRoot
$shortcut.IconLocation = (Join-Path $installRoot 'SecGateXSecureConnect.exe') + ',0'
$shortcut.Save()

Write-Output 'SecGateX Windows client installed. Open the desktop shortcut and sign in with the employee account and password.'

# SIG # Begin signature block
# MIIfQgYJKoZIhvcNAQcCoIIfMzCCHy8CAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCbRvEfYWkYxbul
# C336oa+pSajBaKYTqiCJhYmwOPXjqaCCGK8wggVxMIIDWaADAgECAhBKmHbhO3bI
# oEoqFGVcOAZJMA0GCSqGSIb3DQEBCwUAMHgxCzAJBgNVBAYTAkNOMTMwMQYDVQQK
# DCrlsI/or63onILonILvvIjkuIrmtbfvvInnp5HmioDmnInpmZDlhazlj7gxNDAy
# BgNVBAMMK1NlY0dhdGVYIEludGVybmFsIENvZGUgU2lnbmluZyBSb290IENBIDIw
# MjYwHhcNMjYwOTA0MDg1OTI4WhcNMzEwOTA0MDkwOTI4WjB3MQswCQYDVQQGEwJD
# TjEzMDEGA1UECgwq5bCP6K+t6JyC6JyC77yI5LiK5rW377yJ56eR5oqA5pyJ6ZmQ
# 5YWs5Y+4MTMwMQYDVQQDDCrlsI/or63onILonILvvIjkuIrmtbfvvInnp5HmioDm
# nInpmZDlhazlj7gwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQC4yIz9
# 6EDSka94PZPfFSPeLHV2dtbbzXCLn0pqppxtsmtTA0GBaLQrSUlRyinCqAf8ScAf
# 8IFYc94iKcFYu9JxY9Bdx8uKhf3EvNn/7gUDl7XaJCSe1ETqeMdwC0njMO7GlphU
# gS2FAkn/p0EXk0KCcrLd5VtlceC/ExRQ9Fvzg3nZZtptmXgeml7OtDfKxOfvW3Oy
# xzTDJxl5UJO+PZb58H77aEY2uw8ckeJAEkh8EIh7q+EMlso6r7hTvXpleJvoQy4u
# XfgQmXZku3dmz85xlyqTWLvDoeyRDQmotwryXR0Dtnq6lnmKIZ/003ZoWs4Vxt6f
# 3MxPa6BXBF468g+K0Qc9wpL0hJakCFw+TNMb8O6+Trr0jnum2PwHO9zzWSi2PvA4
# cryF57LUvFhcyuTzPBrnznl0xnCJHOHp4nZMFFHIBZun8mtP6foBfmO9wKZB9sQS
# qTqmBwWHfwy+rJgWU+3+TXp1mFeG+95ugnfdgN3V9doWPmXEMG4b13M63ukCAwEA
# AaN4MHYwDgYDVR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAww
# CgYIKwYBBQUHAwMwHwYDVR0jBBgwFoAUyMo3wMI3sjAU5m2n8yQJ/pJVSGUwHQYD
# VR0OBBYEFGsbME0qBPWnlhVeEjD3lF/SMQBuMA0GCSqGSIb3DQEBCwUAA4ICAQBS
# 9OdmEc2/S/BBt1t31PjlvvIhc6BzgVkIofxqdpTBlF1SXNyXRnVnlbfQZp0KaufV
# EWce/MyemNLZ43K5iLTunTpI1SdVGWGMqhmQjMxaOPXb5gZwcbMFb04pLbMstRbI
# axL9L7fCIbZ1VBO6afcG+PCHjTKmMy8ys5Cz0/4gf9Cf4VrfhbP81zI+iHzxcuqX
# Vyj70jqVXjpFrqX0QKHamdEbQADRn7UITuc+nHzAWKAhl2m45Yf6F+JbuaDQq9IM
# JRBhOLvitTvo7oiraq8xFwnWZw+Vq9eWr81YskijFzcW33jTzvez9esNchRKHy6v
# /NQ92M8EkS98DoCHoxGqwYfeJzc6YmD/6wa3cXbnW0368TTj8XkIJKpDx48CIy/P
# r9CDXBJuVjqe8TBKT2FIqA+RniziskzCL/t3LoQdYP9D+ydMdJt4cYCaNVF8sQWo
# 4+LHow4Urn1Ngzl+RC84wxkGb0Xx8+QakmaBERqX34+c/tfqbc0rIFkoCZ8UuhLH
# hjLXuX3o7cvvfkMMjEiUmWl/UVTDjJ2iOXS90IrVhpvfAfwtd88QWNh8q7XeJZhz
# FXhAmi6lleVF7v03gjNXapVyhGFtQZBXqbnz3gTkEwerBzZz0d3GIG9mXrCg14/a
# DI8qL4QccLP1RjaXvFdLqwIPpIDk0g4sINtlCvrFrTCCBY0wggR1oAMCAQICEA6b
# GI750C3n79tQ4ghAGFowDQYJKoZIhvcNAQEMBQAwZTELMAkGA1UEBhMCVVMxFTAT
# BgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTEk
# MCIGA1UEAxMbRGlnaUNlcnQgQXNzdXJlZCBJRCBSb290IENBMB4XDTIyMDgwMTAw
# MDAwMFoXDTMxMTEwOTIzNTk1OVowYjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERp
# Z2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTEhMB8GA1UEAxMY
# RGlnaUNlcnQgVHJ1c3RlZCBSb290IEc0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
# MIICCgKCAgEAv+aQc2jeu+RdSjwwIjBpM+zCpyUuySE98orYWcLhKac9WKt2ms2u
# exuEDcQwH/MbpDgW61bGl20dq7J58soR0uRf1gU8Ug9SH8aeFaV+vp+pVxZZVXKv
# aJNwwrK6dZlqczKU0RBEEC7fgvMHhOZ0O21x4i0MG+4g1ckgHWMpLc7sXk7Ik/gh
# YZs06wXGXuxbGrzryc/NrDRAX7F6Zu53yEioZldXn1RYjgwrt0+nMNlW7sp7XeOt
# yU9e5TXnMcvak17cjo+A2raRmECQecN4x7axxLVqGDgDEI3Y1DekLgV9iPWCPhCR
# cKtVgkEy19sEcypukQF8IUzUvK4bA3VdeGbZOjFEmjNAvwjXWkmkwuapoGfdpCe8
# oU85tRFYF/ckXEaPZPfBaYh2mHY9WV1CdoeJl2l6SPDgohIbZpp0yt5LHucOY67m
# 1O+SkjqePdwA5EUlibaaRBkrfsCUtNJhbesz2cXfSwQAzH0clcOP9yGyshG3u3/y
# 1YxwLEFgqrFjGESVGnZifvaAsPvoZKYz0YkH4b235kOkGLimdwHhD5QMIR2yVCkl
# iWzlDlJRR3S+Jqy2QXXeeqxfjT/JvNNBERJb5RBQ6zHFynIWIgnffEx1P2PsIV/E
# IFFrb7GrhotPwtZFX50g/KEexcCPorF+CiaZ9eRpL5gdLfXZqbId5RsCAwEAAaOC
# ATowggE2MA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFOzX44LScV1kTN8uZz/n
# upiuHA9PMB8GA1UdIwQYMBaAFEXroq/0ksuCMS1Ri6enIZ3zbcgPMA4GA1UdDwEB
# /wQEAwIBhjB5BggrBgEFBQcBAQRtMGswJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3Nw
# LmRpZ2ljZXJ0LmNvbTBDBggrBgEFBQcwAoY3aHR0cDovL2NhY2VydHMuZGlnaWNl
# cnQuY29tL0RpZ2lDZXJ0QXNzdXJlZElEUm9vdENBLmNydDBFBgNVHR8EPjA8MDqg
# OKA2hjRodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1cmVkSURS
# b290Q0EuY3JsMBEGA1UdIAQKMAgwBgYEVR0gADANBgkqhkiG9w0BAQwFAAOCAQEA
# cKC/Q1xV5zhfoKN0Gz22Ftf3v1cHvZqsoYcs7IVeqRq7IviHGmlUIu2kiHdtvRoU
# 9BNKei8ttzjv9P+Aufih9/Jy3iS8UgPITtAq3votVs/59PesMHqai7Je1M/RQ0Sb
# QyHrlnKhSLSZy51PpwYDE3cnRNTnf+hZqPC/Lwum6fI0POz3A8eHqNJMQBk1Rmpp
# VLC4oVaO7KTVPeix3P0c2PR3WlxUjG/voVA9/HYJaISfb8rbII01YBwCA8sgsKxY
# oA5AY8WYIsGyWfVVa88nq2x2zm8jLfR+cWojayL/ErhULSd+2DrZ8LaHlv1b0Vys
# GMNNn3O3AamfV6peKOK5lDCCBrQwggScoAMCAQICEA3HrFcF/yGZLkBDIgw6SYYw
# DQYJKoZIhvcNAQELBQAwYjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0
# IEluYzEZMBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTEhMB8GA1UEAxMYRGlnaUNl
# cnQgVHJ1c3RlZCBSb290IEc0MB4XDTI1MDUwNzAwMDAwMFoXDTM4MDExNDIzNTk1
# OVowaTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMUEwPwYD
# VQQDEzhEaWdpQ2VydCBUcnVzdGVkIEc0IFRpbWVTdGFtcGluZyBSU0E0MDk2IFNI
# QTI1NiAyMDI1IENBMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALR4
# MdMKmEFyvjxGwBysddujRmh0tFEXnU2tjQ2UtZmWgyxU7UNqEY81FzJsQqr5G7A6
# c+Gh/qm8Xi4aPCOo2N8S9SLrC6Kbltqn7SWCWgzbNfiR+2fkHUiljNOqnIVD/gG3
# SYDEAd4dg2dDGpeZGKe+42DFUF0mR/vtLa4+gKPsYfwEu7EEbkC9+0F2w4QJLVST
# EG8yAR2CQWIM1iI5PHg62IVwxKSpO0XaF9DPfNBKS7Zazch8NF5vp7eaZ2CVNxpq
# umzTCNSOxm+SAWSuIr21Qomb+zzQWKhxKTVVgtmUPAW35xUUFREmDrMxSNlr/NsJ
# yUXzdtFUUt4aS4CEeIY8y9IaaGBpPNXKFifinT7zL2gdFpBP9qh8SdLnEut/Gcal
# NeJQ55IuwnKCgs+nrpuQNfVmUB5KlCX3ZA4x5HHKS+rqBvKWxdCyQEEGcbLe1b8A
# w4wJkhU1JrPsFfxW1gaou30yZ46t4Y9F20HHfIY4/6vHespYMQmUiote8ladjS/n
# J0+k6MvqzfpzPDOy5y6gqztiT96Fv/9bH7mQyogxG9QEPHrPV6/7umw052AkyiLA
# 6tQbZl1KhBtTasySkuJDpsZGKdlsjg4u70EwgWbVRSX1Wd4+zoFpp4Ra+MlKM2ba
# oD6x0VR4RjSpWM8o5a6D8bpfm4CLKczsG7ZrIGNTAgMBAAGjggFdMIIBWTASBgNV
# HRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTvb1NK6eQGfHrK4pBW9i/USezLTjAf
# BgNVHSMEGDAWgBTs1+OC0nFdZEzfLmc/57qYrhwPTzAOBgNVHQ8BAf8EBAMCAYYw
# EwYDVR0lBAwwCgYIKwYBBQUHAwgwdwYIKwYBBQUHAQEEazBpMCQGCCsGAQUFBzAB
# hhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wQQYIKwYBBQUHMAKGNWh0dHA6Ly9j
# YWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRSb290RzQuY3J0MEMG
# A1UdHwQ8MDowOKA2oDSGMmh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2Vy
# dFRydXN0ZWRSb290RzQuY3JsMCAGA1UdIAQZMBcwCAYGZ4EMAQQCMAsGCWCGSAGG
# /WwHATANBgkqhkiG9w0BAQsFAAOCAgEAF877FoAc/gc9EXZxML2+C8i1NKZ/zdCH
# xYgaMH9Pw5tcBnPw6O6FTGNpoV2V4wzSUGvI9NAzaoQk97frPBtIj+ZLzdp+yXdh
# OP4hCFATuNT+ReOPK0mCefSG+tXqGpYZ3essBS3q8nL2UwM+NMvEuBd/2vmdYxDC
# vwzJv2sRUoKEfJ+nN57mQfQXwcAEGCvRR2qKtntujB71WPYAgwPyWLKu6RnaID/B
# 0ba2H3LUiwDRAXx1Neq9ydOal95CHfmTnM4I+ZI2rVQfjXQA1WSjjf4J2a7jLzWG
# NqNX+DF0SQzHU0pTi4dBwp9nEC8EAqoxW6q17r0z0noDjs6+BFo+z7bKSBwZXTRN
# ivYuve3L2oiKNqetRHdqfMTCW/NmKLJ9M+MtucVGyOxiDf06VXxyKkOirv6o02Oo
# XN4bFzK0vlNMsvhlqgF2puE6FndlENSmE+9JGYxOGLS/D284NHNboDGcmWXfwXRy
# 4kbu4QFhOm0xJuF2EZAOk5eCkhSxZON3rGlHqhpB/8MluDezooIs8CVnrpHMiD2w
# L40mm53+/j7tFaxYKIqL0Q4ssd8xHZnIn/7GELH3IdvG2XlM9q7WP/UwgOkw/HQt
# yRN62JK4S1C8uw3PdBunvAZapsiI5YKdvlarEvf8EA+8hcpSM9LHJmyrxaFtoza2
# zNaQ9k+5t1wwggbtMIIE1aADAgECAhAIT9wzT35FTtvDD4/5khg1MA0GCSqGSIb3
# DQEBCwUAMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjFB
# MD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBUaW1lU3RhbXBpbmcgUlNBNDA5
# NiBTSEEyNTYgMjAyNSBDQTEwHhcNMjYwODA1MDAwMDAwWhcNMzcxMTA0MjM1OTU5
# WjBjMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xOzA5BgNV
# BAMTMkRpZ2lDZXJ0IFNIQTI1NiBSU0E0MDk2IFRpbWVzdGFtcCBSZXNwb25kZXIg
# MjAyNiAxMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtnum8sn+zUr4
# 1JtMZbP9OMYw+HwJDpG5xkIu/lqcfNYmMX81YmsUiHLbh9ykpeWBGKTLhYBrAN9T
# dg/QEzG32XcObmgIblnr0CoQ3WSAeDZ6nH6X6VkFyYkJw3QBJREwvm4UhLzSxmwP
# A7cFKRTEOMsmEEj6qJk/dqLEAL+oQYuOwE2UuiX1Vnul8YReIyWd4kgLn9gq6LNX
# M0UplkR6jL/QHxmb6fMoGBJYbnaUI7XD6cKDpekK2SVMld4iDbzeHDtOaaxldH5I
# xuNusQ69nd8/ZXEiB5Hbxj3RlK13cX1W4DlFXKdv/CEhM8Cj1vvlmvhNroyPdRGb
# bpBlgyf8Wdu5N6ByhFwURn0U6ozlPoxN22v+fviUhP+6DR547OZnpBMWDfei1f5s
# VGwiiW/KQTWOK97g+4RJpPzPNV4VYMAwO2jM2Aty2QYPVmOQTJm0msuXnJrSbl2g
# f9JylpkJlWXqk1Q4LJsxz+TELoQCZIljbgvTJgoPU2R12ydv8i1UqL/adelA0y7U
# 9Pmmtbze9Xx3rtajC5SzQd1jgfwAwsa90v9YcSPdmeoyoBBA/27cCL237l5DTYYP
# DLQ4ON3OLTGWnvRb6jDrf/T75gMRfUzSLCBQfBusm9+mSWRlC/Df6S/e9Q8i13Cu
# hzOT2Jx+V/nlbXM4QoBwlUAhelwwJT0CAwEAAaOCAZUwggGRMAwGA1UdEwEB/wQC
# MAAwHQYDVR0OBBYEFBTJY4owLtRK+26U8+bjQH717M3iMB8GA1UdIwQYMBaAFO9v
# U0rp5AZ8esrikFb2L9RJ7MtOMA4GA1UdDwEB/wQEAwIHgDAWBgNVHSUBAf8EDDAK
# BggrBgEFBQcDCDCBlQYIKwYBBQUHAQEEgYgwgYUwJAYIKwYBBQUHMAGGGGh0dHA6
# Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBdBggrBgEFBQcwAoZRaHR0cDovL2NhY2VydHMu
# ZGlnaWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0VGltZVN0YW1waW5nUlNBNDA5
# NlNIQTI1NjIwMjVDQTEuY3J0MF8GA1UdHwRYMFYwVKBSoFCGTmh0dHA6Ly9jcmwz
# LmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNFRpbWVTdGFtcGluZ1JTQTQw
# OTZTSEEyNTYyMDI1Q0ExLmNybDAgBgNVHSAEGTAXMAgGBmeBDAEEAjALBglghkgB
# hv1sBwEwDQYJKoZIhvcNAQELBQADggIBAI3FOmEenVIK35msCYB+fShAsWvSYvLB
# ItoNdAgQ2jIqrGsVsluXMJU/+mRebBc52s6lbKAvOVPXaizmKkMLLflEEKDZQx4C
# kS2t8aHPjkXha3hYZ010htFa3dhNgmalH5vuWvh3tTCf4frTS7gPtGc4Z/xaPhQ2
# AB1mR8eEe/WbH0RWHvVIl6VwQ3+g5FKNfN2N/DWJkf13w2H+2GfqEfbd35Ww8Cvo
# YBjLNIDTadcPWdgsjsiOaK/7EsKJgLjUNIVgvcaFOLLQ/GlrA+0ZHJoFUbOr5SJN
# 8zykPspXIXlpDJY/gqFUZRROeab9GVgmhbdOJcD/63RhxPahFUGbckRONqMe6DYA
# v6/mOG0pWd3cPStsdcS7buj5DyniwRY8yooMH6ptx5vpP/pZzBPBeZD2U4Isthyx
# B5Jaa8qrOkB5z160TXiM5ADMspZ0TfD9MJoq0tFpFPssKRFhWeEDYPvcUuN7U7lv
# cdHl4ezQ3NT/7Ffs1sR1yh/LRbdZ3B3Vc6q2WmD8mDC0p9kzl2o73iVtS946IkEj
# 7FkRsZGww1teYxERROC745xrtjvcw9ZyyUjHZWGRIpJeMNsPquCDf0fkyHtB+J4A
# iNZqCQk23rxh+KbpyMTNVKItJ5l92Svl20U9NbqMBOVYl1h54NEYLJq1/xHWFKPN
# K903zJZA9P2DMYIF6TCCBeUCAQEwgYwweDELMAkGA1UEBhMCQ04xMzAxBgNVBAoM
# KuWwj+ivreicguicgu+8iOS4iua1t++8ieenkeaKgOaciemZkOWFrOWPuDE0MDIG
# A1UEAwwrU2VjR2F0ZVggSW50ZXJuYWwgQ29kZSBTaWduaW5nIFJvb3QgQ0EgMjAy
# NgIQSph24Tt2yKBKKhRlXDgGSTANBglghkgBZQMEAgEFAKCBhDAYBgorBgEEAYI3
# AgEMMQowCKACgAChAoAAMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisG
# AQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEiBCCgqB6rGa2M
# /IeEOGNuU0+HeXt5wiulrz9/U+L3ejqrUTANBgkqhkiG9w0BAQEFAASCAYBJl5Mc
# U2Gb7yzZj0hGmUOxTahTcYRKEOykBehHFnqOfKx7YAbbgYAOtiAntjMNEazdT19z
# zs3JIULZLX/+igzsCj4/3io9+MGtvtkqGdT4QfeDasguRH0fsNEr5p0HYbEwN2yR
# l5GMrHdvgo6lD2Ksfxf0ZQNWlCGKXHNURHH7ruyXb2nPsbyOJ3CjYwYXe0o9d1nK
# 3wp4fTJOLdFL450Tkkdbqh3VXB9c7WTlJj0XqYmDsCcE9iQ9kU6uHilEiLEdQJbp
# fCRLiDffIcaHFxGA+Gyel1mrV6z8QaFydGZ2mZ0zKo0EDkw/ZtuFYmYsCvIE26Mp
# q7OqVrP/xuXXT9TRb1f5/kM7HOKPIieScQZJwN2F+ANeTZ9pm1oCGtOfa96peej3
# UkcsnEFD8R2K/Mh9tAi9LfvD197CgES7wuEMwEeiB+1PAt0910j72h53f3x7Q9mI
# bLzwOOX/G9kCDBeWwD+BI/yEQJJ6NZFW/a5EMNseZR+S1567i7oBmMJY2DuhggMm
# MIIDIgYJKoZIhvcNAQkGMYIDEzCCAw8CAQEwfTBpMQswCQYDVQQGEwJVUzEXMBUG
# A1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNVBAMTOERpZ2lDZXJ0IFRydXN0ZWQg
# RzQgVGltZVN0YW1waW5nIFJTQTQwOTYgU0hBMjU2IDIwMjUgQ0ExAhAIT9wzT35F
# TtvDD4/5khg1MA0GCWCGSAFlAwQCAQUAoGkwGAYJKoZIhvcNAQkDMQsGCSqGSIb3
# DQEHATAcBgkqhkiG9w0BCQUxDxcNMjYwOTA0MDkxMzU3WjAvBgkqhkiG9w0BCQQx
# IgQg4yfBydK+Lr0xhDkLvPpctVeYDvkPUku66q8y1H2hZ8AwDQYJKoZIhvcNAQEB
# BQAEggIAd1FbqplYoJthnSoi13A2y6Wwkwc2wjk8Ei5bsB6geKObOo8v2F866O9D
# JRo7h7eMdumi96LbsU2N4aS1dUACtSu7kXXl/zq/g1kWaVKdxQCeGjxw8aBHEmr2
# 33DcdPC1e83fmTbsjKVdf+8XhXliFguPHZgzyFKyactC9jKvWroM2mEXat8+BFSD
# YDLT1K3TynqBm1nG/h5A7LEMtZF+W9IlHp3UNmYrJzTkBgs6Krgxv5qHzccK+1XW
# oABAwZXbiFDuwM9B/iQy5YaQ7xTFMLnGXZCtu/eg5QQ5lgqd5ZMszHvDasIQOgGE
# j3BwGiKrFLlO8hdeQKXoSuwc/xQFVQweg61g5pLCNXqteMOPTP4qliauC4vKP0d+
# a/dQEgWacJhEhHYNxEGBgD4qr6ICHBsYr3GsZEvCePW9KkVZ0ELSAR8i0Gc9Vnq4
# 4sT8WKRerTtWDLEGZUcm1UUE41fqsampO0i5y6rfvKp0DJayMNWzZpUPj6/iire/
# 7uOubzb8rpFdUbu760syHWxivPRU43USTGGZUJvNUubWStzVqvRKRQwmCJBu7tKd
# 8Iq4d19JGuhZofV3zO5pYBOSwVEAoN+0yHVOQKNS2ag/TCkFEOqQOu9EKb8GCt96
# 16L6P80wkvE3THsNxROfgMmBrAkSkEacWPT1A7ta7BOdbyKk5OM=
# SIG # End signature block
