Client/vSphereConfiguration.ps1
# # vSphere Runtime for VMware Infrastructure Bindings # vSphere Runtime Implementation for vSphere Components. # Version: 1.0 # Contact: powercli@vmware.com # Generated by OpenAPI Generator: https://openapi-generator.tech # $PRODUCT_NAME = 'vSphere' <# .SYNOPSIS Creates server configuration instance for a product. .DESCRIPTION Creates server configuration instance for a product. .PARAMETER Server Specifies the IP address or the DNS name of the server to which you want to connect. .PARAMETER Username Username in HTTP basic authentication .PARAMETER Password Password in HTTP basic authentication .PARAMETER Credential Credential object based on the username and password in HTTP basic authentication. .PARAMETER ApiKey API Keys for authentication/authorization .PARAMETER AccessToken Access token for authentication/authorization .PARAMETER SkipCertificateCheck Skip certificate verification .PARAMETER ProxyUri Proxy Uri setting .PARAMETER SerializeNulls If specified, serializes all $null values and sends them as part of the request. .PARAMETER WebOperationTimeoutSeconds Maximum HTTP request/response time in seconds .PARAMETER VIConnection Specifies the PowerCLI Connection from which to create a server configuration instance for a product. .PARAMETER NotDefault If specified, the created server configuration will not be added to the list of server configurations used by Invoke-ApiClient. .OUTPUTS ServerConfiguration #> function New-vSphereServerConfiguration { [CmdletBinding(DefaultParameterSetName = 'Username')] param ( [Parameter(Mandatory = $true, ParameterSetName = 'Username')] [Parameter(Mandatory = $true, ParameterSetName = 'Credential')] [ValidateNotNullOrEmpty()] [string] $Server, [Parameter(ParameterSetName = 'Username')] [AllowEmptyString()] [string] $Username, [Parameter(ParameterSetName = 'Username')] [AllowEmptyString()] [SecureString] $Password, [Parameter(ParameterSetName = 'Credential')] [PSCredential] $Credential, [Parameter(Mandatory = $false, ParameterSetName = 'Username')] [Parameter(Mandatory = $false, ParameterSetName = 'Credential')] [string] $ApiKey, [Parameter(Mandatory = $false, ParameterSetName = 'Username')] [Parameter(Mandatory = $false, ParameterSetName = 'Credential')] [string] $AccessToken, [Parameter(Mandatory = $false, ParameterSetName = 'Username')] [Parameter(Mandatory = $false, ParameterSetName = 'Credential')] [switch] $SerializeNulls, [Parameter(Mandatory = $false, ParameterSetName = 'Username')] [Parameter(Mandatory = $false, ParameterSetName = 'Credential')] [switch] $SkipCertificateCheck, [Parameter(Mandatory = $false, ParameterSetName = 'Username')] [Parameter(Mandatory = $false, ParameterSetName = 'Credential')] [int] $WebOperationTimeoutSeconds, [Parameter(Mandatory = $false, ParameterSetName = 'Username')] [Parameter(Mandatory = $false, ParameterSetName = 'Credential')] [Uri] $ProxyUri, [Parameter(Mandatory = $true, ParameterSetName = 'VIConnection')] [object] $VIConnection, [Parameter()] [switch] $NotDefault = $false, [Parameter()] [switch] $UseDeprecatedApis ) if ($PSCmdlet.ParameterSetName -eq 'VIConnection') { if ($null -eq ($VIConnection.GetType().GetInterfaces() | Where-Object -FilterScript { $_.Name -eq 'CisSession' })) { throw "Invalid value for parameter 'VIConnection': $VIConnection. Only objects of type 'VIServer' are supported." } $PowerCLIConfiguration = Get-PowerCLIConfiguration -Scope Session $CisSessionId = $null try { $CisSessionId = $VIConnection.GetCisSessionId() } catch { throw ('An error occurred while establishing a CIS connection for server {0}. For more information: {1}' -f $VIConnection.Name, $_.Exception.Message) } if ($null -eq $CisSessionId) { throw ('CIS session id not found for server {0}' -f $VIConnection.Name) } $newServerConfigurationParams = @{ 'Product' = $PRODUCT_NAME 'BaseUrl' = "https://$($VIConnection.Name)" 'SerializeNulls' = $false 'SkipCertificateCheck' = $VIConnection.GetClient().ConnectivityService.GetValidationHandlerForCurrentServer().BadCertificateAction -eq 'Ignore' 'ProxyUri' = $null 'NotDefault' = $true } $result = New-ServerConfiguration @newServerConfigurationParams $result.PSObject.TypeNames.Add('ServerConfiguration') $result.Authorization.Headers['vmware-api-session-id'] = $CisSessionId $result.PSObject.TypeNames.Add('vSphereServerConfiguration') $result | Add-Member -MemberType NoteProperty -Name Server -Value $VIConnection.Name $result | Add-Member -MemberType NoteProperty -Name Username -Value $null $result | Add-Member -MemberType NoteProperty -Name Password -Value $null $result | Add-Member -MemberType NoteProperty -Name PowerCLIConnection -Value $VIConnection $result | Add-Member -MemberType NoteProperty -Name WebOperationTimeoutSeconds -Value $PowerCLIConfiguration.WebOperationTimeoutSeconds $result | Add-Member -MemberType NoteProperty -Name UseDeprecatedApis -Value $null if ($PSBoundParameters.ContainsKey('UseDeprecatedApis')) { $result.UseDeprecatedApis = $UseDeprecatedApis.IsPresent } $PowerCLIConnections = $global:DefaultVIServers | Where-Object -FilterScript { $_.IsConnected } $result | Add-Member -MemberType NoteProperty -Name InSyncWithPowerCLIServers -Value ($PowerCLIConnections -Contains $VIConnection) $result | Add-Member -MemberType ScriptMethod -Name Equals -Value {param($that) ($this.BaseUrl -eq $that.BaseUrl) -and ($this.PowerCLIConnection -eq $that.PowerCLIConnection)} -Force $result | Add-Member -MemberType ScriptMethod -Name ToString { $this.PowerCLIConnection.Id } -Force $result | Update-ServerConfigurationDeprecatedApis if ($NotDefault.IsPresent) { $result } else { $result | Add-ServerConfiguration } } else { if ($PSCmdlet.ParameterSetName -eq 'Credential' -and $null -ne $Credential) { $Username = $Credential.UserName $Password = $Credential.Password } $result = New-ServerConfiguration ` -Product $PRODUCT_NAME ` -BaseUrl "https://$Server" ` -SerializeNulls:$SerializeNulls.IsPresent ` -SkipCertificateCheck:$SkipCertificateCheck.IsPresent ` -ProxyUri $ProxyUri ` -NotDefault:$true $result.PSObject.TypeNames.Add('ServerConfiguration') if ($PSBoundParameters.ContainsKey('ApiKey')) { $result.Authorization.Headers['vmware-api-session-id'] = $ApiKey } $result.PSObject.TypeNames.Add('vSphereServerConfiguration') $result | Add-Member -MemberType NoteProperty -Name Server -Value $Server $result | Add-Member -MemberType NoteProperty -Name Username -Value $Username $result | Add-Member -MemberType NoteProperty -Name Password -Value $Password $result | Add-Member -MemberType NoteProperty -Name WebOperationTimeoutSeconds -Value $WebOperationTimeoutSeconds $result | Add-Member -MemberType NoteProperty -Name UseDeprecatedApis -Value $null if ($PSBoundParameters.ContainsKey('UseDeprecatedApis')) { $result.UseDeprecatedApis = $UseDeprecatedApis.IsPresent } $result | Add-Member -MemberType ScriptMethod -Name ToString { $this.Server } -Force $result | Update-ServerConfigurationDeprecatedApis if ($NotDefault.IsPresent) { $result } else { $result | Add-ServerConfiguration } } } function Update-ServerConfigurationDeprecatedApis { [CmdletBinding()] param ( [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [PSTypeName('vSphereServerConfiguration')] $ServerConfiguration ) if ( $null -eq $ServerConfiguration.UseDeprecatedApis -and $null -ne $ServerConfiguration.Authorization.Headers['vmware-api-session-id'] ) { $versionApiUrl = $ServerConfiguration.BaseUrl + '/rest/appliance/system/version' $SkipCertificateCheck = $ServerConfiguration.SkipCertificateCheck $invokeParams = @{ 'Method' = 'GET' 'Uri' = $versionApiUrl 'Headers' = $ServerConfiguration.Authorization.Headers } try { $InvokeRestMethodXParams = @{ 'InvokeParams' = $invokeParams 'SkipCertificateCheck' = ([bool] $SkipCertificateCheck) } $result = Invoke-RestMethodX @InvokeRestMethodXParams if ($null -ne $result) { $ServerConfiguration.UseDeprecatedApis = ([version]($result.value.version) -lt [version]"7.0.2") } } catch { $ServerConfiguration.UseDeprecatedApis = $false } } } <# .SYNOPSIS Syncs vSphere Server Configuration Objects with PowerCLI $DefaultVIServers #> function Sync-PowerCLIConnections { if ($null -ne (Get-Module -Name 'VMware.VimAutomation.Core')) { $ServerConfigurations = Get-ServerConfiguration -Product $PRODUCT_NAME | Where-Object -FilterScript { $_.PowerCLIConnection -ne $null } $PowerCLIConnections = $global:DefaultVIServers | Where-Object -FilterScript { $_.IsConnected } $ServerConfigurationsPowerCLIConnections = $ServerConfigurations | Foreach-Object { $_.PowerCLIConnection } # Remove Server Configurations for missing PowerCLI Connections foreach ($ServerConfiguration in $ServerConfigurations) { if ($PowerCLIConnections -NotContains $ServerConfiguration.PowerCLIConnection -and $ServerConfiguration.InSyncWithPowerCLIServers) { $ServerConfiguration | Remove-ServerConfiguration } } foreach ($PowerCLIConnection in $PowerCLIConnections) { if ($ServerConfigurationsPowerCLIConnections -NotContains $PowerCLIConnection) { New-vSphereServerConfiguration -VIConnection $PowerCLIConnection | Out-Null } else { $CisSessionId = $PowerCLIConnection.GetCisSessionId() # Update CIS session id on each sync for existing Server Configuration Objects to ensure that the session is still alive. $PowerCLIServerConfiguration = $ServerConfigurations | Where-Object -FilterScript { $_.PowerCLIConnection -eq $PowerCLIConnection } $PowerCLIServerConfiguration | Set-vSphereServerConfiguration -ApiKey $CisSessionId | Out-Null } } } } <# .SYNOPSIS Gets vSphereServerConfiguration objects. .DESCRIPTION The result server configuration objects are used by the Invoke-vSphereApiClient. A server configuration object can be modified or removed from the list of tracked server configurations. Set the API Key. .OUTPUTS ServerConfiguration None #> function Get-vSphereServerConfiguration { Sync-PowerCLIConnections Get-ServerConfiguration -Product $PRODUCT_NAME | Where-Object { $_ -ne $null } } <# .SYNOPSIS Updates vSphere Server Configuration .DESCRIPTION Updates vSphere Server Configuration .PARAMETER ServerConfiguration The server configuration object to update with an API Key from the SessionResponse .PARAMETER Username Username in HTTP basic authentication .PARAMETER Password Password in HTTP basic authentication .PARAMETER Credential Credential object based on the username and password in HTTP basic authentication. .PARAMETER ApiKey API Keys for authentication/authorization .PARAMETER AccessToken Access token for authentication/authorization .PARAMETER SkipCertificateCheck Skip certificate verification .PARAMETER DefaultHeaders Default HTTP headers to be included in the HTTP request .PARAMETER ProxyUri Proxy Uri setting .PARAMETER SerializeNulls If specified, serializes all $null values and sends them as part of the request. .OUTPUTS None #> function Set-vSphereServerConfiguration { [CmdletBinding(DefaultParameterSetName = 'Username')] param ( [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [PSTypeName('vSphereServerConfiguration')] $ServerConfiguration, [Parameter(ParameterSetName = 'Username')] [AllowEmptyString()] [string] $Username, [Parameter(ParameterSetName = 'Username')] [AllowEmptyString()] [SecureString] $Password, [Parameter(ParameterSetName = 'Credential')] [PSCredential] $Credential, [Parameter()] [string] $ApiKey, [Parameter()] [AllowEmptyString()] [string] $AccessToken, [Parameter()] [switch] $SerializeNulls, [Parameter()] [switch] $SkipCertificateCheck, [Parameter()] [int] $WebOperationTimeoutSeconds, [Parameter()] [Uri] $ProxyUri ) Process { if ($PSCmdlet.ParameterSetName -eq 'Credential' -and $null -ne $Credential) { $Username = $Credential.UserName $Password = $Credential.Password } if ($PSBoundParameters.ContainsKey('Username') -or $PSBoundParameters.ContainsKey('Credential')) { $ServerConfiguration.Username = $Username } if ($PSBoundParameters.ContainsKey('Password') -or $PSBoundParameters.ContainsKey('Credential')) { $ServerConfiguration.Password = $Password } if ($PSBoundParameters.ContainsKey('ApiKey')) { $ServerConfiguration.Authorization.Headers['vmware-api-session-id'] = $ApiKey } if ($PSBoundParameters.ContainsKey('WebOperationTimeoutSeconds')) { $ServerConfiguration.WebOperationTimeoutSeconds = $WebOperationTimeoutSeconds } if ($PSBoundParameters.ContainsKey('SkipCertificateCheck')) { $ServerConfiguration.SkipCertificateCheck = $SkipCertificateCheck.IsPresent $ServerConfiguration = $ServerConfiguration | Set-ServerConfiguration -SkipCertificateCheck:$SkipCertificateCheck.IsPresent } if ($PSBoundParameters.ContainsKey('SerializeNulls')) { $ServerConfiguration.SerializeNulls = $SerializeNulls.IsPresent } if ($PSBoundParameters.ContainsKey('ProxyUri')) { $ServerConfiguration.Proxy = $ProxyUri } $ServerConfiguration | Update-ServerConfigurationDeprecatedApis $ServerConfiguration } } <# .SYNOPSIS Set the API Key. .DESCRIPTION Set the API Key. .PARAMETER ServerConfiguration The server configuration object to update with an API Key from the SessionResponse .PARAMETER SessionResponse The object returned by Invoke-CreateSession .OUTPUTS None #> function Set-vSphereServerConfigurationApiKey { [CmdletBinding()] param ( [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [PSTypeName('vSphereServerConfiguration')] $ServerConfiguration, [Parameter()] [Hashtable] $SessionResponse ) Process { if ($null -ne $SessionResponse -and $null -ne $SessionResponse.Headers) { $ApiKey = $null $ApiKeyHeaderValue = $SessionResponse.Headers['vmware-api-session-id'] | Select-Object -First 1 $DeprecatedApiKeyHeaderValue = $null <# On PowerShell Core, the Header value is an array of strings and on PowerShell 5.1 a single string. So depending on the version, the ApiKey is extracted differently. #> if ($Global:PSVersionTable.PSEdition -eq 'Core') { $DeprecatedApiKeyHeaderValue = $SessionResponse.Headers['Set-Cookie'] | Select-Object -First 1 } else { <# In the deprecated APIs on PowerShell 5.1, the Header string value contains two entries separated by ',', so we need to extract the first entry from the string. #> $DeprecatedApiKeyHeaderValue = $SessionResponse.Headers['Set-Cookie'] -Split ',' | Select-Object -First 1 } if (![string]::IsNullOrEmpty($ApiKeyHeaderValue)) { $ApiKey = $ApiKeyHeaderValue } elseif (![string]::IsNullOrEmpty($DeprecatedApiKeyHeaderValue) -and $DeprecatedApiKeyHeaderValue -Match 'vmware-api-session-id') { <# The API Key should be extracted from the cookie because it comes in the following format: "vmware-api-session-id=83d25d63393fbd0075cee756500ffd37; Path=/rest; Secure; HttpOnly" #> $SessionCookie = $DeprecatedApiKeyHeaderValue $SessionPart = $SessionCookie -Split ';' | Select-Object -First 1 $ApiKey = ($SessionPart -Split 'vmware-api-session-id=')[1] } if (![string]::IsNullOrEmpty($ApiKey)) { # reset Username and Password as the ApiKey is with highest priority $ServerConfiguration | Set-vSphereServerConfiguration -Username $null -Password $null -ApiKey $ApiKey } } } } <# .SYNOPSIS Removes a vSphere server configuration object. .DESCRIPTION Removes a vSphere server configuration object from the list of the server configurations used by Invoke cmdlets. .PARAMETER ServerConfiguration Specifies the server configuration object to remove .OUTPUTS None #> function Remove-vSphereServerConfiguration { param( [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [PSTypeName('vSphereServerConfiguration')] $ServerConfiguration ) Process { Remove-ServerConfiguration -ServerConfiguration $ServerConfiguration } } # SIG # Begin signature block # MIIpiAYJKoZIhvcNAQcCoIIpeTCCKXUCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAIUxAyxz8SMwZ1 # Se+Uv1c+BCnhI5jmKYFhLpFh6W5uf6CCDnQwggawMIIEmKADAgECAhAIrUCyYNKc # TJ9ezam9k67ZMA0GCSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK # EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV # BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMTA0MjkwMDAwMDBaFw0z # NjA0MjgyMzU5NTlaMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg # SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg # UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw # ggIKAoICAQDVtC9C0CiteLdd1TlZG7GIQvUzjOs9gZdwxbvEhSYwn6SOaNhc9es0 # JAfhS0/TeEP0F9ce2vnS1WcaUk8OoVf8iJnBkcyBAz5NcCRks43iCH00fUyAVxJr # Q5qZ8sU7H/Lvy0daE6ZMswEgJfMQ04uy+wjwiuCdCcBlp/qYgEk1hz1RGeiQIXhF # LqGfLOEYwhrMxe6TSXBCMo/7xuoc82VokaJNTIIRSFJo3hC9FFdd6BgTZcV/sk+F # LEikVoQ11vkunKoAFdE3/hoGlMJ8yOobMubKwvSnowMOdKWvObarYBLj6Na59zHh # 3K3kGKDYwSNHR7OhD26jq22YBoMbt2pnLdK9RBqSEIGPsDsJ18ebMlrC/2pgVItJ # wZPt4bRc4G/rJvmM1bL5OBDm6s6R9b7T+2+TYTRcvJNFKIM2KmYoX7BzzosmJQay # g9Rc9hUZTO1i4F4z8ujo7AqnsAMrkbI2eb73rQgedaZlzLvjSFDzd5Ea/ttQokbI # YViY9XwCFjyDKK05huzUtw1T0PhH5nUwjewwk3YUpltLXXRhTT8SkXbev1jLchAp # QfDVxW0mdmgRQRNYmtwmKwH0iU1Z23jPgUo+QEdfyYFQc4UQIyFZYIpkVMHMIRro # OBl8ZhzNeDhFMJlP/2NPTLuqDQhTQXxYPUez+rbsjDIJAsxsPAxWEQIDAQABo4IB # WTCCAVUwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUaDfg67Y7+F8Rhvv+ # YXsIiGX0TkIwHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0P # AQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHcGCCsGAQUFBwEBBGswaTAk # BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAC # hjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9v # dEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5j # b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAcBgNVHSAEFTATMAcGBWeBDAED # MAgGBmeBDAEEATANBgkqhkiG9w0BAQwFAAOCAgEAOiNEPY0Idu6PvDqZ01bgAhql # +Eg08yy25nRm95RysQDKr2wwJxMSnpBEn0v9nqN8JtU3vDpdSG2V1T9J9Ce7FoFF # UP2cvbaF4HZ+N3HLIvdaqpDP9ZNq4+sg0dVQeYiaiorBtr2hSBh+3NiAGhEZGM1h # mYFW9snjdufE5BtfQ/g+lP92OT2e1JnPSt0o618moZVYSNUa/tcnP/2Q0XaG3Ryw # YFzzDaju4ImhvTnhOE7abrs2nfvlIVNaw8rpavGiPttDuDPITzgUkpn13c5Ubdld # AhQfQDN8A+KVssIhdXNSy0bYxDQcoqVLjc1vdjcshT8azibpGL6QB7BDf5WIIIJw # 8MzK7/0pNVwfiThV9zeKiwmhywvpMRr/LhlcOXHhvpynCgbWJme3kuZOX956rEnP # LqR0kq3bPKSchh/jwVYbKyP/j7XqiHtwa+aguv06P0WmxOgWkVKLQcBIhEuWTatE # QOON8BUozu3xGFYHKi8QxAwIZDwzj64ojDzLj4gLDb879M4ee47vtevLt/B3E+bn # KD+sEq6lLyJsQfmCXBVmzGwOysWGw/YmMwwHS6DTBwJqakAwSEs0qFEgu60bhQji # WQ1tygVQK+pKHJ6l/aCnHwZ05/LWUpD9r4VIIflXO7ScA+2GRfS0YW6/aOImYIbq # yK+p/pQd52MbOoZWeE4wgge8MIIFpKADAgECAhAGQAJb/wxIlzKZ1GMgg8N7MA0G # CSqGSIb3DQEBCwUAMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg # SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg # UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwHhcNMjQwMzI4MDAwMDAwWhcNMjcwMzMw # MjM1OTU5WjCBxDETMBEGCysGAQQBgjc8AgEDEwJVUzEZMBcGCysGAQQBgjc8AgEC # EwhEZWxhd2FyZTEdMBsGA1UEDwwUUHJpdmF0ZSBPcmdhbml6YXRpb24xEDAOBgNV # BAUTBzY2MTAxMTcxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMREw # DwYDVQQHEwhTYW4gSm9zZTEVMBMGA1UEChMMQnJvYWRjb20gSW5jMRUwEwYDVQQD # EwxCcm9hZGNvbSBJbmMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC6 # 8C+jJxKfxp9c1A6fghwSNjnvV+Y1my2XmTHEPmk7COFTWw1VRBZBtv/zUXrSStlW # 9Qqqp48wk+H+H5oM0qL9jsUQ6wAJpmjt33F3xvKqc8ehzVZLXUEACQBXTo30Hnbh # bcacKAyX9sGByGqKlR6cHHrEebSWMoxOO6TOgYg06xfeYzxpx8HqMQjOKgNEbh4c # m1Yx+ER/4BmWmYcvVHR9KtXwJWxmzUJCaS5OB9lp8JqO5+uAHvpGtQEAb39/h/vy # 290isCYw16/uaLOz5Epchv5fogTBTh4o6SXWHam03FfMNVbmbMVuciTzfPSDt0i5 # xQWYtVkwVU+NGE4XUutX4zbaing53QYKNAa+NW9FiWcaoEwE1qTvk7ilsucPzdqC # ikQpHyaaGCzHoDhveSLiJKgKRiDqee8KXfa/hkCoat9AtCihyd899kJ1kSlTO9fk # ci5/CdKwmwXQIKh6OPueKr+OJ69XPx0V+RaaMAkkVtFb7/VwecFmFgsXFkAK8ulP # aGYyIFOFqLMqH8ZuKiLVP5HkxDgSitJcWbaSf89TJuxNqh0vV1k4iwaQpcmQZhPK # 49pNlj5j0cyw8B+xTYNDwnKvyoWgqKAb2cfzc6pCLk2GJLBwakKZ5YKC50XdhPlS # yrqlLTb5otZRoYWFGKL1SqxxrBjRqg4qp1RvuxRcBQIDAQABo4ICAjCCAf4wHwYD # VR0jBBgwFoAUaDfg67Y7+F8Rhvv+YXsIiGX0TkIwHQYDVR0OBBYEFL9ZTMS/Phgv # GnXZm3XOrmDoJSIfMD0GA1UdIAQ2MDQwMgYFZ4EMAQMwKTAnBggrBgEFBQcCARYb # aHR0cDovL3d3dy5kaWdpY2VydC5jb20vQ1BTMA4GA1UdDwEB/wQEAwIHgDATBgNV # HSUEDDAKBggrBgEFBQcDAzCBtQYDVR0fBIGtMIGqMFOgUaBPhk1odHRwOi8vY3Js # My5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmluZ1JTQTQw # OTZTSEEzODQyMDIxQ0ExLmNybDBToFGgT4ZNaHR0cDovL2NybDQuZGlnaWNlcnQu # Y29tL0RpZ2lDZXJ0VHJ1c3RlZEc0Q29kZVNpZ25pbmdSU0E0MDk2U0hBMzg0MjAy # MUNBMS5jcmwwgZQGCCsGAQUFBwEBBIGHMIGEMCQGCCsGAQUFBzABhhhodHRwOi8v # b2NzcC5kaWdpY2VydC5jb20wXAYIKwYBBQUHMAKGUGh0dHA6Ly9jYWNlcnRzLmRp # Z2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWduaW5nUlNBNDA5NlNI # QTM4NDIwMjFDQTEuY3J0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggIBAMLk # M/5BZB1j2xjjR9IkyDYtLrqS9IztErzl4ogf2dXuAgBJP1EKm/EN4oOi/BHxLW0T # VuclGZ3aEa3/n3UlHxqmvKm+4elD5oh4sEOm7+J7ECV0HobeZhRiLmdyla1Mqbxw # xp56AVvhG/++nf+AVzw95c671a3kb+6VXMDzZK1qcUh6zyLklZ/vfjKipry9KgMR # sXd81I+PRr+99iRI+5pUsF7ixmS4vTldNh2r/VRFKLtXtTefZ20Q55Efu/8NefJf # fD/+LLmHszB3LRlguFYOUGon7q8eQKi20PMW6PQb8az4mn6MfA1Y2x+L7HFDiy// # VMOy5DqcKOHWqz/NZr7/VEPtywoLbHlUwNJyFY0wnQhzvPCg67YpDEYERDnggtpe # OchKlJoqLKQInq6xDLTtco+ynR6IHnWRcz+oYhm6TdvRcmP7giiqObKEFXQwLsjS # HsqRluk2FQ4DhG63+8gyD4rKQVoybP0obE7Gi2RYHOT0qwPos6GklZraht/capa7 # wos1gNKXJL7G6BaCXQWCyakT76ZOJOdHzHjJ2n+yBgKWWGBv186nrP5nfuRu0vJE # HG74cy5oRwe3vme6ztPQy9VSgSrP+g67bZ6yPe+z09T7NczW4aXrXbMUdTb02zKQ # sK8WEKfcvzBmZ115SwMuf3g34C5yRhOsWInfosmAMYIaajCCGmYCAQEwfTBpMQsw # CQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNVBAMTOERp # Z2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBTaWduaW5nIFJTQTQwOTYgU0hBMzg0IDIw # MjEgQ0ExAhAGQAJb/wxIlzKZ1GMgg8N7MA0GCWCGSAFlAwQCAQUAoHwwEAYKKwYB # BAGCNwIBDDECMAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGC # NwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIHn42+Cv+qhJgQex # njuzaXPm5DirM0e+Q6cMoDqI116UMA0GCSqGSIb3DQEBAQUABIICAAjQnHyVRTK5 # VmdjZthXdA6v5ALjozXLbJoFgOcmjV3TsWcb86aJtgi9C8275B6h19HfgDlKr64P # KHrCFFPcqhC3YBJw1EfvPEGzl3cERhFQD4jPKvH5dbE2A9XE+h2lU6JQUc15ehPv # wJOOt4q60ZCnE1+cwdkPDpa5VX5a7gMQcxsecXWKVEZ8JOIS436NLzyFEnrYkW1N # XiEhmC3gwQQCyqnoyiSONIHILhG+AUt8S9DzWPBw49L7HDkrmsS0dIJCs26ssLsh # v2rL7kMt2dHCjQfWaNjb1AyagHOPBs+t6jbhxFVXlXTPwiHpOnpIbM9iojcoUtmS # QyA91+W5wSATDhO8oXoJ5QgRyf9hAJgGqL/SJ6MyvwJc8cCL7AN8BGG8Q5/ePBO7 # 9vPk83z3BcnEfr262r4wZUv3eojl/hqf97AiPJOjqeE1AMI95yEtap06rjTBKoS4 # W33DRdsUA3ZesXzeTiZVgFs+G51xsNG92sJsFSdsaAGLjED1SEQuLJLAtK5swIuf # H9V95zA1ra+F7ZAp+kd6qBADcTVGNU0CarVolEeo34bWT74ayeI0vLCqIB8GnKQi # QXA7NpuZUUjb+i7T7Jf0xi/UNyjwRb8vre2imGSNvPZNRPS0TKCFM7cTEAvQgiAZ # xn8AYEnvMd2ce5AAscvN9r/EX4qm3ddNoYIXQDCCFzwGCisGAQQBgjcDAwExghcs # MIIXKAYJKoZIhvcNAQcCoIIXGTCCFxUCAQMxDzANBglghkgBZQMEAgEFADB4Bgsq # hkiG9w0BCRABBKBpBGcwZQIBAQYJYIZIAYb9bAcBMDEwDQYJYIZIAWUDBAIBBQAE # IO7/4fu8XQGuiI7/XZ619T7ChsdLHKFod83d+R4UTxK7AhEA87akeHariyiBSuhn # jMtJfRgPMjAyNDA3MjQxOTQ2MzBaoIITCTCCBsIwggSqoAMCAQICEAVEr/OUnQg5 # pr/bP1/lYRYwDQYJKoZIhvcNAQELBQAwYzELMAkGA1UEBhMCVVMxFzAVBgNVBAoT # DkRpZ2lDZXJ0LCBJbmMuMTswOQYDVQQDEzJEaWdpQ2VydCBUcnVzdGVkIEc0IFJT # QTQwOTYgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTAeFw0yMzA3MTQwMDAwMDBaFw0z # NDEwMTMyMzU5NTlaMEgxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg # SW5jLjEgMB4GA1UEAxMXRGlnaUNlcnQgVGltZXN0YW1wIDIwMjMwggIiMA0GCSqG # SIb3DQEBAQUAA4ICDwAwggIKAoICAQCjU0WHHYOOW6w+VLMj4M+f1+XS512hDgnc # L0ijl3o7Kpxn3GIVWMGpkxGnzaqyat0QKYoeYmNp01icNXG/OpfrlFCPHCDqx5o7 # L5Zm42nnaf5bw9YrIBzBl5S0pVCB8s/LB6YwaMqDQtr8fwkklKSCGtpqutg7yl3e # GRiF+0XqDWFsnf5xXsQGmjzwxS55DxtmUuPI1j5f2kPThPXQx/ZILV5FdZZ1/t0Q # oRuDwbjmUpW1R9d4KTlr4HhZl+NEK0rVlc7vCBfqgmRN/yPjyobutKQhZHDr1eWg # 2mOzLukF7qr2JPUdvJscsrdf3/Dudn0xmWVHVZ1KJC+sK5e+n+T9e3M+Mu5SNPvU # u+vUoCw0m+PebmQZBzcBkQ8ctVHNqkxmg4hoYru8QRt4GW3k2Q/gWEH72LEs4VGv # tK0VBhTqYggT02kefGRNnQ/fztFejKqrUBXJs8q818Q7aESjpTtC/XN97t0K/3k0 # EH6mXApYTAA+hWl1x4Nk1nXNjxJ2VqUk+tfEayG66B80mC866msBsPf7Kobse1I4 # qZgJoXGybHGvPrhvltXhEBP+YUcKjP7wtsfVx95sJPC/QoLKoHE9nJKTBLRpcCcN # T7e1NtHJXwikcKPsCvERLmTgyyIryvEoEyFJUX4GZtM7vvrrkTjYUQfKlLfiUKHz # OtOKg8tAewIDAQABo4IBizCCAYcwDgYDVR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQC # MAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgwIAYDVR0gBBkwFzAIBgZngQwBBAIw # CwYJYIZIAYb9bAcBMB8GA1UdIwQYMBaAFLoW2W1NhS9zKXaaL3WMaiCPnshvMB0G # A1UdDgQWBBSltu8T5+/N0GSh1VapZTGj3tXjSTBaBgNVHR8EUzBRME+gTaBLhklo # dHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRSU0E0MDk2 # U0hBMjU2VGltZVN0YW1waW5nQ0EuY3JsMIGQBggrBgEFBQcBAQSBgzCBgDAkBggr # BgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMFgGCCsGAQUFBzAChkxo # dHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRSU0E0 # MDk2U0hBMjU2VGltZVN0YW1waW5nQ0EuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCB # GtbeoKm1mBe8cI1PijxonNgl/8ss5M3qXSKS7IwiAqm4z4Co2efjxe0mgopxLxjd # TrbebNfhYJwr7e09SI64a7p8Xb3CYTdoSXej65CqEtcnhfOOHpLawkA4n13IoC4l # eCWdKgV6hCmYtld5j9smViuw86e9NwzYmHZPVrlSwradOKmB521BXIxp0bkrxMZ7 # z5z6eOKTGnaiaXXTUOREEr4gDZ6pRND45Ul3CFohxbTPmJUaVLq5vMFpGbrPFvKD # NzRusEEm3d5al08zjdSNd311RaGlWCZqA0Xe2VC1UIyvVr1MxeFGxSjTredDAHDe # zJieGYkD6tSRN+9NUvPJYCHEVkft2hFLjDLDiOZY4rbbPvlfsELWj+MXkdGqwFXj # hr+sJyxB0JozSqg21Llyln6XeThIX8rC3D0y33XWNmdaifj2p8flTzU8AL2+nCps # eQHc2kTmOt44OwdeOVj0fHMxVaCAEcsUDH6uvP6k63llqmjWIso765qCNVcoFstp # 8jKastLYOrixRoZruhf9xHdsFWyuq69zOuhJRrfVf8y2OMDY7Bz1tqG4QyzfTkx9 # HmhwwHcK1ALgXGC7KP845VJa1qwXIiNO9OzTF/tQa/8Hdx9xl0RBybhG02wyfFgv # Z0dl5Rtztpn5aywGRu9BHvDwX+Db2a2QgESvgBBBijCCBq4wggSWoAMCAQICEAc2 # N7ckVHzYR6z9KGYqXlswDQYJKoZIhvcNAQELBQAwYjELMAkGA1UEBhMCVVMxFTAT # BgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTEh # MB8GA1UEAxMYRGlnaUNlcnQgVHJ1c3RlZCBSb290IEc0MB4XDTIyMDMyMzAwMDAw # MFoXDTM3MDMyMjIzNTk1OVowYzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lD # ZXJ0LCBJbmMuMTswOQYDVQQDEzJEaWdpQ2VydCBUcnVzdGVkIEc0IFJTQTQwOTYg # U0hBMjU2IFRpbWVTdGFtcGluZyBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC # AgoCggIBAMaGNQZJs8E9cklRVcclA8TykTepl1Gh1tKD0Z5Mom2gsMyD+Vr2EaFE # FUJfpIjzaPp985yJC3+dH54PMx9QEwsmc5Zt+FeoAn39Q7SE2hHxc7Gz7iuAhIoi # GN/r2j3EF3+rGSs+QtxnjupRPfDWVtTnKC3r07G1decfBmWNlCnT2exp39mQh0YA # e9tEQYncfGpXevA3eZ9drMvohGS0UvJ2R/dhgxndX7RUCyFobjchu0CsX7LeSn3O # 9TkSZ+8OpWNs5KbFHc02DVzV5huowWR0QKfAcsW6Th+xtVhNef7Xj3OTrCw54qVI # 1vCwMROpVymWJy71h6aPTnYVVSZwmCZ/oBpHIEPjQ2OAe3VuJyWQmDo4EbP29p7m # O1vsgd4iFNmCKseSv6De4z6ic/rnH1pslPJSlRErWHRAKKtzQ87fSqEcazjFKfPK # qpZzQmiftkaznTqj1QPgv/CiPMpC3BhIfxQ0z9JMq++bPf4OuGQq+nUoJEHtQr8F # nGZJUlD0UfM2SU2LINIsVzV5K6jzRWC8I41Y99xh3pP+OcD5sjClTNfpmEpYPtMD # iP6zj9NeS3YSUZPJjAw7W4oiqMEmCPkUEBIDfV8ju2TjY+Cm4T72wnSyPx4Jduyr # XUZ14mCjWAkBKAAOhFTuzuldyF4wEr1GnrXTdrnSDmuZDNIztM2xAgMBAAGjggFd # MIIBWTASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBS6FtltTYUvcyl2mi91 # jGogj57IbzAfBgNVHSMEGDAWgBTs1+OC0nFdZEzfLmc/57qYrhwPTzAOBgNVHQ8B # Af8EBAMCAYYwEwYDVR0lBAwwCgYIKwYBBQUHAwgwdwYIKwYBBQUHAQEEazBpMCQG # CCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wQQYIKwYBBQUHMAKG # NWh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRSb290 # RzQuY3J0MEMGA1UdHwQ8MDowOKA2oDSGMmh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNv # bS9EaWdpQ2VydFRydXN0ZWRSb290RzQuY3JsMCAGA1UdIAQZMBcwCAYGZ4EMAQQC # MAsGCWCGSAGG/WwHATANBgkqhkiG9w0BAQsFAAOCAgEAfVmOwJO2b5ipRCIBfmbW # 2CFC4bAYLhBNE88wU86/GPvHUF3iSyn7cIoNqilp/GnBzx0H6T5gyNgL5Vxb122H # +oQgJTQxZ822EpZvxFBMYh0MCIKoFr2pVs8Vc40BIiXOlWk/R3f7cnQU1/+rT4os # equFzUNf7WC2qk+RZp4snuCKrOX9jLxkJodskr2dfNBwCnzvqLx1T7pa96kQsl3p # /yhUifDVinF2ZdrM8HKjI/rAJ4JErpknG6skHibBt94q6/aesXmZgaNWhqsKRcnf # xI2g55j7+6adcq/Ex8HBanHZxhOACcS2n82HhyS7T6NJuXdmkfFynOlLAlKnN36T # U6w7HQhJD5TNOXrd/yVjmScsPT9rp/Fmw0HNT7ZAmyEhQNC3EyTN3B14OuSereU0 # cZLXJmvkOHOrpgFPvT87eK1MrfvElXvtCl8zOYdBeHo46Zzh3SP9HSjTx/no8Zhf # +yvYfvJGnXUsHicsJttvFXseGYs2uJPU5vIXmVnKcPA3v5gA3yAWTyf7YGcWoWa6 # 3VXAOimGsJigK+2VQbc61RWYMbRiCQ8KvYHZE/6/pNHzV9m8BPqC3jLfBInwAM1d # wvnQI38AC+R2AibZ8GV2QqYphwlHK+Z/GqSFD/yYlvZVVCsfgPrA8g4r5db7qS9E # FUrnEw4d2zc4GqEr9u3WfPwwggWNMIIEdaADAgECAhAOmxiO+dAt5+/bUOIIQBha # MA0GCSqGSIb3DQEBDAUAMGUxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2Vy # dCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xJDAiBgNVBAMTG0RpZ2lD # ZXJ0IEFzc3VyZWQgSUQgUm9vdCBDQTAeFw0yMjA4MDEwMDAwMDBaFw0zMTExMDky # MzU5NTlaMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAX # BgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0IFRydXN0 # ZWQgUm9vdCBHNDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL/mkHNo # 3rvkXUo8MCIwaTPswqclLskhPfKK2FnC4SmnPVirdprNrnsbhA3EMB/zG6Q4FutW # xpdtHauyefLKEdLkX9YFPFIPUh/GnhWlfr6fqVcWWVVyr2iTcMKyunWZanMylNEQ # RBAu34LzB4TmdDttceItDBvuINXJIB1jKS3O7F5OyJP4IWGbNOsFxl7sWxq868nP # zaw0QF+xembud8hIqGZXV59UWI4MK7dPpzDZVu7Ke13jrclPXuU15zHL2pNe3I6P # gNq2kZhAkHnDeMe2scS1ahg4AxCN2NQ3pC4FfYj1gj4QkXCrVYJBMtfbBHMqbpEB # fCFM1LyuGwN1XXhm2ToxRJozQL8I11pJpMLmqaBn3aQnvKFPObURWBf3JFxGj2T3 # wWmIdph2PVldQnaHiZdpekjw4KISG2aadMreSx7nDmOu5tTvkpI6nj3cAORFJYm2 # mkQZK37AlLTSYW3rM9nF30sEAMx9HJXDj/chsrIRt7t/8tWMcCxBYKqxYxhElRp2 # Yn72gLD76GSmM9GJB+G9t+ZDpBi4pncB4Q+UDCEdslQpJYls5Q5SUUd0viastkF1 # 3nqsX40/ybzTQRESW+UQUOsxxcpyFiIJ33xMdT9j7CFfxCBRa2+xq4aLT8LWRV+d # IPyhHsXAj6KxfgommfXkaS+YHS312amyHeUbAgMBAAGjggE6MIIBNjAPBgNVHRMB # Af8EBTADAQH/MB0GA1UdDgQWBBTs1+OC0nFdZEzfLmc/57qYrhwPTzAfBgNVHSME # GDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzAOBgNVHQ8BAf8EBAMCAYYweQYIKwYB # BQUHAQEEbTBrMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20w # QwYIKwYBBQUHMAKGN2h0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2Vy # dEFzc3VyZWRJRFJvb3RDQS5jcnQwRQYDVR0fBD4wPDA6oDigNoY0aHR0cDovL2Ny # bDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0QXNzdXJlZElEUm9vdENBLmNybDARBgNV # HSAECjAIMAYGBFUdIAAwDQYJKoZIhvcNAQEMBQADggEBAHCgv0NcVec4X6CjdBs9 # thbX979XB72arKGHLOyFXqkauyL4hxppVCLtpIh3bb0aFPQTSnovLbc47/T/gLn4 # offyct4kvFIDyE7QKt76LVbP+fT3rDB6mouyXtTP0UNEm0Mh65ZyoUi0mcudT6cG # AxN3J0TU53/oWajwvy8LpunyNDzs9wPHh6jSTEAZNUZqaVSwuKFWjuyk1T3osdz9 # HNj0d1pcVIxv76FQPfx2CWiEn2/K2yCNNWAcAgPLILCsWKAOQGPFmCLBsln1VWvP # J6tsds5vIy30fnFqI2si/xK4VC0nftg62fC2h5b9W9FcrBjDTZ9ztwGpn1eqXiji # uZQxggN2MIIDcgIBATB3MGMxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2Vy # dCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNlcnQgVHJ1c3RlZCBHNCBSU0E0MDk2IFNI # QTI1NiBUaW1lU3RhbXBpbmcgQ0ECEAVEr/OUnQg5pr/bP1/lYRYwDQYJYIZIAWUD # BAIBBQCggdEwGgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEEMBwGCSqGSIb3DQEJ # BTEPFw0yNDA3MjQxOTQ2MzBaMCsGCyqGSIb3DQEJEAIMMRwwGjAYMBYEFGbwKzLC # wskPgl3OqorJxk8ZnM9AMC8GCSqGSIb3DQEJBDEiBCDlnImFm8s8J5Qo1VnVqpEf # VqBnOBV/lnADjNY1qbw3MzA3BgsqhkiG9w0BCRACLzEoMCYwJDAiBCDS9uRt7XQi # zNHUQFdoQTZvgoraVZquMxavTRqa1Ax4KDANBgkqhkiG9w0BAQEFAASCAgAQciZX # 82MCyPJRaBcUL3+dLKtS3hJOXKhd4Mo/rkVGhXoW8Fk2lAm9/GRgxNrtAvF1Cal5 # 2P1J7ex61ljTmdAxc+2FJ59kFwYiUqc305pnb9LyWr4hJTLAvFjDrs137JZbsqv6 # 505Tfc5ffaUCa2ecVNU/F23L7UYlQHpfVpDEDj3iFPXE8h+uJ/++TFOlC81RUZPK # dq8ndMGpl1ZyTeyrxcalA46M9Y0WgWTuMbQrP62m6xxPCU2fzNPGIveYWnsDFZEL # uLAOIpMoK+ryPNL80EhGn3qAvu7EjVGSbF3XR20Ill+fpGWCKCCLjKZDBhfEE258 # L0kFI0UWOpNszjEhQ26SNPtzocb8zg/AXuWUnzz2hnrW9apUV1T5sLC1mdMjLsYi # 6SvJB2vFKpH3TnXEkHxXJ5er6LzIFNNkVT76JCd12Lk43xAw7GMa49M1lGU1ibWM # OLRQYqOAG3U69GCYnmSN/c4EJ4iEO+mE33CWh9QII0JhyUxS6gUU2e9IKbu5QZUY # Jkrq1+dThlpUnItgKNLxz9/7aNJ7KrOZtv6FVT4khqaY1E3GK8ZAC5g2mY3XZPC3 # vZ4ZhRZPLjfC3M2QFYTBaHouCldvId6fMOkmJgLllW5dZQGNOYp9Bz+Rk0a2ArPd # psV8EmcDOubiVWjUwSKV9j+GNeWIot17Py9Aew== # SIG # End signature block |