PSWSMan.psm1

# Copyright: (c) 2023, Jordan Borean (@jborean93) <jborean93@gmail.com>
# MIT License (see LICENSE or https://opensource.org/licenses/MIT)

using namespace System.IO
using namespace System.Management.Automation
using namespace System.Reflection

# Resolve the cmdlet through $ExecutionContext to ensure we don't load a
# shadowed version of Import-Module.
$importModule = $ExecutionContext.InvokeCommand.GetCommand(
    'Microsoft.PowerShell.Core\Import-Module',
    [CommandTypes]::Cmdlet)

$moduleName = [Path]::GetFileNameWithoutExtension($PSCommandPath)
$loaderName = "$moduleName.Loader.LoadContext"
$loaderPath = [Path]::Combine($PSScriptRoot, 'bin', 'net8.0', "$moduleName.Loader.dll")

$isReload = $true
$loaderType = $loaderName -as [type]
if (-not $loaderType) {
    $isReload = $false

    $null = [Assembly]::LoadFrom($loaderPath)
    $loaderType = $loaderName -as [type]
}
elseif ($loaderType.Assembly.Location -ne $loaderPath) {
    # Assemblies cannot be unloaded so once a version of this module is loaded
    # in the process it is the only one that can be used.
    $msg = "Cannot import $moduleName from '$PSScriptRoot' as a different copy is already loaded in this process " +
    "from '$($loaderType.Assembly.Location)'. Start a new PowerShell process to use this copy."
    $err = [ErrorRecord]::new(
        [InvalidOperationException]::new($msg),
        'ModuleAlreadyLoadedFromDifferentPath',
        [ErrorCategory]::ResourceExists,
        $PSScriptRoot)
    throw $err
}

$mainModule = $loaderType::Initialize($moduleName)
$innerMod = & $importModule -Assembly $mainModule -PassThru:$isReload

if ($innerMod) {
    # Bug in pwsh, Import-Module in an assembly will pick up a cached instance
    # and not call the same path to set the nested module's cmdlets to the
    # current module scope.
    # https://github.com/PowerShell/PowerShell/issues/20710
    $addExportedCmdlet = [PSModuleInfo].GetMethod(
        'AddExportedCmdlet',
        [BindingFlags]'Instance, NonPublic')
    $addExportedAlias = [PSModuleInfo].GetMethod(
        'AddExportedAlias',
        [BindingFlags]'Instance, NonPublic')
    foreach ($cmd in $innerMod.ExportedCmdlets.Values) {
        $addExportedCmdlet.Invoke($ExecutionContext.SessionState.Module, @(, $cmd))
    }
    foreach ($alias in $innerMod.ExportedAliases.Values) {
        $addExportedAlias.Invoke($ExecutionContext.SessionState.Module, @(, $alias))
    }
}

# SIG # Begin signature block
# MIIw1QYJKoZIhvcNAQcCoIIwxjCCMMICAQMxDTALBglghkgBZQMEAgEwewYKKwYB
# BAGCNwIBBKBtBGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDgSdIBMq2K1tNW
# YtSkuMrvKxLfs6Fnc53XiOFe3Z2knqCCFXUwggajMIIEi6ADAgECAhMzAAg8VVxG
# uEudtugLAAAACDxVMA0GCSqGSIb3DQEBDAUAMFoxCzAJBgNVBAYTAlVTMR4wHAYD
# VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKzApBgNVBAMTIk1pY3Jvc29mdCBJ
# RCBWZXJpZmllZCBDUyBBT0MgQ0EgMDMwHhcNMjYxMDExMDI1OTE0WhcNMjYxMDE0
# MDI1OTE0WjBlMQswCQYDVQQGEwJBVTETMBEGA1UECBMKUXVlZW5zbGFuZDERMA8G
# A1UEBxMIQnJpc2JhbmUxFjAUBgNVBAoTDUpvcmRhbiBCb3JlYW4xFjAUBgNVBAMT
# DUpvcmRhbiBCb3JlYW4wggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCz
# j6D9JelNpZx3HuHWQ/AKVYmH28YoVFbzybLggGplq+MeW9q4F6mFMrEXOGNy08Zy
# 1lr3Dm3lQmtcsLsBXzOjfdIYVzjO1Lh+6nEt+NXUwBRo7k79rH0pNOkZNZV2Y975
# 5XIV/sPVpRagqIyiXsAw/BlWLVJpA14+jPxaA/aRcyX8mo8O/OVMzqHXdRciW6KT
# 9xPBj3XNsOM4yGusSSo26QprbPdodynzCNvz1QCYwSz02DAzZAQl5xy3ZE6vwbGE
# crNQybjCcEOi8usLfjq8QWJBbePW+ewNkIsoW/uGjK0n1FNJQ4SrKQAyeBEFRxJf
# PTy82gpyiQHYZEs406AtMkC7LyPVvJy6w8ooIdBhCH2nrvVf4QkJUHNCrlOQFFWj
# vBnp7b4JK2t70JYJZOzSQmu6mOYDeZVK6rQO4VgUZb425Lw6Lk6UcFykwRHWFp+a
# JX1z1DuPzPJgjJKrhDQ6jU2GYylmTvJ1twL7wyyadbzh+4uNtHK6fbndhb5Z9r0C
# AwEAAaOCAdUwggHRMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMDwGA1Ud
# JQQ1MDMGCisGAQQBgjdhAQAGCCsGAQUFBwMDBhsrBgEEAYI3YcD1uzmDxbqHboKj
# 0bsfgZfH91YwHQYDVR0OBBYEFDDCGCHkrcMZwDekebqmfEIeB0WFMB8GA1UdIwQY
# MBaAFKRDDH92WqWF5z6NKA8MF6JFaXDGMGcGA1UdHwRgMF4wXKBaoFiGVmh0dHA6
# Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMElEJTIw
# VmVyaWZpZWQlMjBDUyUyMEFPQyUyMENBJTIwMDMuY3JsMHQGCCsGAQUFBwEBBGgw
# ZjBkBggrBgEFBQcwAoZYaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9j
# ZXJ0cy9NaWNyb3NvZnQlMjBJRCUyMFZlcmlmaWVkJTIwQ1MlMjBBT0MlMjBDQSUy
# MDAzLmNydDBUBgNVHSAETTBLMEkGBFUdIAAwQTA/BggrBgEFBQcCARYzaHR0cDov
# L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMA0G
# CSqGSIb3DQEBDAUAA4ICAQBrwhbsQPpN4kK6v9Bp1My4hErkuKaIKZ9r7TmXWxvW
# gjMW0bFqgbN3MYh+o5/8QsJKeznas4nQQnL/dsLSKNVqF5i7uG0Wh57FFr5s/+dF
# a9Otu0X2fEDTWna1U0oMm9ZuaXjD681/d75uVnWogiOlUUUtoymuXV4pR6t/m7kK
# Nwd5L+NIdrEWJnRXen5jegMEAYC/5PhmuQGN1LKTR0TSU/9wtCJvw92D4X150bU+
# qzBhonW4+bTnA1OGMavfvGbkdnkLSrDm/+Gmgzdpn3R3cnX5YgkarFREXX1DVIio
# 42ABX3YwPuzGEXeBfsODI+JQnybRC5zn+qthTWJFfrjd35KEcN796871YihwYE+8
# eg3906yVbIOexZ1+FSRK+EsgRBGfFur+7H8as97i/wFXoUQgiI0/FH0BMAIo4tHU
# +Kn6DGIGeqh7ggk7/Wm8yqlFoU/qSA4llMR8QaGuB0pz+tdro74e/8RHUGJZanCl
# TWK+P4Q+7NywPIINa661oKQ5WJV/8c1E/CYsLeUOgYU0fSRu0fCUbC0S/xBhT+gy
# 8tQTC7VtFvtJz+xHMlMiSrBMmvzEDqq0XgZF91YpySWPHn7CgO1lTRYQedMPibqR
# AlOLCf0RBWbS5TQhjqhzrYghMVHdy5GjDRyCl9JC+g7qC0hm++3E02z/nShi653u
# NDCCBygwggUQoAMCAQICEzMAAAAYDeuRVamKAJgAAAAAABgwDQYJKoZIhvcNAQEM
# BQAwYzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
# bjE0MDIGA1UEAxMrTWljcm9zb2Z0IElEIFZlcmlmaWVkIENvZGUgU2lnbmluZyBQ
# Q0EgMjAyMTAeFw0yNjAzMjYxODExMzJaFw0zMTAzMjYxODExMzJaMFoxCzAJBgNV
# BAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKzApBgNVBAMT
# Ik1pY3Jvc29mdCBJRCBWZXJpZmllZCBDUyBBT0MgQ0EgMDMwggIiMA0GCSqGSIb3
# DQEBAQUAA4ICDwAwggIKAoICAQDIgNpgNFaiif2VWeWP5I6PnFXxJ/lB37fJR55G
# CvR7GLZBMkBijbiKVwgpBI3xM5nf484znH/qncJ+OCq6y3jgnQW+R8Zd7U+7Ljlr
# mcskalzSQ0ghMxEpnBW8/HHs2V8ZJzQk6HP+SDsbvsL7LdlH/eO2l4mknhDBwr0Z
# /Q966TvEth5b8kCxj1vqiV4YNthLGRqZR9u2fK/yBMWu83p6O4uo2Edg++gEew5I
# L7vnnnKFqmSh/R9vPJy3WF1YcZewAUx8sXZNUnx3ZhVg59l2LpitPiwzE6FMqIsq
# aEvVe3MzuFd2a/uWDZH6VbDyUiRK78mIg1DQYA9zDEyyBFcNI+nxVSzglvL6u7PR
# uNqgcV3sf6ELxw89ysQM/Z4R1hRFWXRpyOWKKAKtfBHTk0UnNiPcxmLMMYs8jeUj
# OidfVPjTIry/UVwnwxdlkK85cZfBEMYZ/DBNOwdomP459Y1n8izKkbhsa+p4lw+c
# QVxATBFx9ggR79HhryT7HDmpPLvkJvBZ4wW4CW32UT2SMyDe28nIOU3m+hfHlVeK
# cLBQcym5VoRDjIcCVI7uqgGW2PNME0cfei8zCwCy6HCsssJWFS7eg/YbFhnATJcy
# WfMrkNuAbMfMN8Npg8crS6jVVowyD0GG5zdgi+uQVcSK/638mA1xEYK3pnIoQgO0
# 9uuDBwIDAQABo4IB3DCCAdgwDgYDVR0PAQH/BAQDAgGGMBAGCSsGAQQBgjcVAQQD
# AgEAMB0GA1UdDgQWBBSkQwx/dlqlhec+jSgPDBeiRWlwxjBUBgNVHSAETTBLMEkG
# BFUdIAAwQTA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3Br
# aW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIA
# QwBBMBIGA1UdEwEB/wQIMAYBAf8CAQAwHwYDVR0jBBgwFoAU2UEpsA8PY2zvadf1
# zSmepEhqMOYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDovL3d3dy5taWNyb3NvZnQu
# Y29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwSUQlMjBWZXJpZmllZCUyMENvZGUl
# MjBTaWduaW5nJTIwUENBJTIwMjAyMS5jcmwwfQYIKwYBBQUHAQEEcTBvMG0GCCsG
# AQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01p
# Y3Jvc29mdCUyMElEJTIwVmVyaWZpZWQlMjBDb2RlJTIwU2lnbmluZyUyMFBDQSUy
# MDIwMjEuY3J0MA0GCSqGSIb3DQEBDAUAA4ICAQBxxyBW+X6mhdRiSwD9PMMWcGUA
# nx5/QUwnNvZdFGEX+4DRDIr9WCh4C87wHtw+lg1D3uzK10DstPX0LFLBFAC3vWMY
# X4ImXwoLhoR0xlN8mUdorJ3bgnpCJWuI1531Z1rCwPuUrSkBxfOIGDk3p2ECb3Ho
# /xHi5PRSR/OUrWuQHwXiaXMTuXu3IRLezwVkZpFmNwYRD57R9Nx2F/yM7tzOY0Hh
# 0hGCaYEK38/6FrS0SXadXWyDUCfn5XOGACRjUCnHx+JQUG0f4SHD+iblpAI0gl+Z
# HnVmdXXxHTZeTa0CYCIhFxKP2922s0g6zLmeiV13LWUmtt/UF7TrWXpMi2/0UNni
# aDoH7rnPGRV5xVX8uXy4sZii4aswzqPM7Y7+mzcranqZ8EjZk5gjLhQ3A2sZaprl
# Ou8CaRmyfcIiVH7zVfgAvm81MWXFziAf7my7QOvnyEFPGddq8MSfPtfRyw/Uq3uH
# 6KpoaJNIfPYH6fceZSi53Rat1A9grExq3ROjhhSpTcchuBItAMNVPxoKNbUm+iR/
# X3XkL+9WQginjyHe+hXLclY8vAGXFD1p40PqMIpAYsmEJBFKW9df4//1N5oQDr/F
# Y9IBJl/oSS979i5rtT7NZz9KvYraCPRBGs0QCy+sWvgQa0coM70QJVLeVwmSxUO/
# 0od0w9Qry7bSLrxGoDCCB54wggWGoAMCAQICEzMAAAAHh6M0o3uljhwAAAAAAAcw
# DQYJKoZIhvcNAQEMBQAwdzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29m
# dCBDb3Jwb3JhdGlvbjFIMEYGA1UEAxM/TWljcm9zb2Z0IElkZW50aXR5IFZlcmlm
# aWNhdGlvbiBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDIwMB4XDTIxMDQw
# MTIwMDUyMFoXDTM2MDQwMTIwMTUyMFowYzELMAkGA1UEBhMCVVMxHjAcBgNVBAoT
# FU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE0MDIGA1UEAxMrTWljcm9zb2Z0IElEIFZl
# cmlmaWVkIENvZGUgU2lnbmluZyBQQ0EgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQAD
# ggIPADCCAgoCggIBALLwwK8ZiCji3VR6TElsaQhVCbRS/3pK+MHrJSj3Zxd3KU3r
# lfL3qrZilYKJNqztA9OQacr1AwoNcHbKBLbsQAhBnIB34zxf52bDpIO3NJlfIaTE
# /xrweLoQ71lzCHkD7A4As1Bs076Iu+mA6cQzsYYH/Cbl1icwQ6C65rU4V9NQhNUw
# grx9rGQ//h890Q8JdjLLw0nV+ayQ2Fbkd242o9kH82RZsH3HEyqjAB5a8+Ae2nPI
# Pc8sZU6ZE7iRrRZywRmrKDp5+TcmJX9MRff241UaOBs4NmHOyke8oU1TYrkxh+Ye
# HgfWo5tTgkoSMoayqoDpHOLJs+qG8Tvh8SnifW2Jj3+ii11TS8/FGngEaNAWrbyf
# NrC69oKpRQXY9bGH6jn9NEJv9weFxhTwyvx9OJLXmRGbAUXN1U9nf4lXezky6Uh/
# cgjkVd6CGUAf0K+Jw+GE/5VpIVbcNr9rNE50Sbmy/4RTCEGvOq3GhjITbCa4crCz
# TTHgYYjHs1NbOc6brH+eKpWLtr+bGecy9CrwQyx7S/BfYJ+ozst7+yZtG2wR461u
# ckFu0t+gCwLdN0A6cFtSRtR8bvxVFyWwTtgMMFRuBa3vmUOTnfKLsLefRaQcVTgR
# nzeLzdpt32cdYKp+dhr2ogc+qM6K4CBI5/j4VFyC4QFeUP2YAidLtvpXRRo3AgMB
# AAGjggI1MIICMTAOBgNVHQ8BAf8EBAMCAYYwEAYJKwYBBAGCNxUBBAMCAQAwHQYD
# VR0OBBYEFNlBKbAPD2Ns72nX9c0pnqRIajDmMFQGA1UdIARNMEswSQYEVR0gADBB
# MD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL0Rv
# Y3MvUmVwb3NpdG9yeS5odG0wGQYJKwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwDwYD
# VR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBTIftJqhSobyhmYBAcnz1AQT2ioojCB
# hAYDVR0fBH0wezB5oHegdYZzaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9w
# cy9jcmwvTWljcm9zb2Z0JTIwSWRlbnRpdHklMjBWZXJpZmljYXRpb24lMjBSb290
# JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDIwLmNybDCBwwYIKwYBBQUH
# AQEEgbYwgbMwgYEGCCsGAQUFBzAChnVodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
# cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMElkZW50aXR5JTIwVmVyaWZpY2F0aW9u
# JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAyMC5jcnQwLQYI
# KwYBBQUHMAGGIWh0dHA6Ly9vbmVvY3NwLm1pY3Jvc29mdC5jb20vb2NzcDANBgkq
# hkiG9w0BAQwFAAOCAgEAfyUqnv7Uq+rdZgrbVyNMul5skONbhls5fccPlmIbzi+O
# wVdPQ4H55v7VOInnmezQEeW4LqK0wja+fBznANbXLB0KrdMCbHQpbLvG6UA/Xv2p
# fpVIE1CRFfNF4XKO8XYEa3oW8oVH+KZHgIQRIwAbyFKQ9iyj4aOWeAzwk+f9E5St
# Np5T8FG7/VEURIVWArbAzPt9ThVN3w1fAZkF7+YU9kbq1bCR2YD+MtunSQ1Rft6X
# G7b4e0ejRA7mB2IoX5hNh3UEauY0byxNRG+fT2MCEhQl9g2i2fs6VOG19CNep7Sq
# uKaBjhWmirYyANb0RJSLWjinMLXNOAga10n8i9jqeprzSMU5ODmrMCJE12xS/NWS
# hg/tuLjAsKP6SzYZ+1Ry358ZTFcx0FS/mx2vSoU8s8HRvy+rnXqyUJ9HBqS0DErV
# LjQwK8VtsBdekBmdTbQVoCgPCqr+PDPB3xajYnzevs7eidBsM71PINK2BoE2UfMw
# xCCX3mccFgx6UsQeRSdVVVNSyALQe6PT12418xon2iDGE81OGCreLzDcMAZnrUAx
# 4XQLUz6ZTl65yPUiOh3k7Yww94lDf+8oG2oZmDh5O1Qe38E+M3vhKwmzIeoB1dVL
# lz4i3IpaDcR+iuGjH2TdaC1ZOmBXiCRKJLj4DT2uhJ04ji+tHD6n58vhavFIrmcx
# ghq2MIIasgIBATBxMFoxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQg
# Q29ycG9yYXRpb24xKzApBgNVBAMTIk1pY3Jvc29mdCBJRCBWZXJpZmllZCBDUyBB
# T0MgQ0EgMDMCEzMACDxVXEa4S5226AsAAAAIPFUwCwYJYIZIAWUDBAIBoHwwEAYK
# KwYBBAGCNwIBDDECMAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYB
# BAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIDccxCHTCudo
# F0IK0iE9pjBKSUkskcl5HzKYH/KEP+v7MAsGCSqGSIb3DQEBAQSCAYBNpkO4eLUa
# SNzvXDqSb7Sp70jD+ntizGOGIVQYIy8SbDRVmOmn84nYU7FrqsbYYohnqnMCPBlb
# W2rydy0OxKXatQ4i4T4ORI0hBRoDTyFvDvNKZhJjJHrXIsHz+UmFqBvhit2PJpvD
# ZPQ+A4OEcRERxdDnONyLi2zCoyNQRB43OZ1Ee+rRhBHf2DSxnMPq42qNWJQMNOP5
# H7K4jxFfVES6QdGv4J4aBPnIx7YVlpEXXQQMk5mPCHaV0QA/qE/YqqY5iHXmtKM3
# BVmamndma81dTJlRdhS22ekFvtA5Cr+u+KO0AXnlIVhVzXK1cRk25UXeQ6ElaVu5
# 0jv8+eCo3XdttpMiyUGsK5b3w/VXqgqe3o4tCLLXcCzDViau3sP7CEM+lgZ31qH7
# uksFGmxDjOmEyAt1Ltp9KyeKYLXN8eQ8dDwvzoCBSbGhxrUblWjzSTEQSxQPtvVw
# sJWGek59ohqjfh4ZU1TwA2DcO3pwWAEUFyZ5LCq5fyQPuziyPBKFYAOhghgcMIIY
# GAYKKwYBBAGCNwMDATGCGAgwghgEBgkqhkiG9w0BBwKgghf1MIIX8QIBAzEPMA0G
# CWCGSAFlAwQCAQUAMIIBbQYLKoZIhvcNAQkQAQSgggFcBIIBWDCCAVQCAQEGCisG
# AQQBhFkKAwEwMTANBglghkgBZQMEAgEFAAQgW+xgr3uzqZnMFaMbvqMwBtnC3lTe
# tiO0Qa7QgVY8QwECBmrI5fRe9hgTMjAyNjEwMTMwMDIwNDMuNzE0WjAEgAIB9AIJ
# ANLsJPZGQXGkoIHhpIHeMIHbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGlu
# Z3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
# cmF0aW9uMSUwIwYDVQQLExxNaWNyb3NvZnQgQW1lcmljYSBPcGVyYXRpb25zMScw
# JQYDVQQLEx5uU2hpZWxkIFRTUyBFU046QTUwMC0wNUUwLUQ5NDcxNTAzBgNVBAMT
# LE1pY3Jvc29mdCBQdWJsaWMgUlNBIFRpbWUgU3RhbXBpbmcgQXV0aG9yaXR5oIIP
# ITCCB4IwggVqoAMCAQICEzMAAAAF5c8P/2YuyYcAAAAAAAUwDQYJKoZIhvcNAQEM
# BQAwdzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
# bjFIMEYGA1UEAxM/TWljcm9zb2Z0IElkZW50aXR5IFZlcmlmaWNhdGlvbiBSb290
# IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDIwMB4XDTIwMTExOTIwMzIzMVoXDTM1
# MTExOTIwNDIzMVowYTELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBD
# b3Jwb3JhdGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFB1YmxpYyBSU0EgVGltZXN0
# YW1waW5nIENBIDIwMjAwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCe
# fOdSY/3gxZ8FfWO1BiKjHB7X55cz0RMFvWVGR3eRwV1wb3+yq0OXDEqhUhxqoNv6
# iYWKjkMcLhEFxvJAeNcLAyT+XdM5i2CgGPGcb95WJLiw7HzLiBKrxmDj1EQB/mG5
# eEiRBEp7dDGzxKCnTYocDOcRr9KxqHydajmEkzXHOeRGwU+7qt8Md5l4bVZrXAhK
# +WSk5CihNQsWbzT1nRliVDwunuLkX1hyIWXIArCfrKM3+RHh+Sq5RZ8aYyik2r8H
# xT+l2hmRllBvE2Wok6IEaAJanHr24qoqFM9WLeBUSudz+qL51HwDYyIDPSQ3SeHt
# Kog0ZubDk4hELQSxnfVYXdTGncaBnB60QrEuazvcob9n4yR65pUNBCF5qeA4QwYn
# ilBkfnmeAjRN3LVuLr0g0FXkqfYdUmj1fFFhH8k8YBozrEaXnsSL3kdTD01X+4Lf
# IWOuFzTzuoslBrBILfHNj8RfOxPgjuwNvE6YzauXi4orp4Sm6tF245DaFOSYbWFK
# 5ZgG6cUY2/bUq3g3bQAqZt65KcaewEJ3ZyNEobv35Nf6xN6FrA6jF9447+NHvCje
# WLCQZ3M8lgeCcnnhTFtyQX3XgCoc6IRXvFOcPVrr3D9RPHCMS6Ckg8wggTrtIVnY
# 8yjbvGOUsAdZbeXUIQAWMs0d3cRDv09SvwVRd61evQIDAQABo4ICGzCCAhcwDgYD
# VR0PAQH/BAQDAgGGMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRraSg6NS9I
# Y0DPe9ivSek+2T3bITBUBgNVHSAETTBLMEkGBFUdIAAwQTA/BggrBgEFBQcCARYz
# aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9zaXRvcnku
# aHRtMBMGA1UdJQQMMAoGCCsGAQUFBwMIMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIA
# QwBBMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUyH7SaoUqG8oZmAQHJ89Q
# EE9oqKIwgYQGA1UdHwR9MHsweaB3oHWGc2h0dHA6Ly93d3cubWljcm9zb2Z0LmNv
# bS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMElkZW50aXR5JTIwVmVyaWZpY2F0aW9u
# JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAyMC5jcmwwgZQG
# CCsGAQUFBwEBBIGHMIGEMIGBBggrBgEFBQcwAoZ1aHR0cDovL3d3dy5taWNyb3Nv
# ZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBJZGVudGl0eSUyMFZlcmlm
# aWNhdGlvbiUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMjAu
# Y3J0MA0GCSqGSIb3DQEBDAUAA4ICAQBfiHbHfm21WhV150x4aPpO4dhEmSUVpbix
# NDmv6TvuIHv1xIs174bNGO/ilWMm+Jx5boAXrJxagRhHQtiFprSjMktTliL4sKZy
# t2i+SXncM23gRezzsoOiBhv14YSd1Klnlkzvgs29XNjT+c8hIfPRe9rvVCMPiH7z
# PZcw5nNjthDQ+zD563I1nUJ6y59TbXWsuyUsqw7wXZoGzZwijWT5oc6GvD3HDokJ
# Y401uhnj3ubBhbkR83RbfMvmzdp3he2bvIUztSOuFzRqrLfEvsPkVHYnvH1wtYyr
# t5vShiKheGpXa2AWpsod4OJyT4/y0dggWi8g/tgbhmQlZqDUf3UqUQsZaLdIu/XS
# jgoZqDjamzCPJtOLi2hBwL+KsCh0Nbwc21f5xvPSwym0Ukr4o5sCcMUcSy6TEP7u
# MV8RX0eH/4JLEpGyae6Ki8JYg5v4fsNGif1OXHJ2IWG+7zyjTDfkmQ1snFOTgyEX
# 8qBpefQbF0fx6URrYiarjmBprwP6ZObwtZXJ23jK3Fg/9uqM3j0P01nzVygTppBa
# bzxPAh/hHhhls6kwo3QLJ6No803jUsZcd4JQxiYHHc+Q/wAMcPUnYKv/q2O444LO
# 1+n6j01z5mggCSlRwD9faBIySAcA9S8h22hIAcRQqIGEjolCK9F6nK9ZyX4lhths
# GHumaABdWzCCB5cwggV/oAMCAQICEzMAAABgcgYkikoFuNkAAAAAAGAwDQYJKoZI
# hvcNAQEMBQAwYTELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw
# b3JhdGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFB1YmxpYyBSU0EgVGltZXN0YW1w
# aW5nIENBIDIwMjAwHhcNMjYwOTE3MTg1NzI3WhcNMjcwOTE0MTg1NzI3WjCB2zEL
# MAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v
# bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjElMCMGA1UECxMcTWlj
# cm9zb2Z0IEFtZXJpY2EgT3BlcmF0aW9uczEnMCUGA1UECxMeblNoaWVsZCBUU1Mg
# RVNOOkE1MDAtMDVFMC1EOTQ3MTUwMwYDVQQDEyxNaWNyb3NvZnQgUHVibGljIFJT
# QSBUaW1lIFN0YW1waW5nIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
# ADCCAgoCggIBAJoTY0vAU8eK+kN8x4BKnIlH9iQTFcIiEQlfNr5cc5jWEaQDpqjZ
# p3vU/BSRYGenvTs+oHs4UQfhfBePUoupwfvrE/rknRbMV05RfK585gQXn4v2eKIW
# StrcQldJzXDMO4SAk7xBKjYCuGZaXIV1a/HIWPsVCyskVGqzVxiO8mm4L4j1qZmA
# flvxqB5Z31ei3eWp2Dch+FEjk0lVUAP9SKV/vRuDu9LnZr3tJzV0zB2marXLbk+/
# oi2paegA9lFpINFP6M7y9WVTxmN1yKqaD+ESDlNkifkPb/CAN3mXiDbQCJwSvPAv
# uwBb38naq7uj74DsmcJu+/CQJq3wQgPhYzmOH8n2ooNZSXNdf/bEfi+uwWy1648Z
# m5ujDYMYyfei/S48lVSkVuOTGxMKFn2KcZEmezeVc/dPP2uLaIMl2KoaY3Js1HcG
# EH17ykl2TBBecVBinn834VnHzjkRG+p31CjE1zSCChED1Fa0qdOMCn/akDtbJOir
# aBD9eGRNYSNgfJCwKaRv/wlig8yjFAk1Dcs/ExnkvzMGfLE+WreJ/BmE499S072u
# PWDU4oSQCwUmYnMkZ+4vBNzUBuS4ZVOkU5yjRglZzHSCv1BV8U5VmEEBd7Ddxc0a
# Ul5uZNQz2o4jkKivfxgxBRZzgqKO6JCwoap+lR6S5LiLUEDwbj2xyOLfAgMBAAGj
# ggHLMIIBxzAdBgNVHQ4EFgQUiFQodGFQBDsTCbiC3pKjt17aamIwHwYDVR0jBBgw
# FoAUa2koOjUvSGNAz3vYr0npPtk92yEwbAYDVR0fBGUwYzBhoF+gXYZbaHR0cDov
# L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwUHVibGlj
# JTIwUlNBJTIwVGltZXN0YW1waW5nJTIwQ0ElMjAyMDIwLmNybDB5BggrBgEFBQcB
# AQRtMGswaQYIKwYBBQUHMAKGXWh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lv
# cHMvY2VydHMvTWljcm9zb2Z0JTIwUHVibGljJTIwUlNBJTIwVGltZXN0YW1waW5n
# JTIwQ0ElMjAyMDIwLmNydDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQMMAoGCCsG
# AQUFBwMIMA4GA1UdDwEB/wQEAwIHgDBmBgNVHSAEXzBdMFEGDCsGAQQBgjdMg30B
# ATBBMD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3Bz
# L0RvY3MvUmVwb3NpdG9yeS5odG0wCAYGZ4EMAQQCMA0GCSqGSIb3DQEBDAUAA4IC
# AQBXi+Z/KQU0lz0ZtOXYnG5vgrmi6XADP5Aoe8sSm6Oy2NcWIcOciGv3pTli46YV
# VrnxoJ5xFwaquNrhgzzgMxURR7gZcPIduwsZbqLEzHMbPBK7Pa4EG+zYJxxzbn3M
# 5q+5c5+3ZCE5y8GKOJddsW5JI9lcAtS9HmLW4SRI7Km4F52jh9QKzj2/68al7Z2q
# xLg72YgTMGzZey5EF5U5g0o4fAJxeVfDgprwHks+wzBt8w7cZhW381dAbHiVk89W
# Yic017zglRodLAgtJvsVQcaZ/nxPJLLZCiFTvA+DGawLfa6EBWB/wCqN3Z0466vP
# FLgO+qqUWmYa9Ps39ohdICgBwYBmDzZz2e9yB0ESTEIn0gqvzKFkGt/Dt7H2nA0d
# r4Mbw2fo36Oy0BV4PggoB9oc+h2X4Xw/Ep03vZgGB2P0TGh4UffoydKpW7xYx2hA
# Rd4rAKlqKbEyVlQzDxMuO4cDiH5AMi/XOP3HCJc0tJxR0SsYTeeDl9Tf2zcGccG0
# hy6F+2PlUnVhH6f8K521KHyOSsoWoHuIGTjGV7d93McVRRga05KqTbsTawGFr/bY
# TH3UhELxlXpQIC8nnTI0JFf3vFA/5WuzefHVnc3DZVxW3zUXvxYc7H+Eq1tSJZch
# blyNhrGcl2NSh4QpwBpPKeLXeCSLgyFbaukaAV4QJdIAFjGCB0Mwggc/AgEBMHgw
# YTELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEy
# MDAGA1UEAxMpTWljcm9zb2Z0IFB1YmxpYyBSU0EgVGltZXN0YW1waW5nIENBIDIw
# MjACEzMAAABgcgYkikoFuNkAAAAAAGAwDQYJYIZIAWUDBAIBBQCgggScMBEGCyqG
# SIb3DQEJEAIPMQIFADAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZI
# hvcNAQkFMQ8XDTI2MTAxMzAwMjA0M1owLwYJKoZIhvcNAQkEMSIEINyLv9CulDra
# rqzHZURzAHU9USTvTOL8+MG48Y9o9+QoMIG5BgsqhkiG9w0BCRACLzGBqTCBpjCB
# ozCBoAQgN8uMufC9Lni60qo8rGZxiUfs6udrTFzTX0ylelK2ArMwfDBlpGMwYTEL
# MAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAG
# A1UEAxMpTWljcm9zb2Z0IFB1YmxpYyBSU0EgVGltZXN0YW1waW5nIENBIDIwMjAC
# EzMAAABgcgYkikoFuNkAAAAAAGAwggNeBgsqhkiG9w0BCRACEjGCA00wggNJoYID
# RTCCA0EwggIpAgEBMIIBCaGB4aSB3jCB2zELMAkGA1UEBhMCVVMxEzARBgNVBAgT
# Cldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29m
# dCBDb3Jwb3JhdGlvbjElMCMGA1UECxMcTWljcm9zb2Z0IEFtZXJpY2EgT3BlcmF0
# aW9uczEnMCUGA1UECxMeblNoaWVsZCBUU1MgRVNOOkE1MDAtMDVFMC1EOTQ3MTUw
# MwYDVQQDEyxNaWNyb3NvZnQgUHVibGljIFJTQSBUaW1lIFN0YW1waW5nIEF1dGhv
# cml0eaIjCgEBMAcGBSsOAwIaAxUAl78zyMK9SWTz4i1jrQlRYqN1QjegZzBlpGMw
# YTELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEy
# MDAGA1UEAxMpTWljcm9zb2Z0IFB1YmxpYyBSU0EgVGltZXN0YW1waW5nIENBIDIw
# MjAwDQYJKoZIhvcNAQELBQACBQDud1jzMCIYDzIwMjYxMDEyMTMwMjQzWhgPMjAy
# NjEwMTMxMzAyNDNaMHQwOgYKKwYBBAGEWQoEATEsMCowCgIFAO53WPMCAQAwBwIB
# AAICAJowBwIBAAICEj0wCgIFAO54qnMCAQAwNgYKKwYBBAGEWQoEAjEoMCYwDAYK
# KwYBBAGEWQoDAqAKMAgCAQACAwehIKEKMAgCAQACAwGGoDANBgkqhkiG9w0BAQsF
# AAOCAQEAXsSVT16oEWuWKK8POdqEjxGJnhd4lMGUCNN1aRS4gtnAxzmpmj/NOZV7
# Yy2ypO1Gcjo5nTwQO1AzcXgmzjDzPmuXRfCmNzU74JOKG5rzF98pdvlHgrCNCHk0
# QZoQ9nX/e8msiePA+TrQkZCk1R/L+CWqpaGl21qMne4pLbY6iyP968TW7eO2+Gva
# iIYhfJHRVkA9zMXkJ15Fl+F1tqp0YorUkgW2itGSDisZ9qEniuAnPEmGo5eC0jKf
# iTbRcF7aHWzZaRnX9USjVkyPsg30F6vmczeLQT+iRA35VRs8biw3LyA+phCQCTZ/
# 1SoNArnGoLHKACrYycaTs8adoYl2NjANBgkqhkiG9w0BAQEFAASCAgB5sQf5V+Tl
# mPhXCF09BHS6Gkt6TEX8/Xg24pQdRSggQbky8PGj2Ph/6JJH/OuOFuB3ZulkNFg8
# Tjj+saVTctASuPFo3GGnzuwGl71xX+J40EOENtwONTgw9eVOF+EYdMn4pFvAWlx2
# kex3ZNVhUV4kWygQxnLjRzjNnWyHSQtmNk+dGRopmRYBAUkoFsmTHg3kD+wUEsLz
# AUSF0+64jNsEaJH1gSEbx+3iP5U172HaM/OxdVg+MKmX5nO0wR40LRUjnoA9xy1f
# 13JxbyRuFY7wB0diqB1N4cYoxPWHmuXqPjT0OeaGSP6DXK5fcPW6yof89wEH8ECb
# HLhNVcfyK01am/1bo7WJjmvrPdsgsxcovJ2Po/DjnyzE4wFrF7bFsYGzHaDH3Lcf
# en0xv4Ih34dRpnqpHgZ6t3XvfnK7bHgX+SIYKXfFYlAzDHIeiRWyBxeR05w5a4Rr
# UNcGhMbGryZHGEPr4m7EPgR50qLxh2jGxdVrV8CTYeEuxRidL0CrqYb/Uqjx5apu
# V1623AwdUVY4M184mLtZZzp3SngPY1f12qcbXwd7jUtRwV2Do8zxnpHloVTnOEPl
# s4yoN508oBZZtnZJ64V4F0dRKOkD1JTS6uDxZhVEHViG+iaF1k/WcxzqyTvynNW+
# ifQi+AOpsGQ8WoPairXOZX9jsQ3nZdj1xw==
# SIG # End signature block