FastTrack-SecretManagement.psm1
Function Get-Secrets { param([string] $TenantId, [string] $ProjectIdentifier, [string] $VaultIdentifier) $response = Invoke-GetRequest -Uri ` "$global:v3BaseUrl/Internal/Customer/$tenantId/Project/$ProjectIdentifier/Vault/$VaultIdentifier/Secret" ` -Headers $global:v3Headers return $response } Function Get-Secret { param([string] $TenantId, [string] $ProjectIdentifier, [string] $VaultIdentifier, [string] $SecretName) $secrets = Get-Secrets -TenantId $TenantId -ProjectIdentifier $ProjectIdentifier -VaultIdentifier $VaultIdentifier return $secrets | Where-Object { $_.SecretName -eq $SecretName } } Function Add-NewSecret { [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingPlainTextForPassword', '')] param( [string] $TenantId, [string] $ProjectIdentifier, [string] $VaultIdentifier, [string] $SecretName, [string] $SecretValue, [string] $CredentialTypeIdentifier, [string] $CredentialTypeName, [string] $CredentialType, [string] $Comments) $header = @{ } $header.Add("Authorization", $global:MsoAdminProperties["AuthorizationResult"].CreateAuthorizationHeader()) $header.Add("TENANT_ID", $global:MsoAdminProperties["MSO-CompanyTenantInfo"]) $now = (Get-Date).ToUniversalTime() $seventyDaySpan = New-TimeSpan -Days 70 $seventyDaysFromNow = $now + $seventyDaySpan $secretObject = New-Object PSObject | Add-Member -PassThru NoteProperty ProjectIdentifier $ProjectIdentifier | Add-Member -PassThru NoteProperty VaultIdentifier $VaultIdentifier | Add-Member -PassThru NoteProperty CredentialTypeIdentifier $CredentialTypeIdentifier | Add-Member -PassThru NoteProperty CredentialTypeName $CredentialTypeName | Add-Member -PassThru NoteProperty CredentialType $CredentialType | Add-Member -PassThru NoteProperty SecretName $SecretName | Add-Member -PassThru NoteProperty SecretValue $SecretValue | Add-Member -PassThru NoteProperty CredentialExpirationDate $seventyDaysFromNow | Add-Member -PassThru NoteProperty LastUpdatedDate $now | Add-Member -PassThru NoteProperty Comments $Comments | Add-Member -PassThru NoteProperty SourceApplication 'CSI' $serializedJson = $secretObject | ConvertTo-Json $response = Invoke-PostRequest -Uri "$global:v3BaseUrl/Internal/Customer/$TenantId/Project/$ProjectIdentifier/Vault/$VaultIdentifier/Secret" -Headers $global:v3Headers -Body $serializedJson if ($response.SecretIdentifier) { return $true; } else { Write-Error $response; return $false; } } Function Update-Secret { [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingPlainTextForPassword', '')] param( [string] $TenantId, [string] $ProjectIdentifier, [string] $VaultIdentifier, [string] $SecretName, [string] $SecretValue, [string] $SecretIdentifier, [string] $CredentialTypeIdentifier, [string] $CredentialTypeName, [string] $CredentialType, [string] $Comments) $header = @{ } $header.Add("Authorization", $global:MsoAdminProperties["AuthorizationResult"].CreateAuthorizationHeader()) $header.Add("TENANT_ID", $global:MsoAdminProperties["MSO-CompanyTenantInfo"]) $now = (Get-Date).ToUniversalTime() $seventyDaySpan = New-TimeSpan -Days 70 $seventyDaysFromNow = $now + $seventyDaySpan $secretObject = New-Object PSObject | Add-Member -PassThru NoteProperty ProjectIdentifier $ProjectIdentifier | Add-Member -PassThru NoteProperty VaultIdentifier $VaultIdentifier | Add-Member -PassThru NoteProperty SecretIdentifier $SecretIdentifier | Add-Member -PassThru NoteProperty CredentialTypeIdentifier $CredentialTypeIdentifier | Add-Member -PassThru NoteProperty CredentialTypeName $CredentialTypeName | Add-Member -PassThru NoteProperty CredentialType $CredentialType | Add-Member -PassThru NoteProperty SecretName $SecretName | Add-Member -PassThru NoteProperty SecretValue $SecretValue | Add-Member -PassThru NoteProperty CredentialExpirationDate $seventyDaysFromNow | Add-Member -PassThru NoteProperty LastUpdatedDate $now | Add-Member -PassThru NoteProperty Comments $Comments | Add-Member -PassThru NoteProperty SourceApplication 'CSI' $serializedJson = $secretObject | ConvertTo-Json $response = Invoke-PutRequest -Uri "$global:v3BaseUrl/Internal/Customer/$TenantId/Project/$ProjectIdentifier/Vault/$VaultIdentifier/Secret/$SecretIdentifier" ` -Headers $global:v3Headers -Body $serializedJson if ($response.SecretIdentifier) { return $true; } else { Write-Error $response; return $false; } } Function Remove-Secret { [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingPlainTextForPassword', '')] param( [string] $TenantId, [string] $ProjectIdentifier, [string] $VaultIdentifier, [string] $SecretIdentifier ) $response = Invoke-DeleteRequest -Uri ` "$global:v3BaseUrl/Internal/Customer/$TenantId/Project/$ProjectIdentifier/Vault/$VaultIdentifier/Secret/$SecretIdentifier" ` -Headers $global:v3Headers } function Remove-FastTrackMigrationSecret { <# .SYNOPSIS Remove an existing FastTrack Migration secret .DESCRIPTION The Remove-FastTrackMigrationSecret cmdlet invokes the REST API to remove a secret from the customer's secrets in keyvault. Remove-FastTrackMigrationSecret calls Waiting-TransactionComplete to repeat until a "completed" or "failed" transaction is returned from the REST API. In order to use this cmdlet, you must first login using the Login-FastTrackAccount cmdlet. .PARAMETER SecretName Unique name for already existing secret. .PARAMETER Region Region of migration. .PARAMETER MigrationType The type of migration. .EXAMPLE Remove-FastTrackMigrationSecret -SecretName:"SecretValueName" -Region:"Region" -MigrationType:"Mig-ExHybrid" This will remove the SecretValueName. .INPUTS System.String .OUTPUTS System.Management.Automation.PSObject This cmdlet generates System.Management.Automation.PSObject object that represents transaction ID. .LINK New-FastTrackMigrationSecret Set-FastTrackMigrationSecret Get-FastTrackMigrationSecrets #> param( [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [string] $SecretName, [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [string] $Region, [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [ValidateSet("Mig-ExHybrid", "Mig-ExSimpleMRS", "Mig-ExCutover", "Mig-ExStaged", "Mig-IMAP", "Mig-GmailCutover", "Mig-GmailStaged", "Mig-GroupWise", "Mig-GoogleDrive", "Mig-GoogleSites", "Mig-Box", "Mig-FileSharesToOneDrive", "Mig-FileSharesToTeamSites", "Mig-Domino-BAM", "Mig-Domino-ODME", "MIG-SPOnPrem")] [string] $MigrationType ) $project = Get-Project -TenantId $global:MsoAdminProperties["MSO-CompanyTenantInfo"] -ProjectName $Region -ProjectType $MigrationType.Replace('-', '') if (!$project) { Write-Warning 'That Region does not exist for this customer/migration type.' return } $vault = Get-Vault -TenantId $global:MsoAdminProperties["MSO-CompanyTenantInfo"] -ProjectIdentifier $project.ProjectIdentifier if (!$vault) { Write-Warning 'A Vault does not exist for this customer/migration type.' return } $secret = Get-Secret -TenantId $global:MsoAdminProperties["MSO-CompanyTenantInfo"] -ProjectIdentifier $project.ProjectIdentifier ` -VaultIdentifier $vault.VaultIdentifier -SecretName $SecretName if (!$secret) { Write-Warning 'There is no credential with that name for this region and migration type.' return } Remove-Secret -TenantId $global:MsoAdminProperties["MSO-CompanyTenantInfo"] -ProjectIdentifier $project.ProjectIdentifier -VaultIdentifier $vault.VaultIdentifier -SecretIdentifier $secret.SecretIdentifier Write-Output 'Your credential has been deleted.' } function Set-FastTrackMigrationSecret { <# .SYNOPSIS Update an existing FastTrack Migration Secret .DESCRIPTION The New-FastTrackMigrationSecret cmdlet is utilized to update a keyvault secret for the FastTrack account. The secret is defined by the SecretValue paramter and is placed in the keyvault using the key defined by the SecretName parameter. In order to use this cmdlet, you must first login using the Login-FastTrackAcount cmdlet. Please Note: Passwords should contain at least 1 lower case letter. Passwords should contain at least 1 upper case letter. Passwords should contain at least 1 number. Passwords should contain at least 3 special characters. Passwords must be at least 15 characters long. Access Notes: RDG and VPN credentials can only be created/accessed/modified through the Fast Track Migration Portal / AKV tab. .PARAMETER SecretCredential PS Credential object that contains: Unique name for new Secret. Value for new Secret. .PARAMETER Region Region of migration. .PARAMETER MigrationType The type of migration. .PARAMETER CredentialType The type of credential. Valid options are: Admin, Certificate, Migration_Account, Mig_Sched, Sharepoint, SAS, VPN, Encrypted, PowerBI .PARAMETER Comment Any comment related to credential. .EXAMPLE [PSCredential] $credential = [PSCredential]::new("SecretValueName", ("NewSecretValue" | ConvertTo-SecureString -AsPlainText -Force)) Set-FastTrackMigrationSecret -SecretCredential $credential -Region:"Region" -MigrationType:"Mig-ExHybrid" -CredentialType "Admin" This will update the value of SecretValueName as ChangedSecretValue. .INPUTS System.String .OUTPUTS System.Management.Automation.PSObject This cmdlet generates System.Management.Automation.PSObject object that represents transaction ID. .LINK New-FastTrackMigrationSecret Remove-FastTrackMigrationSecret Get-FastTrackMigrationSecrets #> [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingPlainTextForPassword', '')] param( [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [string] $SecretName, [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [string] $SecretValue, [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [string] $Region, [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [ValidateSet("Mig-ExHybrid", "Mig-ExSimpleMRS", "Mig-ExCutover", "Mig-ExStaged", "Mig-IMAP", "Mig-GmailCutover", "Mig-GmailStaged", "Mig-GroupWise", "Mig-GoogleDrive", "Mig-GoogleSites", "Mig-Box", "Mig-FileSharesToOneDrive", "Mig-FileSharesToTeamSites", "Mig-Domino-BAM", "Mig-Domino-ODME", "MIG-SPOnPrem")] [string] $MigrationType, [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [ValidateSet("Admin", "Certificate", "Migration_Account", "Mig_Sched", "Sharepoint", "SAS", "VPN", "Encrypted")] [string] $CredentialType, [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [string] $Comment ) New-FastTrackMigrationSecret -SecretName $SecretName -Region $Region -SecretValue $SecretValue -MigrationType $MigrationType -CredentialType $CredentialType -Comment $Comment -Override } function New-FastTrackMigrationSecret { <# .SYNOPSIS Create a new FastTrack Migration secret .DESCRIPTION The New-FastTrackMigrationSecret cmdlet invokes the REST API to add a secret to the customer's secrets in keyvault. New-FastTrackMigrationSecret calls Waiting-TransactionComplete to repeat until a "completed" or "failed" transaction is returned from the REST API. In order to use this cmdlet, you must first login using the Login-FastTrackAccount cmdlet. Please Note: Passwords should contain at least 1 lower case letter. Passwords should contain at least 1 upper case letter. Passwords should contain at least 1 number. Passwords should contain at least 3 special characters. Passwords must be at least 15 characters long. Access Notes: RDG and VPN credentials can only be created/accessed/modified through the Fast Track Migration Portal / AKV tab. .PARAMETER SecretCredential PS Credential object that contains: Unique name for new Secret. Value for new Secret. .PARAMETER Region Region of migration. .PARAMETER MigrationType The type of migration. .PARAMETER CredentialType The type of credential. Valid options are: Admin, Certificate, Migration_Account, Mig_Sched, Sharepoint, SAS, VPN, Encrypted .PARAMETER Comment Any comment related to credential. .EXAMPLE [PSCredential] $credential = [PSCredential]::new("SecretValueName", ("NewSecretValue" | ConvertTo-SecureString -AsPlainText -Force)) New-FastTrackMigrationSecret -SecretCredential $credential -Region:"Region" -MigrationType:"Mig-ExHybrid" -CredentialType "Admin" This will create a new Secret named as NewSecret and value as NewSecretValue. .INPUTS System.String .OUTPUTS System.Management.Automation.PSObject This cmdlet generates System.Management.Automation.PSObject object that represents transaction ID. .LINK Set-FastTrackMigrationSecret Remove-FastTrackMigrationSecret Get-FastTrackMigrationSecrets #> [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingPlainTextForPassword', '')] param( [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [string] $SecretName, [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [string] $SecretValue, [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [string] $Region, [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [ValidateSet("Mig-ExHybrid", "Mig-ExSimpleMRS", "Mig-ExCutover", "Mig-ExStaged", "Mig-IMAP", "Mig-GmailCutover", "Mig-GmailStaged", "Mig-GroupWise", "Mig-GoogleDrive", "Mig-GoogleSites", "Mig-Box", "Mig-FileSharesToOneDrive", "Mig-FileSharesToTeamSites", "Mig-Domino-BAM", "Mig-Domino-ODME", "MIG-SPOnPrem")] [string] $MigrationType, [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [ValidateSet("Admin", "Certificate", "Migration_Account", "Mig_Sched", "Sharepoint", "SAS", "VPN", "Encrypted")] [string] $CredentialType, [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [string] $Comment, [Parameter(Mandatory = $false, ValueFromPipeline = $true)] [switch] $Override ) if ($global:MsoAdminProperties.Count -eq 0) { Write-Warning "Unable to retrieve Office 365 credentials! :: Please call [Login-FastTrackAccount] function." return } $project = Get-Project -TenantId $global:MsoAdminProperties["MSO-CompanyTenantInfo"] -ProjectName $Region -ProjectType $MigrationType.Replace('-', '') if (!$project) { Write-Warning 'That Region does not exist for this customer/migration type.' return } $vault = Get-Vault -TenantId $global:MsoAdminProperties["MSO-CompanyTenantInfo"] -ProjectIdentifier $project.ProjectIdentifier if (!$vault) { Write-Warning 'A Vault does not exist for this customer/migration type.' return } $subTypes = Get-CredentialSubType -MigrationType $MigrationType.Replace('-', '') -CredentialType $CredentialType $exists = Get-Secret -TenantId $global:MsoAdminProperties["MSO-CompanyTenantInfo"] -ProjectIdentifier $project.ProjectIdentifier ` -VaultIdentifier $vault.VaultIdentifier -SecretName $SecretName if ($exists) { if (!$Override) { Write-Warning 'That credential already exists. If you want to override it, execute the same command with -Override parameter.' return } else { $exists.SecretValue = $SecretValue $exists.Comments = $Comment $update = Update-Secret -CredentialType $subTypes.CredentialType -CredentialTypeIdentifier $subTypes.CredentialTypeIdentifier ` -CredentialTypeName $subTypes.CredentialTypeName -TenantId $global:MsoAdminProperties["MSO-CompanyTenantInfo"] ` -ProjectIdentifier $project.ProjectIdentifier -VaultIdentifier $vault.VaultIdentifier ` -SecretName $SecretName -SecretValue $SecretValue -Comments $Comment -SecretIdentifier $exists.SecretIdentifier if ($update) { Write-Output 'Successfully updated your credential.' } else { Write-Warning 'There was an error updating your secret.' } } } else { $new = Add-NewSecret -CredentialType $subTypes.CredentialType -CredentialTypeIdentifier $subTypes.CredentialTypeIdentifier ` -CredentialTypeName $subTypes.CredentialTypeName -TenantId $global:MsoAdminProperties["MSO-CompanyTenantInfo"] ` -ProjectIdentifier $project.ProjectIdentifier -VaultIdentifier $vault.VaultIdentifier ` -SecretName $SecretName -SecretValue $SecretValue -Comments $Comment if ($new) { Write-Output 'Successfully added your credential.' } else { Write-Warning 'There was an error updating your secret.' } } } function Get-FastTrackMigrationSecrets { <# .SYNOPSIS Get a list of secrets for a FastTrack migration customer .DESCRIPTION The Get-FastTrackMigrationSecrets cmdlet invokes the REST API to retrieve the customer's secrets from keyvault, as a list. Get-FastTrackMigrationSecrets returns recovered secrets as a json-object that is returned to the caller. This cmdlet is used by customers to retrieve a list of secret names. In order to use this cmdlet, you must first login using the Login-FastTrackAccount cmdlet. Access Notes: RDG and VPN credentials can only be created/accessed/modified through the Fast Track Migration Portal / AKV tab. .PARAMETER Region Region of migration. .PARAMETER MigrationType Type of migration. Mig-ExHybrid Exchange to Exchange hybrid migration Mig-ExSimpleMRS Exchange to Exchange hybrid migration Mig-ExCutover Cutover Migration Mig-ExStaged Staged Migration Mig-IMAP IMAP Migration Mig-GmailCutover Gmail Cutover Migration Mig-GmailStaged Gmail staged Migration Mig-GroupWise GroupWise Migration Mig-GoogleDrive Google drive to OneDrive migration Mig-GoogleSites GoogleSites Migration Mig-Box Box drive to OneDrive migration Mig-FileSharesToOneDrive FileShare to OneDrive migration Mig-FileSharesToTeamSites FileShare to TeamSite migration Mig-Domino-BAM Notes user documents into BAM (Binary Tree Application Manager) migration Mig-Domino-ODME Notes user documents into ODME migration MIG-SPOnPrem Sharepoint Migration .PARAMETER CredentialType The type of credential. Valid options are: Admin, Certificate, Migration_Account, Mig_Sched, Sharepoint, SAS, VPN, Encrypted, PowerBI, All .EXAMPLE Get-FastTrackMigrationSecrets -Region "India" -MigrationType "Mig-ExCutover" -CredentialType "Admin" .INPUTS System.String .OUTPUTS System.Management.Automation.PSObject This cmdlet generates System.Management.Automation.PSObject object that represents transaction ID. .LINK New-FastTrackMigrationSecret Remove-FastTrackMigrationSecret Set-FastTrackMigrationSecret #> [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingPlainTextForPassword', '')] param( [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [string] $Region, [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [ValidateSet("Mig-ExHybrid", "Mig-ExSimpleMRS", "Mig-ExCutover", "Mig-ExStaged", "Mig-IMAP", "Mig-GmailCutover", "Mig-GmailStaged", "Mig-GroupWise", "Mig-GoogleDrive", "Mig-GoogleSites", "Mig-Box", "Mig-FileSharesToOneDrive", "Mig-FileSharesToTeamSites", "Mig-Domino-BAM", "Mig-Domino-ODME", "MIG-SPOnPrem")] [string] $MigrationType, [Parameter(Mandatory = $false, ValueFromPipeline = $true)] [ValidateSet("Admin", "Certificate", "Migration_Account", "Mig_Sched", "Sharepoint", "SAS", "VPN", "Encrypted", "PowerBI", "All")] [string] $CredentialType = "All" ) if ($global:MsoAdminProperties.Count -eq 0) { Write-Warning "Unable to retrieve Office 365 credentials! :: Please call [Login-FastTrackAccount] function." return } $project = Get-Project -TenantId $global:MsoAdminProperties["MSO-CompanyTenantInfo"] -ProjectName $Region -ProjectType $MigrationType.Replace('-', '') if (!$project) { Write-Warning 'That Region does not exist for this customer/migration type.' return } $vault = Get-Vault -TenantId $global:MsoAdminProperties["MSO-CompanyTenantInfo"] -ProjectIdentifier $project.ProjectIdentifier if (!$vault) { Write-Warning 'A Vault does not exist for this customer/migration type.' return } $secrets = Get-Secrets -TenantId $global:MsoAdminProperties["MSO-CompanyTenantInfo"] ` -ProjectIdentifier $project.ProjectIdentifier ` -VaultIdentifier $vault.VaultIdentifier if (!$secrets) { Write-Host "No Secrets Found" } else { $secrets } } # SIG # Begin signature block # MIIkcwYJKoZIhvcNAQcCoIIkZDCCJGACAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAeKQgUOJl2MTX/ # 10RrUm/NRaqLIsO8ljm7It7aj1+AwKCCDYEwggX/MIID56ADAgECAhMzAAABUZ6N # j0Bxow5BAAAAAAFRMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD # VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p # bmcgUENBIDIwMTEwHhcNMTkwNTAyMjEzNzQ2WhcNMjAwNTAyMjEzNzQ2WjB0MQsw # CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u # ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB # AQCVWsaGaUcdNB7xVcNmdfZiVBhYFGcn8KMqxgNIvOZWNH9JYQLuhHhmJ5RWISy1 # oey3zTuxqLbkHAdmbeU8NFMo49Pv71MgIS9IG/EtqwOH7upan+lIq6NOcw5fO6Os # +12R0Q28MzGn+3y7F2mKDnopVu0sEufy453gxz16M8bAw4+QXuv7+fR9WzRJ2CpU # 62wQKYiFQMfew6Vh5fuPoXloN3k6+Qlz7zgcT4YRmxzx7jMVpP/uvK6sZcBxQ3Wg # B/WkyXHgxaY19IAzLq2QiPiX2YryiR5EsYBq35BP7U15DlZtpSs2wIYTkkDBxhPJ # IDJgowZu5GyhHdqrst3OjkSRAgMBAAGjggF+MIIBejAfBgNVHSUEGDAWBgorBgEE # AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQUV4Iarkq57esagu6FUBb270Zijc8w # UAYDVR0RBEkwR6RFMEMxKTAnBgNVBAsTIE1pY3Jvc29mdCBPcGVyYXRpb25zIFB1 # ZXJ0byBSaWNvMRYwFAYDVQQFEw0yMzAwMTIrNDU0MTM1MB8GA1UdIwQYMBaAFEhu # ZOVQBdOCqhc3NyK1bajKdQKVMFQGA1UdHwRNMEswSaBHoEWGQ2h0dHA6Ly93d3cu # bWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY0NvZFNpZ1BDQTIwMTFfMjAxMS0w # Ny0wOC5jcmwwYQYIKwYBBQUHAQEEVTBTMFEGCCsGAQUFBzAChkVodHRwOi8vd3d3 # Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY0NvZFNpZ1BDQTIwMTFfMjAx # MS0wNy0wOC5jcnQwDAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQsFAAOCAgEAWg+A # rS4Anq7KrogslIQnoMHSXUPr/RqOIhJX+32ObuY3MFvdlRElbSsSJxrRy/OCCZdS # se+f2AqQ+F/2aYwBDmUQbeMB8n0pYLZnOPifqe78RBH2fVZsvXxyfizbHubWWoUf # NW/FJlZlLXwJmF3BoL8E2p09K3hagwz/otcKtQ1+Q4+DaOYXWleqJrJUsnHs9UiL # crVF0leL/Q1V5bshob2OTlZq0qzSdrMDLWdhyrUOxnZ+ojZ7UdTY4VnCuogbZ9Zs # 9syJbg7ZUS9SVgYkowRsWv5jV4lbqTD+tG4FzhOwcRQwdb6A8zp2Nnd+s7VdCuYF # sGgI41ucD8oxVfcAMjF9YX5N2s4mltkqnUe3/htVrnxKKDAwSYliaux2L7gKw+bD # 1kEZ/5ozLRnJ3jjDkomTrPctokY/KaZ1qub0NUnmOKH+3xUK/plWJK8BOQYuU7gK # YH7Yy9WSKNlP7pKj6i417+3Na/frInjnBkKRCJ/eYTvBH+s5guezpfQWtU4bNo/j # 8Qw2vpTQ9w7flhH78Rmwd319+YTmhv7TcxDbWlyteaj4RK2wk3pY1oSz2JPE5PNu # Nmd9Gmf6oePZgy7Ii9JLLq8SnULV7b+IP0UXRY9q+GdRjM2AEX6msZvvPCIoG0aY # HQu9wZsKEK2jqvWi8/xdeeeSI9FN6K1w4oVQM4Mwggd6MIIFYqADAgECAgphDpDS # AAAAAAADMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMK # V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0 # IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0 # ZSBBdXRob3JpdHkgMjAxMTAeFw0xMTA3MDgyMDU5MDlaFw0yNjA3MDgyMTA5MDla # MH4xCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS # ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMT # H01pY3Jvc29mdCBDb2RlIFNpZ25pbmcgUENBIDIwMTEwggIiMA0GCSqGSIb3DQEB # AQUAA4ICDwAwggIKAoICAQCr8PpyEBwurdhuqoIQTTS68rZYIZ9CGypr6VpQqrgG # OBoESbp/wwwe3TdrxhLYC/A4wpkGsMg51QEUMULTiQ15ZId+lGAkbK+eSZzpaF7S # 35tTsgosw6/ZqSuuegmv15ZZymAaBelmdugyUiYSL+erCFDPs0S3XdjELgN1q2jz # y23zOlyhFvRGuuA4ZKxuZDV4pqBjDy3TQJP4494HDdVceaVJKecNvqATd76UPe/7 # 4ytaEB9NViiienLgEjq3SV7Y7e1DkYPZe7J7hhvZPrGMXeiJT4Qa8qEvWeSQOy2u # M1jFtz7+MtOzAz2xsq+SOH7SnYAs9U5WkSE1JcM5bmR/U7qcD60ZI4TL9LoDho33 # X/DQUr+MlIe8wCF0JV8YKLbMJyg4JZg5SjbPfLGSrhwjp6lm7GEfauEoSZ1fiOIl # XdMhSz5SxLVXPyQD8NF6Wy/VI+NwXQ9RRnez+ADhvKwCgl/bwBWzvRvUVUvnOaEP # 6SNJvBi4RHxF5MHDcnrgcuck379GmcXvwhxX24ON7E1JMKerjt/sW5+v/N2wZuLB # l4F77dbtS+dJKacTKKanfWeA5opieF+yL4TXV5xcv3coKPHtbcMojyyPQDdPweGF # RInECUzF1KVDL3SV9274eCBYLBNdYJWaPk8zhNqwiBfenk70lrC8RqBsmNLg1oiM # CwIDAQABo4IB7TCCAekwEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFEhuZOVQ # BdOCqhc3NyK1bajKdQKVMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1Ud # DwQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFHItOgIxkEO5FAVO # 4eqnxzHRI4k0MFoGA1UdHwRTMFEwT6BNoEuGSWh0dHA6Ly9jcmwubWljcm9zb2Z0 # LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0NlckF1dDIwMTFfMjAxMV8wM18y # Mi5jcmwwXgYIKwYBBQUHAQEEUjBQME4GCCsGAQUFBzAChkJodHRwOi8vd3d3Lm1p # Y3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Jvb0NlckF1dDIwMTFfMjAxMV8wM18y # Mi5jcnQwgZ8GA1UdIASBlzCBlDCBkQYJKwYBBAGCNy4DMIGDMD8GCCsGAQUFBwIB # FjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2RvY3MvcHJpbWFyeWNw # cy5odG0wQAYIKwYBBQUHAgIwNB4yIB0ATABlAGcAYQBsAF8AcABvAGwAaQBjAHkA # XwBzAHQAYQB0AGUAbQBlAG4AdAAuIB0wDQYJKoZIhvcNAQELBQADggIBAGfyhqWY # 4FR5Gi7T2HRnIpsLlhHhY5KZQpZ90nkMkMFlXy4sPvjDctFtg/6+P+gKyju/R6mj # 82nbY78iNaWXXWWEkH2LRlBV2AySfNIaSxzzPEKLUtCw/WvjPgcuKZvmPRul1LUd # d5Q54ulkyUQ9eHoj8xN9ppB0g430yyYCRirCihC7pKkFDJvtaPpoLpWgKj8qa1hJ # Yx8JaW5amJbkg/TAj/NGK978O9C9Ne9uJa7lryft0N3zDq+ZKJeYTQ49C/IIidYf # wzIY4vDFLc5bnrRJOQrGCsLGra7lstnbFYhRRVg4MnEnGn+x9Cf43iw6IGmYslmJ # aG5vp7d0w0AFBqYBKig+gj8TTWYLwLNN9eGPfxxvFX1Fp3blQCplo8NdUmKGwx1j # NpeG39rz+PIWoZon4c2ll9DuXWNB41sHnIc+BncG0QaxdR8UvmFhtfDcxhsEvt9B # xw4o7t5lL+yX9qFcltgA1qFGvVnzl6UJS0gQmYAf0AApxbGbpT9Fdx41xtKiop96 # eiL6SJUfq/tHI4D1nvi/a7dLl+LrdXga7Oo3mXkYS//WsyNodeav+vyL6wuA6mk7 # r/ww7QRMjt/fdW1jkT3RnVZOT7+AVyKheBEyIXrvQQqxP/uozKRdwaGIm1dxVk5I # RcBCyZt2WwqASGv9eZ/BvW1taslScxMNelDNMYIWSDCCFkQCAQEwgZUwfjELMAkG # A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx # HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEoMCYGA1UEAxMfTWljcm9z # b2Z0IENvZGUgU2lnbmluZyBQQ0EgMjAxMQITMwAAAVGejY9AcaMOQQAAAAABUTAN # BglghkgBZQMEAgEFAKCBrjAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgor # BgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkqhkiG9w0BCQQxIgQgnZQdWJps # 2WUUpGm6RgKMZP2w/ZJq6Sgbru2xE/oDpLkwQgYKKwYBBAGCNwIBDDE0MDKgFIAS # AE0AaQBjAHIAbwBzAG8AZgB0oRqAGGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbTAN # BgkqhkiG9w0BAQEFAASCAQBZUFyt7HzQaSXZjx8wPXenENtxkVFYvRmM7RR3od6S # SnOtJYOSRylxxcSE26sJ5gK3duk7NGHlbnyx7j5zL/ehBg4o0x9Dto/cqpaO5I8r # UMAqqgcJdkg6nZ/tnZYNPopC+q6dMiUT7cZ9tUMm7EE14pB1hz3HNLDy3oWqf32C # KbwaakB0uwgzGNqf3V4noQZcKl5nE6UyhN9mpnL8WecMzvzE8qIGYxzcInVuC+kK # j3b1WorxR/0h8gvd6mOKqFm86M2wBoGsJrpyhaocpHLCR8LLGqzyBzzGrG/M25lH # QxP4QeYyHg6vQX+uYOuFC4F+q73udyrfjR0VWPJLxYOEoYIT0jCCE84GCisGAQQB # gjcDAwExghO+MIITugYJKoZIhvcNAQcCoIITqzCCE6cCAQMxDzANBglghkgBZQME # AgEFADCCAVgGCyqGSIb3DQEJEAEEoIIBRwSCAUMwggE/AgEBBgorBgEEAYRZCgMB # MDEwDQYJYIZIAWUDBAIBBQAEIJ6eYIvH8fntpqwnOl+NFXJVwetCsDX2R9HRUVx1 # XfUZAgZdiMpowB4YEzIwMTkxMDA0MTgyMjUxLjQ2NlowBwIBAYACAfSggdSkgdEw # gc4xCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS # ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKTAnBgNVBAsT # IE1pY3Jvc29mdCBPcGVyYXRpb25zIFB1ZXJ0byBSaWNvMSYwJAYDVQQLEx1UaGFs # ZXMgVFNTIEVTTjo5OEZELUM2MUUtRTY0MTElMCMGA1UEAxMcTWljcm9zb2Z0IFRp # bWUtU3RhbXAgU2VydmljZaCCDyIwggT1MIID3aADAgECAhMzAAAA++CUDxRBhNvF # AAAAAAD7MA0GCSqGSIb3DQEBCwUAMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpX # YXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg # Q29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAy # MDEwMB4XDTE5MDkwNjIwNDEwNloXDTIwMTIwNDIwNDEwNlowgc4xCzAJBgNVBAYT # AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYD # VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKTAnBgNVBAsTIE1pY3Jvc29mdCBP # cGVyYXRpb25zIFB1ZXJ0byBSaWNvMSYwJAYDVQQLEx1UaGFsZXMgVFNTIEVTTjo5 # OEZELUM2MUUtRTY0MTElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2Vy # dmljZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKAhY+5J8HXlmAVU # +70WH7Tm4GcoAWQzzKyzLYgQjL+mViTGe5p0zbwF49ZJcdXgwQkDM/uA2j8xj0or # y2Uh5CefDW/AUHz9R2qkIe5AbjbjLADgCKg6U3SAlWfz8NoKNE8xu2Uy/8zpLDcV # c0jw4B36Kq6Yjm8xXcsyxjObbaVzIicl23bsuJgkkCD1sathSBFrwDVEYQHk8R1Y # wgFE8NB/ngp+4P02rAmuNpcc1wBOyvTyEbS8l1mirMFhT9VbDftN6s1zd0Mlp+Hr # p5U0NGPwS+mEHilvjabY67LBK3BZLYgmUcitV46XontBCBv9K+5oPtpRrdbPVu2g # e2THNecCAwEAAaOCARswggEXMB0GA1UdDgQWBBSQPADvO9LEi5oW6lyRMkqJD6tN # jDAfBgNVHSMEGDAWgBTVYzpcijGQ80N7fEYbxTNoWoVtVTBWBgNVHR8ETzBNMEug # SaBHhkVodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9N # aWNUaW1TdGFQQ0FfMjAxMC0wNy0wMS5jcmwwWgYIKwYBBQUHAQEETjBMMEoGCCsG # AQUFBzAChj5odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Rp # bVN0YVBDQV8yMDEwLTA3LTAxLmNydDAMBgNVHRMBAf8EAjAAMBMGA1UdJQQMMAoG # CCsGAQUFBwMIMA0GCSqGSIb3DQEBCwUAA4IBAQBD2sGnRfoXWNGCeqAhw+SMyp8z # SS7zFkOoGnH8IQtXLY2wMezdaD3O8NVB2+1J4jfygw7XiBkFQt40i+85x8ig+oUn # Zl1F+f3l6TKbCLIeAlpvfRT2USLHO+4PIUX9wYViqOF7FXlP2DJC/1ga/bGhF5mc # KxlcPo4BWk8cuO3BCjXabNCs5oHbNHVfxUI9xVKYUBN3GNDl+72j50bE11Jg8ZgV # wI2Syw1j7UiC7ZHYzZ7GCNyuH3z9qGIXWgr6Nb/il5pPfsOWRI1bQbL0/oc/Q4TP # 9tqhvCi57T+59NYz+33KAGx0SghLBcg6grUKyI6cgNf+fOUb/FQR+8Ph2SAyMIIG # cTCCBFmgAwIBAgIKYQmBKgAAAAAAAjANBgkqhkiG9w0BAQsFADCBiDELMAkGA1UE # BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc # BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0 # IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTAwHhcNMTAwNzAxMjEzNjU1 # WhcNMjUwNzAxMjE0NjU1WjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGlu # Z3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv # cmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDCC # ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKkdDbx3EYo6IOz8E5f1+n9p # lGt0VBDVpQoAgoX77XxoSyxfxcPlYcJ2tz5mK1vwFVMnBDEfQRsalR3OCROOfGEw # WbEwRA/xYIiEVEMM1024OAizQt2TrNZzMFcmgqNFDdDq9UeBzb8kYDJYYEbyWEeG # MoQedGFnkV+BVLHPk0ySwcSmXdFhE24oxhr5hoC732H8RsEnHSRnEnIaIYqvS2SJ # UGKxXf13Hz3wV3WsvYpCTUBR0Q+cBj5nf/VmwAOWRH7v0Ev9buWayrGo8noqCjHw # 2k4GkbaICDXoeByw6ZnNPOcvRLqn9NxkvaQBwSAJk3jN/LzAyURdXhacAQVPIk0C # AwEAAaOCAeYwggHiMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBTVYzpcijGQ # 80N7fEYbxTNoWoVtVTAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTALBgNVHQ8E # BAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBTV9lbLj+iiXGJo0T2U # kFvXzpoYxDBWBgNVHR8ETzBNMEugSaBHhkVodHRwOi8vY3JsLm1pY3Jvc29mdC5j # b20vcGtpL2NybC9wcm9kdWN0cy9NaWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcmww # WgYIKwYBBQUHAQEETjBMMEoGCCsGAQUFBzAChj5odHRwOi8vd3d3Lm1pY3Jvc29m # dC5jb20vcGtpL2NlcnRzL01pY1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNydDCBoAYD # VR0gAQH/BIGVMIGSMIGPBgkrBgEEAYI3LgMwgYEwPQYIKwYBBQUHAgEWMWh0dHA6 # Ly93d3cubWljcm9zb2Z0LmNvbS9QS0kvZG9jcy9DUFMvZGVmYXVsdC5odG0wQAYI # KwYBBQUHAgIwNB4yIB0ATABlAGcAYQBsAF8AUABvAGwAaQBjAHkAXwBTAHQAYQB0 # AGUAbQBlAG4AdAAuIB0wDQYJKoZIhvcNAQELBQADggIBAAfmiFEN4sbgmD+BcQM9 # naOhIW+z66bM9TG+zwXiqf76V20ZMLPCxWbJat/15/B4vceoniXj+bzta1RXCCtR # gkQS+7lTjMz0YBKKdsxAQEGb3FwX/1z5Xhc1mCRWS3TvQhDIr79/xn/yN31aPxzy # mXlKkVIArzgPF/UveYFl2am1a+THzvbKegBvSzBEJCI8z+0DpZaPWSm8tv0E4XCf # Mkon/VWvL/625Y4zu2JfmttXQOnxzplmkIz/amJ/3cVKC5Em4jnsGUpxY517IW3D # nKOiPPp/fZZqkHimbdLhnPkd/DjYlPTGpQqWhqS9nhquBEKDuLWAmyI4ILUl5WTs # 9/S/fmNZJQ96LjlXdqJxqgaKD4kWumGnEcua2A5HmoDF0M2n0O99g/DhO3EJ3110 # mCIIYdqwUB5vvfHhAN/nMQekkzr3ZUd46PioSKv33nJ+YWtvd6mBy6cJrDm77MbL # 2IK0cs0d9LiFAR6A+xuJKlQ5slvayA1VmXqHczsI5pgt6o3gMy4SKfXAL1QnIffI # rE7aKLixqduWsqdCosnPGUFN4Ib5KpqjEWYw07t0MkvfY3v1mYovG8chr1m1rtxE # PJdQcdeh0sVV42neV8HR3jDA/czmTfsNv11P6Z0eGTgvvM9YBS7vDaBQNdrvCScc # 1bN+NR4Iuto229Nfj950iEkSoYIDsDCCApgCAQEwgf6hgdSkgdEwgc4xCzAJBgNV # BAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4w # HAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKTAnBgNVBAsTIE1pY3Jvc29m # dCBPcGVyYXRpb25zIFB1ZXJ0byBSaWNvMSYwJAYDVQQLEx1UaGFsZXMgVFNTIEVT # Tjo5OEZELUM2MUUtRTY0MTElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAg # U2VydmljZaIlCgEBMAkGBSsOAwIaBQADFQAV9O+PCUZ4KHTCMuuXBK/6zr9CMaCB # 3jCB26SB2DCB1TELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAO # BgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEp # MCcGA1UECxMgTWljcm9zb2Z0IE9wZXJhdGlvbnMgUHVlcnRvIFJpY28xJzAlBgNV # BAsTHm5DaXBoZXIgTlRTIEVTTjo0REU5LTBDNUUtM0UwOTErMCkGA1UEAxMiTWlj # cm9zb2Z0IFRpbWUgU291cmNlIE1hc3RlciBDbG9jazANBgkqhkiG9w0BAQUFAAIF # AOFBT4MwIhgPMjAxOTEwMDQxMjU2MzVaGA8yMDE5MTAwNTEyNTYzNVowdzA9Bgor # BgEEAYRZCgQBMS8wLTAKAgUA4UFPgwIBADAKAgEAAgIBUgIB/zAHAgEAAgIWwjAK # AgUA4UKhAwIBADA2BgorBgEEAYRZCgQCMSgwJjAMBgorBgEEAYRZCgMBoAowCAIB # AAIDFuNgoQowCAIBAAIDB6EgMA0GCSqGSIb3DQEBBQUAA4IBAQBm1Ot6k/Jgu+kQ # cVB7iYTnEon1uOfPQISA8QQ5AGx2kiiHEY04wW/T9n2hNaTQbz61Nw3iQUYTXPri # EK27kg5jUmMqZLz6pmY6ilfBGRLvgiEN9E8fol2EmUhTkIgQ9KmRXkco5AKFs7eU # IJutBPp2SYBmuRkliBF1UYcSSxl1rKYOuIfkfuPFOfkcxJWwjkq6O7ABPuLq5nMf # 5Q+sWVmEg/ov7iK/KJzGbwxjxWw9shtvtPPXHBZc3M1JaJGvTDfWKdCq6U67hjtS # 6vDUqMfDphH5QRkVo5/yVtMlp2BwXxSevBK3IWkHFUEEWa58u5cpyYsktO0SYl4N # 3fSh3ojLMYIDDTCCAwkCAQEwgZMwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh # c2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBD # b3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIw # MTACEzMAAAD74JQPFEGE28UAAAAAAPswDQYJYIZIAWUDBAIBBQCgggFKMBoGCSqG # SIb3DQEJAzENBgsqhkiG9w0BCRABBDAvBgkqhkiG9w0BCQQxIgQg+w+UjuA9PZK8 # DlEIf4h8HQ5A6y8CN+wNXKEqpV6zrtgwgfoGCyqGSIb3DQEJEAIvMYHqMIHnMIHk # MIG9BCBu8fQjDOJ6yHyR/w+/uqCScFrrBeJLrXDO9BpMK7r+3TCBmDCBgKR+MHwx # CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt # b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1p # Y3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwAhMzAAAA++CUDxRBhNvFAAAAAAD7 # MCIEIGhGYbMyo6XONTZVkN7S/49zYNPeDV7OGQ/iV5feGoohMA0GCSqGSIb3DQEB # CwUABIIBAJiABFRZNVTlbXZ+2KfH6L+3Y0zkuVr9zM8KVyKTndli/d7bFsrmBA/h # fj08xoORgtF/EWFd8vqR6XNg5B/h74aj2+IjoOntQtYXYTmryW5QVFtnbBUNmN7H # MsNvYI400OOL/DYn7Bc11yXD5fLoVf/2xCP004Z0KEsgVwz5Np3S0C4YLncXqSy8 # ufmgFpg1Q+kTVMkgP68kgBMPuHnd0cWg0FOSSjG3ogLksdoJcUdOOjaZi+LsR0rz # QxNTd4m/4xKUEykB7LJ+nNrVxBiKptc+KPQsYAAI8+Sgg16Jh/EVOS5jBu9l9R+Q # CHaLkFNhhPWgYDmr+nY6Pu/vlxkNg4w= # SIG # End signature block |