FastTrack-RecipientManagement.psm1
Add-Type -AssemblyName System.Web -ErrorAction SilentlyContinue Function Get-ResponseError { <# .SYNOPSIS Get-ResponseError converts HtmlWebResponse error to HtmlWebResponseObject for output .DESCRIPTION Get-ResponseError inputs HtmlWebResponse error and converts to HtmlWebResponseObject for output .PARAMETER Response is the error response returned from webrequest .EXAMPLE Get-ResponseError $_.Exception.Response .INPUTS System.Net.HttpWebResponse .OUTPUTS HtmlWebResponseObject .LINK #> param([System.Net.HttpWebResponse]$Response) $streamReader = New-Object System.IO.StreamReader($Response.GetResponseStream()) $streamReader.BaseStream.Position = 0 $streamReader.DiscardBufferedData() $body = ConvertFrom-Json($streamReader.ReadToEnd()) if([string]::IsNullOrEmpty($body)) { $body = ConvertFrom-Json("{}") } Add-Member -InputObject $body -MemberType NoteProperty -Name "StatusCode" -Value $_.Exception.Response.StatusCode $body } Function Invoke-GetRequest { <# .SYNOPSIS Call Rest API with input variables to retrieve appropriate response .DESCRIPTION The Invoke-GetRequest cmdlet utilizes the header parameter to perform the REST API call to modify a FastTrack migration. The REST API is defined in the URI parameter and returns the API's webresponse. .PARAMETER Uri as the endpoint HTML address for the REST API Headers is a collection of header keys and values required by the API to return results .EXAMPLE $JsonResult = Invoke-GetRequest -Uri ([System.String]::Format("{0}/{1}/DSR/Status/TransactionId/{2}?{3}", $global:CsiApiBaseUriFormat, $TenantId, $TransactionId, $query)) -Headers $header .INPUTS System.String System.Collections.Hashtable .OUTPUTS HtmlWebResponseObject .LINK #> param([String]$Uri, [hashtable]$Headers) $response = try { Invoke-RestMethod -Method GET -Uri $Uri -ContentType 'application/json' -Headers $Headers } catch { Get-ResponseError $_.Exception.Response } return $response } Function Invoke-PostRequest { <# .SYNOPSIS Call Rest API with input variables to retrieve appropriate response .DESCRIPTION The Invoke-PostRequest cmdlet utilizes the body and header parameters to perform the REST API call to modify a FastTrack migration. The REST API is defined in the URI parameter and returns the API's webresponse. .PARAMETER Uri as the endpoint HTML address for the REST API Headers is a collection of header keys and values required by the API to return results Body is the collected form data required by the API to return results .EXAMPLE .INPUTS System.String System.Collections.Hashtable .OUTPUTS HtmlWebResponseObject .LINK #> param([String]$Uri, [hashtable]$Headers, [String]$Body) $response = try { Invoke-RestMethod -Method POST -Uri $Uri -ContentType 'application/json' -Headers $Headers -Body $Body } catch { Get-ResponseError $_.Exception.Response } return $response } Function Invoke-PutRequest { <# .SYNOPSIS Call Rest API with input variables to retrieve appropriate response .DESCRIPTION The Invoke-DeleteRequest cmdlet utilizes the body and header parameters to perform the REST API call to delete a FastTrack migration. The REST API is defined in the URI parameter and returns the API's webresponse. .PARAMETER Uri as the endpoint HTML address for the REST API Headers is a collection of header keys and values required by the API to return results Body is the collected form data required by the API to return results .EXAMPLE .INPUTS System.String System.Collections.Hashtable .OUTPUTS HtmlWebResponseObject .LINK #> param([String]$Uri, [hashtable]$Headers, [String]$Body) $response = try { Invoke-RestMethod -Method PUT -Uri $Uri -ContentType 'application/json' -Headers $Headers -Body $Body } catch { Get-ResponseError $_.Exception.Response } return $response } Function Invoke-DeleteRequest { <# .SYNOPSIS Call Rest API with delete request input .DESCRIPTION The Invoke-DeleteRequest cmdlet utilizes the body and header parameters to perform the REST API call to delete a FastTrack migration. The REST API is defined in the URI parameter and returns the API's webresponse. In order to use this cmdlet, you must first login using the Login-FastTrackMigrationAccount cmdlet. .PARAMETER Uri of endpont for REST API .PARAMETER Header to include in REST API call .PARAMETER Body and Form data to include in REST API call .EXAMPLE $JsonResult = Invoke-DeleteRequest -Uri ([System.String]::Format("{0}/{1}/DSR/Status/TransactionId/{2}?{3}", $global:CsiApiBaseUriFormat, $TenantId, $TransactionId, $query)) -Headers $header .INPUTS System.String System.Collections.Hashtable .OUTPUTS HtmlWebRequestResponse .LINK #> param([String]$Uri, [hashtable]$Headers, [String]$Body) $response = try { Invoke-RestMethod -Method DELETE -Uri $Uri -ContentType 'application/json' -Headers $Headers -Body $Body } catch { Get-ResponseError $_.Exception.Response } return $response } Function Waiting-TransactionComplete() { <# .SYNOPSIS Find status of Transaction .DESCRIPTION The Waiting-TransactionComplete cmdlet takes a TransactionId, as a string object, invoking the REST API to retrieve the transaction's status. While the status of the transaction is not "completed" or "failed," the Get-FastTrackMigrationTransactionStatus is called and checked for an updated status. Once comleted or failed, the transaction is returned to the caller. In order to use this cmdlet, you must first login using the Login-FastTrackMigrationAccount cmdlet. .PARAMETER TransactionId is the GUID representing the specified transaction .EXAMPLE Waiting-TransactionComplete -TransactionID ($JsonResult.TransactionId) .INPUTS System.String .OUTPUTS System.Management.Automation.PSObject This cmdlet generates System.Management.Automation.PSObject object that represents transaction ID. .LINK #> param([string] $TransactionID = $(throw "Transaction ID unable to find, Please try again.")) [array]$FinalResults = "Completed","Failed" $current = $previous = 1; do { $Transaction = Get-FastTrackMigrationTransactionStatus -TransactionID $TransactionID for ($j = 1; (!$FinalResults.Contains($Transaction.Status) -and $j -le $current); $j++) { sleep -Milliseconds 1000 Write-Progress -Id 1 -Activity Waiting -Status 'Next attempt will start ' -PercentComplete ($j/$current*100) -SecondsRemaining ($current-$j) } $current,$previous = ($current + $previous),$current } while ($current -lt 60 -and !$FinalResults.Contains($Transaction.Status)) return $Transaction } Function SetBaseRecipientValues { <# .SYNOPSIS Set recipient identity values .DESCRIPTION The SetBaseRecipientValues cmdlet, for Global Administrators, is utilized to set recipient identity details. These details are the name, email adress, and description of the recipient account. Once created, the recipient information is returned to the caller. In order to use this cmdlet, you must first login using the Login-FastTrackMigrationAccount cmdlet. .PARARMETER First name of customer .PARARMETER Last name of customer .PARARMETER Email address of customer .PARARMETER Description of distribution list .EXAMPLE $jsonObj = SetBaseRecipientValues -FirstName $FirstName -LastName $LastName -EmailAddress $EmailAddress -Description $Description .INPUTS System.String .OUTPUTS PSObject Recipient .LINK #> param ( [string] $FirstName, [string] $LastName, [string] $EmailAddress, [string] $Description ) $Recipient = (New-Object PSObject | Add-Member -PassThru NoteProperty FirstName $FirstName | Add-Member -PassThru NoteProperty LastName $LastName | Add-Member -PassThru NoteProperty EmailAddress $EmailAddress | Add-Member -PassThru NoteProperty Description $Description) return $Recipient } Function SetIdentityRecipientValues { <# .SYNOPSIS Set recipient identity .DESCRIPTION The SetIdentityRecipientValues cmdlet is used to create customer identity details from input parameters. Once created, the customer details are returned to the caller. In order to use this cmdlet, you must first login using the Login-FastTrackMigrationAccount cmdlet. .EXAMPLE $CustomerIdentity = SetIdentityRecipientValues .INPUTS None .OUTPUTS PSObject Identity .LINK #> [string] $TenantID = $global:MsoAdminProperties['MSO-CompanyTenantInfo'] [string] $CompanyName = $global:MsoAdminProperties["MSO-CompanyInfo"].DisplayName [string] $LogonUserEmail = $global:MsoAdminProperties["MSO-LoggedOnUser"].Account $Identity = (New-Object PSObject | Add-Member -PassThru NoteProperty TenantId $TenantID | Add-Member -PassThru NoteProperty CompanyName $CompanyName | Add-Member -PassThru NoteProperty LogonUserEmail $LogonUserEmail | Add-Member -PassThru NoteProperty EnvironmentType $global:MsoComOrGov ) return $Identity } Function SetCreateRequestValues { <# .SYNOPSIS Create recipient request .DESCRIPTION This cmdlet is intended for customers who are Global Administrators to create customer configuration details object for creating request. In order to use this cmdlet, you must first login using the Login-FastTrackMigrationAccount cmdlet. .PARARMETER First name of customer .PARARMETER Last name of customer .PARARMETER Email address of customer .PARARMETER Description of distribution list .EXAMPLE $jsonObj = SetCreateRequestValues -FirstName: $FirstName -LastName: $LastName -EmailAddress: $EmailAddress -Description $Description .INPUTS System.String .OUTPUTS PSobject CustomerObject .LINK #> param ( [string] $FirstName, [string] $LastName, [string] $EmailAddress, [string] $Description ) $CustomerIdentity = SetIdentityRecipientValues $Recipient = (New-Object PSObject | Add-Member -PassThru NoteProperty FirstName $FirstName | Add-Member -PassThru NoteProperty LastName $LastName | Add-Member -PassThru NoteProperty EmailAddress $EmailAddress | Add-Member -PassThru NoteProperty Description $Description) $RecipientArray = @() $RecipientArray += $Recipient $CustomerObject = (New-Object PSObject | Add-Member -PassThru NoteProperty Identity $CustomerIdentity | Add-Member -PassThru NoteProperty Recipient $RecipientArray | Add-Member -PassThru NoteProperty EnvironmentType $global:MsoComOrGov ) return $CustomerObject } Function SetUpdateRequestValues { <# .SYNOPSIS Update recipient request .DESCRIPTION The SetUpdateRequestValues cmdlet, intended for Global Administrator, is used to create customer details from input parameters. Once created, the customer request-object is returned to the caller. In order to use this cmdlet, you must first login using the Login-FastTrackMigrationAccount cmdlet. .PARARMETER First name of customer .PARARMETER Last name of customer .PARARMETER Email address of customer .PARARMETER Description of distribution list .EXAMPLE $jsonObj = SetUpdateRequestValues -RecipientId $RecipientId -FirstName $FirstName -LastName $LastName -EmailAddress $EmailAddress -Description $Description .INPUTS System.String .OUTPUTS PSObject CustomerObject .LINK #> param ( [string] $FirstName, [string] $LastName, [string] $EmailAddress, [string] $Description ) $CustomerIdentity = SetIdentityRecipientValues $CustomerObject = (New-Object PSObject | Add-Member -PassThru NoteProperty Identity $CustomerIdentity | Add-Member -PassThru NoteProperty FirstName $FirstName | Add-Member -PassThru NoteProperty LastName $LastName | Add-Member -PassThru NoteProperty EmailAddress $EmailAddress | Add-Member -PassThru NoteProperty EnvironmentType $global:MsoComOrGov | Add-Member -PassThru NoteProperty Description $Description) return $CustomerObject } function Get-FastTrackMigrationRecipient { <# .SYNOPSIS Get list of customers recipients .DESCRIPTION The Get-FastTrackMigrationRecipient cmdlet is used to retrieve a list of FastTrack migration recipients, invoking the REST API to retrieve the resulting migration. Get-FastTrackMigrationRecipient returns the webresponse object as a json-object. In order to use this cmdlet, you must first login using the Login-FastTrackMigrationAccount cmdlet. .EXAMPLE Get-FastTrackMigrationRecipient .INPUTS None .OUTPUTS System.Management.Automation.PSObject This cmdlet generates a System.Management.Automation.PSObject object that represents the list of Customer configuration Details. .LINK New-FastTrackMigrationRecipient Set-FastTrackMigrationRecipient Remove-FastTrackMigrationRecipient #> try { if($global:MsoAdminProperties.Count -eq 0) { Write-Warning "Unable to retrieve Office 365 credentials! :: Please call [Login-FastTrackAccount] function." return } [string]$CustomerId = $global:MsoAdminProperties["MSO-CompanyTenantInfo"] $query += "environmentType=$global:MsoComOrGov" $header = @{} if($global:v2FeatureFlag -eq $true){ $header.Add("Authorization", $global:MsoAdminProperties["AuthorizationResult"].CreateAuthorizationHeader())} else{ $header.Add("ACCESS_TOKEN",$global:MsftAccessToken)} $header.Add("TENANT_ID",$global:MsoAdminProperties["MSO-CompanyTenantInfo"]) Write-Host "Sending Recipient List Request..." $JsonResult = Invoke-GetRequest -Uri ([System.String]::Format("{0}{1}/Recipient?$($query)",$global:CsiApiBaseUriFormat,$CustomerId)) -Headers $header if($JsonResult.StatusCode -ne $null) { Write-Warning "Request failed! : $($JsonResult.StatusCode) - Error Message: $($JsonResult)" } else { Write-Host "Get request completed" if($JsonResult.Recipients -ne $null) { return $JsonResult.Recipients } } return $JsonResult } catch { Write-Warning -Message: $_.Exception.Message Write-Host "Press the [enter] key to close this process" Read-Host } } function New-FastTrackMigrationRecipient { <# .SYNOPSIS Creates an new recipient for a FastTrack migration customer .DESCRIPTION The New-FastTrackMigrationRecipient cmdlet is used to create a new FastTrack migration instance with recipient details, invoking the REST API to retrieve the resulting migration once the migration enters "completed" or "failed" status. In order to use this cmdlet, you must first login using the Login-FastTrackMigrationAccount cmdlet. .PARAMETER FirstName First Name of the customer .PARAMETER LastName Last Name of the customer .PARAMETER Description Description of distribution list .PARAMETER EmailAddress Email Address of the customer .EXAMPLE New-FastTrackMigrationRecipient -FirstName "abc" -LastName "xyz" -EmailAddress "pattif@contoso.net" New-FastTrackMigrationRecipient -Description "distribution list" -EmailAddress "pattif@contoso.net" .INPUTS System.String .OUTPUTS System.Management.Automation.PSObject This cmdlet generates a System.Management.Automation.PSObject object that represents the Transaction ID . .LINK Get-FastTrackMigrationRecipient Set-FastTrackMigrationRecipient Remove-FastTrackMigrationRecipient #> param( [Parameter(Mandatory=$false,ValueFromPipeline=$true)] [string] $FirstName, [Parameter(Mandatory=$false,ValueFromPipeline=$true)] [string] $LastName, [Parameter(Mandatory=$false,ValueFromPipeline=$true)] [string] $Description, [Parameter(Mandatory=$true,ValueFromPipeline=$true)] [string] $EmailAddress ) try { if($global:MsoAdminProperties.Count -eq 0) { Write-Warning "Unable to retrieve Office 365 credentials! :: Please call [Login-FastTrackAccount] function." return } $jsonObj = SetCreateRequestValues -FirstName: $FirstName ` -LastName: $LastName ` -EmailAddress: $EmailAddress ` -Description $Description $serializedJson = $jsonObj | ConvertTo-Json -Compress: $true $header = @{} if($global:v2FeatureFlag -eq $true){ $header.Add("Authorization", $global:MsoAdminProperties["AuthorizationResult"].CreateAuthorizationHeader())} else{ $header.Add("ACCESS_TOKEN",$global:MsftAccessToken)} $header.Add("TENANT_ID",$global:MsoAdminProperties["MSO-CompanyTenantInfo"]) Write-Host "Sending Recipient Create Request..." $JsonResult = Invoke-PostRequest -Uri ([System.String]::Format("{0}Recipient/Create",$global:CsiApiBaseUriFormat)) -Headers $header -Body $serializedJson if($JsonResult.StatusCode -ne $null) { Write-Warning "Request failed! : $($JsonResult.StatusCode) - Error Message: $($JsonResult)" } else { Waiting-TransactionComplete -TransactionID ($JsonResult.TransactionId) } } catch { Write-Warning -Message: $_.Exception.Message Write-Host "Press the [enter] key to close this process" Read-Host } } function Set-FastTrackMigrationRecipient { <# .SYNOPSIS Updates a FastTrack migration customer's recipient .DESCRIPTION The Set-FastTrackMigrationRecipient cmdlet is used to create an UpdateRequest object. Once the object is created, the REST API is invoked by Invoke-PutRequest to update the FastTrack migration. In order to use this cmdlet, you must first login using the Login-FastTrackMigrationAccount cmdlet. .PARAMETER RecipientId An unique GUID that identifies a specific customer configuration. .PARAMETER FirstName First Name of the customer. .PARAMETER LastName Last Name of the customer. .PARAMETER Description Description of distribution list .PARAMETER EmailAddress Email Address of the customer .EXAMPLE Set-FastTrackMigrationRecipient -RecipientId "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" -FirstName "abc" -LastName "xyz" -EmailAddress "pattif@contoso.net" Set-FastTrackMigrationRecipient -RecipientId "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" -Description "distribution list" -EmailAddress "pattif@contoso.net" .INPUTS System.String .OUTPUTS System.Management.Automation.PSObject This cmdlet generates a System.Management.Automation.PSObject object that represents the Transaction ID . .LINK Get-FastTrackMigrationRecipient New-FastTrackMigrationRecipient Remove-FastTrackMigrationRecipient #> param( [Parameter(Mandatory=$true,ValueFromPipeline=$true)] [string] $RecipientId, [Parameter(Mandatory=$false,ValueFromPipeline=$true)] [string] $FirstName, [Parameter(Mandatory=$false,ValueFromPipeline=$true)] [string] $LastName, [Parameter(Mandatory=$false,ValueFromPipeline=$true)] [string] $Description, [Parameter(Mandatory=$true,ValueFromPipeline=$true)] [string] $EmailAddress ) try { if($global:MsoAdminProperties.Count -eq 0) { Write-Warning "Unable to retrieve Office 365 credentials! :: Please call [Login-FastTrackAccount] function." return } try { $isError = [GUID]::Parse($RecipientId) } catch { Write-Warning "RecipientId is not a valid GUID format. To obtain the RecipientId , please run 'Get-FastTrackMigrationRecipient' to retrieve a list of all recipients." return } $jsonObj = SetUpdateRequestValues -RecipientId $RecipientId -FirstName $FirstName -LastName $LastName -EmailAddress $EmailAddress -Description $Description $serializedJson = $jsonObj | ConvertTo-Json -Compress: $true $header = @{} if($global:v2FeatureFlag -eq $true){ $header.Add("Authorization", $global:MsoAdminProperties["AuthorizationResult"].CreateAuthorizationHeader())} else{ $header.Add("ACCESS_TOKEN",$global:MsftAccessToken)} $header.Add("TENANT_ID",$global:MsoAdminProperties["MSO-CompanyTenantInfo"]) Write-Host "Sending Recipient Update Request..." $JsonResult = Invoke-PutRequest -Uri ([System.String]::Format("{0}Recipient/{1}",$global:CsiApiBaseUriFormat,$RecipientId)) -Headers $header -Body $serializedJson if($JsonResult.StatusCode -ne $null) { Write-Warning "Request failed! : $($JsonResult.StatusCode) - Error Message: $($JsonResult)" } else { Waiting-TransactionComplete -TransactionID ($JsonResult.TransactionId) } } catch { Write-Warning -Message: $_.Exception.Message Write-Host "Press the [enter] key to close this process" Read-Host } } function Remove-FastTrackMigrationRecipient { <# .SYNOPSIS Removes a recipient from a FastTrack migration customer .DESCRIPTION The Remove-FastTrackMigrationRecipient cmdlet invokes the REST API to remove a recipient from the migration transaction. Waiting-TransactionComplete is invoked to return a "completed" or "failed" status of the REST API transaction request and is returned to the caller. In order to use this cmdlet, you must first login using the Login-FastTrackAcount cmdlet. .PARAMETER RecipientId An unique GUID that identifies a specific customer configuration. .EXAMPLE Remove-FastTrackMigrationRecipient -RecipientId "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" .INPUTS System.String .OUTPUTS System.Management.Automation.PSObject This cmdlet generates a System.Management.Automation.PSObject object that represents the Transaction ID . .LINK New-FastTrackMigrationRecipient Set-FastTrackMigrationRecipient Get-FastTrackMigrationRecipient #> param( [Parameter(Mandatory=$true,ValueFromPipeline=$true)] [string] $RecipientId ) try { try { $isError = [GUID]::Parse($RecipientId) } catch { Write-Warning "RecipientId is not a valid GUID format. To obtain the RecipientId, please run Get-FastTrackMigrationRecipient to retrieve a list of all recipients." return } if($global:MsoAdminProperties.Count -eq 0) { Write-Warning "Unable to retrieve Office 365 credentials! :: Please call [Login-FastTrackAccount] function." return } $jsonObj = SetIdentityRecipientValues $serializedJson = $jsonObj | ConvertTo-Json -Compress: $true $header = @{} if($global:v2FeatureFlag -eq $true){ $header.Add("Authorization", $global:MsoAdminProperties["AuthorizationResult"].CreateAuthorizationHeader())} else{ $header.Add("ACCESS_TOKEN",$global:MsftAccessToken)} $header.Add("TENANT_ID",$global:MsoAdminProperties["MSO-CompanyTenantInfo"]) Write-Host "Sending Recipient Delete Request..." $JsonResult = Invoke-DeleteRequest -Uri ([System.String]::Format("{0}Recipient/{1}", $global:CsiApiBaseUriFormat, $RecipientId)) -Headers $header -Body $serializedJson if($JsonResult.StatusCode -ne $null) { Write-Warning "Request failed! : $($JsonResult.StatusCode) - Error Message: $($JsonResult)" } else { Waiting-TransactionComplete -TransactionID ($JsonResult.TransactionId) } } catch { Write-Warning -Message: $_.Exception.Message Write-Host "Press the [enter] key to close this process" Read-Host } } function Clear-FastTrackMigrationRecipients{ <# .SYNOPSIS Allow for the deletion of multiple recipients .DESCRIPTION This PowerShell is to allow a user to select and delete multiple recipients for a customer #> $recipientIdentifier = ( Get-FastTrackMigrationRecipient | Out-GridView -Title "Select recipient(s) to remove (Cancel to abort)" -PassThru).RecipientIdentifier foreach ($recipientUser in $recipientIdentifier) {Remove-FastTrackMigrationRecipient -RecipientId $recipientUser } } # SIG # Begin signature block # MIIkWAYJKoZIhvcNAQcCoIIkSTCCJEUCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCHEsYqLY9K2jPK # 0vd75UX3nKj8A4wcAJoiEF+EC+EOj6CCDYEwggX/MIID56ADAgECAhMzAAABA14l # HJkfox64AAAAAAEDMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD # VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p # bmcgUENBIDIwMTEwHhcNMTgwNzEyMjAwODQ4WhcNMTkwNzI2MjAwODQ4WjB0MQsw # CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u # ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB # AQDRlHY25oarNv5p+UZ8i4hQy5Bwf7BVqSQdfjnnBZ8PrHuXss5zCvvUmyRcFrU5 # 3Rt+M2wR/Dsm85iqXVNrqsPsE7jS789Xf8xly69NLjKxVitONAeJ/mkhvT5E+94S # nYW/fHaGfXKxdpth5opkTEbOttU6jHeTd2chnLZaBl5HhvU80QnKDT3NsumhUHjR # hIjiATwi/K+WCMxdmcDt66VamJL1yEBOanOv3uN0etNfRpe84mcod5mswQ4xFo8A # DwH+S15UD8rEZT8K46NG2/YsAzoZvmgFFpzmfzS/p4eNZTkmyWPU78XdvSX+/Sj0 # NIZ5rCrVXzCRO+QUauuxygQjAgMBAAGjggF+MIIBejAfBgNVHSUEGDAWBgorBgEE # AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQUR77Ay+GmP/1l1jjyA123r3f3QP8w # UAYDVR0RBEkwR6RFMEMxKTAnBgNVBAsTIE1pY3Jvc29mdCBPcGVyYXRpb25zIFB1 # ZXJ0byBSaWNvMRYwFAYDVQQFEw0yMzAwMTIrNDM3OTY1MB8GA1UdIwQYMBaAFEhu # ZOVQBdOCqhc3NyK1bajKdQKVMFQGA1UdHwRNMEswSaBHoEWGQ2h0dHA6Ly93d3cu # bWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY0NvZFNpZ1BDQTIwMTFfMjAxMS0w # Ny0wOC5jcmwwYQYIKwYBBQUHAQEEVTBTMFEGCCsGAQUFBzAChkVodHRwOi8vd3d3 # Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY0NvZFNpZ1BDQTIwMTFfMjAx # MS0wNy0wOC5jcnQwDAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQsFAAOCAgEAn/XJ # Uw0/DSbsokTYDdGfY5YGSz8eXMUzo6TDbK8fwAG662XsnjMQD6esW9S9kGEX5zHn # wya0rPUn00iThoj+EjWRZCLRay07qCwVlCnSN5bmNf8MzsgGFhaeJLHiOfluDnjY # DBu2KWAndjQkm925l3XLATutghIWIoCJFYS7mFAgsBcmhkmvzn1FFUM0ls+BXBgs # 1JPyZ6vic8g9o838Mh5gHOmwGzD7LLsHLpaEk0UoVFzNlv2g24HYtjDKQ7HzSMCy # RhxdXnYqWJ/U7vL0+khMtWGLsIxB6aq4nZD0/2pCD7k+6Q7slPyNgLt44yOneFuy # bR/5WcF9ttE5yXnggxxgCto9sNHtNr9FB+kbNm7lPTsFA6fUpyUSj+Z2oxOzRVpD # MYLa2ISuubAfdfX2HX1RETcn6LU1hHH3V6qu+olxyZjSnlpkdr6Mw30VapHxFPTy # 2TUxuNty+rR1yIibar+YRcdmstf/zpKQdeTr5obSyBvbJ8BblW9Jb1hdaSreU0v4 # 6Mp79mwV+QMZDxGFqk+av6pX3WDG9XEg9FGomsrp0es0Rz11+iLsVT9qGTlrEOla # P470I3gwsvKmOMs1jaqYWSRAuDpnpAdfoP7YO0kT+wzh7Qttg1DO8H8+4NkI6Iwh # SkHC3uuOW+4Dwx1ubuZUNWZncnwa6lL2IsRyP64wggd6MIIFYqADAgECAgphDpDS # 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/BvW1taslScxMNelDNMYIWLTCCFikCAQEwgZUwfjELMAkG # A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx # HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEoMCYGA1UEAxMfTWljcm9z # b2Z0IENvZGUgU2lnbmluZyBQQ0EgMjAxMQITMwAAAQNeJRyZH6MeuAAAAAABAzAN # BglghkgBZQMEAgEFAKCBrjAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgor # BgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkqhkiG9w0BCQQxIgQg34TOnV8M # 686sinhHvWA9PtjcmvTovuxGEdquITK9he8wQgYKKwYBBAGCNwIBDDE0MDKgFIAS # AE0AaQBjAHIAbwBzAG8AZgB0oRqAGGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbTAN # BgkqhkiG9w0BAQEFAASCAQCBg9JtKhOrnQ03e3+Qn6jdRwWh+G/xwn3hfSnNdTxy # Ks6Kcc1XdD9QX6HfwE38iuFwpoie9DOoTZUh/CQq11wa9Q4dQR9WuzFRB/eGnfve # Z8qbW1PPK9xNmriJkW3Q6H6giyeklZdbVqOaip1v2CfgGxG1Xh2Vsmml3uzSLy6q # ilRvLK5fL4NWooq9EYANd3Aue1oajOeD4pxs44UHJ2+ywzgCadwSjXSuH6EvpbhT # OryP7/ARKeZQQuZhaHjR/v31+pweVG4DhTuD/b5rmF6WmIphvHdojXiuqdzzm1lA # HxyzIQF28E4eZooNqq8eaqItoapnss/a/obtxAfDTQBQoYITtzCCE7MGCisGAQQB # gjcDAwExghOjMIITnwYJKoZIhvcNAQcCoIITkDCCE4wCAQMxDzANBglghkgBZQME # AgEFADCCAVgGCyqGSIb3DQEJEAEEoIIBRwSCAUMwggE/AgEBBgorBgEEAYRZCgMB # MDEwDQYJYIZIAWUDBAIBBQAEIG+sOO3o35mIKKnJ7nY0Pvcf7zNHwj7El4jPKw3S # NFZlAgZcSi285GAYEzIwMTkwMjA2MTgzMDU1LjUyMVowBwIBAYACAfSggdSkgdEw # gc4xCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS # ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKTAnBgNVBAsT # IE1pY3Jvc29mdCBPcGVyYXRpb25zIFB1ZXJ0byBSaWNvMSYwJAYDVQQLEx1UaGFs # ZXMgVFNTIEVTTjozMUM1LTMwQkEtN0M5MTElMCMGA1UEAxMcTWljcm9zb2Z0IFRp # bWUtU3RhbXAgU2VydmljZaCCDx8wggT1MIID3aADAgECAhMzAAAAzabbOK+9LUEA # AAAAAADNMA0GCSqGSIb3DQEBCwUAMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpX # YXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg # Q29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAy # MDEwMB4XDTE4MDgyMzIwMjYyNloXDTE5MTEyMzIwMjYyNlowgc4xCzAJBgNVBAYT # AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYD # VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKTAnBgNVBAsTIE1pY3Jvc29mdCBP # cGVyYXRpb25zIFB1ZXJ0byBSaWNvMSYwJAYDVQQLEx1UaGFsZXMgVFNTIEVTTjoz # MUM1LTMwQkEtN0M5MTElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2Vy # dmljZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALIajsUUtFeCVgqu # 0PezmWTxSr1SBomjYc5Xeo1FuiVJKzZSkluQOg+OV2oZFN9lAEfgg/IMs0DgKzcC # uOOmSj5op694z7bo8knqBC5VHeoMYkqjtkeeYvoRnCr+ZyQZp4KTZmsisyQQgkqy # AWcjSt4P3a+jZ4DBTXzi6p2sUCiVyU0lQM0kqrBahXMI+aEHdVoGciFCVH6O4iTJ # 9NuQqykOtOXbyJlbsUtrlIwkvfpVHQWxZ01vW9l3UG3CMI+EgLdItETnTskAktJP # EPUvs98XfjVxgVRquXbhQpXKi4ECFZCzbym7H1axvPtoHnLGc/+avXtPcXvcQIQ5 # yBbbsdsCAwEAAaOCARswggEXMB0GA1UdDgQWBBS4HfRi4voKkipXIDEE2dC+yfIC # DjAfBgNVHSMEGDAWgBTVYzpcijGQ80N7fEYbxTNoWoVtVTBWBgNVHR8ETzBNMEug # SaBHhkVodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9N # aWNUaW1TdGFQQ0FfMjAxMC0wNy0wMS5jcmwwWgYIKwYBBQUHAQEETjBMMEoGCCsG # AQUFBzAChj5odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Rp # bVN0YVBDQV8yMDEwLTA3LTAxLmNydDAMBgNVHRMBAf8EAjAAMBMGA1UdJQQMMAoG # CCsGAQUFBwMIMA0GCSqGSIb3DQEBCwUAA4IBAQBCQgAqKI99wPi5IOcedjU8nrBa # QgXQYfjwLEM97A8I7l5Ai6IFywbXku39yQFrON0nBCrbSTULrLy/CuNJU7SGvyr6 # fPp3UFagLxeLKZNApqgZR8YE9mTO9jLSqmPuCGjrJHR4oiNGvqmPIrFstX2l0gcd # +xFG1nvyQt+BmlHTAwLr7w+HaGTstsQT+ckpaplkOTV0dXfRYo+iRLXb5aKbCimg # qih0G2TK90Z1DcdbNhAXD1reTve1N5TUrTnyBeVpeaEmGn8uwRRMDpdJMWkYfn5W # JOBZPDJxcAe53rytSKheRqHvhMNM7b/fzlJ1NlrbR9ad+7vwIGw5yH2q1B+dMIIG # 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+NR4Iuto229Nfj950iEkSoYIDrTCCApUCAQEwgf6hgdSkgdEwgc4xCzAJBgNV # BAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4w # HAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKTAnBgNVBAsTIE1pY3Jvc29m # dCBPcGVyYXRpb25zIFB1ZXJ0byBSaWNvMSYwJAYDVQQLEx1UaGFsZXMgVFNTIEVT # TjozMUM1LTMwQkEtN0M5MTElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAg # U2VydmljZaIlCgEBMAkGBSsOAwIaBQADFQCA9et0fWDvdjapvx/uKopPPxqnI6CB # 3jCB26SB2DCB1TELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAO # BgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEp # MCcGA1UECxMgTWljcm9zb2Z0IE9wZXJhdGlvbnMgUHVlcnRvIFJpY28xJzAlBgNV # BAsTHm5DaXBoZXIgTlRTIEVTTjo0REU5LTBDNUUtM0UwOTErMCkGA1UEAxMiTWlj # cm9zb2Z0IFRpbWUgU291cmNlIE1hc3RlciBDbG9jazANBgkqhkiG9w0BAQUFAAIF # AOAFSQAwIhgPMjAxOTAyMDYxOTUyMzJaGA8yMDE5MDIwNzE5NTIzMlowdDA6Bgor # BgEEAYRZCgQBMSwwKjAKAgUA4AVJAAIBADAHAgEAAgICpjAHAgEAAgIcnDAKAgUA # 4AaagAIBADA2BgorBgEEAYRZCgQCMSgwJjAMBgorBgEEAYRZCgMBoAowCAIBAAID # FuNgoQowCAIBAAIDB6EgMA0GCSqGSIb3DQEBBQUAA4IBAQBA0ENjaNxNI1yzzqM4 # T8Oi+YIBU3NlsNwCD9JhfXeI6NiZv1zwzNxS2M3KlLrN118uewTk3a9STlntCwuV # aROXkTXjofbvxVq8CmvuMtWFUrHdupBNsCiO/1TV6EFdlktuyyCoufR51p4RYs55 # GaKJr0ljVHolB5C4Qy/P5buV4mZLHt5ROANeoTK9kKxMA1aAUgBjDyDwXlx+TBnF # OfrKDMqdYknj+jICyDlVf1I9/RgnkvixWFswckNfSUd7sbqcemN8nRXF/seiNmky # qVwNFnX7WRGX11zvCHhmb0Y6R1kBkgZj6qTFICYDxZSdcaK7ghW+nU+Ivt7bLQAL # C1psMYIC9TCCAvECAQEwgZMwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp # bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw # b3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAC # EzMAAADNpts4r70tQQAAAAAAAM0wDQYJYIZIAWUDBAIBBQCgggEyMBoGCSqGSIb3 # DQEJAzENBgsqhkiG9w0BCRABBDAvBgkqhkiG9w0BCQQxIgQg7cQWByqzXPC9uViC # Wd6sTc2xbI6bngdr8ErluLk1x5wwgeIGCyqGSIb3DQEJEAIMMYHSMIHPMIHMMIGx # BBSA9et0fWDvdjapvx/uKopPPxqnIzCBmDCBgKR+MHwxCzAJBgNVBAYTAlVTMRMw # EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN # aWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0 # YW1wIFBDQSAyMDEwAhMzAAAAzabbOK+9LUEAAAAAAADNMBYEFKzqnWmkBWHKdSIl # 0bNmAv+HC5daMA0GCSqGSIb3DQEBCwUABIIBAHlnPgKu0dcU7W4avCBlftKLwPjY # YPx0yqXUXzasLlSaNiUIB7HqIb3hyNHEGbpiLGp4qjEPFYcB8gV3v2wpi1r07fpY # tKCyRM8NXRQ90g5SeLKexZSoN1EX/SiZf7IzmtsFdvCUvFcjO3eW51GQBsu7Ancb # pCdk2AeSMdK+5l6nbMKtpVG3W8u5H9CLQ7HsDCghwzB7oIJ1YF3pVSIxcxraVjon # +XB3tsvDZbEhqF8KLdKISkjv4O7H1xY6q3cbClToJ7sP7ZS0QEvymhWPCXyFj+PE # oB3D4NXcqFq+tANMDk/PvKnWw/K13l90YJXx8cgcuWYIV7i7FjevTWzF1h8= # SIG # End signature block |