AzStackHci.DiagnosticSettings.psd1
|
# # Module manifest for module 'AzStackHci.DiagnosticSettings' # # Generated by: Microsoft Corporation. # # Generated on: July 7th 2026. # @{ # Script module or binary module file associated with this manifest. RootModule = 'AzStackHci.DiagnosticSettings.psm1' # Version number of this module. ModuleVersion = '0.6.7' # Supported PSEditions of this module (Desktop, Core, CoreCLR, etc.) CompatiblePSEditions = @('Desktop', 'Core') # ID used to uniquely identify this module. GUID = '741476f0-267c-4a20-9830-c8478444638e' # Author of this module. Author = 'Microsoft Corporation' # Company or vendor of this module. CompanyName = 'Microsoft Corporation' # Copyright statement for this module. Copyright = '(c) 2026 Microsoft Corporation. All rights reserved.' # Description of the functionality provided by this module. Description = 'Microsoft Azure Local - Diagnostics settings and connectivity tests support module' # Minimum version of the Windows PowerShell engine required by this module. PowerShellVersion = '5.1' # Name of the Windows PowerShell host required by this module. # PowerShellHostName = '' # Minimum version of the Windows PowerShell host required by this module. # PowerShellHostVersion = '' # Minimum version of Microsoft .NET Framework required by this module. This prerequisite is valid for the PowerShell Desktop edition only. # DotNetFrameworkVersion = '' # Minimum version of the common language runtime (CLR) required by this module. This prerequisite is valid for the PowerShell Desktop edition only. # CLRVersion = '' # Processor architecture (None, X86, Amd64) required by this module. # ProcessorArchitecture = '' # Modules that must be imported into the global environment prior to importing this module #RequiredModules = '' # Assemblies that must be loaded prior to importing this module # RequiredAssemblies = @() # Script files (.ps1) that are run in the caller's environment prior to importing this module. # ScriptsToProcess = @() # Type files (.ps1xml) to be loaded when importing this module # TypesToProcess = @() # Format files (.ps1xml) to be loaded when importing this module # FormatsToProcess = @() # Modules to import as nested modules of the module specified in RootModule/ModuleToProcess # IMPORTANT: .ps1 files listed here are dot-sourced into the root module scope. # Private (internal) helpers are listed first, then Public (exported) functions. NestedModules = @( # Constants and module state initialization (loaded first) 'Private\AzStackHci.Constants.ps1', # Private helpers (loaded after constants - order matters) 'Private\AzStackHci.MemoryDump.Helpers.ps1', 'Private\AzStackHci.Connectivity.Helpers.ps1', 'Private\AzStackHci.Layer7.Helpers.ps1', 'Private\AzStackHci.DNS.Helpers.ps1', 'Private\AzStackHci.WildcardAndSubdomain.Helpers.ps1', 'Private\AzStackHci.ParallelLayer7.Helpers.ps1', 'Private\AzStackHci.ConnectivityCluster.Helpers.ps1', 'Private\AzStackHci.HardwareOEM.Helpers.ps1', 'Private\AzStackHci.ModuleManagement.Helpers.ps1', 'Private\AzStackHci.Network.Helpers.ps1', 'Private\AzStackHci.Results.Helpers.ps1', 'Private\AzStackHci.OsConfigReport.Helpers.ps1', 'Private\AzStackHci.Utility.Helpers.ps1', # Public exported functions 'Public\AzStackHci.MemoryDumpSettings.ps1', 'Public\AzStackHci.PageFileSettings.ps1', 'Public\AzStackHci.UserModeCrashDumpSettings.ps1', 'Public\AzStackHci.SSLInspection.ps1', 'Public\AzStackHci.ClusterPerformance.ps1', 'Public\AzStackHci.ConnectivityTests.ps1', 'Public\AzStackHci.OsConfigSettings.ps1', 'Public\AzStackHci.PrivateLinkScope.ps1' ) # Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export. FunctionsToExport = @( 'Get-AzStackHciMemoryDumpSettings', 'Set-AzStackHciMemoryDumpSettings', 'Restore-AzStackHciMemoryDumpSettings', 'Get-AzStackHciPageFileSettings', 'Restore-AzStackHciPageFileSettings', 'Set-AzStackHciPageFileSettings', 'Set-AzStackHciPageFileSettingsMinimal', 'Get-AzStackHciUserModeCrashDumpSettings', 'Set-AzStackHciUserModeCrashDumpSettings', 'Restore-AzStackHciUserModeCrashDumpSettings', 'Test-AzStackHciSSLInspection', 'Send-ClusterPerformanceHistory', 'Test-AzureLocalConnectivity', 'Test-Layer7Connectivity', 'Test-TCPConnectivity', 'Get-AzStackHciOsConfigSettings', 'Test-ArcMachinePrivateLinkScopeEnabled' ) # Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export. CmdletsToExport = @() # Variables to export from this module # Set to empty array to prevent leaking internal script-scoped variables to consumers VariablesToExport = @() # Aliases to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no aliases to export. # AliasesToExport = '*' # DSC resources to export from this module # DscResourcesToExport = @() # List of all modules packaged with this module # ModuleList = @() # List of all files packaged with this module # FileList = @() # Private data to pass to the module specified in RootModule/ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell. PrivateData = @{ PSData = @{ # Tags applied to this module. These help with module discovery in online galleries. Tags = @('Microsoft', 'AzStackHci', 'Diagnostic', 'Settings', 'Connectivity', 'AzureLocal') # A URL to the license for this module. LicenseUri = 'https://github.com/Azure/AzureLocal-Supportability/blob/main/LICENSE' # A URL to the main website for this project. ProjectUri = 'https://github.com/Azure/AzureLocal-Supportability' # A URL to an icon representing this module. # IconUri = '' # ReleaseNotes of this module — full history in CHANGELOG.md shipped with the module ReleaseNotes = @' ## v0.6.7 Three headline features for Test-AzureLocalConnectivity: HEAD-method optimisation (-RequestMethod), process-isolated parallel fan-out (-Parallelism), and cluster-wide fan-out (-Scope Cluster). Defaults preserve pre-0.6.7 output except -RequestMethod, which defaults to Auto (HEAD with GET fallback — see below). ### Test-AzureLocalConnectivity — -ExportPath always copies to ProgramData - Results are ALWAYS written to C:\ProgramData\AzStackHci.DiagnosticSettings. A custom -ExportPath is now an ADDITIONAL copy target — the run folder is also copied there (never instead of ProgramData). Copy is best-effort (warns on failure, never aborts). Default unchanged (ProgramData only). Centralized as $script:DEFAULT_DIAG_EXPORT_PATH. - -ExportPath is validated up front: empty / UNC (\\server\share) / relative / invalid-char paths are rejected; a valid absolute local path that does not yet exist is accepted and created at copy time. ### Test-AzureLocalConnectivity — proxy configuration on -PassThru + JSON - -PassThru and the JSON summary now expose ProxyEnabled (bool), ProxyServer (raw netsh winhttp string, null when no proxy), ProxyHttp and ProxyHttps. For the Arc Gateway scenario (http=customerproxy:8080;https=localhost:40343) Get-Proxy parses the two schemes into ProxyHttp/ProxyHttps so callers can confirm both without parsing the transcript. All null when no proxy / a single un-prefixed proxy is set (ProxyServer still holds the raw value). ### Test-AzureLocalConnectivity — new -Scope Cluster cluster-wide fan-out - New parameter -Scope <Node|Cluster> default 'Node'. -Scope Cluster enumerates Get-ClusterNode (UP only) and runs the node-scope test on every node in parallel via Invoke-Command, merging per-node results into a single cluster-shaped pscustomobject. - New tabbed HTML cluster report (Status Overview + per-node tabs) with companion JSON sidecar (schema 'AzStackHciClusterConnectivity/v1') containing the full cluster bundle and per-node rows so consumers can recover everything the HTML shows. - New per-node download speed + run telemetry: the fan-out scriptblock re-emits each node result as a pscustomobject so the scalar telemetry survives Invoke-Command serialization (container NoteProperties are otherwise stripped). Exposed as NodeDownloadSpeeds[<node>] and NodeTelemetry[<node>] on the cluster result, a Download Speed column in the HTML Status Overview, and in the JSON sidecar. - New row field 'MachineName' = $env:COMPUTERNAME on every result row. Additive — existing parsers see one new column / property and continue to work. - Cluster fan-out uses standard Kerberos / Invoke-Command (NO CredSSP / WinRM / TrustedHosts changes — operator must run with valid credentials). Per-node sweeps run in parallel (one lightweight Start-Job per node); each node runs its own local sweep at per-node -Parallelism 8 by default (override with -Parallelism). - Strict exact-version pre-flight: every node is checked for the orchestrator's EXACT module version before any test runs. A missing/drifted node is a graceful, blocking failure (lists node(s), returns $null) so a report never blends mixed versions. Fan-out import pinned via -RequiredVersion (was plain -Force). - New opt-in switch -InstallMissingModuleOnNodes (only with -Scope Cluster): side-loads the orchestrator's exact version to missing/drifted nodes by copying its module folder over a PSSession (Copy-Item -ToSession) — air-gap friendly (no PSGallery / internet). Opt-in by design (no silent node mutation; no CredSSP / WinRM / TrustedHosts changes). The pre-flight failure suggests re-running with this switch; using it without -Scope Cluster emits a Write-Warning. - Send-DiagnosticData / Invoke-UploadDiagnosticResults integration for the cluster bundle when -ExcludeUploadResults is not set. ### Test-AzureLocalConnectivity — new -Parallelism parameter (Start-Job fan-out) - New parameter -Parallelism <int> [ValidateRange(1,16)], default 1. At 1 the Layer-7 endpoint loop is byte-identical to pre-0.6.7. At 2..16 the endpoint list is partitioned into N buckets and each bucket is dispatched to a Start-Job process-isolated worker; the parent waits for all workers and merges by RowID. Start-Job (not ForEach -Parallel) so PS 5.1 Desktop is supported and per-worker mutation of ServicePointManager statics is isolated. - Cost-aware bin-pack: rows scored by Get-Layer7RowCost (CRL/OCSP/Critical=3, Wildcard/Redirect=2, default=1) and assigned greedily to the cheapest bucket, avoiding one bucket getting all the slow CRL endpoints. -RoundRobin preserves the legacy modulo-N distribution. - Worker contract: each job imports the module fresh, seeds module-scope state from the parent snapshot, runs its bucket, then snapshots classification state (SSLInspectedURLs, CRLOfflineURLs, SSLInspectionDetected, PrivateLink* arrays) + new CRL/OCSP rows. Parent merge replaces rows by RowID, dedupes CRL/OCSP by URL+Port, unions classification arrays, ORs the SSL-inspection flag. - [bucket-N] log prefix: workers tag every Write-HostAzS line with their bucket index so the parent transcript shows '[bucket-3] Testing https://...' instead of un-attributed lines. - Start-Job names zero-pad the bucket index so worker output replays in numeric bucket order for -Parallelism >= 11 (cosmetic; output is RowID-sorted at merge). - Reliability: try/finally Stops + Removes every job on exit (per-run GUID tag). Per-bucket Wait-Job timeout scales with bucket size; laggard buckets are Stop-Job-ed and their unfinished endpoints picked up by the remaining-URLs loop. Per-row try/catch means one failed endpoint never aborts a bucket. - New JSON top-level fields: Layer7WallClockSeconds (perceived L7-phase elapsed — the parallel-scaling metric; Layer7TotalDurationSeconds keeps "sum of per-endpoint times") and Parallelism. -PassThru exposes both as NoteProperties. - Output ordering identical to sequential (Publish-Results sorts by RowID), so the diff between -Parallelism 1 and 8 is limited to transient network state plus the new top-level fields. - Wildcard subdomain probes run concurrently with the L7 sweep when -Parallelism > 1: a dedicated Start-Job worker runs Test-ManuallyDefinedSubdomains and merges new subdomain rows + wildcard Notes after the L7 merge (~10-15 s saved), falling back to inline sequential if it times out/throws. New JSON field WildcardWorkerWallClockSec (0 sequential); -Parallelism 1 unchanged. - Latent bug fixed: Invoke-EndpointConnectivityTest didn't forward -RequestMethod, so it was silently ignored on the wildcard-expansion / redirect-retry / remaining-URLs paths. Fixed. ### Bug fixes / hygiene (v0.6.7) - Removed dead Resolve-Layer7Redirect helper (unused; would have polluted $script:RedirectedResults with raw strings). - New private Get-LoadedModuleVersion helper handles the case where Get-Module returns multiple entries for nested-module loads. - New PSScriptAnalyzerSettings.psd1 at module root (0 findings). - New Unit-Tests\Run-PesterWithCoverage.ps1: Pester 5.x + JaCoCo coverage XML for CI / dashboards. - Final-review fix: Publish-Results' Select-Object projection was dropping the new MachineName column from HTML / CSV / JSON / -PassThru. Now preserved (appended at end). - Final-review fix: cluster orchestrator distinguishes WinRM remoting failures from genuinely missing modules so users get actionable guidance for each. ### Test-AzureLocalConnectivity / Test-Layer7Connectivity — HEAD-method optimisation (DEFAULT CHANGED) - New -RequestMethod parameter on both functions: 'Auto' (NEW DEFAULT — HEAD first, GET fallback on 405/400 or an ambiguous 403), 'Get' (legacy GET-only, opt in for byte-identical pre-0.6.7 output), or 'Head' (HEAD only, no fallback). - Behaviour change: the default is now Auto. HEAD skips the response-body download on every test; the Auto fallback re-issues GET on 405/400 or an ambiguous (body-less) 403 (first request only, once per URL, before timeout-retry, so HEAD-incompatible endpoints never consume the retry budget). Cert-chain capture, redirect handling, status interpretation, and SSL/CRL classification are unchanged on the GET retry. - Measured impact (n=11, WestEurope, 81 endpoints): Layer7-sum mean saving ~2.9 s (~3-4%), faster in 7/11 runs. Larger endpoint sets see proportionally larger savings. - Opt out for byte-identical pre-0.6.7 behaviour: -RequestMethod Get. ### Test-AzureLocalConnectivity — run-timing telemetry - New JSON fields: RequestMethod, Parallelism, TotalDurationSeconds, Layer7TotalDurationSeconds (sum), Layer7WallClockSeconds (perceived), Layer7TestedEndpoints — enables A/B comparison from one JSON file, also exposed via -PassThru NoteProperties. End-of-run console/transcript line summarises all of them. ### Reliability - Invoke-WebRequest DNS-failure retry: on NameResolutionFailure, Test-Layer7Connectivity retries up to 3 times (1 s pause) before the HEAD->GET fallback and timeout-retry — catches transient resolver / proxy / IPv6-race flakes the DNS pre-check loop misses. - Test-AzureLocalConnectivity and Get-AzStackHciOsConfigSettings now also Write-Error (in addition to Write-HostAzS) on elevation failure so -NoOutput callers see the failure. Get-AzStackHciOsConfigSettings additionally gains an explicit Test-Elevation pre-check. ### Helper scripts - New Helpers\Compare-ParallelismPerformance.ps1 and Helpers\Compare-RequestMethodPerformance.ps1 A/B benchmarking scripts for -Parallelism (Layer7Speedup + efficiency) and -RequestMethod (WallClock/Layer7 savings). For full version history (including v0.6.6 and earlier) see CHANGELOG.md shipped with this module. '@ # External dependent modules of this module # ExternalModuleDependencies = '' } # End of PSData hashtable } # End of PrivateData hashtable # HelpInfo URI of this module HelpInfoURI = 'https://github.com/Azure/AzureLocal-Supportability/blob/main/TSG/Networking/Arc-Gateway-Outbound-Connectivity/Troubleshoot-Outbound-Connectivity.md' # Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix. # DefaultCommandPrefix = '' } # Generated by: Microsoft Corporation. # SIG # Begin signature block # MIIncQYJKoZIhvcNAQcCoIInYjCCJ14CAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBlbXw1jqgFRVtQ # idAeriMqiP/WtdmrWhnzhco8kvEAjqCCDMkwggYEMIID7KADAgECAhMzAAACHPrN # xZvoL37EAAAAAAIcMA0GCSqGSIb3DQEBCwUAMFcxCzAJBgNVBAYTAlVTMR4wHAYD # VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBD # b2RlIFNpZ25pbmcgUENBIDIwMjQwHhcNMjYwNDE2MTg1OTQxWhcNMjcwNDE1MTg1 # OTQxWjB0MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE # BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYD # VQQDExVNaWNyb3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IB # DwAwggEKAoIBAQDVsZfgOKmM31HPfoWOoNEiw0SlCiIxUMC0I9NMWbucKOw/e9lP # oAoehQVu6SG65V4EPzrYsnBnFPNoi4/HoOdjhz1qkrEt4I6tEcxXU6oOeY9zGveC # /3iBeuhLYxM3M/PkcUoebF+Nednm8OkdSPoDu8imViHPQq/8CQUu0WRR4rE+dMRf # rpVqfmNi2qWCX94T4MsepijGVkwE//tJg0ryAiYdHT34LSnlG/RSBZmQRGWZ5g8j # qnKjRParSqMft1gvjuUTVgtWNZfgcLFSK5Wa0myrq8OPcgTGGsRgun+tnSS+IxDT # xVsAPH1OzvPjwomguByhUe/OcvUN0D5Wmp7xAgMBAAGjggGqMIIBpjAOBgNVHQ8B # Af8EBAMCB4AwHwYDVR0lBBgwFgYKKwYBBAGCN0wIAQYIKwYBBQUHAwMwHQYDVR0O # BBYEFNoH7a2YDjOSwpkp6DHcmUS7J+0yMFQGA1UdEQRNMEukSTBHMS0wKwYDVQQL # EyRNaWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRpb25zIExpbWl0ZWQxFjAUBgNVBAUT # DTIzMDAxMis1MDc1NjkwHwYDVR0jBBgwFoAUf1k/VCHarU/vBeXmo9ctBpQSCDEw # YAYDVR0fBFkwVzBVoFOgUYZPaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9w # cy9jcmwvTWljcm9zb2Z0JTIwQ29kZSUyMFNpZ25pbmclMjBQQ0ElMjAyMDI0LmNy # bDBtBggrBgEFBQcBAQRhMF8wXQYIKwYBBQUHMAKGUWh0dHA6Ly93d3cubWljcm9z # b2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwQ29kZSUyMFNpZ25pbmcl # MjBQQ0ElMjAyMDI0LmNydDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4IC # AQAUnEqhaRXe0T3hIJjvdQErEkrA/7bByjn6t5IArODkkRjzkYwtKMc2yYj2quaN # rLutWw2YZcngKPy1b71YyDJQTy4NDRwaSh9Tw5thrk3NmcPrAHia5vtcBJ1CgtKK # 7mQbIcQ22d/N3813ayCDDFewu1+jsZmX+r/aTEqaOM4TVxVtRSkuCy8nAXKuChOK # Li/zA4XuH8iEYqIsj2YoNaeSxVmeGiERXpKdo3dDmYi0kO5w2D8VS4c3+9h6gElY # BaAAg/dYErBg27qT3vv0zRDJhJufvCNylA8S7/+8H5E/PV5cng6na9VV/w9OV3qu # uND6zdGa2EX38Glp50F9AIQk3p2xXmcvorDeM4XJ7UlWYBi6g80J1SSOQnInCYFE # msfUNn3+1AaTJKSJL83quKArTac2pKhu0Yzzzrzo6HrsRiQKzpnRBb1/dMa6P3hz # 75XbMRBctNsFhZC07WCmjExdLg2eHW5uV0TY8D5+6wozJf7vF3+WHkYPO85Z+BC6 # U4FkNbYNycZ9cE4j1tXRdyDCfml6c0HWPHjNVDObrv9lKt3qUqFpX38VCqVCyNOO # 1UcXfQiVjJw32U2WUKZjt/neJKHEBsm9kFsLuWzkQ53+qcaSaytmsCnk2gOglrlD # 5d3kKyvvAw+rzm0lT8K38P6PLxfZQHhu4W8dV7Av8N2ZmDCCBr0wggSloAMCAQIC # EzMAAAA5O7Y3Gb8GHWcAAAAAADkwDQYJKoZIhvcNAQEMBQAwgYgxCzAJBgNVBAYT # AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYD # VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBS # b290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDExMB4XDTI0MDgwODIwNTQxOFoX # DTM2MDMyMjIyMTMwNFowVzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29m # dCBDb3Jwb3JhdGlvbjEoMCYGA1UEAxMfTWljcm9zb2Z0IENvZGUgU2lnbmluZyBQ # Q0EgMjAyNDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANgBnB7jOMeq # lRYHNa265v4IY9fH8TKhemHfPINe1gpLaV3dhg324WwH06LcHbpnsBukCDNitryo # 0dtS/EW6I/yEL/bLSY8hKpbfQuWusBPr9qazYcDxCW/qnjb5JsI1s8bNOg3bVATv # QVL4tcf03aTycsz8QeCdM0l/yHRObJ9QqazM1r6VPEOJ7LL+uEEb73w6QCuhs89a # 1uv1zerOYMnsneRRwCbpyW11IcggU0cRKDDq1pjVJzIbIF6+oiXXbReOsgeI8zu1 # FyQfK0fVkaya8SmVHQ/tOf23mZ4W9k0Ri22QW9p3UgSC5OUDktKxxcCmGL6tXLfO # GSWHIIV4YrTJTT6PNty5REojHJuZHArkF9VnHTERWoTjAzfI3kP+5b4alUdhgAZ7 # ttOu1bVnXfHaqPYl2rPs20ji03LOVWsh/radgE17es5hL+t6lV0eVHrVhsssROWJ # uz2MXMCt7iw7lFPG9LXKGjsmonn2gotGdHIuEg5JnJMJVmixd5LRlkmgYRZKzhxS # CwyoGIq0PhaA7Y+VPct5pCHkijcIIDm0nlkK+0KyepolcqGm0T/GYQRMhHJlGOOm # VQop36wUVUYklUy++vDWeEgEo4s7hxN6mIbf2MSIQ/iIfMZgJxC69oukMUXCrOC3 # SkE/xIkgpfl22MM1itkZ35nNXkMolU1lAgMBAAGjggFOMIIBSjAOBgNVHQ8BAf8E # BAMCAYYwEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFH9ZP1Qh2q1P7wXl5qPX # LQaUEggxMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMA8GA1UdEwEB/wQFMAMB # Af8wHwYDVR0jBBgwFoAUci06AjGQQ7kUBU7h6qfHMdEjiTQwWgYDVR0fBFMwUTBP # oE2gS4ZJaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMv # TWljUm9vQ2VyQXV0MjAxMV8yMDExXzAzXzIyLmNybDBeBggrBgEFBQcBAQRSMFAw # TgYIKwYBBQUHMAKGQmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMv # TWljUm9vQ2VyQXV0MjAxMV8yMDExXzAzXzIyLmNydDANBgkqhkiG9w0BAQwFAAOC # AgEAFJQfOChP7onn6fLIMKrSlN1WYKwDFgAddymOUO3FrM8d7B/W/iQ6DxXsDn7D # 5W4wMwYeLystcEqfkjz4NURRgazyMu5yRzQh4LqjA4tStTcJh1opExo7nn5PuPBY # nbu0+THSuVHTe0VTTPVhily/piFrDo3axQ9P4C+Ol5yet+2gTfekICS5xS+cYfSI # vgn0JksVBVMYVI5QFu/qhnLhsEFEUzG8fvv0hjgkO+lkpV9ty6GkN4vdnd7ya6Q6 # aR9y34aiM1qmxaxBi6OUnyNl6fkuun/diTFnYDLTppOkr/mg5WSfCiDVMNCxtj4w # PKC5OmHm1DQIt/MNokbbH3UGsFP1QbzsLocuSqLCvH09Io3fDPTmscR9Y75G4qX7 # RTX8AdBPo0I6OEojf39zuFZt0qOHm65YWQE69cZM2ueE1MB05dNNgHK9gTE7zKvK # /fg8B2qjW88MT/WF5V5uvZGtqa9FSL2RazArA+rDPuf6JGYz4HpgMZHB4S6szWSK # YBv0VisCzfxgeU+dquXW9bd0auYlOB58DPcOYKdc3Se94g+xL4pcEhbB54JOgAkw # YTu/9dLeH2pDqeJZAABVDWRQCaXfO5LgyKwKCLYXpigrZYCjUSBcr+Ve8PFWMhVT # Ql0v4q8J/AUmQN5W4n101cY2L4A7GTQG1h32HHAvfQESWP0xghn+MIIZ+gIBATBu # MFcxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x # KDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25pbmcgUENBIDIwMjQCEzMAAAIc # +s3Fm+gvfsQAAAAAAhwwDQYJYIZIAWUDBAIBBQCgga4wGQYJKoZIhvcNAQkDMQwG # CisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZI # hvcNAQkEMSIEIFCvskDkVfGa/kbdXkjyGWGvtcBhQzqUb2eu/kieX+DIMEIGCisG # AQQBgjcCAQwxNDAyoBSAEgBNAGkAYwByAG8AcwBvAGYAdKEagBhodHRwOi8vd3d3 # Lm1pY3Jvc29mdC5jb20wDQYJKoZIhvcNAQEBBQAEggEAwKAGyRz3VUOaAYkhPjok # N045mOJV8uMcgmjebY4P/vBrzlaYAErMTHzO5W+/cwZbwsCMaVpYQ5y1xXowt4/K # 6oCoN2sBZIbJAKyyvAvXGCvkJnQ2F8PzrKemFgMGhTAKcH5BhtjQRkZyqv7ysa09 # 3gIsluLBbZdpjKkFuNU+AfDXI8XmqKxS+JjsK1YFT3KBz67i4Szkt/6X3/R3BjOi # 43w2dNqlq9BsXdSSkWEocXmwHqT4RwVvEanaFurQLUEt5Ow5RXNa2Q3mMVwmx9iS # NwzIKZ6UF8oauzFzJFb1V9gBPOJZNDUvAA8A5zCRIVPe5Qjk1oaNc6zlyESElxzw # 8qGCF7AwghesBgorBgEEAYI3AwMBMYIXnDCCF5gGCSqGSIb3DQEHAqCCF4kwgheF # AgEDMQ8wDQYJYIZIAWUDBAIBBQAwggFaBgsqhkiG9w0BCRABBKCCAUkEggFFMIIB # QQIBAQYKKwYBBAGEWQoDATAxMA0GCWCGSAFlAwQCAQUABCCDuHiHRhHd8EwNhTT/ # QKyZdbCbnOA3SCvYkBo/J+AhBAIGajUiArVxGBMyMDI2MDcwNzE2NTYzMi41OTZa # MASAAgH0oIHZpIHWMIHTMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv # bjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0 # aW9uMS0wKwYDVQQLEyRNaWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRpb25zIExpbWl0 # ZWQxJzAlBgNVBAsTHm5TaGllbGQgVFNTIEVTTjo2QjA1LTA1RTAtRDk0NzElMCMG # A1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaCCEf4wggcoMIIFEKAD # AgECAhMzAAACEUUYOZtDz/xsAAEAAAIRMA0GCSqGSIb3DQEBCwUAMHwxCzAJBgNV # BAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4w # HAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29m # dCBUaW1lLVN0YW1wIFBDQSAyMDEwMB4XDTI1MDgxNDE4NDgxM1oXDTI2MTExMzE4 # NDgxM1owgdMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD # VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xLTAr # BgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJhdGlvbnMgTGltaXRlZDEnMCUG # A1UECxMeblNoaWVsZCBUU1MgRVNOOjZCMDUtMDVFMC1EOTQ3MSUwIwYDVQQDExxN # aWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNlMIICIjANBgkqhkiG9w0BAQEFAAOC # Ag8AMIICCgKCAgEAz7m7MxAdL5Vayrk7jsMo3GnhN85ktHCZEvEcj4BIccHKd/NK # C7uPvpX5dhO63W6VM5iCxklG8qQeVVrPaKvj8dYYJC7DNt4NN3XlVdC/voveJuPP # hTJ/u7X+pYmV2qehTVPOOB1/hpmt51SzgxZczMdnFl+X2e1PgutSA5CAh9/Xz5NW # 0CxnYVz8g0Vpxg+Bq32amktRXr8m3BSEgUs8jgWRPVzPHEczpbhloGGEfHaROmHh # VKIqN+JhMweEjU2NXM2W6hm32j/QH/I/KWqNNfYchHaG0xJljVTYoUKPpcQDuhH9 # dQKEgvGxj2U5/3Fq1em4dO6Ih04m6R+ttxr6Y8oRJH9ZhZ3sciFBIvZh7E2YFXOj # P4MGybSylQTPDEFAtHHgpkskeEUhsPDR9VvWWhekhQx3qXaAKh+AkLmz/hpE3e0y # +RIKO2AREjULJAKgf+R9QnNvqMeMkz9PGrjsijqWGzB2k2JNyaUYKlbmQweOabsC # ioiY2fJbimjVyFAGk5AeYddUFxvJGgRVCH7BeBPKAq7MMOmSCTOMZ0Sw6zyNx4Uh # h5Y0uJ0ZOoTKnB3KfdN/ba/eKHFeEhi3WqAfzTxiy0rMvhsfsXZK7zoclqaRvVl8 # Q48J174+eyriypY9HhU+ohgiYi4uQGDDVdTDeKDtoC/hD2Cn+ARzwE1rFfECAwEA # AaOCAUkwggFFMB0GA1UdDgQWBBRifUUDwOnqIcvfb53+yV0EZn7OcDAfBgNVHSME # GDAWgBSfpxVdAF5iXYP05dJlpxtTNRnpcjBfBgNVHR8EWDBWMFSgUqBQhk5odHRw # Oi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNyb3NvZnQlMjBUaW1l # LVN0YW1wJTIwUENBJTIwMjAxMCgxKS5jcmwwbAYIKwYBBQUHAQEEYDBeMFwGCCsG # AQUFBzAChlBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01p # Y3Jvc29mdCUyMFRpbWUtU3RhbXAlMjBQQ0ElMjAyMDEwKDEpLmNydDAMBgNVHRMB # Af8EAjAAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQEAwIHgDAN # BgkqhkiG9w0BAQsFAAOCAgEApEKdnMeIIUiU6PatZ/qbrwiDzYUMKRczC4Bp/XY1 # S9NmHI+2c3dcpwH2SOmDfdvIIqt7mRrgvBPYOvJ9CtZS5eeIrsObC0b0ggKTv2wr # TgWG+qktqNFEhQeipdURNLN68uHAm5edwBytd1kwy5r6B93klxDsldOmVWtw/ngj # 7knN09muCmwr17JnsMFcoIN/H59s+1RYN7Vid4+7nj8FcvYy9rbZOMndBzsTiosF # 1M+aMIJX2k3EVFVsuDL7/R5ppI9Tg7eWQOWKMZHPdsA3ZqWzDuhJqTzoFSQShnZe # nC+xq/z9BhHPFFbUtfjAoG6EDPjSQJYXmogja8OEa19xwnh3wVufeP+ck+/0gxNi # 7g+kO6WaOm052F4siD8xi6Uv75L7798lHvPThcxHHsgXqMY592d1wUof3tL/eDaQ # 0UhnYCU8yGkU2XJnctONnBKAvURAvf2qiIWDj4Lpcm0zA7VuofuJR1Tpuyc5p1ja # 52bNZBBVqAOwyDhAmqWsJXAjYXnssC/fJkee314Fh+GIyMgvAPRScgqRZqV16dTB # Yvoe+w1n/wWs/ySTUsxDw4T/AITcu5PAsLnCVpArDrFLRTFyut+eHUoG6UYZfj8/ # RsuQ42INse1pb/cPm7G2lcLJtkIKT80xvB1LiaNvPTBVEcmNSvFUM0xrXZXcYcxV # XiYwggdxMIIFWaADAgECAhMzAAAAFcXna54Cm0mZAAAAAAAVMA0GCSqGSIb3DQEB # CwUAMIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE # BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTIwMAYD # VQQDEylNaWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAxMDAe # Fw0yMTA5MzAxODIyMjVaFw0zMDA5MzAxODMyMjVaMHwxCzAJBgNVBAYTAlVTMRMw # EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN # aWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0 # YW1wIFBDQSAyMDEwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA5OGm # TOe0ciELeaLL1yR5vQ7VgtP97pwHB9KpbE51yMo1V/YBf2xK4OK9uT4XYDP/XE/H # ZveVU3Fa4n5KWv64NmeFRiMMtY0Tz3cywBAY6GB9alKDRLemjkZrBxTzxXb1hlDc # wUTIcVxRMTegCjhuje3XD9gmU3w5YQJ6xKr9cmmvHaus9ja+NSZk2pg7uhp7M62A # W36MEBydUv626GIl3GoPz130/o5Tz9bshVZN7928jaTjkY+yOSxRnOlwaQ3KNi1w # jjHINSi947SHJMPgyY9+tVSP3PoFVZhtaDuaRr3tpK56KTesy+uDRedGbsoy1cCG # MFxPLOJiss254o2I5JasAUq7vnGpF1tnYN74kpEeHT39IM9zfUGaRnXNxF803RKJ # 1v2lIH1+/NmeRd+2ci/bfV+AutuqfjbsNkz2K26oElHovwUDo9Fzpk03dJQcNIIP # 8BDyt0cY7afomXw/TNuvXsLz1dhzPUNOwTM5TI4CvEJoLhDqhFFG4tG9ahhaYQFz # ymeiXtcodgLiMxhy16cg8ML6EgrXY28MyTZki1ugpoMhXV8wdJGUlNi5UPkLiWHz # NgY1GIRH29wb0f2y1BzFa/ZcUlFdEtsluq9QBXpsxREdcu+N+VLEhReTwDwV2xo3 # xwgVGD94q0W29R6HXtqPnhZyacaue7e3PmriLq0CAwEAAaOCAd0wggHZMBIGCSsG # AQQBgjcVAQQFAgMBAAEwIwYJKwYBBAGCNxUCBBYEFCqnUv5kxJq+gpE8RjUpzxD/ # LwTuMB0GA1UdDgQWBBSfpxVdAF5iXYP05dJlpxtTNRnpcjBcBgNVHSAEVTBTMFEG # DCsGAQQBgjdMg30BATBBMD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jvc29m # dC5jb20vcGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0wEwYDVR0lBAwwCgYIKwYB # BQUHAwgwGQYJKwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwCwYDVR0PBAQDAgGGMA8G # A1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU1fZWy4/oolxiaNE9lJBb186aGMQw # VgYDVR0fBE8wTTBLoEmgR4ZFaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9j # cmwvcHJvZHVjdHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3JsMFoGCCsGAQUF # BwEBBE4wTDBKBggrBgEFBQcwAoY+aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3Br # aS9jZXJ0cy9NaWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcnQwDQYJKoZIhvcNAQEL # BQADggIBAJ1VffwqreEsH2cBMSRb4Z5yS/ypb+pcFLY+TkdkeLEGk5c9MTO1OdfC # cTY/2mRsfNB1OW27DzHkwo/7bNGhlBgi7ulmZzpTTd2YurYeeNg2LpypglYAA7AF # vonoaeC6Ce5732pvvinLbtg/SHUB2RjebYIM9W0jVOR4U3UkV7ndn/OOPcbzaN9l # 9qRWqveVtihVJ9AkvUCgvxm2EhIRXT0n4ECWOKz3+SmJw7wXsFSFQrP8DJ6LGYnn # 8AtqgcKBGUIZUnWKNsIdw2FzLixre24/LAl4FOmRsqlb30mjdAy87JGA0j3mSj5m # O0+7hvoyGtmW9I/2kQH2zsZ0/fZMcm8Qq3UwxTSwethQ/gpY3UA8x1RtnWN0SCyx # TkctwRQEcb9k+SS+c23Kjgm9swFXSVRk2XPXfx5bRAGOWhmRaw2fpCjcZxkoJLo4 # S5pu+yFUa2pFEUep8beuyOiJXk+d0tBMdrVXVAmxaQFEfnyhYWxz/gq77EFmPWn9 # y8FBSX5+k77L+DvktxW/tM4+pTFRhLy/AsGConsXHRWJjXD+57XQKBqJC4822rpM # +Zv/Cuk0+CQ1ZyvgDbjmjJnW4SLq8CdCPSWU5nR0W2rRnj7tfqAxM328y+l7vzhw # RNGQ8cirOoo6CGJ/2XBjU02N7oJtpQUQwXEGahC0HVUzWLOhcGbyoYIDWTCCAkEC # AQEwggEBoYHZpIHWMIHTMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv # bjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0 # aW9uMS0wKwYDVQQLEyRNaWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRpb25zIExpbWl0 # ZWQxJzAlBgNVBAsTHm5TaGllbGQgVFNTIEVTTjo2QjA1LTA1RTAtRDk0NzElMCMG # A1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaIjCgEBMAcGBSsOAwIa # AxUAKyp8q2VdgAq1VGkzd7PZwV6zNc2ggYMwgYCkfjB8MQswCQYDVQQGEwJVUzET # MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMV # TWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1T # dGFtcCBQQ0EgMjAxMDANBgkqhkiG9w0BAQsFAAIFAO33WkwwIhgPMjAyNjA3MDcx # MDU4MjBaGA8yMDI2MDcwODEwNTgyMFowdzA9BgorBgEEAYRZCgQBMS8wLTAKAgUA # 7fdaTAIBADAKAgEAAgI2MQIB/zAHAgEAAgISiTAKAgUA7firzAIBADA2BgorBgEE # AYRZCgQCMSgwJjAMBgorBgEEAYRZCgMCoAowCAIBAAIDB6EgoQowCAIBAAIDAYag # MA0GCSqGSIb3DQEBCwUAA4IBAQA56MH6RKsT/lyQ7GoKafQnrsUeOmZaqT2zjKAB # udx3AVM7m3vGG9tT8rDw9CygO0lXJDlBOsOuxLQMNDZGtYLA8KixaOiLPKBY4E2X # XFtj3GMVsSTdNMbxd62s9+FX44jFatEwXSqg3VnweA4vlazsNY/dLp0mSesY9DFd # Sjygs8hhLwR9HQbPppFMOcLUMtNZ/psc2+De/0csH/rOoLtXkjjx0P+17ZPFq6fy # NbqLFDXQ1XvhjRBZqulXFRhCaaqWpv89icsO1Jd+IurOLSQCLyr9cKmF7lUPcFnf # rwVUPozbNlFLdhvCHkyeCtAs2RrfOEkepibvT/fyz6mC1/16MYIEDTCCBAkCAQEw # gZMwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT # B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UE # AxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTACEzMAAAIRRRg5m0PP/GwA # AQAAAhEwDQYJYIZIAWUDBAIBBQCgggFKMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0B # CRABBDAvBgkqhkiG9w0BCQQxIgQgI33Gekr1pidVvGq+ctHaL9Mie62czihE/VFk # YQ5nrEQwgfoGCyqGSIb3DQEJEAIvMYHqMIHnMIHkMIG9BCAsrTOpmu+HTq1aXFwv # lhjF8p2nUCNNCEX/OWLHNDMmtzCBmDCBgKR+MHwxCzAJBgNVBAYTAlVTMRMwEQYD # VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1w # IFBDQSAyMDEwAhMzAAACEUUYOZtDz/xsAAEAAAIRMCIEIIewsI8jb+PhHG6p2IUO # MfqzS2gc0FRzvePMzDXICAEqMA0GCSqGSIb3DQEBCwUABIICAJKwjz4pDdM/nNM3 # Bffr59SH9bHE0woK+xLCoSS8ka2ZoccwGykWhwiHIN+ZXXuZ6YZikXbqi4hap562 # HXVcrHI2uxCAEIgDY95Aagfsdp9Y8beJCPZ9n2B0ahiAV8y+Kha9y5VgiCAQHwJ0 # UIFMnGq/VapC2k9RKsE/uhf1fwkfFUs33ijljdXigTQpIosOYhNRZufYGxNHRLNz # BS+4inG9QFxI8e0J4V3vSQYnalAL3I5Wblb7Lxy3cTjdqDIuETztN9tJwI+pLxvc # 59DYvSsw+4Q0BJlLcUnIoEad2gadsF5p4v2iT187JWB6AxEu/vkLcr7U5pP/nxwc # /iaeRSgzTk0PpwvF9gwfwx8bThD2A6x0xr5gIznzPE2eqQkzblzG54O/oGax4bXb # rY78zsVRbgbA+FKG7lwfkQ+QqQ+HGiuselpo7gdG6ZunDFwQPs19NSsMNmAsyKNg # LQaayxj7pXUfUTmMMIp9nkcXgsKNHGVyYVixfzgwc8eVmfhWOqwykIt+88lKtRj4 # 3xGDDvSIFCWwIBj+2yKOJcFXe0EknlcfAQ737u6p1oWI64AGSIBUymAIe1KsEZ9C # toQcnKA7E1uw4ua7iL1jCNELGzD+1NCQ0DWPcoFtl9xVI1fv6WotfkiInHW/ZmQs # 1Wy0syV9HRH0Nz4+7bFF86VYyzh3 # SIG # End signature block |