ConsoleMonster.psm1
|
# ConsoleMonster bootstrapper # Auto-generated by PowerForge. Do not edit. # PowerForge script preamble begin # PowerForge script preamble end $PowerForgeModuleName = 'ConsoleMonster' $PowerForgeModuleRoot = $PSScriptRoot $PowerForgeModulePath = $PSCommandPath $script:PowerForgeDesktopAssemblyResolver = $null $script:PowerForgeDependencyCheck = $null $PowerForgeModuleImportCompleted = $false try { # The loader runs in its own scope, so its working variables do not stay in the module. & { # Load the precompiled PowerForge module loader built for this PowerShell edition. if (-not ('PowerForge.ModuleLoader.V1.SharedAssemblyPolicy' -as [type])) { $PowerForgeLoaderEdition = if ($PSEdition -eq 'Core') { 'Core' } else { 'Desktop' } $PowerForgeLoaderPath = [IO.Path]::Combine($PowerForgeModuleRoot, 'Loader', $PowerForgeLoaderEdition, 'PowerForge.ModuleLoader.V1.dll') try { Add-Type -Path $PowerForgeLoaderPath -ErrorAction Stop } catch { # Another runspace can load the same loader between the probe and Add-Type. if (-not ('PowerForge.ModuleLoader.V1.SharedAssemblyPolicy' -as [type])) { throw } } } # Export assemblies for this host, resolved from the Lib layout when the module was built. $BinaryModules = if ($PSEdition -eq 'Core') { @( @{ Name = 'ConsoleMonster.PowerShell.dll'; Path = 'Lib/Core/ConsoleMonster.PowerShell.dll' } ) } else { @( @{ Name = 'ConsoleMonster.PowerShell.dll'; Path = 'Lib/Default/ConsoleMonster.PowerShell.dll' } ) } $BinaryModulePaths = [string[]]@(foreach ($BinaryModule in $BinaryModules) { if ($BinaryModule['Path']) { $BinaryModule.Path = [IO.Path]::GetFullPath([IO.Path]::Combine($PowerForgeModuleRoot, $BinaryModule.Path)) if ([IO.File]::Exists($BinaryModule.Path)) { $BinaryModule.Path } else { # A file removed after the build fails on its own instead of breaking the group of every export. $BinaryModule.Error = "Configured binary module '$($BinaryModule.Name)' was not found at '$($BinaryModule.Path)'." } } }) $BinaryModuleDirectories = [string[]]@($BinaryModulePaths | ForEach-Object { [IO.Path]::GetDirectoryName($_) } | Select-Object -Unique) if ($PSEdition -ne 'Core' -and $BinaryModuleDirectories.Count -gt 0) { # Windows PowerShell holds one copy of an assembly without a strong name per session. Reuse a compatible # copy another module already loaded and say so; stop here with one clear message when it cannot work. $script:PowerForgeDependencyCheck = [PowerForge.ModuleLoader.V1.DependencyConflictCheck]::Evaluate( $PowerForgeModuleName, $PowerForgeModuleRoot, $BinaryModuleDirectories, [string[]]@()) foreach ($DependencyWarning in $PowerForgeDependencyCheck.Warnings) { Write-Warning -Message $DependencyWarning } if ($null -ne $PowerForgeDependencyCheck.Error) { throw $PowerForgeDependencyCheck.Error } # AssemblyResolve also runs on worker threads that have no runspace, so the handler is compiled # code from the PowerForge loader and is limited to this module's own binary folders. $script:PowerForgeDesktopAssemblyResolver = [PowerForge.ModuleLoader.V1.DesktopAssemblyResolver]::new($BinaryModuleDirectories, [string[]]@()) $PowerForgeDesktopAssemblyResolver.Register() $DesktopAssemblyResolver = $PowerForgeDesktopAssemblyResolver $PreviousOnRemove = $ExecutionContext.SessionState.Module.OnRemove $ExecutionContext.SessionState.Module.OnRemove = { try { $DesktopAssemblyResolver.Unregister() } finally { if ($null -ne $PreviousOnRemove) { & $PreviousOnRemove @args } } }.GetNewClosure() } $LibrariesScript = [IO.Path]::Combine($PowerForgeModuleRoot, 'ConsoleMonster.Libraries.ps1') if ($PSEdition -ne 'Core' -and (Test-Path -LiteralPath $LibrariesScript)) { # Windows PowerShell loads the dependencies before the module assemblies that need them. . $LibrariesScript } $ImportModule = Get-Command -Name Import-Module -Module Microsoft.PowerShell.Core $LoadedDirectories = [Collections.Generic.List[string]]::new() foreach ($BinaryModule in $BinaryModules) { try { if ($BinaryModule['Error']) { throw $BinaryModule['Error'] } $ModuleAssemblyPath = $BinaryModule.Path $LibraryDirectory = [IO.Path]::GetDirectoryName($ModuleAssemblyPath) if ($PSEdition -eq 'Core') { $ModuleAssembly = [PowerForge.ModuleLoader.V1.ModuleAssemblyLoadContext]::LoadModuleFromGroup( [string[]]$BinaryModulePaths, $ModuleAssemblyPath, 'ConsoleMonster', [string[]]@()) # On a repeat import (Import-Module -Force, or after Remove-Module) PowerShell returns its cached module # for this assembly without importing the commands here. Drop the cached copy so they import again. foreach ($StaleModule in @(Get-Module -All | Where-Object { [object]::ReferenceEquals($_.ImplementingAssembly, $ModuleAssembly) })) { Remove-Module -ModuleInfo $StaleModule -Force -ErrorAction SilentlyContinue } $InnerModule = & $ImportModule -Assembly $ModuleAssembly -Force -PassThru -ErrorAction Stop # Type accelerators resolve from the module AssemblyLoadContext through the precompiled loader. try { $PowerForgeTypeAcceleratorRegistration = [PowerForge.ModuleLoader.V1.TypeAcceleratorRegistration]::RegisterFromLoadContext( $ModuleAssembly, $LibraryDirectory, 'AllowList', [string[]]@('ConsoleMonster.Terminal', 'ConsoleMonster.Layout.IWidget', 'ConsoleMonster.Styling.Color', 'ConsoleMonster.Styling.RichColor', 'ConsoleMonster.Styling.Style', 'ConsoleMonster.Styling.RichStyle', 'ConsoleMonster.Styling.Theme', 'ConsoleMonster.Styling.ThemeToken', 'ConsoleMonster.Styling.StatusKind', 'ConsoleMonster.Text.RichText', 'ConsoleMonster.Interactive.InteractionMode', 'ConsoleMonster.Interactive.CommandLine', 'ConsoleMonster.Live.SimulatedClock', 'ConsoleMonster.Live.LiveEvent', 'ConsoleMonster.Capabilities.GlyphTier', 'ConsoleMonster.Capabilities.ColorDepth'), [string[]]@(), $PowerForgeModuleName, $PSScriptRoot) # Track the registration before writing messages: a warning that stops ($WarningPreference = Stop) must not # leave accelerators nobody releases. A failed import releases them in the bootstrapper. if ($null -eq $script:PowerForgeTypeAcceleratorRegistrations) { $script:PowerForgeTypeAcceleratorRegistrations = [System.Collections.Generic.List[object]]::new() $PowerForgeTypeAcceleratorRegistrations = $script:PowerForgeTypeAcceleratorRegistrations if ($null -ne $ExecutionContext.SessionState.Module) { # Remove-Module releases this module's accelerators; names another PowerForge module still owns stay. $PreviousPowerForgeOnRemove = $ExecutionContext.SessionState.Module.OnRemove $ExecutionContext.SessionState.Module.OnRemove = { try { foreach ($PowerForgeTypeAcceleratorOwner in $PowerForgeTypeAcceleratorRegistrations) { $PowerForgeTypeAcceleratorOwner.Unregister() } } finally { if ($null -ne $PreviousPowerForgeOnRemove) { & $PreviousPowerForgeOnRemove @args } } }.GetNewClosure() } } $script:PowerForgeTypeAcceleratorRegistrations.Add($PowerForgeTypeAcceleratorRegistration) foreach ($PowerForgeTypeAcceleratorMessage in $PowerForgeTypeAcceleratorRegistration.Warnings) { Write-Warning -Message $PowerForgeTypeAcceleratorMessage } foreach ($PowerForgeTypeAcceleratorMessage in $PowerForgeTypeAcceleratorRegistration.VerboseMessages) { Write-Verbose -Message $PowerForgeTypeAcceleratorMessage } } catch { Write-Warning -Message "ALC type accelerator registration failed: $($_.Exception.Message)" } if ($InnerModule) { # The loader runs in its own scope, where Import-Module leaves the imported module's aliases. # Define them on the module so its exports publish them. foreach ($ImportedAlias in @($InnerModule.ExportedAliases.Values)) { Set-Alias -Name $ImportedAlias.Name -Value $ImportedAlias.Definition -Scope Script -Force } # Import-Module -Assembly inside this script module imports the inner binary module as a nested module, # so its cmdlets and aliases are visible here and Export-ModuleMember can publish them on this module. $PowerForgeOuterModule = $ExecutionContext.SessionState.Module $PowerForgeIsModuleWrapper = $false if ($null -ne $PowerForgeOuterModule -and -not [string]::IsNullOrWhiteSpace($PowerForgeOuterModule.Path) -and -not [string]::IsNullOrWhiteSpace($PSCommandPath)) { try { [StringComparison] $PowerForgePathComparison = & { param([string] $PowerForgeProbePath) # Case behavior belongs to the containing filesystem. Windows can opt individual # directories into case sensitivity, while macOS volumes may be case-insensitive. # Inspect existing names without requiring write access; ambiguity fails closed. try { $PowerForgeProbeDirectory = [IO.Path]::GetDirectoryName([IO.Path]::GetFullPath($PowerForgeProbePath)) $PowerForgeNames = New-Object 'System.Collections.Generic.HashSet[string]' ([StringComparer]::Ordinal) foreach ($PowerForgeEntry in [IO.Directory]::EnumerateFileSystemEntries($PowerForgeProbeDirectory)) { [void] $PowerForgeNames.Add([IO.Path]::GetFileName($PowerForgeEntry)) } foreach ($PowerForgeName in $PowerForgeNames) { foreach ($PowerForgeAlternateName in @($PowerForgeName.ToUpperInvariant(), $PowerForgeName.ToLowerInvariant())) { if ([string]::Equals($PowerForgeName, $PowerForgeAlternateName, [StringComparison]::Ordinal) -or $PowerForgeNames.Contains($PowerForgeAlternateName)) { continue } $PowerForgeAlternatePath = [IO.Path]::Combine($PowerForgeProbeDirectory, $PowerForgeAlternateName) if ([IO.File]::Exists($PowerForgeAlternatePath) -or [IO.Directory]::Exists($PowerForgeAlternatePath)) { return [StringComparison]::OrdinalIgnoreCase } return [StringComparison]::Ordinal } } } catch { # Ordinal comparison prevents an uncertain probe from exporting into a caller. } return [StringComparison]::Ordinal } $PSCommandPath $PowerForgeIsModuleWrapper = [string]::Equals( [IO.Path]::GetFullPath($PowerForgeOuterModule.Path), [IO.Path]::GetFullPath($PSCommandPath), $PowerForgePathComparison ) } catch { $PowerForgeIsModuleWrapper = $false } } if (-not $PowerForgeIsModuleWrapper) { # A Script/ScriptPacked entry point, including one dot-sourced by another module, must not mutate # that caller's export table. The imported inner module's commands remain available to this script. } else { Export-ModuleMember -Cmdlet ([string[]]@($InnerModule.ExportedCmdlets.Keys)) -Alias ([string[]]@($InnerModule.ExportedAliases.Keys)) } } } else { $InitializeType = "$([IO.Path]::GetFileNameWithoutExtension($ModuleAssemblyPath)).Initialize" -as [type] $InnerModule = if ($InitializeType) { & $ImportModule -Force -Assembly $InitializeType.Assembly -PassThru } else { & $ImportModule $ModuleAssemblyPath -PassThru -ErrorAction Stop } if ($InnerModule) { # The loader runs in its own scope, where Import-Module leaves the imported module's aliases. # Define them on the module so its exports publish them. foreach ($ImportedAlias in @($InnerModule.ExportedAliases.Values)) { Set-Alias -Name $ImportedAlias.Name -Value $ImportedAlias.Definition -Scope Script -Force } } } if (-not $LoadedDirectories.Contains($LibraryDirectory)) { $LoadedDirectories.Add($LibraryDirectory) } } catch { # A caller that does not stop on errors keeps the other export assemblies of the module. if ($ErrorActionPreference -eq 'Stop') { throw } Write-Warning -Message "Importing module $($BinaryModule.Name) failed. Fix errors before continuing. Error: $($_.Exception.Message)" } } foreach ($LoadedDirectory in $LoadedDirectories) { if ($PSEdition -ne 'Core') { # Desktop loads module dependencies into the default AppDomain, so expose the same configured scripting types as Core. try { $PowerForgeTypeAcceleratorRegistration = [PowerForge.ModuleLoader.V1.TypeAcceleratorRegistration]::RegisterFromDirectory( ($LoadedDirectory), 'AllowList', [string[]]@('ConsoleMonster.Terminal', 'ConsoleMonster.Layout.IWidget', 'ConsoleMonster.Styling.Color', 'ConsoleMonster.Styling.RichColor', 'ConsoleMonster.Styling.Style', 'ConsoleMonster.Styling.RichStyle', 'ConsoleMonster.Styling.Theme', 'ConsoleMonster.Styling.ThemeToken', 'ConsoleMonster.Styling.StatusKind', 'ConsoleMonster.Text.RichText', 'ConsoleMonster.Interactive.InteractionMode', 'ConsoleMonster.Interactive.CommandLine', 'ConsoleMonster.Live.SimulatedClock', 'ConsoleMonster.Live.LiveEvent', 'ConsoleMonster.Capabilities.GlyphTier', 'ConsoleMonster.Capabilities.ColorDepth'), [string[]]@(), [string[]]@(), $PowerForgeModuleName, $PSScriptRoot) # Track the registration before writing messages: a warning that stops ($WarningPreference = Stop) must not # leave accelerators nobody releases. A failed import releases them in the bootstrapper. if ($null -eq $script:PowerForgeTypeAcceleratorRegistrations) { $script:PowerForgeTypeAcceleratorRegistrations = [System.Collections.Generic.List[object]]::new() $PowerForgeTypeAcceleratorRegistrations = $script:PowerForgeTypeAcceleratorRegistrations if ($null -ne $ExecutionContext.SessionState.Module) { # Remove-Module releases this module's accelerators; names another PowerForge module still owns stay. $PreviousPowerForgeOnRemove = $ExecutionContext.SessionState.Module.OnRemove $ExecutionContext.SessionState.Module.OnRemove = { try { foreach ($PowerForgeTypeAcceleratorOwner in $PowerForgeTypeAcceleratorRegistrations) { $PowerForgeTypeAcceleratorOwner.Unregister() } } finally { if ($null -ne $PreviousPowerForgeOnRemove) { & $PreviousPowerForgeOnRemove @args } } }.GetNewClosure() } } $script:PowerForgeTypeAcceleratorRegistrations.Add($PowerForgeTypeAcceleratorRegistration) foreach ($PowerForgeTypeAcceleratorMessage in $PowerForgeTypeAcceleratorRegistration.Warnings) { Write-Warning -Message $PowerForgeTypeAcceleratorMessage } foreach ($PowerForgeTypeAcceleratorMessage in $PowerForgeTypeAcceleratorRegistration.VerboseMessages) { Write-Verbose -Message $PowerForgeTypeAcceleratorMessage } } catch { Write-Warning -Message "Desktop type accelerator registration failed: $($_.Exception.Message)" } } } if ($null -ne $PowerForgeDesktopAssemblyResolver) { $PowerForgeDesktopAssemblyResolver.BootstrapActive = $false } } # PowerForge script payload begin # PowerForge script payload end # PowerForge exports begin $FunctionsToExport = @() $CmdletsToExport = @('Add-ConsoleJobSummary', 'Add-ConsoleRecordingMarker', 'Assert-ConsoleOutput', 'Compare-ConsoleObject', 'Compare-ConsoleText', 'Complete-ConsoleRun', 'ConvertTo-ConsoleView', 'Disable-ConsoleFormatting', 'Enable-ConsoleFormatting', 'Export-ConsoleFrame', 'Export-ConsoleRecording', 'Export-ConsoleTheme', 'Get-ConsoleCapability', 'Get-ConsoleDemo', 'Get-ConsoleFormatting', 'Get-ConsoleSetting', 'Import-ConsoleTheme', 'Invoke-ConsoleDashboard', 'Invoke-ConsoleHeadless', 'Invoke-ConsolePester', 'Invoke-ConsoleRecording', 'Invoke-ConsoleRun', 'New-ConsoleAccordion', 'New-ConsoleActivityList', 'New-ConsoleBinding', 'New-ConsoleBreadcrumb', 'New-ConsoleButton', 'New-ConsoleCalendar', 'New-ConsoleCellMap', 'New-ConsoleChart', 'New-ConsoleChartView', 'New-ConsoleCollapsible', 'New-ConsoleColumns', 'New-ConsoleCommand', 'New-ConsoleDashboard', 'New-ConsoleDashboardFrame', 'New-ConsoleDataGrid', 'New-ConsoleDatePicker', 'New-ConsoleDiagram', 'New-ConsoleDiagramGroup', 'New-ConsoleDiagramLink', 'New-ConsoleDiagramNode', 'New-ConsoleDiagramStep', 'New-ConsoleDiagramUseCase', 'New-ConsoleDialog', 'New-ConsoleFacts', 'New-ConsoleField', 'New-ConsoleFlow', 'New-ConsoleForm', 'New-ConsoleImage', 'New-ConsoleKeyValue', 'New-ConsoleLanes', 'New-ConsoleLayoutGrid', 'New-ConsoleLogo', 'New-ConsoleLogRegion', 'New-ConsoleMenu', 'New-ConsoleMenuItem', 'New-ConsoleOutline', 'New-ConsolePanel', 'New-ConsoleProgress', 'New-ConsoleRegion', 'New-ConsoleRows', 'New-ConsoleRule', 'New-ConsoleScreen', 'New-ConsoleScrollView', 'New-ConsoleSelect', 'New-ConsoleSplitter', 'New-ConsoleStack', 'New-ConsoleStatusList', 'New-ConsoleSummaryBar', 'New-ConsoleTable', 'New-ConsoleTabs', 'New-ConsoleText', 'New-ConsoleTextInput', 'New-ConsoleToggle', 'New-ConsoleTree', 'New-ConsoleTreeSelect', 'Read-ConsoleConfirm', 'Read-ConsoleDate', 'Read-ConsoleForm', 'Read-ConsoleNumber', 'Read-ConsolePath', 'Read-ConsoleSelect', 'Read-ConsoleText', 'Register-ConsoleView', 'Reset-ConsoleSetting', 'Set-ConsoleFormValue', 'Set-ConsoleSetting', 'Set-ConsoleTheme', 'Show-Console', 'Show-ConsoleApp', 'Show-ConsoleDemo', 'Show-ConsoleDiagram', 'Show-ConsoleGrid', 'Show-ConsoleHelp', 'Show-ConsoleImage', 'Show-ConsoleMenu', 'Show-ConsoleObject', 'Show-ConsoleOverview', 'Show-ConsolePresentation', 'Show-ConsoleReplay', 'Show-ConsoleSetting', 'Show-ConsoleStatusLine', 'Show-ConsoleTable', 'Start-ConsoleRun', 'Stop-ConsoleRecording', 'Test-ConsoleTheme', 'Unregister-ConsoleView', 'Update-Console', 'Use-ConsoleGroup', 'Use-ConsoleProgress', 'Use-ConsoleTarget', 'Wait-ConsoleDashboard', 'Watch-Console', 'Watch-ConsoleLog', 'Write-ConsoleAnnotation', 'Write-ConsoleLogEntry', 'Write-ConsoleText') $AliasesToExport = @() Export-ModuleMember -Function $FunctionsToExport -Alias $AliasesToExport -Cmdlet $CmdletsToExport # PowerForge exports end $PowerForgeModuleImportCompleted = $true } catch { # Windows PowerShell: a library reused from another module can still lack a type this module needs. # Report that as the same conflict the dependency check describes, not as a raw type-load error. if ($null -ne $script:PowerForgeDependencyCheck) { $PowerForgeLoadFailure = $script:PowerForgeDependencyCheck.ExplainLoadFailure($_.Exception) if ($null -ne $PowerForgeLoadFailure) { throw $PowerForgeLoadFailure } } throw } finally { if (-not $PowerForgeModuleImportCompleted -and $null -ne $script:PowerForgeDesktopAssemblyResolver) { $script:PowerForgeDesktopAssemblyResolver.Unregister() } # A failed import never reaches OnRemove, so release the accelerators it registered here. if (-not $PowerForgeModuleImportCompleted -and $null -ne $script:PowerForgeTypeAcceleratorRegistrations) { foreach ($PowerForgeTypeAcceleratorOwner in $script:PowerForgeTypeAcceleratorRegistrations) { $PowerForgeTypeAcceleratorOwner.Unregister() } $script:PowerForgeTypeAcceleratorRegistrations.Clear() } } # SIG # Begin signature block # MIIt7AYJKoZIhvcNAQcCoIIt3TCCLdkCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDOx0otaT6lgIk5 # MFzqBGCxYffC3xwRstKJVg47i+bQsqCCJukwggWNMIIEdaADAgECAhAOmxiO+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 # twGpn1eqXijiuZQwggWQMIIDeKADAgECAhAFmxtXno4hMuI5B72nd3VcMA0GCSqG # SIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMx # GTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0IFRy # dXN0ZWQgUm9vdCBHNDAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGIx # CzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 # dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBH # NDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL/mkHNo3rvkXUo8MCIw # aTPswqclLskhPfKK2FnC4SmnPVirdprNrnsbhA3EMB/zG6Q4FutWxpdtHauyefLK # EdLkX9YFPFIPUh/GnhWlfr6fqVcWWVVyr2iTcMKyunWZanMylNEQRBAu34LzB4Tm # dDttceItDBvuINXJIB1jKS3O7F5OyJP4IWGbNOsFxl7sWxq868nPzaw0QF+xembu # d8hIqGZXV59UWI4MK7dPpzDZVu7Ke13jrclPXuU15zHL2pNe3I6PgNq2kZhAkHnD # eMe2scS1ahg4AxCN2NQ3pC4FfYj1gj4QkXCrVYJBMtfbBHMqbpEBfCFM1LyuGwN1 # XXhm2ToxRJozQL8I11pJpMLmqaBn3aQnvKFPObURWBf3JFxGj2T3wWmIdph2PVld # QnaHiZdpekjw4KISG2aadMreSx7nDmOu5tTvkpI6nj3cAORFJYm2mkQZK37AlLTS # YW3rM9nF30sEAMx9HJXDj/chsrIRt7t/8tWMcCxBYKqxYxhElRp2Yn72gLD76GSm # M9GJB+G9t+ZDpBi4pncB4Q+UDCEdslQpJYls5Q5SUUd0viastkF13nqsX40/ybzT # QRESW+UQUOsxxcpyFiIJ33xMdT9j7CFfxCBRa2+xq4aLT8LWRV+dIPyhHsXAj6Kx # fgommfXkaS+YHS312amyHeUbAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD # VR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTs1+OC0nFdZEzfLmc/57qYrhwPTzANBgkq # hkiG9w0BAQwFAAOCAgEAu2HZfalsvhfEkRvDoaIAjeNkaA9Wz3eucPn9mkqZucl4 # XAwMX+TmFClWCzZJXURj4K2clhhmGyMNPXnpbWvWVPjSPMFDQK4dUPVS/JA7u5iZ # aWvHwaeoaKQn3J35J64whbn2Z006Po9ZOSJTROvIXQPK7VB6fWIhCoDIc2bRoAVg # X+iltKevqPdtNZx8WorWojiZ83iL9E3SIAveBO6Mm0eBcg3AFDLvMFkuruBx8lbk # apdvklBtlo1oepqyNhR6BvIkuQkRUNcIsbiJeoQjYUIp5aPNoiBB19GcZNnqJqGL # FNdMGbJQQXE9P01wI4YMStyB0swylIQNCAmXHE/A7msgdDDS4Dk0EIUhFQEI6FUy # 3nFJ2SgXUE3mvk3RdazQyvtBuEOlqtPDBURPLDab4vriRbgjU2wGb2dVf0a1TD9u # KFp5JtKkqGKX0h7i7UqLvBv9R0oN32dmfrJbQdA75PQ79ARj6e/CVABRoIoqyc54 # zNXqhwQYs86vSYiv85KZtrPmYQ/ShQDnUBrkG5WdGaG5nLGbsQAe79APT0JsyQq8 # 7kP6OnGlyE0mpTX9iV28hWIdMtKgK1TtmlfB2/oQzxm3i0objwG2J5VT6LaJbVu8 # aNQj6ItRolb58KaAoNYes7wPD1N1KarqE3fk3oyBIa0HEEcRrYc9B9F1vM/zZn4w # ggawMIIEmKADAgECAhAIrUCyYNKcTJ9ezam9k67ZMA0GCSqGSIb3DQEBDAUAMGIx # CzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 # dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBH # NDAeFw0yMTA0MjkwMDAwMDBaFw0zNjA0MjgyMzU5NTlaMGkxCzAJBgNVBAYTAlVT # MRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1 # c3RlZCBHNCBDb2RlIFNpZ25pbmcgUlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwggIi # MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDVtC9C0CiteLdd1TlZG7GIQvUz # jOs9gZdwxbvEhSYwn6SOaNhc9es0JAfhS0/TeEP0F9ce2vnS1WcaUk8OoVf8iJnB # kcyBAz5NcCRks43iCH00fUyAVxJrQ5qZ8sU7H/Lvy0daE6ZMswEgJfMQ04uy+wjw # iuCdCcBlp/qYgEk1hz1RGeiQIXhFLqGfLOEYwhrMxe6TSXBCMo/7xuoc82VokaJN # TIIRSFJo3hC9FFdd6BgTZcV/sk+FLEikVoQ11vkunKoAFdE3/hoGlMJ8yOobMubK # wvSnowMOdKWvObarYBLj6Na59zHh3K3kGKDYwSNHR7OhD26jq22YBoMbt2pnLdK9 # RBqSEIGPsDsJ18ebMlrC/2pgVItJwZPt4bRc4G/rJvmM1bL5OBDm6s6R9b7T+2+T # YTRcvJNFKIM2KmYoX7BzzosmJQayg9Rc9hUZTO1i4F4z8ujo7AqnsAMrkbI2eb73 # rQgedaZlzLvjSFDzd5Ea/ttQokbIYViY9XwCFjyDKK05huzUtw1T0PhH5nUwjeww # k3YUpltLXXRhTT8SkXbev1jLchApQfDVxW0mdmgRQRNYmtwmKwH0iU1Z23jPgUo+ # QEdfyYFQc4UQIyFZYIpkVMHMIRroOBl8ZhzNeDhFMJlP/2NPTLuqDQhTQXxYPUez # +rbsjDIJAsxsPAxWEQIDAQABo4IBWTCCAVUwEgYDVR0TAQH/BAgwBgEB/wIBADAd # BgNVHQ4EFgQUaDfg67Y7+F8Rhvv+YXsIiGX0TkIwHwYDVR0jBBgwFoAU7NfjgtJx # XWRM3y5nP+e6mK4cD08wDgYDVR0PAQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUF # BwMDMHcGCCsGAQUFBwEBBGswaTAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGln # aWNlcnQuY29tMEEGCCsGAQUFBzAChjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5j # b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJo # dHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNy # bDAcBgNVHSAEFTATMAcGBWeBDAEDMAgGBmeBDAEEATANBgkqhkiG9w0BAQwFAAOC # AgEAOiNEPY0Idu6PvDqZ01bgAhql+Eg08yy25nRm95RysQDKr2wwJxMSnpBEn0v9 # nqN8JtU3vDpdSG2V1T9J9Ce7FoFFUP2cvbaF4HZ+N3HLIvdaqpDP9ZNq4+sg0dVQ # eYiaiorBtr2hSBh+3NiAGhEZGM1hmYFW9snjdufE5BtfQ/g+lP92OT2e1JnPSt0o # 618moZVYSNUa/tcnP/2Q0XaG3RywYFzzDaju4ImhvTnhOE7abrs2nfvlIVNaw8rp # avGiPttDuDPITzgUkpn13c5UbdldAhQfQDN8A+KVssIhdXNSy0bYxDQcoqVLjc1v # djcshT8azibpGL6QB7BDf5WIIIJw8MzK7/0pNVwfiThV9zeKiwmhywvpMRr/Lhlc # OXHhvpynCgbWJme3kuZOX956rEnPLqR0kq3bPKSchh/jwVYbKyP/j7XqiHtwa+ag # uv06P0WmxOgWkVKLQcBIhEuWTatEQOON8BUozu3xGFYHKi8QxAwIZDwzj64ojDzL # j4gLDb879M4ee47vtevLt/B3E+bnKD+sEq6lLyJsQfmCXBVmzGwOysWGw/YmMwwH # S6DTBwJqakAwSEs0qFEgu60bhQjiWQ1tygVQK+pKHJ6l/aCnHwZ05/LWUpD9r4VI # IflXO7ScA+2GRfS0YW6/aOImYIbqyK+p/pQd52MbOoZWeE4wgga0MIIEnKADAgEC # AhANx6xXBf8hmS5AQyIMOkmGMA0GCSqGSIb3DQEBCwUAMGIxCzAJBgNVBAYTAlVT # MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j # b20xITAfBgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yNTA1MDcw # MDAwMDBaFw0zODAxMTQyMzU5NTlaMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5E # aWdpQ2VydCwgSW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBUaW1l # U3RhbXBpbmcgUlNBNDA5NiBTSEEyNTYgMjAyNSBDQTEwggIiMA0GCSqGSIb3DQEB # AQUAA4ICDwAwggIKAoICAQC0eDHTCphBcr48RsAcrHXbo0ZodLRRF51NrY0NlLWZ # loMsVO1DahGPNRcybEKq+RuwOnPhof6pvF4uGjwjqNjfEvUi6wuim5bap+0lgloM # 2zX4kftn5B1IpYzTqpyFQ/4Bt0mAxAHeHYNnQxqXmRinvuNgxVBdJkf77S2uPoCj # 7GH8BLuxBG5AvftBdsOECS1UkxBvMgEdgkFiDNYiOTx4OtiFcMSkqTtF2hfQz3zQ # Sku2Ws3IfDReb6e3mmdglTcaarps0wjUjsZvkgFkriK9tUKJm/s80FiocSk1VYLZ # lDwFt+cVFBURJg6zMUjZa/zbCclF83bRVFLeGkuAhHiGPMvSGmhgaTzVyhYn4p0+ # 8y9oHRaQT/aofEnS5xLrfxnGpTXiUOeSLsJygoLPp66bkDX1ZlAeSpQl92QOMeRx # ykvq6gbylsXQskBBBnGy3tW/AMOMCZIVNSaz7BX8VtYGqLt9MmeOreGPRdtBx3yG # OP+rx3rKWDEJlIqLXvJWnY0v5ydPpOjL6s36czwzsucuoKs7Yk/ehb//Wx+5kMqI # MRvUBDx6z1ev+7psNOdgJMoiwOrUG2ZdSoQbU2rMkpLiQ6bGRinZbI4OLu9BMIFm # 1UUl9VnePs6BaaeEWvjJSjNm2qA+sdFUeEY0qVjPKOWug/G6X5uAiynM7Bu2ayBj # UwIDAQABo4IBXTCCAVkwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQU729T # SunkBnx6yuKQVvYv1Ensy04wHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4c # D08wDgYDVR0PAQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMIMHcGCCsGAQUF # BwEBBGswaTAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEG # CCsGAQUFBzAChjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRU # cnVzdGVkUm9vdEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5k # aWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAgBgNVHSAEGTAX # MAgGBmeBDAEEAjALBglghkgBhv1sBwEwDQYJKoZIhvcNAQELBQADggIBABfO+xaA # HP4HPRF2cTC9vgvItTSmf83Qh8WIGjB/T8ObXAZz8OjuhUxjaaFdleMM0lBryPTQ # M2qEJPe36zwbSI/mS83afsl3YTj+IQhQE7jU/kXjjytJgnn0hvrV6hqWGd3rLAUt # 6vJy9lMDPjTLxLgXf9r5nWMQwr8Myb9rEVKChHyfpzee5kH0F8HABBgr0UdqirZ7 # bowe9Vj2AIMD8liyrukZ2iA/wdG2th9y1IsA0QF8dTXqvcnTmpfeQh35k5zOCPmS # Nq1UH410ANVko43+Cdmu4y81hjajV/gxdEkMx1NKU4uHQcKfZxAvBAKqMVuqte69 # M9J6A47OvgRaPs+2ykgcGV00TYr2Lr3ty9qIijanrUR3anzEwlvzZiiyfTPjLbnF # RsjsYg39OlV8cipDoq7+qNNjqFzeGxcytL5TTLL4ZaoBdqbhOhZ3ZRDUphPvSRmM # Thi0vw9vODRzW6AxnJll38F0cuJG7uEBYTptMSbhdhGQDpOXgpIUsWTjd6xpR6oa # Qf/DJbg3s6KCLPAlZ66RzIg9sC+NJpud/v4+7RWsWCiKi9EOLLHfMR2ZyJ/+xhCx # 9yHbxtl5TPau1j/1MIDpMPx0LckTetiSuEtQvLsNz3Qbp7wGWqbIiOWCnb5WqxL3 # /BAPvIXKUjPSxyZsq8WhbaM2tszWkPZPubdcMIIG7TCCBNWgAwIBAgIQCE/cM09+ # RU7bww+P+ZIYNTANBgkqhkiG9w0BAQsFADBpMQswCQYDVQQGEwJVUzEXMBUGA1UE # ChMORGlnaUNlcnQsIEluYy4xQTA/BgNVBAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQg # VGltZVN0YW1waW5nIFJTQTQwOTYgU0hBMjU2IDIwMjUgQ0ExMB4XDTI2MDgwNTAw # MDAwMFoXDTM3MTEwNDIzNTk1OVowYzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRp # Z2lDZXJ0LCBJbmMuMTswOQYDVQQDEzJEaWdpQ2VydCBTSEEyNTYgUlNBNDA5NiBU # aW1lc3RhbXAgUmVzcG9uZGVyIDIwMjYgMTCCAiIwDQYJKoZIhvcNAQEBBQADggIP # ADCCAgoCggIBALZ7pvLJ/s1K+NSbTGWz/TjGMPh8CQ6RucZCLv5anHzWJjF/NWJr # FIhy24fcpKXlgRiky4WAawDfU3YP0BMxt9l3Dm5oCG5Z69AqEN1kgHg2epx+l+lZ # BcmJCcN0ASURML5uFIS80sZsDwO3BSkUxDjLJhBI+qiZP3aixAC/qEGLjsBNlLol # 9VZ7pfGEXiMlneJIC5/YKuizVzNFKZZEeoy/0B8Zm+nzKBgSWG52lCO1w+nCg6Xp # CtklTJXeIg283hw7TmmsZXR+SMbjbrEOvZ3fP2VxIgeR28Y90ZStd3F9VuA5RVyn # b/whITPAo9b75Zr4Ta6Mj3URm26QZYMn/FnbuTegcoRcFEZ9FOqM5T6MTdtr/n74 # lIT/ug0eeOzmZ6QTFg33otX+bFRsIolvykE1jive4PuESaT8zzVeFWDAMDtozNgL # ctkGD1ZjkEyZtJrLl5ya0m5doH/ScpaZCZVl6pNUOCybMc/kxC6EAmSJY24L0yYK # D1Nkddsnb/ItVKi/2nXpQNMu1PT5prW83vV8d67WowuUs0HdY4H8AMLGvdL/WHEj # 3ZnqMqAQQP9u3Ai9t+5eQ02GDwy0ODjdzi0xlp70W+ow63/0++YDEX1M0iwgUHwb # rJvfpklkZQvw3+kv3vUPItdwroczk9icflf55W1zOEKAcJVAIXpcMCU9AgMBAAGj # ggGVMIIBkTAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBQUyWOKMC7USvtulPPm40B+ # 9ezN4jAfBgNVHSMEGDAWgBTvb1NK6eQGfHrK4pBW9i/USezLTjAOBgNVHQ8BAf8E # BAMCB4AwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgwgZUGCCsGAQUFBwEBBIGIMIGF # MCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXQYIKwYBBQUH # MAKGUWh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRH # NFRpbWVTdGFtcGluZ1JTQTQwOTZTSEEyNTYyMDI1Q0ExLmNydDBfBgNVHR8EWDBW # MFSgUqBQhk5odHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVk # RzRUaW1lU3RhbXBpbmdSU0E0MDk2U0hBMjU2MjAyNUNBMS5jcmwwIAYDVR0gBBkw # FzAIBgZngQwBBAIwCwYJYIZIAYb9bAcBMA0GCSqGSIb3DQEBCwUAA4ICAQCNxTph # Hp1SCt+ZrAmAfn0oQLFr0mLywSLaDXQIENoyKqxrFbJblzCVP/pkXmwXOdrOpWyg # LzlT12os5ipDCy35RBCg2UMeApEtrfGhz45F4Wt4WGdNdIbRWt3YTYJmpR+b7lr4 # d7Uwn+H600u4D7RnOGf8Wj4UNgAdZkfHhHv1mx9EVh71SJelcEN/oORSjXzdjfw1 # iZH9d8Nh/thn6hH23d+VsPAr6GAYyzSA02nXD1nYLI7Ijmiv+xLCiYC41DSFYL3G # hTiy0PxpawPtGRyaBVGzq+UiTfM8pD7KVyF5aQyWP4KhVGUUTnmm/RlYJoW3TiXA # /+t0YcT2oRVBm3JETjajHug2AL+v5jhtKVnd3D0rbHXEu27o+Q8p4sEWPMqKDB+q # bceb6T/6WcwTwXmQ9lOCLLYcsQeSWmvKqzpAec9etE14jOQAzLKWdE3w/TCaKtLR # aRT7LCkRYVnhA2D73FLje1O5b3HR5eHs0NzU/+xX7NbEdcofy0W3Wdwd1XOqtlpg # /JgwtKfZM5dqO94lbUveOiJBI+xZEbGRsMNbXmMREUTgu+Oca7Y73MPWcslIx2Vh # kSKSXjDbD6rgg39H5Mh7QfieAIjWagkJNt68Yfim6cjEzVSiLSeZfdkr5dtFPTW6 # jATlWJdYeeDRGCyatf8R1hSjzSvdN8yWQPT9gzCCB2MwggVLoAMCAQICEAhTOt+G # wz3QWpc3Z3ZgARUwDQYJKoZIhvcNAQELBQAwaTELMAkGA1UEBhMCVVMxFzAVBgNV # BAoTDkRpZ2lDZXJ0LCBJbmMuMUEwPwYDVQQDEzhEaWdpQ2VydCBUcnVzdGVkIEc0 # IENvZGUgU2lnbmluZyBSU0E0MDk2IFNIQTM4NCAyMDIxIENBMTAeFw0yNTEyMjYw # MDAwMDBaFw0yODEyMjcyMzU5NTlaMGsxCzAJBgNVBAYTAlBMMRIwEAYDVQQHDAlN # aWtvxYLDs3cxIzAhBgNVBAoTGkV2b3RlYyBTZXJ2aWNlcyBzcC4geiBvLm8uMSMw # IQYDVQQDExpFdm90ZWMgU2VydmljZXMgc3AuIHogby5vLjCCAiIwDQYJKoZIhvcN # AQEBBQADggIPADCCAgoCggIBANxbP/C0CFW8Z1gxi5+MxwMPmc5G8c3fIiV9S9FY # Lic5MEFf2hrQJ2PIx/Xf7bsfkuk0cSeUTnTL/sZYI9U9Hjah1EAxSvryILnhjoyZ # eedLTjOJkyWjoIs8cquJ8QAJgGYW8xhYp4e52MQGv8nHFkytFLebmrNJ88czDh4F # 5+UvvYovOkxJ68kvAXU0MMdiF3SOLii+gWQRcmRFQNghMJo4jS0jDfp7EzKN5GHY # iNbT5/xc1H16olQHZ37kIzGQlCel9+hTnPxf94eVouHo+HOQWlC55nujZAGFkID1 # h9EuRFCpPfapQVKmKSH8kxcJ1Ml11VQOE2HvFuMnOzE0DTq4qUSY7OZa5ddPXz5e # usNIwiIVEIXfKZD+UHRZkmdoSEGoCNVJHLRDTEKxnNJeaGKihE/K+DgeCYVipITP # 5MOwgG5nvOxILPs7CmxqaEGH9iT/xuJ4wiiBtLmvJiyJlHUOsVj0GtTdxMP5jjg2 # tIWVRAMkLRsfqSz31c9DbENEh7n8u6qqWAW3U2pWktY1i0PZt9vwfJnboZQnP91h # +Lee9/3YGnVyXq6J/x0TkBD9tg3CD5cTBDtA3MyDYQ4AYkYoToj6QP8fJnecOHx7 # 8UuU+f3N//gAfAu1UR3cM044N3Btm6IuyaXaRrFCro8L0nAV0WFMGz/W1FWnqTfT # SQ/XAgMBAAGjggIDMIIB/zAfBgNVHSMEGDAWgBRoN+Drtjv4XxGG+/5hewiIZfRO # QjAdBgNVHQ4EFgQUehhCwq/shewf/KCCM+q+nhvZG/wwPgYDVR0gBDcwNTAzBgZn # gQwBBAEwKTAnBggrBgEFBQcCARYbaHR0cDovL3d3dy5kaWdpY2VydC5jb20vQ1BT # MA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzCBtQYDVR0fBIGt # MIGqMFOgUaBPhk1odHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVz # dGVkRzRDb2RlU2lnbmluZ1JTQTQwOTZTSEEzODQyMDIxQ0ExLmNybDBToFGgT4ZN # aHR0cDovL2NybDQuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0Q29kZVNp # Z25pbmdSU0E0MDk2U0hBMzg0MjAyMUNBMS5jcmwwgZQGCCsGAQUFBwEBBIGHMIGE # MCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYBBQUH # MAKGUGh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRH # NENvZGVTaWduaW5nUlNBNDA5NlNIQTM4NDIwMjFDQTEuY3J0MAkGA1UdEwQCMAAw # DQYJKoZIhvcNAQELBQADggIBAD/YXkCSn1GzVQkE3O/LO2XlSbJYUNUFpAN4F4JZ # qAjQN1KCIdzWBPCOA844XDWo3fZox3sO/KF0tXVF2QeD7scK5bpd2gVE0tTqsWO0 # 9wR5VvzBHWZI3vWk6JfBT8pZK3++7iqpOYtZPQFYhHCk0pKqwL8K5ajrSRNoXcKK # VK8+ITMgVuwKqRtYpCs3VjX/kEPZtVTXAOLWB875hcuaqWhHye199ZCtuV0xgp4k # v1Euk42sN4s5nuFgS0M3ZTAAujJLSFsKnbGv086tbBiOjj/ntPwbKd2jwZu1MDSK # rZjvKRvUvU2sK4xVu185n5Lfz4CU6j7XRVFAYYYDxvYfMJ9ABKiZgl5o++PPx66d # gLxDKNC30YIAnQXgExaFEp1u5OCEQNJ/VmYjwl8SRvMy4A20sb9bczlFww8tpRb6 # 2WCRdhZck7rPLsPBjQgvkreachnOQAO8hMY5R4i9t88vBVq+cxj3tg0PMgqv7MWO # mrgzBeTow7twTnSU9w1SgVoUi39M7t8pwX1E6xJQiJL+SFlBH+AJK0iByN7YZjW7 # 65xxum54/kolZb9hgWiGQABNQMBHhEGYG8LLuLdBotIFs4sL+aP7IJv5N0mierbK # N5ROlavUwY4YIVqQSj+c1BU+f+uljQkZ5YFFt1y8oiYvTHkUkLYjL8cHVLvxTzsT # Nd1ZMYIGWTCCBlUCAQEwfTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNl # cnQsIEluYy4xQTA/BgNVBAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBTaWdu # aW5nIFJTQTQwOTYgU0hBMzg0IDIwMjEgQ0ExAhAIUzrfhsM90FqXN2d2YAEVMA0G # CWCGSAFlAwQCAQUAoIGEMBgGCisGAQQBgjcCAQwxCjAIoAKAAKECgAAwGQYJKoZI # hvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcC # ARUwLwYJKoZIhvcNAQkEMSIEIIHqt+pzEJYnHE4+sIMQFsaxk6YdwlvPWvMfrk9W # h70BMA0GCSqGSIb3DQEBAQUABIICAHJ4/vAjmuyRqccldJUTiPdroUEsXR7sUMNn # JpYtMSjgZZPg+DszDnLlh7XCSsl7/xfbJ0R8DP7lefml4u10QntRI51QfVOm/lRu # mt5M0iBH16Zjxs5OEkgChfx4/gSBVx/MTWfn8WyClegE93RY48HV0QgHKiDPyieK # K3AFyLn47o6bTAekYSQ0xX3VaHYUfx6izDggLVKyk7HuFFgBFQsy+q2IijwGH8ih # WdOA39nA6A97wkz933x+c371dZyuSgNujjF9yYAihv2VVrBPMzzRuPu1ST7gKExL # ZiaO1nok498bZ0wMdC83gKwOD/3aO+UcMTBDAHCyzR2Mb2MsI90+kHPmrHs9AhA+ # 3YpFSPwpSyyr2BgBtU1tyRRIhS8U7my0Z39tMM0P6vwsTCKquRH7V2Op/rMEQKOZ # mqyx406vL5Jx4wtkBBT+RVj1d5hiAd+5ROeuYcuM01gH7vAJS/IvAJRv8MfCQ3Gk # Qs533Tn0gLX8MLrl8OcUmSdBCmeM1R42DD+LYk+g3qyUjeFWcfM0jc70n/ekbn3v # Fyr+5KHkKeHncTwH+bp4dGddbUDpDVStldFUkeNl6tdsNScXW/X+67h8d0XsgJB4 # xWtK8RIRdbQaRJIBrmqt6ZXygS6JDaaUJTMeyGz8BdVnwQKCSaTnWw/DA1Vyo5Iu # 9SLELlWeoYIDJjCCAyIGCSqGSIb3DQEJBjGCAxMwggMPAgEBMH0waTELMAkGA1UE # BhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMUEwPwYDVQQDEzhEaWdpQ2Vy # dCBUcnVzdGVkIEc0IFRpbWVTdGFtcGluZyBSU0E0MDk2IFNIQTI1NiAyMDI1IENB # MQIQCE/cM09+RU7bww+P+ZIYNTANBglghkgBZQMEAgEFAKBpMBgGCSqGSIb3DQEJ # AzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTI2MTExMzIwMzY1NlowLwYJ # KoZIhvcNAQkEMSIEIBgqviY82AKoxecAqBoDY7JntYUjeFHGjMgIWUY1EZaMMA0G # CSqGSIb3DQEBAQUABIICAHdhTF1ocW9oGQ7Gv8FUDRdSPoKLMEX35i7VQTbU4DuF # 2cmwa/LVfw+YDZUqJumI72u9T6K3gEskeb/cYcNuaM3E2HeKdWhyXUhYLCiAdOZz # tvg7yockNtvPVgBZzlaSa5S/4cqQewtGZNHwNr/qtarMEH1Dsj9v3u/9mCCNSOdO # tzmrC2+LF368E+Gj4qMJkALnd2alJ2udrq2bDHI/W917CwGl3bRqQ/ZBF1BLfbOJ # Tq8kNcpDbJPlZlAP/wFfYy78MTu6IG8te5OOE0e4L7uA5eXc6yTDzIVg2eXDOlQl # ButKfQdErE1UP9hlddNx3e/s4MqTTRRqK7PrNYb/HDtV/JEQZ+HRa7LaFXNBGCU8 # efnpoPoAH9nImOpqoP3dWePAadrokxGRbTdSihartMgjDsOco95gAZUQVKUhLu2l # MFnX1sUKJFUX6vzIDM6/IYwPxrM+F5uW4XFOVIZlJAdsAnDRN5bh31X4siMmNXrh # EzqBdUKkR2kPZVhDHCQEHYN3U2h8jlGe2Y3ioG0N7QVS5D+MxO32QXtKrnPrLz+B # 2SJHVCYf2DgREuMzSfcgOhjANqZhWOmchn5wFXlDEJsECOB4cXpjZp479jF53CgD # pEytXc9IAF1AQhNtwx64LMK7lHHee1+XPqE01S1YVKGzSr7ETd8l53vwVONDmWIa # SIG # End signature block |