PackageProviderFunctions.psm1
### # ==++== # # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # ### <# Overrides the default Write-Debug so that the output gets routed back thru the $request.Debug() function #> function Write-Debug { param( [Parameter(Mandatory=$true)][string] $message, [parameter(ValueFromRemainingArguments=$true)] [object[]] $args= @() ) if( -not $request ) { if( -not $args ) { Microsoft.PowerShell.Utility\write-verbose $message return } $msg = [system.string]::format($message, $args) Microsoft.PowerShell.Utility\write-verbose $msg return } if( -not $args ) { $null = $request.Debug($message); return } $null = $request.Debug($message,$args); } function Write-Error { param( [Parameter(Mandatory=$true)][string] $Message, [Parameter()][string] $Category, [Parameter()][string] $ErrorId, [Parameter()][string] $TargetObject ) $null = $request.Warning($Message); } <# Overrides the default Write-Verbose so that the output gets routed back thru the $request.Verbose() function #> function Write-Progress { param( [CmdletBinding()] [Parameter(Position=0)] [string] $Activity, # This parameter is not supported by request object [Parameter(Position=1)] [ValidateNotNullOrEmpty()] [string] $Status, [Parameter(Position=2)] [ValidateRange(0,[int]::MaxValue)] [int] $Id, [Parameter()] [int] $PercentComplete=-1, # This parameter is not supported by request object [Parameter()] [int] $SecondsRemaining=-1, # This parameter is not supported by request object [Parameter()] [string] $CurrentOperation, [Parameter()] [ValidateRange(-1,[int]::MaxValue)] [int] $ParentID=-1, [Parameter()] [switch] $Completed, # This parameter is not supported by request object [Parameter()] [int] $SourceID, [object[]] $args= @() ) $params = @{} if ($PSBoundParameters.ContainsKey("Activity")) { $params.Add("Activity", $PSBoundParameters["Activity"]) } if ($PSBoundParameters.ContainsKey("Status")) { $params.Add("Status", $PSBoundParameters["Status"]) } if ($PSBoundParameters.ContainsKey("PercentComplete")) { $params.Add("PercentComplete", $PSBoundParameters["PercentComplete"]) } if ($PSBoundParameters.ContainsKey("Id")) { $params.Add("Id", $PSBoundParameters["Id"]) } if ($PSBoundParameters.ContainsKey("ParentID")) { $params.Add("ParentID", $PSBoundParameters["ParentID"]) } if ($PSBoundParameters.ContainsKey("Completed")) { $params.Add("Completed", $PSBoundParameters["Completed"]) } if( -not $request ) { if( -not $args ) { Microsoft.PowerShell.Utility\Write-Progress @params return } $params["Activity"] = [system.string]::format($Activity, $args) Microsoft.PowerShell.Utility\Write-Progress @params return } if( -not $args ) { $request.Progress($Activity, $Status, $Id, $PercentComplete, $SecondsRemaining, $CurrentOperation, $ParentID, $Completed) } } function Write-Verbose{ param( [Parameter(Mandatory=$true)][string] $message, [parameter(ValueFromRemainingArguments=$true)] [object[]] $args= @() ) if( -not $request ) { if( -not $args ) { Microsoft.PowerShell.Utility\write-verbose $message return } $msg = [system.string]::format($message, $args) Microsoft.PowerShell.Utility\write-verbose $msg return } if( -not $args ) { $null = $request.Verbose($message); return } $null = $request.Verbose($message,$args); } <# Overrides the default Write-Warning so that the output gets routed back thru the $request.Warning() function #> function Write-Warning{ param( [Parameter(Mandatory=$true)][string] $message, [parameter(ValueFromRemainingArguments=$true)] [object[]] $args= @() ) if( -not $request ) { if( -not $args ) { Microsoft.PowerShell.Utility\write-warning $message return } $msg = [system.string]::format($message, $args) Microsoft.PowerShell.Utility\write-warning $msg return } if( -not $args ) { $null = $request.Warning($message); return } $null = $request.Warning($message,$args); } <# Creates a new instance of a PackageSource object #> function New-PackageSource { param( [Parameter(Mandatory=$true)][string] $name, [Parameter(Mandatory=$true)][string] $location, [Parameter(Mandatory=$true)][bool] $trusted, [Parameter(Mandatory=$true)][bool] $registered, [bool] $valid = $false, [System.Collections.Hashtable] $details = $null ) return New-Object -TypeName Microsoft.PackageManagement.MetaProvider.PowerShell.PackageSource -ArgumentList $name,$location,$trusted,$registered,$valid,$details } <# Creates a new instance of a SoftwareIdentity object #> function New-SoftwareIdentity { param( [Parameter(Mandatory=$true)][string] $fastPackageReference, [Parameter(Mandatory=$true)][string] $name, [Parameter(Mandatory=$true)][string] $version, [Parameter(Mandatory=$true)][string] $versionScheme, [Parameter(Mandatory=$true)][string] $source, [string] $summary, [string] $searchKey = $null, [string] $fullPath = $null, [string] $filename = $null, [System.Collections.Hashtable] $details = $null, [System.Collections.ArrayList] $entities = $null, [System.Collections.ArrayList] $links = $null, [bool] $fromTrustedSource = $false, [System.Collections.ArrayList] $dependencies = $null, [string] $tagId = $null, [string] $culture = $null, [string] $destination = $null ) return New-Object -TypeName Microsoft.PackageManagement.MetaProvider.PowerShell.SoftwareIdentity -ArgumentList $fastPackageReference, $name, $version, $versionScheme, $source, $summary, $searchKey, $fullPath, $filename , $details , $entities, $links, $fromTrustedSource, $dependencies, $tagId, $culture, $destination } <# Creates a new instance of a SoftwareIdentity object based on an xml string #> function New-SoftwareIdentityFromXml { param( [Parameter(Mandatory=$true)][string] $xmlSwidtag, [bool] $commitImmediately = $false ) return New-Object -TypeName Microsoft.PackageManagement.MetaProvider.PowerShell.SoftwareIdentity -ArgumentList $xmlSwidtag, $commitImmediately } <# Creates a new instance of a DyamicOption object #> function New-DynamicOption { param( [Parameter(Mandatory=$true)][Microsoft.PackageManagement.MetaProvider.PowerShell.OptionCategory] $category, [Parameter(Mandatory=$true)][string] $name, [Parameter(Mandatory=$true)][Microsoft.PackageManagement.MetaProvider.PowerShell.OptionType] $expectedType, [Parameter(Mandatory=$true)][bool] $isRequired, [System.Collections.ArrayList] $permittedValues = $null ) if( -not $permittedValues ) { return New-Object -TypeName Microsoft.PackageManagement.MetaProvider.PowerShell.DynamicOption -ArgumentList $category,$name, $expectedType, $isRequired } return New-Object -TypeName Microsoft.PackageManagement.MetaProvider.PowerShell.DynamicOption -ArgumentList $category,$name, $expectedType, $isRequired, $permittedValues.ToArray() } <# Creates a new instance of a Feature object #> function New-Feature { param( [Parameter(Mandatory=$true)][string] $name, [System.Collections.ArrayList] $values = $null ) if( -not $values ) { return New-Object -TypeName Microsoft.PackageManagement.MetaProvider.PowerShell.Feature -ArgumentList $name } return New-Object -TypeName Microsoft.PackageManagement.MetaProvider.PowerShell.Feature -ArgumentList $name, $values.ToArray() } <# Duplicates the $request object and overrides the client-supplied data with the specified values. #> function New-Request { param( [System.Collections.Hashtable] $options = $null, [System.Collections.ArrayList] $sources = $null, [PSCredential] $credential = $null ) return $request.CloneRequest( $options, $sources, $credential ) } function New-Entity { param( [Parameter(Mandatory=$true)][string] $name, [Parameter(Mandatory=$true,ParameterSetName="role")][string] $role, [Parameter(Mandatory=$true,ParameterSetName="roles")][System.Collections.ArrayList]$roles, [string] $regId = $null, [string] $thumbprint= $null ) $o = New-Object -TypeName Microsoft.PackageManagement.MetaProvider.PowerShell.Entity $o.Name = $name # support role as a NMTOKENS string or an array of strings if( $role ) { $o.Role = $role } if( $roles ) { $o.Roles = $roles } $o.regId = $regId $o.thumbprint = $thumbprint return $o } function New-Link { param( [Parameter(Mandatory=$true)][string] $HRef, [Parameter(Mandatory=$true)][string] $relationship, [string] $mediaType = $null, [string] $ownership = $null, [string] $use= $null, [string] $appliesToMedia= $null, [string] $artifact = $null ) $o = New-Object -TypeName Microsoft.PackageManagement.MetaProvider.PowerShell.Link $o.HRef = $HRef $o.Relationship =$relationship $o.MediaType =$mediaType $o.Ownership =$ownership $o.Use = $use $o.AppliesToMedia = $appliesToMedia $o.Artifact = $artifact return $o } function New-Dependency { param( [Parameter(Mandatory=$true)][string] $providerName, [Parameter(Mandatory=$true)][string] $packageName, [string] $version= $null, [string] $source = $null, [string] $appliesTo = $null ) $o = New-Object -TypeName Microsoft.PackageManagement.MetaProvider.PowerShell.Dependency $o.ProviderName = $providerName $o.PackageName =$packageName $o.Version =$version $o.Source =$source $o.AppliesTo = $appliesTo return $o } # SIG # Begin signature block # MIIargYJKoZIhvcNAQcCoIIanzCCGpsCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB # gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR # AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUjKO234+wyrCEMWnBFRlvbf4O # UcSgghWBMIIEwTCCA6mgAwIBAgITMwAAAMKgCcU3dun2zQAAAAAAwjANBgkqhkiG # 9w0BAQUFADB3MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G # A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSEw # HwYDVQQDExhNaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EwHhcNMTYwOTA3MTc1ODUx # WhcNMTgwOTA3MTc1ODUxWjCBsTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp # bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw # b3JhdGlvbjEMMAoGA1UECxMDQU9DMSYwJAYDVQQLEx1UaGFsZXMgVFNTIEVTTjpD # M0IwLTBGNkEtNDExMTElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2Vy # dmljZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJzfPT5gT5YLgF72 # 8Ipv/kMSm0FRtZmMMXMdDBrWM+LOObrNAITBA0w185w4qccTOzXIgsFlOyvvyGfI # jH+4zLekfpL8U7DuccyDVdS3Lg70hYBCEJll0SwAhfpHR1D4NQaeIRnhnlRuSUwy # 7LqOxCE6If90dH0+OaVlxiKHw7R5RgeO50m15BHI+6v9US70IZ8JFqRkfLpk52bh # LNfnossW+CHvAFPVQ0uThMOaoESnJsmban0QaExZvftxreTrz2QQcVw74Y29CYbZ # RUTIy4zIpuM/i5oBLj9mwf9CogC0rQibwWfEvPyiFuOZ/ncDX5I8KVHa4Y1LoFQq # YWk/EEkCAwEAAaOCAQkwggEFMB0GA1UdDgQWBBTjHnnY/MhgLBEZmBJtobBujc6d # rDAfBgNVHSMEGDAWgBQjNPjZUkZwCu1A+3b7syuwwzWzDzBUBgNVHR8ETTBLMEmg # R6BFhkNodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9N # aWNyb3NvZnRUaW1lU3RhbXBQQ0EuY3JsMFgGCCsGAQUFBwEBBEwwSjBIBggrBgEF # BQcwAoY8aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNyb3Nv # ZnRUaW1lU3RhbXBQQ0EuY3J0MBMGA1UdJQQMMAoGCCsGAQUFBwMIMA0GCSqGSIb3 # DQEBBQUAA4IBAQAoNFRrsA/+bdu8IJvKoxcry0vIPw0qzrUya7ud9MrJ/pp9EO01 # OFrXqbFfuPW0niqZt7hYrs7bzwSlmbBItCkImv0GCLS/3cf0Vl/c0NxUpn8TUjoo # +qwnPF3qRGUzcwrI/3Xl9EfoDlc8jWd2f5FqrjeQdmkdOUmtxSnVt1kbW+Fnjlyl # 1q8aWpkXXgNrBD29iXQV7BklsvtzSVLB32UTZqADm/yzqPC+osWN2eHED2nag1w0 # 51bq++5Pc2mA/UbJeqv+J9VhQwyTGoFdCjE9ygfd7aASPsxiAsRBsNRlylFMjePA # nFZyI0P0rM+CW09Q641SEKIKbT6T1ww+8ByJMIIE7TCCA9WgAwIBAgITMwAAAXl8 # LldOUuHK1gABAAABeTANBgkqhkiG9w0BAQUFADB5MQswCQYDVQQGEwJVUzETMBEG # A1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWlj # cm9zb2Z0IENvcnBvcmF0aW9uMSMwIQYDVQQDExpNaWNyb3NvZnQgQ29kZSBTaWdu # aW5nIFBDQTAeFw0xNzA4MTEyMDExMTVaFw0xODA4MTEyMDExMTVaMIGDMQswCQYD # VQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEe # MBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMQ0wCwYDVQQLEwRNT1BSMR4w # HAYDVQQDExVNaWNyb3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUA # A4IBDwAwggEKAoIBAQCoKf7UEMj/VQqemQADUo/csL/5q/hR/lyMVMInzkwrluvb # gRzLhit5ynV+uGeDJoa91i8cPsdYqo9vlfta/KfGG8HD6EwXTiI9t1tWXH/XWvUt # urumCb8GfO6Y/kD5MLhr/kBvdLO41jhJydCHBy8x37a8TqPQnrdie1ZwdU9nvwXM # o66+AJLCG1ChYTsQAAGxhtAp80D1D9mjD1erYwmo3Klq50dDp74VxD0npOhWUojP # WZmhAIQ2m9A50ioNL+YE4r8TloiDqVE3GEGJ4vmFnY5lGj0DZMzF3lBwXfILhamP # sUXod/+DnQm7cuDmVgiVuSuDEokx/OdYch29+YMjAgMBAAGjggFhMIIBXTATBgNV # HSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQU+OR+jRxjfACqzHMAStPybTiqzYEw # UgYDVR0RBEswSaRHMEUxDTALBgNVBAsTBE1PUFIxNDAyBgNVBAUTKzIyOTgwMysx # YWJmOWU1Zi1jZWQwLTQyZTYtYTY1ZC1kOTM1MDk1OWZlMGUwHwYDVR0jBBgwFoAU # yxHoytK0FlgByTcuMxYWuUyaCh8wVgYDVR0fBE8wTTBLoEmgR4ZFaHR0cDovL2Ny # bC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvTWljQ29kU2lnUENBXzA4 # LTMxLTIwMTAuY3JsMFoGCCsGAQUFBwEBBE4wTDBKBggrBgEFBQcwAoY+aHR0cDov # L3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNDb2RTaWdQQ0FfMDgtMzEt # MjAxMC5jcnQwDQYJKoZIhvcNAQEFBQADggEBAG9La36GDdgLJlBrOojIWqn2suoq # maflBjREAe9z+60v/e341YBqNRw0xxMMtV5kPHNrjPJv02m+zjsPm/kFcjwdRuHo # nD42sW81qaZQVH/h1Fc9Ox56XI8BP3c/XnMnV/qnMOfUcq+L33Ei/Yrg+uAt31/y # 3ndk39qwBgAJq0aQo/X+gYYskyt1xhEo1+WK4hwnq5eMmsTiBxnT8mQXsSvd8wh6 # eFCFBjIcOVCjzYtw3gjVe29MP5rodW3kyxNXHClZOF++Raummsr5KZ7NOM+5yAW6 # LPvEJb9oDd8Pe0IalcePvVprkAtR+te354+yszMocwNcf6NGgpyttjZ3docwggW8 # MIIDpKADAgECAgphMyYaAAAAAAAxMA0GCSqGSIb3DQEBBQUAMF8xEzARBgoJkiaJ # k/IsZAEZFgNjb20xGTAXBgoJkiaJk/IsZAEZFgltaWNyb3NvZnQxLTArBgNVBAMT # JE1pY3Jvc29mdCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eTAeFw0xMDA4MzEy # MjE5MzJaFw0yMDA4MzEyMjI5MzJaMHkxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpX # YXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg # Q29ycG9yYXRpb24xIzAhBgNVBAMTGk1pY3Jvc29mdCBDb2RlIFNpZ25pbmcgUENB # MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsnJZXBkwZL8dmmAgIEKZ # dlNsPhvWb8zL8epr/pcWEODfOnSDGrcvoDLs/97CQk4j1XIA2zVXConKriBJ9PBo # rE1LjaW9eUtxm0cH2v0l3511iM+qc0R/14Hb873yNqTJXEXcr6094CholxqnpXJz # VvEXlOT9NZRyoNZ2Xx53RYOFOBbQc1sFumdSjaWyaS/aGQv+knQp4nYvVN0UMFn4 # 0o1i/cvJX0YxULknE+RAMM9yKRAoIsc3Tj2gMj2QzaE4BoVcTlaCKCoFMrdL109j # 59ItYvFFPeesCAD2RqGe0VuMJlPoeqpK8kbPNzw4nrR3XKUXno3LEY9WPMGsCV8D # 0wIDAQABo4IBXjCCAVowDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUyxHoytK0 # FlgByTcuMxYWuUyaCh8wCwYDVR0PBAQDAgGGMBIGCSsGAQQBgjcVAQQFAgMBAAEw # IwYJKwYBBAGCNxUCBBYEFP3RMU7TJoqV4ZhgO6gxb6Y8vNgtMBkGCSsGAQQBgjcU # AgQMHgoAUwB1AGIAQwBBMB8GA1UdIwQYMBaAFA6sgmBAVieX5SUT/CrhClOVWeSk # MFAGA1UdHwRJMEcwRaBDoEGGP2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kv # Y3JsL3Byb2R1Y3RzL21pY3Jvc29mdHJvb3RjZXJ0LmNybDBUBggrBgEFBQcBAQRI # MEYwRAYIKwYBBQUHMAKGOGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2Vy # dHMvTWljcm9zb2Z0Um9vdENlcnQuY3J0MA0GCSqGSIb3DQEBBQUAA4ICAQBZOT5/ # Jkav629AsTK1ausOL26oSffrX3XtTDst10OtC/7L6S0xoyPMfFCYgCFdrD0vTLqi # qFac43C7uLT4ebVJcvc+6kF/yuEMF2nLpZwgLfoLUMRWzS3jStK8cOeoDaIDpVbg # uIpLV/KVQpzx8+/u44YfNDy4VprwUyOFKqSCHJPilAcd8uJO+IyhyugTpZFOyBvS # j3KVKnFtmxr4HPBT1mfMIv9cHc2ijL0nsnljVkSiUc356aNYVt2bAkVEL1/02q7U # gjJu/KSVE+Traeepoiy+yCsQDmWOmdv1ovoSJgllOJTxeh9Ku9HhVujQeJYYXMk1 # Fl/dkx1Jji2+rTREHO4QFRoAXd01WyHOmMcJ7oUOjE9tDhNOPXwpSJxy0fNsysHs # cKNXkld9lI2gG0gDWvfPo2cKdKU27S0vF8jmcjcS9G+xPGeC+VKyjTMWZR4Oit0Q # 3mT0b85G1NMX6XnEBLTT+yzfH4qerAr7EydAreT54al/RrsHYEdlYEBOsELsTu2z # dnnYCjQJbRyAMR/iDlTd5aH75UcQrWSY/1AWLny/BSF64pVBJ2nDk4+VyY3YmyGu # DVyc8KKuhmiDDGotu3ZrAB2WrfIWe/YWgyS5iM9qqEcxL5rc43E91wB+YkfRzojJ # uBj6DnKNwaM9rwJAav9pm5biEKgQtDdQCNbDPTCCBgcwggPvoAMCAQICCmEWaDQA # AAAAABwwDQYJKoZIhvcNAQEFBQAwXzETMBEGCgmSJomT8ixkARkWA2NvbTEZMBcG # CgmSJomT8ixkARkWCW1pY3Jvc29mdDEtMCsGA1UEAxMkTWljcm9zb2Z0IFJvb3Qg # Q2VydGlmaWNhdGUgQXV0aG9yaXR5MB4XDTA3MDQwMzEyNTMwOVoXDTIxMDQwMzEz # MDMwOVowdzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV # BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEhMB8G # A1UEAxMYTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBMIIBIjANBgkqhkiG9w0BAQEF # AAOCAQ8AMIIBCgKCAQEAn6Fssd/bSJIqfGsuGeG94uPFmVEjUK3O3RhOJA/u0afR # TK10MCAR6wfVVJUVSZQbQpKumFwwJtoAa+h7veyJBw/3DgSY8InMH8szJIed8vRn # HCz8e+eIHernTqOhwSNTyo36Rc8J0F6v0LBCBKL5pmyTZ9co3EZTsIbQ5ShGLies # hk9VUgzkAyz7apCQMG6H81kwnfp+1pez6CGXfvjSE/MIt1NtUrRFkJ9IAEpHZhEn # KWaol+TTBoFKovmEpxFHFAmCn4TtVXj+AZodUAiFABAwRu233iNGu8QtVJ+vHnhB # MXfMm987g5OhYQK1HQ2x/PebsgHOIktU//kFw8IgCwIDAQABo4IBqzCCAacwDwYD # VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUIzT42VJGcArtQPt2+7MrsMM1sw8wCwYD # VR0PBAQDAgGGMBAGCSsGAQQBgjcVAQQDAgEAMIGYBgNVHSMEgZAwgY2AFA6sgmBA # VieX5SUT/CrhClOVWeSkoWOkYTBfMRMwEQYKCZImiZPyLGQBGRYDY29tMRkwFwYK # CZImiZPyLGQBGRYJbWljcm9zb2Z0MS0wKwYDVQQDEyRNaWNyb3NvZnQgUm9vdCBD # ZXJ0aWZpY2F0ZSBBdXRob3JpdHmCEHmtFqFKoKWtTHNY9AcTLmUwUAYDVR0fBEkw # RzBFoEOgQYY/aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVj # dHMvbWljcm9zb2Z0cm9vdGNlcnQuY3JsMFQGCCsGAQUFBwEBBEgwRjBEBggrBgEF # BQcwAoY4aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNyb3Nv # ZnRSb290Q2VydC5jcnQwEwYDVR0lBAwwCgYIKwYBBQUHAwgwDQYJKoZIhvcNAQEF # BQADggIBABCXisNcA0Q23em0rXfbznlRTQGxLnRxW20ME6vOvnuPuC7UEqKMbWK4 # VwLLTiATUJndekDiV7uvWJoc4R0Bhqy7ePKL0Ow7Ae7ivo8KBciNSOLwUxXdT6uS # 5OeNatWAweaU8gYvhQPpkSokInD79vzkeJkuDfcH4nC8GE6djmsKcpW4oTmcZy3F # UQ7qYlw/FpiLID/iBxoy+cwxSnYxPStyC8jqcD3/hQoT38IKYY7w17gX606Lf8U1 # K16jv+u8fQtCe9RTciHuMMq7eGVcWwEXChQO0toUmPU8uWZYsy0v5/mFhsxRVuid # cJRsrDlM1PZ5v6oYemIp76KbKTQGdxpiyT0ebR+C8AvHLLvPQ7Pl+ex9teOkqHQ1 # uE7FcSMSJnYLPFKMcVpGQxS8s7OwTWfIn0L/gHkhgJ4VMGboQhJeGsieIiHQQ+kr # 6bv0SMws1NgygEwmKkgkX1rqVu+m3pmdyjpvvYEndAYR7nYhv5uCwSdUtrFqPYmh # dmG0bqETpr+qR/ASb/2KMmyy/t9RyIwjyWa9nR2HEmQCPS2vWY+45CHltbDKY7R4 # VAXUQS5QrJSwpXirs6CWdRrZkocTdSIvMqgIbqBbjCW/oO+EyiHW6x5PyZruSeD3 # AWVviQt9yGnI5m7qp5fOMSn/DsVbXNhNG6HY+i+ePy5VFmvJE6P9MYIElzCCBJMC # AQEwgZAweTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV # BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEjMCEG # A1UEAxMaTWljcm9zb2Z0IENvZGUgU2lnbmluZyBQQ0ECEzMAAAF5fC5XTlLhytYA # AQAAAXkwCQYFKw4DAhoFAKCBsDAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAc # BgorBgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAjBgkqhkiG9w0BCQQxFgQUWAFa # kYsig40+x4k1rlglErRu1fwwUAYKKwYBBAGCNwIBDDFCMECgFoAUAFAAbwB3AGUA # cgBTAGgAZQBsAGyhJoAkaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL1Bvd2VyU2hl # bGwgMA0GCSqGSIb3DQEBAQUABIIBAE+NHTQcSl+zGmWeQ+OErHrSuAOIrKPzrPvc # qrs5j+9ot286a+wlWs7L8QvNxg5riAjLxh132e6KNeA89Ecu3rG765yAJujZ6/l3 # w8FcVS7XZucxbR+m0pttrkJQHXPGd7DutqgVEqid6VLQSWIO5cN0vWuI9JEUVcgc # 49Ko4WZFSIYnPHPTTJLzc09SzveHAlCXDgnCaYTmCvhH6iGStA50rOLShkN3t8mQ # 1t7IYYDSVkQHAcCaGlIR0DHpkt/4FcTxAFcA5zIAyAb+XqP1mtyfpV09eHHNlaLq # eJ4PcoY3jr3Mj2wuROUzsIKeb5B5GKKdgv/dfwbAXcyduF+7RzyhggIoMIICJAYJ # KoZIhvcNAQkGMYICFTCCAhECAQEwgY4wdzELMAkGA1UEBhMCVVMxEzARBgNVBAgT # Cldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29m # dCBDb3Jwb3JhdGlvbjEhMB8GA1UEAxMYTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENB # AhMzAAAAwqAJxTd26fbNAAAAAADCMAkGBSsOAwIaBQCgXTAYBgkqhkiG9w0BCQMx # CwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0xNzEyMTkyMjMyMDVaMCMGCSqG # SIb3DQEJBDEWBBTzYUW9tKCrV7T0EOSTVpBZChPiJjANBgkqhkiG9w0BAQUFAASC # AQB+/4rHvE/3gnscJeFePkOnmV0p1ZLbyoaNimL7IgRKa9tBapfEayAA9+skTCZs # db9AzRypMrLA6elu3yQED8yx8HhRPjO1sM9Bo5VIXAwqD7DIaqvRz8GEDYR2ary+ # l9SnpvyVyAavQHjHckF9/KOTZ4rtS2hzu1k6AG8+HCdPYPKz7nUPNBhBTzbpMRxB # nqjddnymrVfR1HIJhmcRQ7Hn9P0FT6yOib4HDJUoH1OpOiKq+lq0ZM9AsFegjwWA # e0uW5U9grij8bSEOShZh67SeHZ2HHpge/jkI1GAsy9rJ+wDX+fyNRNcpUHwixefa # X0AEX+v51GE287wOqgLYAJxo # SIG # End signature block |