PSSwagger.Constants.ps1
######################################################################################### # # Copyright (c) Microsoft Corporation. All rights reserved. # # Licensed under the MIT license. # # PSSwagger Module # ######################################################################################### $helpDescStr = @' .DESCRIPTION $description '@ $parameterAttributeString = '[Parameter(Mandatory = $isParamMandatory$ParameterSetPropertyString)]' $parameterDefString = @' $AllParameterSetsString$ValidateSetDefinition $paramType$paramName$parameterDefaultValueOption, '@ $parameterDefaultValueString = ' = $parameterDefaultValue' $RootModuleContents = @' Microsoft.PowerShell.Core\Set-StrictMode -Version Latest Microsoft.PowerShell.Utility\Import-LocalizedData LocalizedData -filename $Name.Resources.psd1 # If the user supplied -Prefix to Import-Module, that applies to the nested module as well # Force import the nested module again without -Prefix if (-not (Get-Command Get-OperatingSystemInfo -Module PSSwaggerUtility -ErrorAction Ignore)) { Import-Module PSSwaggerUtility -Force } if ((Get-OperatingSystemInfo).IsCore) { $testCoreModuleRequirements`$clr = 'coreclr' `$framework = 'netstandard1' } else { $testFullModuleRequirements`$clr = 'fullclr' `$framework = 'net4' } `$clrPath = Join-Path -Path `$PSScriptRoot -ChildPath 'ref' | Join-Path -ChildPath `$clr `$dllFullName = Join-Path -Path `$clrPath -ChildPath '$Namespace.dll' `$isAzureCSharp = `$$UseAzureCSharpGenerator `$consent = `$false if (-not (Test-Path -Path `$dllFullName)) { `$message = `$LocalizedData.CompilingBinaryComponent -f (`$dllFullName) Write-Verbose -Message `$message `$generatedCSharpFilePath = (Join-Path -Path "`$PSScriptRoot" -ChildPath "Generated.Csharp") if (-not (Test-Path -Path `$generatedCSharpFilePath)) { throw `$LocalizedData.CSharpFilesNotFound -f (`$generatedCSharpFilePath) } `$allCSharpFiles = Get-ChildItem -Path (Join-Path -Path `$generatedCSharpFilePath -ChildPath "*.Code.ps1") -Recurse -Exclude Program.cs,TemporaryGeneratedFile* -File | Where-Object DirectoryName -notlike '*Azure.Csharp.Generated*' if ((Get-OperatingSystemInfo).IsWindows) { `$allCSharpFiles | ForEach-Object { `$sig = Get-AuthenticodeSignature -FilePath `$_.FullName if (('NotSigned' -ne `$sig.Status) -and ('Valid' -ne `$sig.Status)) { throw `$LocalizedData.HashValidationFailed } } `$message = `$LocalizedData.HashValidationSuccessful Write-Verbose -Message `$message -Verbose } `$dependencies = Get-PSSwaggerExternalDependencies -Azure:`$isAzureCSharp -Framework `$framework `$consent = Initialize-PSSwaggerLocalTool -Azure:`$isAzureCSharp -Framework `$framework `$microsoftRestClientRuntimeAzureRequiredVersion = '' if (`$dependencies.ContainsKey('Microsoft.Rest.ClientRuntime.Azure')) { `$microsoftRestClientRuntimeAzureRequiredVersion = `$dependencies['Microsoft.Rest.ClientRuntime.Azure'].RequiredVersion } `$microsoftRestClientRuntimeRequiredVersion = `$dependencies['Microsoft.Rest.ClientRuntime'].RequiredVersion `$newtonsoftJsonRequiredVersion = `$dependencies['Newtonsoft.Json'].RequiredVersion `$success = Add-PSSwaggerClientType -CSharpFiles `$allCSharpFiles -NewtonsoftJsonRequiredVersion `$newtonsoftJsonRequiredVersion -MicrosoftRestClientRuntimeRequiredVersion `$microsoftRestClientRuntimeRequiredVersion -MicrosoftRestClientRuntimeAzureRequiredVersion "`$microsoftRestClientRuntimeAzureRequiredVersion" -ClrPath `$clrPath -BootstrapConsent:`$consent -CodeCreatedByAzureGenerator:`$isAzureCSharp if (-not `$success) { `$message = `$LocalizedData.CompilationFailed -f (`$dllFullName) throw `$message } `$message = `$LocalizedData.CompilationFailed -f (`$dllFullName) Write-Verbose -Message `$message } Get-ChildItem -Path (Join-Path -Path "`$PSScriptRoot" -ChildPath "ref" | Join-Path -ChildPath "`$clr" | Join-Path -ChildPath "*.dll") -File | ForEach-Object { Add-Type -Path `$_.FullName -ErrorAction SilentlyContinue } Get-ChildItem -Path "`$PSScriptRoot\$GeneratedCommandsName\*.ps1" -Recurse -File | ForEach-Object { . `$_.FullName} '@ $advFnSignatureForDefintion = @' <# $commandHelp $paramHelp #> function $commandName { param($paramblock ) $body } '@ $AsJobParameterString = @' [Parameter(Mandatory = $false)] [switch] $AsJob '@ $advFnSignatureForPath = @' Import-Module -Name (Join-Path -Path `$PSScriptRoot -ChildPath .. | Join-Path -ChildPath .. | Join-Path -ChildPath "GeneratedHelpers.psm1") <# $commandHelp $paramHelp #> function $commandName { $outputTypeBlock[CmdletBinding(DefaultParameterSetName='$DefaultParameterSetName')] param($ParamBlockReplaceStr ) Begin { $dependencyInitFunction `$tracerObject = `$null if (('continue' -eq `$DebugPreference) -or ('inquire' -eq `$DebugPreference)) { `$oldDebugPreference = `$global:DebugPreference `$global:DebugPreference = "continue" `$tracerObject = New-PSSwaggerClientTracing Register-PSSwaggerClientTracing -TracerObject `$tracerObject } } Process { $body $PathFunctionBody } End { if (`$tracerObject) { `$global:DebugPreference = `$oldDebugPreference Unregister-PSSwaggerClientTracing -TracerObject `$tracerObject } } } '@ $helpParamStr = @' .PARAMETER $parameterName $pDescription '@ $oDataExpressionBlockStr = @' `$oDataQuery = "" $oDataExpression `$oDataQuery = `$oDataQuery.Trim("&") '@ $parameterGroupCreateExpression = @' `$$groupName = New-Object -TypeName $fullGroupName '@ $parameterGroupPropertyExpression = @' if (`$PSBoundParameters.ContainsKey('$parameterGroupPropertyName')) { `$$groupName.$parameterGroupPropertyName = `$$parameterGroupPropertyName } '@ $constructFlattenedParameter = @' `$flattenedParameters = $flattenedParametersListStr `$utilityCmdParams = @{} `$flattenedParameters | ForEach-Object { if(`$PSBoundParameters.ContainsKey(`$_)) { `$utilityCmdParams[`$_] = `$PSBoundParameters[`$_] } } `$$SwaggerOperationParameterName = New-$($FlattenedParamType)Object @utilityCmdParams '@ $functionBodyStr = @' `$ErrorActionPreference = 'Stop' $securityBlock $clientName = New-Object -TypeName $fullModuleName -ArgumentList $clientArgumentList$apiVersion $overrideBaseUriBlock $GlobalParameterBlock $oDataExpressionBlock $parameterGroupsExpressionBlock $flattenedParametersBlock `$skippedCount = 0 `$returnedCount = 0 $parameterSetBasedMethodStr else { Write-Verbose -Message 'Failed to map parameter set to operation method.' throw 'Module failed to find operation to execute.' } '@ $clientArgumentListNoHandler = "`$serviceCredentials,`$delegatingHandler" $clientArgumentListHttpClientHandler = "`$serviceCredentials,`$httpClientHandler,`$delegatingHandler" $securityBlockStr = @' `$serviceCredentials = $authFunctionCall $azSubscriptionIdBlock $httpClientHandlerCall `$delegatingHandler = New-Object -TypeName System.Net.Http.DelegatingHandler[] 0 '@ $parameterSetBasedMethodStrIfCase = @' if ('$operationId' -eq `$PsCmdlet.ParameterSetName) { $additionalConditionStart$methodBlock$additionalConditionEnd } '@ $parameterSetBasedMethodStrElseIfCase = @' elseif ('$operationId' -eq `$PsCmdlet.ParameterSetName ) { $additionalConditionStart$methodBlock$additionalConditionEnd } '@ $methodBlockFunctionCall = @' Write-Verbose -Message 'Performing operation $methodName on $clientName.' `$taskResult = $clientName$operations.$methodName($ParamList) '@ $methodBlockCmdletCall = @' Write-Verbose -Message 'Calling cmdlet $Cmdlet.' $Cmdlet $CmdletArgs `$taskResult = `$null '@ $getTaskResultBlock = @' `$result = `$null `$ErrorActionPreference = 'Stop' `$null = `$taskResult.AsyncWaitHandle.WaitOne() Write-Debug -Message "`$(`$taskResult | Out-String)" if(`$taskResult.IsFaulted) { Write-Verbose -Message 'Operation failed.' Throw "`$(`$taskResult.Exception.InnerExceptions | Out-String)" } elseif (`$taskResult.IsCanceled) { Write-Verbose -Message 'Operation got cancelled.' Throw 'Operation got cancelled.' } else { Write-Verbose -Message 'Operation completed successfully.' if(`$taskResult.Result -and (Get-Member -InputObject `$taskResult.Result -Name 'Body') -and `$taskResult.Result.Body) { `$result = `$taskResult.Result.Body Write-Debug -Message "`$(`$result | Out-String)" $resultBlockStr } } '@ $resultBlockWithSkipAndTop = @' if (`$result -is [$pageType]) { foreach (`$item in `$result) { if (`$skippedCount++ -lt `$Skip) { } else { if ((`$Top -eq -1) -or (`$returnedCount++ -lt `$Top)) { `$item } else { break } } } } else { `$result } '@ $resultBlockWithTop = @' if (`$result -is [$pageType]) { foreach (`$item in `$result) { if ((`$Top -eq -1) -or (`$returnedCount++ -lt `$Top)) { `$item } else { break } } } else { `$result } '@ $resultBlockWithSkip = @' if (`$result -is [$pageType]) { foreach (`$item in `$result) { if (`$skippedCount++ -lt `$Skip) { } else { `$item } } } else { `$result } '@ $resultBlockNoPaging = @' $result '@ $PathFunctionBodyAsJob = @' Write-Verbose -Message "Waiting for the operation to complete." `$PSSwaggerJobScriptBlock = { [CmdletBinding()] param( [Parameter(Mandatory = `$true)] [System.Threading.Tasks.Task] `$TaskResult ) if (`$TaskResult) { $getTaskResult $pagingBlock } } `$PSCommonParameters = Get-PSCommonParameter -CallerPSBoundParameters `$PSBoundParameters if(`$AsJob) { `$ScriptBlockParameters = New-Object -TypeName 'System.Collections.Generic.Dictionary[string,object]' `$ScriptBlockParameters['TaskResult'] = `$TaskResult `$ScriptBlockParameters['AsJob'] = `$AsJob `$PSCommonParameters.GetEnumerator() | ForEach-Object { `$ScriptBlockParameters[`$_.Name] = `$_.Value } Start-PSSwaggerJobHelper -ScriptBlock `$PSSwaggerJobScriptBlock `` -CallerPSBoundParameters `$ScriptBlockParameters `` -CallerPSCmdlet `$PSCmdlet `` @PSCommonParameters } else { Invoke-Command -ScriptBlock `$PSSwaggerJobScriptBlock `` -ArgumentList `$taskResult `` @PSCommonParameters } '@ $PathFunctionBodySynch = @' if (`$TaskResult) { $getTaskResult $pagingBlock } '@ $PagingBlockStrFunctionCallWithTop = @' Write-Verbose -Message 'Flattening paged results.' # Get the next page iff 1) there is a next page and 2) any result in the next page would be returned while (`$result -and `$result.NextPageLink -and ((`$Top -eq -1) -or (`$returnedCount -lt `$Top))) { Write-Debug -Message "Retrieving next page: `$(`$result.NextPageLink)" `$taskResult = $clientName$pagingOperations.$pagingOperationName(`$result.NextPageLink) $getTaskResult } '@ $PagingBlockStrFunctionCall = @' Write-Verbose -Message 'Flattening paged results.' while (`$result -and `$result.NextPageLink) { Write-Debug -Message "Retrieving next page: `$(`$result.NextPageLink)" `$taskResult = $clientName$pagingOperations.$pagingOperationName(`$result.NextPageLink) $getTaskResult } '@ $PagingBlockStrCmdletCallWithTop = @' Write-Verbose -Message 'Flattening paged results.' # Get the next page iff 1) there is a next page and 2) any result in the next page would be returned while (`$result -and `$result.NextPageLink -and ((`$Top -eq -1) -or (`$returnedCount -lt `$Top))) { Write-Debug -Message "Retrieving next page: `$(`$result.NextPageLink)" $Cmdlet $CmdletArgs } '@ $PagingBlockStrCmdletCall = @' Write-Verbose -Message 'Flattening paged results.' while (`$result -and `$result.NextPageLink) { Write-Debug -Message "Retrieving next page: `$(`$result.NextPageLink)" $Cmdlet $CmdletArgs } '@ $ValidateSetDefinitionString = @' [ValidateSet($ValidateSetString)] '@ $successReturn = @' Write-Verbose "Operation completed with return code: `$responseStatusCode." $result = $taskResult.Result.Body Write-Verbose -Message "$($result | Out-String)" $result '@ $responseBodySwitchCase = @' switch (`$responseStatusCode) { {200..299 -contains `$responseStatusCode} { $successReturn }$failWithDesc Default {Write-Error -Message "Status: `$responseStatusCode received."} } '@ $failCase = @' {`$responseStatusCode} { $responseStatusValue {$failureDescription} } '@ $outputTypeStr = @' [OutputType([$fullPathDataType])] '@ $createObjectStr = @' `$Object = New-Object -TypeName $DefinitionTypeName `$PSBoundParameters.GetEnumerator() | ForEach-Object { if(Get-Member -InputObject `$Object -Name `$_.Key -MemberType Property) { `$Object.`$(`$_.Key) = `$_.Value } } if(Get-Member -InputObject `$Object -Name Validate -MemberType Method) { `$Object.Validate() } return `$Object '@ $ApiVersionStr = @' if(Get-Member -InputObject $clientName -Name 'ApiVersion' -MemberType Property) { $clientName.ApiVersion = "$infoVersion" } '@ $GlobalParameterBlockStr = @' if(Get-Member -InputObject `$clientName -Name '$globalParameterName' -MemberType Property) { `$clientName.$globalParameterName = $globalParameterValue } '@ $HostOverrideBlock = '`$ResourceManagerUrl = $hostOverrideCommand`n $clientName.BaseUri = `$ResourceManagerUrl' $GeneratedCommandsName = 'Generated.PowerShell.Commands' $FormatViewDefinitionStr = @' <?xml version="1.0" encoding="utf-8" ?> <Configuration> <ViewDefinitions> <View> <Name>{0}</Name> <ViewSelectedBy> <TypeName>{1}</TypeName> </ViewSelectedBy> <TableControl> <TableHeaders>{2} </TableHeaders> <TableRowEntries> <TableRowEntry> <TableColumnItems> {3} </TableColumnItems> </TableRowEntry> </TableRowEntries> </TableControl> </View> </ViewDefinitions> </Configuration> '@ $TableColumnItemStr = @' <TableColumnItem> <PropertyName>{0}</PropertyName> </TableColumnItem> '@ $TableColumnHeaderStr = @' <TableColumnHeader> <Width>{0}</Width> </TableColumnHeader> '@ # SIG # Begin signature block # MIIasAYJKoZIhvcNAQcCoIIaoTCCGp0CAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB # gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR # AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQU5u2EGFo4b0MxybQ/DkHcCDic # OM+gghWDMIIEwzCCA6ugAwIBAgITMwAAALfuAa/68MeouwAAAAAAtzANBgkqhkiG # 9w0BAQUFADB3MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G # A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSEw # HwYDVQQDExhNaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EwHhcNMTYwOTA3MTc1ODQ1 # WhcNMTgwOTA3MTc1ODQ1WjCBszELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp # bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw # b3JhdGlvbjENMAsGA1UECxMETU9QUjEnMCUGA1UECxMebkNpcGhlciBEU0UgRVNO # OkJCRUMtMzBDQS0yREJFMSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBT # ZXJ2aWNlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuCMjQSw3ep1m # SndFRK0xgVRgm9wSl3i2llRtDdxzAWN9gQtYAE3hJP0/pV/7HHkshYPfMIRf7Pm/ # dxSsAN+7ATnNUk+wpe46rfe0FDNxoE6CYaiMSNjKcMXH55bGXNnwrrcsMaZrVXzS # IQcmAhUQw1jdLntbdTyCAwJ2UqF/XmVtWV/U466G8JP8VGLddeaucY0YKhgYwMnt # Sp9ElCkVDcUP01L9pgn9JmKUfD3yFt2p1iZ9VKCrlla10JQwe7aNW7xjzXxvcvlV # IXeA4QSabo4dq8HUh7JoYMqh3ufr2yNgTs/rSxG6D5ITcI0PZkH4PYjO2GbGIcOF # RVOf5RxVrwIDAQABo4IBCTCCAQUwHQYDVR0OBBYEFJZnqouaH5kw+n1zGHTDXjCT # 5OMAMB8GA1UdIwQYMBaAFCM0+NlSRnAK7UD7dvuzK7DDNbMPMFQGA1UdHwRNMEsw # SaBHoEWGQ2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3Rz # L01pY3Jvc29mdFRpbWVTdGFtcFBDQS5jcmwwWAYIKwYBBQUHAQEETDBKMEgGCCsG # AQUFBzAChjxodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY3Jv # c29mdFRpbWVTdGFtcFBDQS5jcnQwEwYDVR0lBAwwCgYIKwYBBQUHAwgwDQYJKoZI # hvcNAQEFBQADggEBAG7J+Fdd7DgxG6awnA8opmQfW5DHnNDC/JPLof1sA8Nqczym # cnWIHmlWhqA7TUy4q02lKenO+R/vbmHna1BrC/KkczAyhOzkI2WFU3PeYubv8EjK # fYPmrNvS8fCsHJXj3N6fuFwXkHmCVBjTchK93auG09ckBYx5Mt4zW0TUbbw4/QAZ # X64rbut6Aw/C1bpxqBb8vvMssBB9Hw2m8ApFTApaEVOE/sKemVlq0VIo0fCXqRST # Lb6/QOav3S8S+N34RBNx/aKKOFzBDy6Ni45QvtRfBoNX3f4/mm4TFdNs+SeLQA+0 # oBs7UgdoxGSpX6vsWaH8dtlBw3NZK7SFi9bBMI4wggTtMIID1aADAgECAhMzAAAB # QJap7nBW/swHAAEAAAFAMA0GCSqGSIb3DQEBBQUAMHkxCzAJBgNVBAYTAlVTMRMw # EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN # aWNyb3NvZnQgQ29ycG9yYXRpb24xIzAhBgNVBAMTGk1pY3Jvc29mdCBDb2RlIFNp # Z25pbmcgUENBMB4XDTE2MDgxODIwMTcxN1oXDTE3MTEwMjIwMTcxN1owgYMxCzAJ # BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k # MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xDTALBgNVBAsTBE1PUFIx # HjAcBgNVBAMTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjCCASIwDQYJKoZIhvcNAQEB # BQADggEPADCCAQoCggEBANtLi+kDal/IG10KBTnk1Q6S0MThi+ikDQUZWMA81ynd # ibdobkuffryavVSGOanxODUW5h2s+65r3Akw77ge32z4SppVl0jII4mzWSc0vZUx # R5wPzkA1Mjf+6fNPpBqks3m8gJs/JJjE0W/Vf+dDjeTc8tLmrmbtBDohlKZX3APb # LMYb/ys5qF2/Vf7dSd9UBZSrM9+kfTGmTb1WzxYxaD+Eaxxt8+7VMIruZRuetwgc # KX6TvfJ9QnY4ItR7fPS4uXGew5T0goY1gqZ0vQIz+lSGhaMlvqqJXuI5XyZBmBre # ueZGhXi7UTICR+zk+R+9BFF15hKbduuFlxQiCqET92ECAwEAAaOCAWEwggFdMBMG # A1UdJQQMMAoGCCsGAQUFBwMDMB0GA1UdDgQWBBSc5ehtgleuNyTe6l6pxF+QHc7Z # ezBSBgNVHREESzBJpEcwRTENMAsGA1UECxMETU9QUjE0MDIGA1UEBRMrMjI5ODAz # K2Y3ODViMWMwLTVkOWYtNDMxNi04ZDZhLTc0YWU2NDJkZGUxYzAfBgNVHSMEGDAW # gBTLEejK0rQWWAHJNy4zFha5TJoKHzBWBgNVHR8ETzBNMEugSaBHhkVodHRwOi8v # Y3JsLm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNDb2RTaWdQQ0Ff # MDgtMzEtMjAxMC5jcmwwWgYIKwYBBQUHAQEETjBMMEoGCCsGAQUFBzAChj5odHRw # Oi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY0NvZFNpZ1BDQV8wOC0z # MS0yMDEwLmNydDANBgkqhkiG9w0BAQUFAAOCAQEAa+RW49cTHSBA+W3p3k7bXR7G # bCaj9+UJgAz/V+G01Nn5XEjhBn/CpFS4lnr1jcmDEwxxv/j8uy7MFXPzAGtOJar0 # xApylFKfd00pkygIMRbZ3250q8ToThWxmQVEThpJSSysee6/hU+EbkfvvtjSi0lp # DimD9aW9oxshraKlPpAgnPWfEj16WXVk79qjhYQyEgICamR3AaY5mLPuoihJbKwk # Mig+qItmLPsC2IMvI5KR91dl/6TV6VEIlPbW/cDVwCBF/UNJT3nuZBl/YE7ixMpT # Th/7WpENW80kg3xz6MlCdxJfMSbJsM5TimFU98KNcpnxxbYdfqqQhAQ6l3mtYDCC # BbwwggOkoAMCAQICCmEzJhoAAAAAADEwDQYJKoZIhvcNAQEFBQAwXzETMBEGCgmS # JomT8ixkARkWA2NvbTEZMBcGCgmSJomT8ixkARkWCW1pY3Jvc29mdDEtMCsGA1UE # AxMkTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4XDTEwMDgz # MTIyMTkzMloXDTIwMDgzMTIyMjkzMloweTELMAkGA1UEBhMCVVMxEzARBgNVBAgT # Cldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29m # dCBDb3Jwb3JhdGlvbjEjMCEGA1UEAxMaTWljcm9zb2Z0IENvZGUgU2lnbmluZyBQ # Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCycllcGTBkvx2aYCAg # Qpl2U2w+G9ZvzMvx6mv+lxYQ4N86dIMaty+gMuz/3sJCTiPVcgDbNVcKicquIEn0 # 8GisTUuNpb15S3GbRwfa/SXfnXWIz6pzRH/XgdvzvfI2pMlcRdyvrT3gKGiXGqel # cnNW8ReU5P01lHKg1nZfHndFg4U4FtBzWwW6Z1KNpbJpL9oZC/6SdCnidi9U3RQw # WfjSjWL9y8lfRjFQuScT5EAwz3IpECgixzdOPaAyPZDNoTgGhVxOVoIoKgUyt0vX # T2Pn0i1i8UU956wIAPZGoZ7RW4wmU+h6qkryRs83PDietHdcpReejcsRj1Y8wawJ # XwPTAgMBAAGjggFeMIIBWjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTLEejK # 0rQWWAHJNy4zFha5TJoKHzALBgNVHQ8EBAMCAYYwEgYJKwYBBAGCNxUBBAUCAwEA # ATAjBgkrBgEEAYI3FQIEFgQU/dExTtMmipXhmGA7qDFvpjy82C0wGQYJKwYBBAGC # NxQCBAweCgBTAHUAYgBDAEEwHwYDVR0jBBgwFoAUDqyCYEBWJ5flJRP8KuEKU5VZ # 5KQwUAYDVR0fBEkwRzBFoEOgQYY/aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3Br # aS9jcmwvcHJvZHVjdHMvbWljcm9zb2Z0cm9vdGNlcnQuY3JsMFQGCCsGAQUFBwEB # BEgwRjBEBggrBgEFBQcwAoY4aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9j # ZXJ0cy9NaWNyb3NvZnRSb290Q2VydC5jcnQwDQYJKoZIhvcNAQEFBQADggIBAFk5 # Pn8mRq/rb0CxMrVq6w4vbqhJ9+tfde1MOy3XQ60L/svpLTGjI8x8UJiAIV2sPS9M # uqKoVpzjcLu4tPh5tUly9z7qQX/K4QwXaculnCAt+gtQxFbNLeNK0rxw56gNogOl # VuC4iktX8pVCnPHz7+7jhh80PLhWmvBTI4UqpIIck+KUBx3y4k74jKHK6BOlkU7I # G9KPcpUqcW2bGvgc8FPWZ8wi/1wdzaKMvSeyeWNWRKJRzfnpo1hW3ZsCRUQvX/Ta # rtSCMm78pJUT5Otp56miLL7IKxAOZY6Z2/Wi+hImCWU4lPF6H0q70eFW6NB4lhhc # yTUWX92THUmOLb6tNEQc7hAVGgBd3TVbIc6YxwnuhQ6MT20OE049fClInHLR82zK # wexwo1eSV32UjaAbSANa98+jZwp0pTbtLS8XyOZyNxL0b7E8Z4L5UrKNMxZlHg6K # 3RDeZPRvzkbU0xfpecQEtNP7LN8fip6sCvsTJ0Ct5PnhqX9GuwdgR2VgQE6wQuxO # 7bN2edgKNAltHIAxH+IOVN3lofvlRxCtZJj/UBYufL8FIXrilUEnacOTj5XJjdib # Ia4NXJzwoq6GaIMMai27dmsAHZat8hZ79haDJLmIz2qoRzEvmtzjcT3XAH5iR9HO # iMm4GPoOco3Boz2vAkBq/2mbluIQqBC0N1AI1sM9MIIGBzCCA++gAwIBAgIKYRZo # NAAAAAAAHDANBgkqhkiG9w0BAQUFADBfMRMwEQYKCZImiZPyLGQBGRYDY29tMRkw # FwYKCZImiZPyLGQBGRYJbWljcm9zb2Z0MS0wKwYDVQQDEyRNaWNyb3NvZnQgUm9v # dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDcwNDAzMTI1MzA5WhcNMjEwNDAz # MTMwMzA5WjB3MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G # A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSEw # HwYDVQQDExhNaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EwggEiMA0GCSqGSIb3DQEB # AQUAA4IBDwAwggEKAoIBAQCfoWyx39tIkip8ay4Z4b3i48WZUSNQrc7dGE4kD+7R # p9FMrXQwIBHrB9VUlRVJlBtCkq6YXDAm2gBr6Hu97IkHD/cOBJjwicwfyzMkh53y # 9GccLPx754gd6udOo6HBI1PKjfpFzwnQXq/QsEIEovmmbJNn1yjcRlOwhtDlKEYu # J6yGT1VSDOQDLPtqkJAwbofzWTCd+n7Wl7PoIZd++NIT8wi3U21StEWQn0gASkdm # EScpZqiX5NMGgUqi+YSnEUcUCYKfhO1VeP4Bmh1QCIUAEDBG7bfeI0a7xC1Un68e # eEExd8yb3zuDk6FhArUdDbH895uyAc4iS1T/+QXDwiALAgMBAAGjggGrMIIBpzAP # BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQjNPjZUkZwCu1A+3b7syuwwzWzDzAL # BgNVHQ8EBAMCAYYwEAYJKwYBBAGCNxUBBAMCAQAwgZgGA1UdIwSBkDCBjYAUDqyC # YEBWJ5flJRP8KuEKU5VZ5KShY6RhMF8xEzARBgoJkiaJk/IsZAEZFgNjb20xGTAX # BgoJkiaJk/IsZAEZFgltaWNyb3NvZnQxLTArBgNVBAMTJE1pY3Jvc29mdCBSb290 # IENlcnRpZmljYXRlIEF1dGhvcml0eYIQea0WoUqgpa1Mc1j0BxMuZTBQBgNVHR8E # STBHMEWgQ6BBhj9odHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9k # dWN0cy9taWNyb3NvZnRyb290Y2VydC5jcmwwVAYIKwYBBQUHAQEESDBGMEQGCCsG # AQUFBzAChjhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY3Jv # c29mdFJvb3RDZXJ0LmNydDATBgNVHSUEDDAKBggrBgEFBQcDCDANBgkqhkiG9w0B # AQUFAAOCAgEAEJeKw1wDRDbd6bStd9vOeVFNAbEudHFbbQwTq86+e4+4LtQSooxt # YrhXAstOIBNQmd16QOJXu69YmhzhHQGGrLt48ovQ7DsB7uK+jwoFyI1I4vBTFd1P # q5Lk541q1YDB5pTyBi+FA+mRKiQicPv2/OR4mS4N9wficLwYTp2OawpylbihOZxn # LcVRDupiXD8WmIsgP+IHGjL5zDFKdjE9K3ILyOpwPf+FChPfwgphjvDXuBfrTot/ # xTUrXqO/67x9C0J71FNyIe4wyrt4ZVxbARcKFA7S2hSY9Ty5ZlizLS/n+YWGzFFW # 6J1wlGysOUzU9nm/qhh6YinvopspNAZ3GmLJPR5tH4LwC8csu89Ds+X57H2146So # dDW4TsVxIxImdgs8UoxxWkZDFLyzs7BNZ8ifQv+AeSGAnhUwZuhCEl4ayJ4iIdBD # 6Svpu/RIzCzU2DKATCYqSCRfWupW76bemZ3KOm+9gSd0BhHudiG/m4LBJ1S2sWo9 # iaF2YbRuoROmv6pH8BJv/YoybLL+31HIjCPJZr2dHYcSZAI9La9Zj7jkIeW1sMpj # tHhUBdRBLlCslLCleKuzoJZ1GtmShxN1Ii8yqAhuoFuMJb+g74TKIdbrHk/Jmu5J # 4PcBZW+JC33Iacjmbuqnl84xKf8OxVtc2E0bodj6L54/LlUWa8kTo/0xggSXMIIE # kwIBATCBkDB5MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G # A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSMw # IQYDVQQDExpNaWNyb3NvZnQgQ29kZSBTaWduaW5nIFBDQQITMwAAAUCWqe5wVv7M # BwABAAABQDAJBgUrDgMCGgUAoIGwMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEE # MBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMCMGCSqGSIb3DQEJBDEWBBQ9 # gZWg3C00blx6+Mu3UueidvAP0DBQBgorBgEEAYI3AgEMMUIwQKAWgBQAUABvAHcA # ZQByAFMAaABlAGwAbKEmgCRodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vUG93ZXJT # aGVsbCAwDQYJKoZIhvcNAQEBBQAEggEARPu2fpMGYNhUiXNSkZ4zJmtqCACt+qCC # 4IrA3Bh1O2vlD4fPc1GRj8BJ4ZLhz24lvRRXj0wwHZ7fVYVw7BAgcprfQNxEKW1y # WuCf2Guj5x3Tx6zocMMGrrUFwbiqNn6mYg7RBYOvFykUnwN3tomgArsl0B4fJweq # dE9nWVq4QxbQwRzRMruGOYLUorZq5Twi8CSk5aLOv5bo5IbAMf97px2gB/snEvD8 # JdVLTUqa6YDn46Z/OSo0LYfIa6XU/yUborbdIDtMru8hXzwEYjyz3jCDraxHQJg1 # 1nxYeb2e8pGHTyIlY8qkm0juyhz8iUg49ZN0YbyqiejiUNqqZqcI8KGCAigwggIk # BgkqhkiG9w0BCQYxggIVMIICEQIBATCBjjB3MQswCQYDVQQGEwJVUzETMBEGA1UE # CBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9z # b2Z0IENvcnBvcmF0aW9uMSEwHwYDVQQDExhNaWNyb3NvZnQgVGltZS1TdGFtcCBQ # Q0ECEzMAAAC37gGv+vDHqLsAAAAAALcwCQYFKw4DAhoFAKBdMBgGCSqGSIb3DQEJ # AzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTE3MDgwODE3MzUyM1owIwYJ # KoZIhvcNAQkEMRYEFI7NYgDt6O53auj8oX4aMLXpwwbQMA0GCSqGSIb3DQEBBQUA # BIIBAIgaGnZWvOPagBtaq0Fwv6koQ2WPtx/ZRQ1Xkr7KNqthn5YZOKe6zaaXGL95 # /CzIJf84ujxYGAFxXTbL356ZTuALPmv5SeiYcPC0Z1HHKkAI91wEj7A91eAkSa4s # Loa2UuUHQJsTAmgmy6BXNOxtKQ2BgWL9YoAK04+dO8UA04Z6/Te4aBU84BnPT0e9 # 6CV4lCHRcifln/1TonbH/jB+zn+ywKD65bg4ck1Y8atlvTH4cxwhF6rU3cyPOd8y # YEaydWIrg3UHnOZ/r1pF3GgfoEz+oSFWVfTu1AQu1bxxRTpRyOuXZMgSGG7z8voV # qGOAc1BQ6UnRmVpGzlxiDq85Lik= # SIG # End signature block |