Utilities/DLPValidationUtility.ps1
using module "..\MCCA.psm1" $ExchangeString = "Exchange" $SharePointString = "SharePoint" $OneDriveString = "OneDrive" $TeamsString = "Teams" $DevicesString = "Devices" Function Get-DLPPolicyValidation { Param ( $SensitiveTypes, $Config, $LogFile, $Name ) $ConfigObjectList = @() try { $SensitiveTypesWorkloadMapping = @() foreach ($SIT in $SensitiveTypes.keys) { $SensitiveTypesWorkloadMapping += New-Object -TypeName PSObject @{ Name = $SIT $ExchangeString = $false $SharePointString = $false $OneDriveString = $false $TeamsString = $false $DevicesString = $false } } #Getting Custom SIT if($($Config["GetDLPCustomSIT"]) -ne "Error") { $CustomSIT = $($Config["GetDLPCustomSIT"]).Name $CustomSITHashTable = @{} foreach($SIT in $CustomSIT) { $CustomSITHashTable[$SIT] = $null } } ForEach ($CompliancePolicy in $Config["GetDlpCompliancePolicy"]) { $PolicySensitiveType = New-Object System.Collections.Generic.HashSet[String] $PolicySensitiveType = Get-PolicySensitiveType -Config $Config -CompliancePolicy $CompliancePolicy -SensitiveTypes $SensitiveTypes if($($Config["GetDLPCustomSIT"]) -ne "Error") { $CustomSensitiveType = Get-PolicySensitiveType -Config $Config -CompliancePolicy $CompliancePolicy -SensitiveTypes $CustomSITHashTable $CustomSensitiveTypeText = $null foreach ($SIT in $CustomSensitiveType) { if ($null -ne $CustomSensitiveTypeText) { $CustomSensitiveTypeText += ", $SIT" } else { $CustomSensitiveTypeText += "$SIT" } } } if (($CompliancePolicy.Mode -ieq "enable") ) { $WorkloadsStatus = Get-AllLocationenabled -CompliancePolicy $CompliancePolicy $EnabledWorkload = $null $DisabledWorkload = "" $PolicySensitiveTypeText = $null foreach ($Workload in ($WorkloadsStatus.Keys | Sort-Object -CaseSensitive)) { if ($WorkloadsStatus[$Workload] -eq $true) { if ( $null -ne $EnabledWorkload) { $EnabledWorkload += ", $($Workload)" } else { $EnabledWorkload += "$($Workload)" } foreach ($SIT in $PolicySensitiveType) { if ($SITToChange = $SensitiveTypesWorkloadMapping | Where-Object { $_.Name -eq $SIT }) { $SITToChange.$($Workload) = $true } } } else { $DisabledWorkload += "$($Workload) " } } foreach ($SIT in $PolicySensitiveType) { if ($null -ne $PolicySensitiveTypeText) { $PolicySensitiveTypeText += ", $SIT" } else { $PolicySensitiveTypeText += "$SIT" } } If ($PolicySensitiveType.Count -ne 0 ) { $ConfigObject = [MCCACheckConfig]::new() $Workload = $CompliancePolicy.Workload $ConfigObject.Object = "$($CompliancePolicy.Name)" if($null -eq $CustomSensitiveTypeText) { $ConfigObject.ConfigItem = "$PolicySensitiveTypeText" } else { $ConfigObject.ConfigItem = "$PolicySensitiveTypeText<br><strong>Custom SIT</strong> : $CustomSensitiveTypeText" } $ConfigData = "" $ConfigObjectResult = @{} $ConfigObjectResult = Set-ExchangeNotAllLocationEnabledConfigObject -ConfigObjectResult $ConfigObjectResult -CompliancePolicy $CompliancePolicy $ConfigObjectResult = Set-SharePointNotAllLocationEnabledConfigObject -ConfigObjectResult $ConfigObjectResult -CompliancePolicy $CompliancePolicy $ConfigObjectResult = Set-OneDriveNotAllLocationEnabledConfigObject -ConfigObjectResult $ConfigObjectResult -CompliancePolicy $CompliancePolicy $ConfigObjectResult = Set-TeamsNotAllLocationEnabledConfigObject -ConfigObjectResult $ConfigObjectResult -CompliancePolicy $CompliancePolicy $ConfigObjectResult = Set-DevicesNotAllLocationEnabledConfigObject -ConfigObjectResult $ConfigObjectResult -CompliancePolicy $CompliancePolicy $ConfigData = "<strong>Enabled Workloads </strong>: $($EnabledWorkload)<BR/>" foreach ($ConfigResult in $ConfigObjectResult.keys) { $ConfigData += "<strong>$ConfigResult </strong>: $($ConfigObjectResult[$ConfigResult])<BR/>" } $NotInOrganizationAccessScope = $Config["GetDlpComplianceRule"] | Where-Object {$_.AccessScope -eq "NotInOrganization" -and $_.ParentPolicyName -eq "$($CompliancePolicy.Name)"} if($null -ne $NotInOrganizationAccessScope) { $ConfigData += "<strong>Access Scope</strong>: For users outside organization<BR/>" }else{ $ConfigData += "<strong>Access Scope</strong>: For users inside organization<BR/>" } $ConfigObject.ConfigData = "$ConfigData" $ConfigObject.SetResult([MCCAConfigLevel]::Informational, "Pass") $ConfigObjectList += $ConfigObject } } else { If ($PolicySensitiveType.Count -ne 0 ) { $ConfigObject = [MCCACheckConfig]::new() $Workload = $CompliancePolicy.Workload $ConfigObject.Object = "$($CompliancePolicy.Name)" $PolicySensitiveTypeText = $null foreach ($SIT in $PolicySensitiveType) { if ($null -ne $PolicySensitiveTypeText) { $PolicySensitiveTypeText += ", $SIT" } else { $PolicySensitiveTypeText += "$SIT" } } if($null -eq $CustomSensitiveTypeText) { $ConfigObject.ConfigItem = "$PolicySensitiveTypeText" } else { $ConfigObject.ConfigItem = "$PolicySensitiveTypeText<br><strong>Custom SIT</strong> : $CustomSensitiveTypeText" } $Mode = $($CompliancePolicy.Mode) if ( $Mode -eq "TestWithoutNotifications") { $Mode = "test without notifications" } elseif ($Mode -eq "Disable") { $Mode = "disabled" } elseif ( $Mode -eq "TestWithNotifications") { $Mode = "test with notifications" } $ConfigObject.ConfigData = "<B>Policy is in $Mode state.<B>" $ConfigObject.SetResult([MCCAConfigLevel]::Informational, "Pass") $ConfigObjectList += $ConfigObject } } } $ConfigObjectList = Get-SensitiveTypesNotEnabled -SensitiveTypesWorkloadMapping $SensitiveTypesWorkloadMapping -ConfigObjectList $ConfigObjectList -LogFile $LogFile } catch { Write-Host "Error:$(Get-Date) There was an issue while running MCCA. Please try running the tool again after some time." -ForegroundColor:Red $ErrorMessage = $_.ToString() $StackTraceInfo = $_.ScriptStackTrace Write-Log -IsError -ErrorMessage $ErrorMessage -StackTraceInfo $StackTraceInfo -LogFile $LogFile -ErrorAction:SilentlyContinue } Return $ConfigObjectList } Function Get-NoPolicyRemediationAction { [CmdletBinding()] Param ( $Name, $PendingSensitiveTypes ) $RemediationActionScript = "" $PendingSensitiveTypesList = $PendingSensitiveTypes.split(",") $LowCountSenstiveinfodetails = "" $HighCountSenstiveinfodetails = "" foreach ($PendingSensitiveType in $PendingSensitiveTypesList) { $PendingSensitiveTypetrim = $PendingSensitiveType.trim() if ( $LowCountSenstiveinfodetails -eq "") { $LowCountSenstiveinfodetails += "@{Name =" + [char]34 $HighCountSenstiveinfodetails += "@{Name =" + [char]34 } else { $LowCountSenstiveinfodetails += ",@{Name =" + [char]34 $HighCountSenstiveinfodetails += ",@{Name =" + [char]34 } $LowCountSenstiveinfodetails += $PendingSensitiveTypetrim + [char]34 $LowCountSenstiveinfodetails += ";minCount = ""1""" $LowCountSenstiveinfodetails += ";maxCount = ""5""}" $HighCountSenstiveinfodetails += $PendingSensitiveTypetrim + [char]34 $HighCountSenstiveinfodetails += ";minCount = ""6""}" } $NewPolicyTemplateData = Get-Content "$PSScriptRoot\..\Templates\NewDLPPolicyTemplate.txt" if ($null -eq $NewPolicyTemplateData -or $NewPolicyTemplateData -eq "") { Write-Host "$(Get-Date) Template file does not exist/is corrupt in $PSScriptRoot\..\Templates\NewDLPPolicyTemplate.txt. Remediation wont be generated" -ForegroundColor Orange } else { $NewPolicyTemplateData = $NewPolicyTemplateData.Replace("<NewPolicyName>", "$Name") $NewPolicyTemplateData = $NewPolicyTemplateData.Replace("<HighSensitiveInfoDetails>", "$HighCountSenstiveinfodetails") $NewPolicyTemplateData = $NewPolicyTemplateData.Replace("<LowSensitiveInfoDetails>", "$LowCountSenstiveinfodetails") $LowRuleName = "Low Volume $Name" if ($LowRuleName.length -gt 60) { $LowRuleName = $LowRuleName.substring(0, 60) } $HighRuleName = "High Volume $Name" if ($HighRuleName.length -gt 60) { $HighRuleName = $HighRuleName.substring(0, 60) } $NewPolicyTemplateData = $NewPolicyTemplateData.Replace("<HighVolumeRuleName>", "$HighRuleName") $NewPolicyTemplateData = $NewPolicyTemplateData.Replace("<LowVolumeRuleName>", "$LowRuleName") $RemediationActionScript += $NewPolicyTemplateData Write-Host "$(Get-Date) Generating Remediation Action for $Name" -ForegroundColor Yellow } Return $RemediationActionScript } Function Get-PolicySensitiveType { Param ( $Config, $CompliancePolicy, $SensitiveTypes ) $PolicySensitiveTypes = New-Object System.Collections.Generic.HashSet[String] foreach ($ComplianceRule in $Config["GetDlpComplianceRule"]) { if ($ComplianceRule.Mode -ieq "enforce" -and $CompliancePolicy.name -eq $($ComplianceRule.ParentPolicyName) ) { $SensitiveInformationContent = $ComplianceRule.ContentContainsSensitiveInformation foreach ($SensitiveType in $($SensitiveTypes.keys)) { if ($SensitiveInformationContent.Values -contains $SensitiveType) { if (!$PolicySensitiveTypes.Contains($SensitiveType)) { $PolicySensitiveTypes.Add("$SensitiveType") | Out-Null } } if ($($SensitiveInformationContent.keys) -contains "groups") { foreach ($SensitiveInformationGroupList in $SensitiveInformationContent) { $SensitiveInformationGroups = $SensitiveInformationGroupList["groups"] foreach ($SensitiveInformationGroupDefined in $SensitiveInformationGroups) { $SensitiveInformationGroupDefinedValues = $SensitiveInformationGroupDefined.Values foreach ($SensitiveInformationGroupValue in $SensitiveInformationGroupDefinedValues) { foreach ($SensitiveInformationGroupVal in $SensitiveInformationGroupValue) { if ($SensitiveInformationGroupVal.Values -contains $SensitiveType ) { if (!$PolicySensitiveTypes.Contains($SensitiveType)) { $PolicySensitiveTypes.Add("$SensitiveType") | Out-Null } } } } } } } } } } Return $PolicySensitiveTypes } Function Get-SensitiveTypesNotEnabled { Param ( $SensitiveTypesWorkloadMapping, $LogFile, $ConfigObjectList ) $PendingSensitiveType = $null $PartialCoveredSIT = $null $PartialCoveredWorkload = $null foreach ($SensitiveTypes in $SensitiveTypesWorkloadMapping) { if (($SensitiveTypes.$ExchangeString -eq $false ) -and ($SensitiveTypes.$SharePointString -eq $false ) -and ($SensitiveTypes.$TeamsString -eq $false ) -and ($SensitiveTypes.$OneDriveString -eq $false ) -and ($SensitiveTypes.$DevicesString -eq $false ) ) { $PendingSensitiveType = Get-PartialSIT -PartialCoveredSIT $PendingSensitiveType -SensitiveTypesName $($SensitiveTypes.Name) } else { if ($SensitiveTypes.$ExchangeString -eq $false ) { $PartialCoveredSIT = Get-PartialSIT -PartialCoveredSIT $PartialCoveredSIT -SensitiveTypesName $($SensitiveTypes.Name) $PartialCoveredWorkload = Get-PartialSITWorkLoad -PartialCoveredWorkload $PartialCoveredWorkload -WorkloadName $ExchangeString } if ($SensitiveTypes.$SharePointString -eq $false ) { $PartialCoveredSIT = Get-PartialSIT -PartialCoveredSIT $PartialCoveredSIT -SensitiveTypesName $($SensitiveTypes.Name) $PartialCoveredWorkload = Get-PartialSITWorkLoad -PartialCoveredWorkload $PartialCoveredWorkload -WorkloadName $SharePointString } if ($SensitiveTypes.$OneDriveString -eq $false ) { $PartialCoveredSIT = Get-PartialSIT -PartialCoveredSIT $PartialCoveredSIT -SensitiveTypesName $($SensitiveTypes.Name) $PartialCoveredWorkload = Get-PartialSITWorkLoad -PartialCoveredWorkload $PartialCoveredWorkload -WorkloadName $OneDriveString } if ($SensitiveTypes.$TeamsString -eq $false ) { $PartialCoveredSIT = Get-PartialSIT -PartialCoveredSIT $PartialCoveredSIT -SensitiveTypesName $($SensitiveTypes.Name) $PartialCoveredWorkload = Get-PartialSITWorkLoad -PartialCoveredWorkload $PartialCoveredWorkload -WorkloadName $TeamsString } if ($SensitiveTypes.$DevicesString -eq $false ) { $PartialCoveredSIT = Get-PartialSIT -PartialCoveredSIT $PartialCoveredSIT -SensitiveTypesName $($SensitiveTypes.Name) $PartialCoveredWorkload = Get-PartialSITWorkLoad -PartialCoveredWorkload $PartialCoveredWorkload -WorkloadName $DevicesString } } } if ($null -ne $PartialCoveredSIT) { $ConfigObject = [MCCACheckConfig]::new() $ConfigObject.Object = "<B>Policy defined but not protected on 1 or more workloads<B>" $ConfigObject.ConfigItem = "$PartialCoveredSIT" $ConfigObject.ConfigData = "<b>Affected Workloads</B> : $PartialCoveredWorkload" $ConfigObject.SetResult([MCCAConfigLevel]::Ok, "Fail") $ConfigObjectList += $ConfigObject } if ($null -ne $PendingSensitiveType) { $ConfigObject = [MCCACheckConfig]::new() $ConfigObject.Object = "<B>No active policy defined<B>" $ConfigObject.ConfigItem = "$PendingSensitiveType" $ConfigObject.ConfigData = "<b>Affected Workloads</B> : $ExchangeString, $SharePointString, $TeamsString, $OneDriveString, $DevicesString" $ConfigObject.InfoText ="It is recommended that you set up DLP policies that block access for users external to your organization for all Sensitive Information Types on all workloads." try { $ConfigObject.RemediationAction = Get-NoPolicyRemediationAction -Name $Name -PendingSensitiveTypes $PendingSensitiveType -ErrorAction:SilentlyContinue } catch { Write-Host "Warning:$(Get-Date) There was an issue in generating remediation script. Please review the script closely before running the same." -ForegroundColor:Yellow $ErrorMessage = $_.ToString() $StackTraceInfo = $_.ScriptStackTrace Write-Log -IsError -ErrorMessage $ErrorMessage -StackTraceInfo $StackTraceInfo -LogFile $LogFile -ErrorAction:SilentlyContinue } $ConfigObject.SetResult([MCCAConfigLevel]::Ok, "Fail") $ConfigObjectList += $ConfigObject } Return $ConfigObjectList } function Get-PartialSIT { Param ( $PartialCoveredSIT, $SensitiveTypesName ) if ((@($PartialCoveredSIT) -like "*$SensitiveTypesName*").Count -le 0) { if ($null -eq $PartialCoveredSIT) { $PartialCoveredSIT += "$SensitiveTypesName" } else { $PartialCoveredSIT += ", $SensitiveTypesName" } } return $PartialCoveredSIT } function Get-PartialSITWorkLoad { Param ( $PartialCoveredWorkload, $WorkloadName ) if ((@($PartialCoveredWorkload) -like "*$WorkloadName*").Count -le 0) { if ($null -eq $PartialCoveredWorkload) { $PartialCoveredWorkload += $WorkloadName } else { $PartialCoveredWorkload += ", $WorkloadName" } } return $PartialCoveredWorkload } Function Get-AllLocationenabled { Param ( $CompliancePolicy ) $ExchangeLocation = $CompliancePolicy.ExchangeLocation $SharePointLocation = $CompliancePolicy.SharePointLocation $OneDriveLocation = $CompliancePolicy.OneDriveLocation $TeamsLocation = $CompliancePolicy.TeamsLocation $EndpointDlpLocation = $CompliancePolicy.EndpointDlpLocation $WorkloadsStatus = @{} $WorkloadsStatus[$ExchangeString] = $false $WorkloadsStatus[$SharePointString] = $false $WorkloadsStatus[$OneDriveString] = $false $WorkloadsStatus[$TeamsString] = $false $WorkloadsStatus[$DevicesString] = $false if ((@($ExchangeLocation) -like 'All').Count -gt 0) { $WorkloadsStatus[$ExchangeString] = $true } if ((@($SharePointLocation) -like 'All').Count -gt 0) { $WorkloadsStatus[$SharePointString] = $true } if ((@($OneDriveLocation) -like 'All').Count -gt 0) { $WorkloadsStatus[$OneDriveString] = $true } if ((@($TeamsLocation) -like 'All').Count -gt 0) { $WorkloadsStatus[$TeamsString] = $true } if ((@($EndpointDlpLocation) -like 'All').Count -gt 0) { $WorkloadsStatus[$DevicesString] = $true } Return $WorkloadsStatus } Function Set-ExchangeNotAllLocationEnabledConfigObject { Param ( $ConfigObjectResult, $CompliancePolicy ) $ExchangeLocation = $CompliancePolicy.ExchangeLocation $ExchangeSenderException = $CompliancePolicy.ExchangeSenderException $ExchangeSenderMemberOf = $CompliancePolicy.ExchangeSenderMemberOf $ExchangeSenderMemberOfException = $CompliancePolicy.ExchangeSenderMemberOfException if (((@($ExchangeLocation) -like 'All').Count -lt 1)) { if (@($ExchangeLocation).count -ne 0) { $ConfigObjectResult["Included Exchange Groups"] += "$ExchangeLocation " } } if ($ExchangeSenderMemberOf.count -ne 0) { if ($ConfigObjectResult.contains("Included Exchange Groups")) { $ConfigObjectResult["Included Exchange Groups"] += ", $ExchangeSenderMemberOf " } else { $ConfigObjectResult["Included Exchange Groups"] = "$ExchangeSenderMemberOf " } } if (($ExchangeSenderMemberOfException.count -ne 0) -or ($ExchangeSenderException.count -ne 0) ) { $ConfigObjectResult["Excluded Exchange Groups"] += "$ExchangeSenderMemberOfException $ExchangeSenderException " } Return $ConfigObjectResult } function Set-SharePointNotAllLocationEnabledConfigObject { Param ( $ConfigObjectResult, $CompliancePolicy ) $SharePointLocation = $CompliancePolicy.SharePointLocation $SharePointLocationException = $CompliancePolicy.SharePointLocationException $SharePointOnPremisesLocationException = $CompliancePolicy.SharePointOnPremisesLocationException if (((@($SharePointLocation) -like 'All').Count -lt 1)) { if (@($SharePointLocation).count -ne 0) { $ConfigObjectResult["Included SP Sites"] += "$SharePointLocation " } } if (($SharePointLocationException.count -ne 0) -or ($SharePointOnPremisesLocationException.count -ne 0)) { $ConfigObjectResult["Excluded SP Sites"] += "$SharePointLocationException $SharePointOnPremisesLocationException " } Return $ConfigObjectResult } function Set-TeamsNotAllLocationEnabledConfigObject { Param ( $ConfigObjectResult, $CompliancePolicy ) $TeamsLocation = $CompliancePolicy.TeamsLocation $TeamsLocationException = $CompliancePolicy.TeamsLocationException if (((@($TeamsLocation) -like 'All').Count -lt 1)) { if (@($TeamsLocation).count -ne 0) { $ConfigObjectResult["Included Teams Account"] += "$TeamsLocation" } } if (($TeamsLocationException.count -ne 0)) { $ConfigObjectResult["Excluded Teams Account"] += "$TeamsLocationException" } Return $ConfigObjectResult } function Set-OneDriveNotAllLocationEnabledConfigObject { Param ( $ConfigObject, $PolicySensitiveType, $CompliancePolicy ) $OneDriveLocation = $CompliancePolicy.OneDriveLocation $OneDriveLocationException = $CompliancePolicy.OneDriveLocationException $ExceptIfOneDriveSharedByMemberOf = $CompliancePolicy.ExceptIfOneDriveSharedByMemberOf if (((@($OneDriveLocation) -like 'All').Count -lt 1)) { if (@($OneDriveLocation).count -ne 0) { $ConfigObjectResult["Included OneDrive Account"] += "$OneDriveLocation" } } if (($OneDriveLocationException.count -ne 0) -or ($ExceptIfOneDriveSharedByMemberOf.count -ne 0)) { $ConfigObjectResult["Excluded OneDrive Account"] += "$OneDriveLocationException $ExceptIfOneDriveSharedByMemberOf" } Return $ConfigObjectResult } function Set-DevicesNotAllLocationEnabledConfigObject { Param ( $ConfigObject, $PolicySensitiveType, $CompliancePolicy ) $EndpointDlpLocation = $CompliancePolicy.EndpointDlpLocation $EndpointDlpLocationException = $CompliancePolicy.EndpointDlpLocationException if (((@($EndpointDlpLocation) -like 'All').Count -lt 1)) { if (@($EndpointDlpLocation).count -ne 0) { $ConfigObjectResult["Included Devices User/Groups"] += "$EndpointDlpLocation" } } if (($EndpointDlpLocationException.count -ne 0)) { $ConfigObjectResult["Excluded Devices User/Groups"] += "$EndpointDlpLocationException" } Return $ConfigObjectResult } # SIG # Begin signature block # MIIhkgYJKoZIhvcNAQcCoIIhgzCCIX8CAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBzCiwQmH0gTqrc # gd8MT1NHhoROilROYYO+9DNZMq3Ps6CCC4QwggUAMIID6KADAgECAhMzAAAEU+We # zhfpk+4QAAAAAARTMA0GCSqGSIb3DQEBCwUAMHkxCzAJBgNVBAYTAlVTMRMwEQYD # VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24xIzAhBgNVBAMTGk1pY3Jvc29mdCBUZXN0aW5nIFBD # QSAyMDEwMB4XDTIwMTIxNTE5NDMyN1oXDTIxMTIwMjE5NDMyN1owfDELMAkGA1UE # BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc # BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdQ29kZSBTaWdu # IFRlc3QgKERPIE5PVCBUUlVTVCkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK # AoIBAQDIbLqmXHPCGqCpfikwr9Gwu7mmwKaRk2l2c7HiFdxA4N/5QBm3ZfoonyX/ # oaX3WbsvBD3MoCMZJCYGVJeCkW0Iy0ahCtcxjmCmy9T7g0Du1vR29P+TTghXQ4ZP # fVj+XDxo82IsqpD7uxaa/VujruYpxvYfwRZB11kf0SpaRLae1TvONYQZ/eNifGSx # zUridwIkDPogu1vzsehp1O+SMhv3foM6Rz95ajbWOJMxgooE+LoAapjHe8jDciok # 4jPC/5F5HGbf50i6Wj/QLN3VKLQFsSBzBC1RFqUITmcRP4ngQeDvLpvTluC8KFmy # IlZunmBqGx2ynTmebwVysIa+qV/NAgMBAAGjggF8MIIBeDATBgNVHSUEDDAKBggr # BgEFBQcDAzAdBgNVHQ4EFgQUrvqOOBCgPTy+cAoXZUhGw1P2yF4wUAYDVR0RBEkw # R6RFMEMxKTAnBgNVBAsTIE1pY3Jvc29mdCBPcGVyYXRpb25zIFB1ZXJ0byBSaWNv # MRYwFAYDVQQFEw0yMzAwNzIrNDYzMDE4MB8GA1UdIwQYMBaAFN3WR4sjFC/YOGhC # oz5tw/CQ9yzQMFkGA1UdHwRSMFAwTqBMoEqGSGh0dHA6Ly93d3cubWljcm9zb2Z0 # LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRlc3RpbmclMjBQQ0ElMjAyMDEw # LmNybDBmBggrBgEFBQcBAQRaMFgwVgYIKwYBBQUHMAKGSmh0dHA6Ly93d3cubWlj # cm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVGVzdGluZyUyMFBD # QSUyMDIwMTAuY3J0MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADggEBACnT # 9Iwyq9Jk/Ee6QBrLTjw5+p0XjjxX7Oocz1R/iNdfx7iJtSf4VHWcDGXr92BPQLgl # MOdq6PCrIRstWMg1aBQ4eH9Q6VfiWZq3FyaQNpDG4g/+Z6Zo5A6LgbtEnZB5tboP # ZsE4o0wDlIXX5pGCsCTIiVMtJqbCZPn5hLG5V7wMlLae9A4xOW+JyBy8vA/FpE+A # QQoHSJ4LrC22bwpn2+cQRF5SlFRIqZVx+wclji96Nerfosz2ZPLfydHvs8jH65dA # 2WFAMvN8/KxdX7fp98Bzk+vhCPYc4/CKyPdscD7yJvOxveEAzDiLyyWrnbFU9qP7 # aI/JTxrVA5IGS7wIJKwwggZ8MIIEZKADAgECAgphEYRvAAAAAAADMA0GCSqGSIb3 # DQEBCwUAMIGQMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G # A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTow # OAYDVQQDEzFNaWNyb3NvZnQgVGVzdGluZyBSb290IENlcnRpZmljYXRlIEF1dGhv # cml0eSAyMDEwMB4XDTEwMDcwMTIxMjMwMVoXDTI1MDcwMTIxMzMwMVoweTELMAkG # A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx # HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEjMCEGA1UEAxMaTWljcm9z # b2Z0IFRlc3RpbmcgUENBIDIwMTAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK # AoIBAQDBvSHVS2YGAJIwORjKy3NCWbHvmyeo4OhVvSmw+SQfOtHow1mJ7ZG2wegz # Y/ZaZBniLnwMkIAFOL8cproNai/vJ5er3vbvUPOD59fDRTciPxi1wpYRto0Sg1mL # J1EGVnW5YGoTDtUmPy2WqgXMoYc/vk807wxMb8wE1KHmZ80KJzOf46+bb2h8vLQM # czSMWoH5h/tUHMVHbOqfV7RZ/c4ZqXd8h0KftXmUvMt2ktuWl6FfBCQ5/qGV4Z+G # 417ZXFbfQ5CfyRTq0fWgW6vzCATdKK8b4qouE6AK7dKZRCr1mUT7K6RP8bthwh0t # 9SUnAqh475M59F51ge7S4HYMWyPvAgMBAAGjggHsMIIB6DAQBgkrBgEEAYI3FQEE # AwIBADAdBgNVHQ4EFgQU3dZHiyMUL9g4aEKjPm3D8JD3LNAwGQYJKwYBBAGCNxQC # BAweCgBTAHUAYgBDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHwYD # VR0jBBgwFoAUowEEfjCIM+u5MZzK64V2Z/xltNEwWQYDVR0fBFIwUDBOoEygSoZI # aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvTWljVGVz # Um9vQ2VyQXV0XzIwMTAtMDYtMTcuY3JsMF0GCCsGAQUFBwEBBFEwTzBNBggrBgEF # BQcwAoZBaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNUZXNS # b29DZXJBdXRfMjAxMC0wNi0xNy5jcnQwgaAGA1UdIAEB/wSBlTCBkjCBjwYJKwYB # BAGCNy4DMIGBMD0GCCsGAQUFBwIBFjFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v # UEtJL2RvY3MvQ1BTL2RlZmF1bHQuaHRtMEAGCCsGAQUFBwICMDQeMiAdAEwAZQBn # AGEAbABfAFAAbwBsAGkAYwB5AF8AUwB0AGEAdABlAG0AZQBuAHQALiAdMA0GCSqG # SIb3DQEBCwUAA4ICAQBAYQU+N90ze1LCSGuA92ADFrbJLol+vdlYHGPT9ZLS9loE # DQjuh7/rmDQ6ZXxQ5MgbKVB5VXsYOZG1QSbzF3+YlWd8TN1y5B21BM3DSPb6r+3b # rl50kW2t1JqACtiLbZnmhmh5hkdJi8HYUfLQ7xKcP0g1CIJP9CyKil7UJv/HnMXK # igTGiBaHjfVtVwG5k8roymrEirpBDcOMVB0OZiTXxYIHDbM4v7LItZYIISdPs6+L # wxwzwdroMdpj42+3dWQBumpRGQAgqJ9i5UiBQtUM+9vLpKIRnujnWfQxbaIuIt2H # RLFpHUYKGOXRlf148o+71dX3YWap88+ocaxkM8rkavgDNkcWSe9Dpoq8a3tS2P9B # pxewDV+iSzF0JRo9UOZeciaSQDZvrkQskxJjtdO725L6E5Fu1Ti+lGl6exRCnhPb # ooxCqHEGLRdiwXkrmLp+huTGAK8zmfEt0d1JFrrDdu5kqoG3OVT2dN4JVFNpOFvC # U/LNiVDCyCIcG0cSRVtDjyNckMhu1PcPtberjr1mcL8RkTzvonoH4pIvQk1k4IOL # pdxslOj2oigApZjqCBJA3mIEZHlnwRuglg4Er74nSmL6953C0r1Vwl7T0vXnQO8i # zb+incAb1r6Y+45N5aVXww+PqHJBRjvhjyBKG+1aDLVM3ixjV9P6OZkOvp4uozGC # FWQwghVgAgEBMIGQMHkxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9u # MRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRp # b24xIzAhBgNVBAMTGk1pY3Jvc29mdCBUZXN0aW5nIFBDQSAyMDEwAhMzAAAEU+We # zhfpk+4QAAAAAARTMA0GCWCGSAFlAwQCAQUAoIGwMBkGCSqGSIb3DQEJAzEMBgor # BgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMC8GCSqGSIb3 # DQEJBDEiBCC/j3lQRoGQXJu+WK9SZyPlhDh7SBerQetRB6i148BGdTBEBgorBgEE # AYI3AgEMMTYwNKAUgBIATQBpAGMAcgBvAHMAbwBmAHShHIAaaHR0cHM6Ly93d3cu # bWljcm9zb2Z0LmNvbSAwDQYJKoZIhvcNAQEBBQAEggEAMWecAG+mxo+LL6Zf3vC9 # cy+CkWzMct1KIYQYYjTz7Gqb5+xk6DeHXJrGK4Kaj2lUW8yO0wed90iDYqvM7yHi # ZSowz/3KPcOna4ZiT5AYkd+K8k1BSDF+mhvQrpUhbjzDhAqQIBN+TWgBnrRtl/6N # MqVmHrZqWuNts5wwaQPOwVFINXy5bdP3o/eUwTeUcfR2+ul3+esmQ6TJuMANdy13 # +Be57Z0aMEKxxDc5g5FhQk9ahlwC0y7l4lm9qe0Nv/6SOuUBYgZsVSRtzzC7bUs0 # 3OTuZSWxpBJxdO7jzmrLKE/ugaD6IP71exw29+NgqyiLo+mWptfrH6VltoE8O1s0 # SqGCEvEwghLtBgorBgEEAYI3AwMBMYIS3TCCEtkGCSqGSIb3DQEHAqCCEsowghLG # AgEDMQ8wDQYJYIZIAWUDBAIBBQAwggFVBgsqhkiG9w0BCRABBKCCAUQEggFAMIIB # PAIBAQYKKwYBBAGEWQoDATAxMA0GCWCGSAFlAwQCAQUABCClbavfMkc7ZHUuk+x/ # oXjPDCvy+uoxJs1AanyBwlwAFgIGYNOicZBQGBMyMDIxMDcwOTA2MDk0NS4yMTha # MASAAgH0oIHUpIHRMIHOMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv # bjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0 # aW9uMSkwJwYDVQQLEyBNaWNyb3NvZnQgT3BlcmF0aW9ucyBQdWVydG8gUmljbzEm # MCQGA1UECxMdVGhhbGVzIFRTUyBFU046NjBCQy1FMzgzLTI2MzUxJTAjBgNVBAMT # HE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2Wggg5EMIIE9TCCA92gAwIBAgIT # MwAAAVosuW5ENMtvKAAAAAABWjANBgkqhkiG9w0BAQsFADB8MQswCQYDVQQGEwJV # UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE # ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGlt # ZS1TdGFtcCBQQ0EgMjAxMDAeFw0yMTAxMTQxOTAyMTZaFw0yMjA0MTExOTAyMTZa # MIHOMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH # UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSkwJwYDVQQL # EyBNaWNyb3NvZnQgT3BlcmF0aW9ucyBQdWVydG8gUmljbzEmMCQGA1UECxMdVGhh # bGVzIFRTUyBFU046NjBCQy1FMzgzLTI2MzUxJTAjBgNVBAMTHE1pY3Jvc29mdCBU # aW1lLVN0YW1wIFNlcnZpY2UwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB # AQCwvVwcVw2tJwiu9B3/hooejcUZdZgIcxSXaJPG7N8aSfO0zNvKxHh5GQGhPim/ # RovVL06UN86xFslkqSEJMsb/1n9HCIQNZiTqsrttEzd5femb4M2K8zv60JT72ylu # /aADuPmBbHpEAra8zPYUKEuQWBsD4fUM+ugbksR/UMHssDQULI5FaIpKQcZEvhF0 # iM6W2tmn750TF+yy3tnq8nPj5T15k0jnx9VjcpHNubvc6OmV9IAHeI1KQc3TC5xw # rROtmy9jztNHJgCbIraoGqL/t5Ra33dLDwAsExjvYsppSZW9rGr8I6kp4+UcxuEc # Ruq1Nou3rW50E6M0e9zhzBjlAgMBAAGjggEbMIIBFzAdBgNVHQ4EFgQUZHMlP/Uc # j5J+0AaF2Tk0PMDeMWcwHwYDVR0jBBgwFoAU1WM6XIoxkPNDe3xGG8UzaFqFbVUw # VgYDVR0fBE8wTTBLoEmgR4ZFaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9j # cmwvcHJvZHVjdHMvTWljVGltU3RhUENBXzIwMTAtMDctMDEuY3JsMFoGCCsGAQUF # BwEBBE4wTDBKBggrBgEFBQcwAoY+aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3Br # aS9jZXJ0cy9NaWNUaW1TdGFQQ0FfMjAxMC0wNy0wMS5jcnQwDAYDVR0TAQH/BAIw # ADATBgNVHSUEDDAKBggrBgEFBQcDCDANBgkqhkiG9w0BAQsFAAOCAQEAAABt7HxY # G1IsOIFjFfFTsZWyBvwiDEonIg7SGZzy/ODjDeJSXleS3ia/h2AXKMea7lmZuPSt # vYgZib+lYlzLT/NaWGdRBTO99OmPsyyIf7Uue+D3lrB7zw9EDsUOBzjNhjT7xQHV # L6PM+aYFf+RPpT7utblAiAUwxEohzvje62oKm9zBEz6kSjyzQCXCjw3GpSs55hj5 # Z82Oj9c6Kf+2vdFXAR0SikP4U75//AvGOm/jL5OZGCYeuyjW1VXLrgVshUjGUxxn # px57h1YPbLx+/pZv1f8CG2VCiiSTtB0JsqHckng/ySwuzTbA2EaRTftvXS0bcdHl # smaLCZk/KimwSDCCBnEwggRZoAMCAQICCmEJgSoAAAAAAAIwDQYJKoZIhvcNAQEL # BQAwgYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH # EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xMjAwBgNV # BAMTKU1pY3Jvc29mdCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDEwMB4X # DTEwMDcwMTIxMzY1NVoXDTI1MDcwMTIxNDY1NVowfDELMAkGA1UEBhMCVVMxEzAR # BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1p # Y3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3Rh # bXAgUENBIDIwMTAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpHQ28 # dxGKOiDs/BOX9fp/aZRrdFQQ1aUKAIKF++18aEssX8XD5WHCdrc+Zitb8BVTJwQx # H0EbGpUdzgkTjnxhMFmxMEQP8WCIhFRDDNdNuDgIs0Ldk6zWczBXJoKjRQ3Q6vVH # gc2/JGAyWGBG8lhHhjKEHnRhZ5FfgVSxz5NMksHEpl3RYRNuKMYa+YaAu99h/EbB # Jx0kZxJyGiGKr0tkiVBisV39dx898Fd1rL2KQk1AUdEPnAY+Z3/1ZsADlkR+79BL # /W7lmsqxqPJ6Kgox8NpOBpG2iAg16HgcsOmZzTznL0S6p/TcZL2kAcEgCZN4zfy8 # wMlEXV4WnAEFTyJNAgMBAAGjggHmMIIB4jAQBgkrBgEEAYI3FQEEAwIBADAdBgNV # HQ4EFgQU1WM6XIoxkPNDe3xGG8UzaFqFbVUwGQYJKwYBBAGCNxQCBAweCgBTAHUA # YgBDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU # 1fZWy4/oolxiaNE9lJBb186aGMQwVgYDVR0fBE8wTTBLoEmgR4ZFaHR0cDovL2Ny # bC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvTWljUm9vQ2VyQXV0XzIw # MTAtMDYtMjMuY3JsMFoGCCsGAQUFBwEBBE4wTDBKBggrBgEFBQcwAoY+aHR0cDov # L3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNSb29DZXJBdXRfMjAxMC0w # Ni0yMy5jcnQwgaAGA1UdIAEB/wSBlTCBkjCBjwYJKwYBBAGCNy4DMIGBMD0GCCsG # AQUFBwIBFjFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vUEtJL2RvY3MvQ1BTL2Rl # ZmF1bHQuaHRtMEAGCCsGAQUFBwICMDQeMiAdAEwAZQBnAGEAbABfAFAAbwBsAGkA # YwB5AF8AUwB0AGEAdABlAG0AZQBuAHQALiAdMA0GCSqGSIb3DQEBCwUAA4ICAQAH # 5ohRDeLG4Jg/gXEDPZ2joSFvs+umzPUxvs8F4qn++ldtGTCzwsVmyWrf9efweL3H # qJ4l4/m87WtUVwgrUYJEEvu5U4zM9GASinbMQEBBm9xcF/9c+V4XNZgkVkt070IQ # yK+/f8Z/8jd9Wj8c8pl5SpFSAK84Dxf1L3mBZdmptWvkx872ynoAb0swRCQiPM/t # A6WWj1kpvLb9BOFwnzJKJ/1Vry/+tuWOM7tiX5rbV0Dp8c6ZZpCM/2pif93FSguR # JuI57BlKcWOdeyFtw5yjojz6f32WapB4pm3S4Zz5Hfw42JT0xqUKloakvZ4argRC # g7i1gJsiOCC1JeVk7Pf0v35jWSUPei45V3aicaoGig+JFrphpxHLmtgOR5qAxdDN # p9DvfYPw4TtxCd9ddJgiCGHasFAeb73x4QDf5zEHpJM692VHeOj4qEir995yfmFr # b3epgcunCaw5u+zGy9iCtHLNHfS4hQEegPsbiSpUObJb2sgNVZl6h3M7COaYLeqN # 4DMuEin1wC9UJyH3yKxO2ii4sanblrKnQqLJzxlBTeCG+SqaoxFmMNO7dDJL32N7 # 9ZmKLxvHIa9Zta7cRDyXUHHXodLFVeNp3lfB0d4wwP3M5k37Db9dT+mdHhk4L7zP # WAUu7w2gUDXa7wknHNWzfjUeCLraNtvTX4/edIhJEqGCAtIwggI7AgEBMIH8oYHU # pIHRMIHOMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE # BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSkwJwYD # VQQLEyBNaWNyb3NvZnQgT3BlcmF0aW9ucyBQdWVydG8gUmljbzEmMCQGA1UECxMd # VGhhbGVzIFRTUyBFU046NjBCQy1FMzgzLTI2MzUxJTAjBgNVBAMTHE1pY3Jvc29m # dCBUaW1lLVN0YW1wIFNlcnZpY2WiIwoBATAHBgUrDgMCGgMVAMyABZi9xhx1nACW # It4WhsJaZRouoIGDMIGApH4wfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp # bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw # b3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAw # DQYJKoZIhvcNAQEFBQACBQDkkecMMCIYDzIwMjEwNzA5MDEwNTE2WhgPMjAyMTA3 # MTAwMTA1MTZaMHcwPQYKKwYBBAGEWQoEATEvMC0wCgIFAOSR5wwCAQAwCgIBAAIC # AR8CAf8wBwIBAAICEk8wCgIFAOSTOIwCAQAwNgYKKwYBBAGEWQoEAjEoMCYwDAYK # KwYBBAGEWQoDAqAKMAgCAQACAwehIKEKMAgCAQACAwGGoDANBgkqhkiG9w0BAQUF # AAOBgQBLkkqaGihTcfZt9cVLuAYfc5ZtN64aq50O8M6zBh+ZIrei5y0Ssm6uB9xP # 4wjAmLnri6fGnRT3Fu1eDbvUeEfVFnY5DTEdL/qSJaMHo68qG+rTHmVQ09cZ8UbU # g0vGF0mZRudfCV7dVa0otuq7sb27YNhwKGOdXbbxDo2NLTdVWjGCAw0wggMJAgEB # MIGTMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH # EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNV # BAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwAhMzAAABWiy5bkQ0y28o # AAAAAAFaMA0GCWCGSAFlAwQCAQUAoIIBSjAaBgkqhkiG9w0BCQMxDQYLKoZIhvcN # AQkQAQQwLwYJKoZIhvcNAQkEMSIEIAniqK7M/6vxbQ6bOb24Fc0ED4CZQpZ4l0bZ # z8/03eT0MIH6BgsqhkiG9w0BCRACLzGB6jCB5zCB5DCBvQQgk/yoJnTEsuRdMMOC # Gq/XJn+SLN6TNIVLiCJy+W2xf7AwgZgwgYCkfjB8MQswCQYDVQQGEwJVUzETMBEG # A1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWlj # cm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFt # cCBQQ0EgMjAxMAITMwAAAVosuW5ENMtvKAAAAAABWjAiBCAwY/aqx+30u7xBMQoe # n4YCAU1pTqH+WZ3noo6Fop291zANBgkqhkiG9w0BAQsFAASCAQCTfqJefTrHW6H4 # hycb5tt+4Z5F6rs2vCMvJ8gD37jBoMLWDN7qPoAUH4v2cyWayPBKgOt7IBWLQ6vU # jXhyNJuB7CxXTlMky7+M2dbEu+9BVNwDVnQDTPEZ1eyocgZL+hou0OD3IsdDFHMn # kxnMApUuf1gs6JTLXCipDhRJGTN+XjN9o3vuKNWEFIXZdjTOdxvyYKVU2DC6MMvf # gy11QfRZOxA5njFDwPkxtqQ1FF8X6t4rSTNWBUvmAqk4+FdvpxGBcoABz7cJQCzw # 9BU05mnNJv5C/Saj8MO6LoUXpmF3xbssYT7rbqCnPwbB/4kCxv2K1mVDmqiHo0Ed # dwIssoJR # SIG # End signature block |