Public/PrivilegedAccess/Get-EntraOpsPrivilegedEAMDefender.ps1
|
<#
.SYNOPSIS Get a list in schema of EntraOps with all privileged principals in Microsoft Intune and assigned roles and classifications. .DESCRIPTION Get a list in schema of EntraOps with all privileged principals in Microsoft Intune and assigned roles and classifications. .PARAMETER TenantId Tenant ID of the Microsoft Entra ID tenant. Default is the current tenant ID. .PARAMETER FolderClassification Folder path to the classification definition files. Default is "./Classification". .PARAMETER SampleMode Use sample data for testing or offline mode. Default is $False. Default sample data is stored in "./Samples" .PARAMETER GlobalExclusion Use global exclusion list for classification. Default is $true. Global exclusion list is stored in "./Classification/Global.json". .PARAMETER IncludeJustification Include the Justification property (documenting a manual classification overwrite) on all Classification entries of the returned objects. Default is $false, so the property is not present in the output at all. .PARAMETER IncludeObjectDetails Include descriptive object details in warning output. Defaults to ConsoleOutput.IncludeObjectDetails from EntraOpsConfig.json. Object IDs are always shown. #> function Get-EntraOpsPrivilegedEamDefender { [cmdletbinding()] param ( [Parameter(Mandatory = $false)] [System.String]$TenantId = (Get-EntraOpsAzContextValue -Property TenantId) , [Parameter(Mandatory = $false)] [System.String]$FolderClassification = "$DefaultFolderClassification" , [Parameter(Mandatory = $false)] [System.String]$FolderClassifiedObjects = "$DefaultFolderClassifiedEam" , [Parameter(Mandatory = $false)] [System.Boolean]$SampleMode = $False , [Parameter(Mandatory = $false)] [System.Boolean]$GlobalExclusion = $true , [Parameter(Mandatory = $false)] [System.Boolean]$EnableParallelProcessing = $true , [Parameter(Mandatory = $false)] [System.Int32]$ParallelThrottleLimit = 10 , [Parameter(Mandatory = $false)] [switch]$IncludeJustification , [Parameter(Mandatory = $false)] [System.Boolean]$IncludeObjectDetails = [bool]$Global:EntraOpsIncludeObjectDetails ) # Configuration for batch processing $BatchSize = 100 # Number of objects to process before showing progress $WarningMessages = New-Object -TypeName "System.Collections.Generic.List[psobject]" $DefenderClassificationFilePath = Resolve-EntraOpsClassificationPath -ClassificationFileName "Classification_Defender.json" #region Get all role assignments and global exclusions #region Stage 1: Fetch Defender Role Assignments $Stage1Start = Get-Date Write-Host "" Write-Host "═══════════════════════════════════════════════════════════════════════════════" -ForegroundColor Cyan Write-Host " Stage 1/4: Fetching Defender Role Assignments" -ForegroundColor Cyan Write-Host "═══════════════════════════════════════════════════════════════════════════════" -ForegroundColor Cyan Write-Host "Retrieving Microsoft Defender Unified RBAC role assignments and definitions..." -ForegroundColor Gray Write-Progress -Activity "Stage 1/4: Fetching Defender Roles" -Status "Loading role assignments and global exclusions..." -PercentComplete 10 if ($SampleMode -ne $True) { $DefenderRbacAssignments = EntraOps\Get-EntraOpsPrivilegedDefenderRoles -TenantId $TenantId -WarningMessages $WarningMessages } else { $WarningMessages.Add([PSCustomObject]@{Type = "Stage1"; Message = "SampleMode currently not supported!" }) } $GlobalExclusionList = Import-EntraOpsGlobalExclusions -Enabled $GlobalExclusion $Stage1Duration = ((Get-Date) - $Stage1Start).TotalSeconds Write-Host "✓ Stage 1 completed in $([Math]::Round($Stage1Duration, 2)) seconds ($($DefenderRbacAssignments.Count) role assignments retrieved)" -ForegroundColor Green Write-Progress -Activity "Stage 1/4: Fetching Defender Roles" -Completed #endregion # Return early if no role assignments found to prevent null index errors if ($null -eq $DefenderRbacAssignments -or @($DefenderRbacAssignments).Count -eq 0) { Write-Warning "No Defender role assignments found. Returning empty result." return @() } #region Check if RBAC role action and scope is defined in JSON classification #region Stage 2: Load and Classify Role Actions $Stage2Start = Get-Date Write-Host "" Write-Host "═══════════════════════════════════════════════════════════════════════════════" -ForegroundColor Cyan Write-Host " Stage 2/4: Loading Classification Rules" -ForegroundColor Cyan Write-Host "═══════════════════════════════════════════════════════════════════════════════" -ForegroundColor Cyan Write-Host "Loading Defender role action classifications and matching against JSON definitions..." -ForegroundColor Gray Write-Progress -Activity "Stage 2/4: Loading Classification Rules" -Status "Reading classification file..." -PercentComplete 25 # Optimization: Pre-fetch all Defender role definitions to avoid N+1 queries $DefenderRoleDefinitionsCache = @{} try { if ($SampleMode -ne $True) { Write-Verbose "Pre-fetching all Defender role definitions..." $AllDefenderRoles = Invoke-EntraOpsMsGraphQuery -Method GET -Uri https://graph.microsoft.com/beta/roleManagement/defender/roleDefinitions -OutputType PSObject foreach ($Role in $AllDefenderRoles) { $DefenderRoleDefinitionsCache[$Role.Id] = $Role } } } catch { Write-Warning "Failed to pre-fetch Defender role definitions. Falling back to per-item lookup." } $DefenderResourcesByClassificationJSON = Expand-EntraOpsPrivilegedEAMJsonFile -FilePath $DefenderClassificationFilePath | select-object EAMTierLevelName, EAMTierLevelTagValue, Category, Service, RoleAssignmentScopeName, ExcludedRoleAssignmentScopeName, RoleDefinitionActions, ExcludedRoleDefinitionActions # Load classification overwrites (down-/upgrade of entire role definitions) from tenant-specific folder or Templates fallback. # Role action overwrites are already baked into the classification file by Update-EntraOpsClassificationControlPlaneScope. $ClassificationOverwrites = Import-EntraOpsClassificationOverwrites -RbacSystem "Defender" -FolderClassification $FolderClassification $DefenderRbacClassificationsByJSON = @() $DefenderRbacClassificationsByCloudSetScope = @() # A Defender CloudSet is an explicit Defender for Cloud boundary over Azure subscriptions. Its # classification follows the most privileged member subscription, even if the custom Defender # role has no action represented in Classification_Defender.json. $AzureScopeReasoning = $null $AzureScopeReasoningFile = Join-Path -Path $FolderClassification -ChildPath "$TenantNameContext/ScopeReasoning_Azure.json" if (Test-Path -LiteralPath $AzureScopeReasoningFile) { try { $AzureScopeReasoning = Get-Content -LiteralPath $AzureScopeReasoningFile -Raw | ConvertFrom-Json -Depth 10 $EffectiveAzureTier0Scopes = @($AzureScopeReasoning.Tier0Scope | Where-Object { $_ -and $_ -ne '/' }) $EffectiveAzureTier1Scopes = @($AzureScopeReasoning.Tier1Scope | Where-Object { $_ -and $_ -ne '/' }) if ($EffectiveAzureTier0Scopes.Count -eq 0 -and $EffectiveAzureTier1Scopes.Count -eq 0 -and @($AzureScopeReasoning.ScopeDetails).Count -eq 0) { $WarningMessages.Add([PSCustomObject]@{ Type = 'CloudSetAzureScopeReasoningDegenerate' Message = "Azure scope reasoning file '$AzureScopeReasoningFile' contains no effective ARM Tier0/Tier1 scopes or scope details. Defender CloudSet subscriptions will resolve as UserAccess and will not produce privileged classifications." }) } } catch { $WarningMessages.Add([PSCustomObject]@{ Type = 'CloudSetAzureScopeReasoningReadError' Message = "Failed to load Azure scope reasoning file '$AzureScopeReasoningFile': $($_.Exception.Message)" }) } } function Test-DefenderRoleActionMatch { param( [string]$RoleAction, [object[]]$ClassificationActions ) foreach ($ClassificationAction in @($ClassificationActions)) { if ([string]::IsNullOrWhiteSpace("$ClassificationAction")) { continue } if ($RoleAction -like "$ClassificationAction" -or "$ClassificationAction" -like $RoleAction) { return $true } } return $false } $ProcessedRoleDefs = 0 $UniqueRoleDefs = $DefenderRbacAssignments | Select-Object -Unique RoleDefinitionId, RoleAssignmentScopeId, CloudSetSubscriptionScopes $TotalRoleDefs = $UniqueRoleDefs.Count $WarnedUserAccessCloudSets = [System.Collections.Generic.HashSet[string]]::new([System.StringComparer]::OrdinalIgnoreCase) $DefenderRbacClassificationsByJSON += foreach ($DefenderRbacAssignment in $UniqueRoleDefs) { $ProcessedRoleDefs++ if ($ProcessedRoleDefs % 10 -eq 0) { Write-Progress -Activity "Stage 2/4: Loading Classification Rules" -Status "Classifying role definition $ProcessedRoleDefs of $TotalRoleDefs" -PercentComplete (25 + ($ProcessedRoleDefs / $TotalRoleDefs * 25)) } if ($DefenderRbacAssignment.RoleAssignmentScopeId -ne "/") { $DefenderRbacAssignment.RoleAssignmentScopeId = "$($DefenderRbacAssignment.RoleAssignmentScopeId)" } # Role actions are defined for scope and role definition contains an action of the role, otherwise all role actions within role assignment scope will be applied if ($SampleMode -eq $True) { # Removed redundant warning } else { # Optimization: Use cache lookup if ($DefenderRoleDefinitionsCache.ContainsKey("$($DefenderRbacAssignment.RoleDefinitionId)")) { $DefenderRoleActions = $DefenderRoleDefinitionsCache["$($DefenderRbacAssignment.RoleDefinitionId)"] } else { $DefenderRoleActions = (Invoke-EntraOpsMsGraphQuery -Method GET -Uri https://graph.microsoft.com/beta/roleManagement/defender/roleDefinitions -OutputType PSObject) | Where-Object { $_.Id -eq "$($DefenderRbacAssignment.RoleDefinitionId)" } } } $EffectiveScopeIds = [System.Collections.Generic.List[string]]::new() $EffectiveScopeIds.Add("$($DefenderRbacAssignment.RoleAssignmentScopeId)") | Out-Null if ($DefenderRbacAssignment.PSObject.Properties.Name -contains 'CloudSetSubscriptionScopes') { foreach ($CloudSetSubscriptionScope in @($DefenderRbacAssignment.CloudSetSubscriptionScopes)) { if (-not [string]::IsNullOrWhiteSpace("$CloudSetSubscriptionScope")) { $EffectiveScopeIds.Add("$CloudSetSubscriptionScope") | Out-Null } } } $EffectiveScopeIds = @($EffectiveScopeIds | Select-Object -Unique) $MatchedClassificationByScope = foreach ($EffectiveScopeId in $EffectiveScopeIds) { # Check if the direct scope or a CloudSet member subscription is listed in JSON by wildcard. $DefenderResourcesByClassificationJSON | Where-Object { $EffectiveScopeId -like $_.RoleAssignmentScopeName -and $_.ExcludedRoleAssignmentScopeName -notcontains $EffectiveScopeId } } $CloudSetSubscriptionScopes = @($DefenderRbacAssignment.CloudSetSubscriptionScopes | Where-Object { -not [string]::IsNullOrWhiteSpace("$_") }) if ($CloudSetSubscriptionScopes.Count -gt 0) { if ($null -eq $AzureScopeReasoning) { $WarningMessages.Add([PSCustomObject]@{ Type = 'CloudSetAzureScopeReasoningMissing' Message = "CloudSet '$($DefenderRbacAssignment.RoleAssignmentScopeId)' has resolved subscription scope(s), but Azure scope reasoning is unavailable. Run Update-EntraOpsClassificationControlPlaneScope for Azure before exporting Defender EAM data." }) } else { $ResolvedCloudSetScopeTiers = @($CloudSetSubscriptionScopes | ForEach-Object { Resolve-EntraOpsAzureScopeReasoningTier -ArmScopeId $_ -AzureScopeReasoning $AzureScopeReasoning } | Where-Object { $null -ne $_ }) $CloudSetScopeTiers = @($ResolvedCloudSetScopeTiers | Where-Object { $_.AdminTierLevelName -in @('ControlPlane', 'ManagementPlane') }) $CloudSetScopeTier = $CloudSetScopeTiers | Sort-Object { [int]$_.AdminTierLevel } | Select-Object -First 1 if ($null -ne $CloudSetScopeTier) { $DefenderRbacClassificationsByCloudSetScope += [PSCustomObject]@{ RoleDefinitionId = $DefenderRbacAssignment.RoleDefinitionId RoleAssignmentScopeId = $DefenderRbacAssignment.RoleAssignmentScopeId Classification = [PSCustomObject]@{ AdminTierLevel = $CloudSetScopeTier.AdminTierLevel AdminTierLevelName = $CloudSetScopeTier.AdminTierLevelName MatchedActions = $null ScopedObjects = $null Service = 'Azure subscription scope (Defender CloudSet)' TaggedBy = 'CloudSetAzureScopeReasoning' TaggedByObjectIds = @($CloudSetSubscriptionScopes) TaggedByObjectDisplayNames = @($CloudSetSubscriptionScopes) TaggedByRoleSystem = 'Azure' } } } elseif ($WarnedUserAccessCloudSets.Add("$($DefenderRbacAssignment.RoleAssignmentScopeId)")) { $WarningMessages.Add([PSCustomObject]@{ Type = 'CloudSetResolvedAsUserAccess' ObjectId = "$($DefenderRbacAssignment.RoleAssignmentScopeId)" Message = "CloudSet '$($DefenderRbacAssignment.RoleAssignmentScopeId)' contains $($CloudSetSubscriptionScopes.Count) resolved subscription scope(s), but none map to Azure ControlPlane or ManagementPlane reasoning. No privileged CloudSet classification was generated." }) } } } # Check if role action and scope exists in JSON definition $DefenderRoleActionsInJsonDefinition = @() $DefenderRoleActionsInJsonDefinition = foreach ($Action in $DefenderRoleActions.rolePermissions.allowedResourceActions) { $MatchedClassificationByScope | Where-Object { (Test-DefenderRoleActionMatch -RoleAction $Action -ClassificationActions $_.RoleDefinitionActions) -and -not (Test-DefenderRoleActionMatch -RoleAction $Action -ClassificationActions $_.ExcludedRoleDefinitionActions) } } if (($DefenderRoleActionsInJsonDefinition.Count -gt 0)) { $ClassifiedWithMatchedActions = @() foreach ($DefenderRoleAction in $DefenderRoleActions.rolePermissions.allowedResourceActions) { foreach ($EffectiveScopeId in $EffectiveScopeIds) { $ClassifiedWithMatchedActions += $DefenderResourcesByClassificationJSON | Where-Object { (Test-DefenderRoleActionMatch -RoleAction $DefenderRoleAction -ClassificationActions $_.RoleDefinitionActions) -and $EffectiveScopeId -like $_.RoleAssignmentScopeName -and -not (Test-DefenderRoleActionMatch -RoleAction $DefenderRoleAction -ClassificationActions $_.ExcludedRoleDefinitionActions) } | ForEach-Object { [PSCustomObject]@{ EAMTierLevelName = $_.EAMTierLevelName EAMTierLevelTagValue = $_.EAMTierLevelTagValue Service = $_.Service MatchedAction = $DefenderRoleAction } } } } $UniqueClassifications = $ClassifiedWithMatchedActions | Select-Object -Unique EAMTierLevelName, EAMTierLevelTagValue, Service $Classification = foreach ($UniqueClass in $UniqueClassifications) { $MatchedEntries = @($ClassifiedWithMatchedActions | Where-Object { $_.EAMTierLevelName -eq $UniqueClass.EAMTierLevelName -and $_.EAMTierLevelTagValue -eq $UniqueClass.EAMTierLevelTagValue -and $_.Service -eq $UniqueClass.Service }) [array]$MatchedActions = @($MatchedEntries | Select-Object -ExpandProperty MatchedAction | Select-Object -Unique) [PSCustomObject]@{ 'AdminTierLevel' = $UniqueClass.EAMTierLevelTagValue 'AdminTierLevelName' = $UniqueClass.EAMTierLevelName 'Service' = $UniqueClass.Service 'MatchedActions' = if ($MatchedActions.Count -gt 0) { , @($MatchedActions) } else { $null } 'ScopedObjects' = $null 'TaggedBy' = "JSONwithAction" 'TaggedByObjectIds' = $null 'TaggedByObjectDisplayNames' = $null 'TaggedByRoleSystem' = "Defender" } } [PSCustomObject]@{ 'RoleDefinitionId' = $DefenderRbacAssignment.RoleDefinitionId 'RoleAssignmentScopeId' = $DefenderRbacAssignment.RoleAssignmentScopeId 'Classification' = $Classification } } else { $ClassifiedDefenderMgmtRbacRoleWithActions = @() } } $Stage2Duration = ((Get-Date) - $Stage2Start).TotalSeconds Write-Host "✓ Stage 2 completed in $([Math]::Round($Stage2Duration, 2)) seconds ($($DefenderRbacClassificationsByJSON.Count) role definitions classified)" -ForegroundColor Green Write-Progress -Activity "Stage 2/4: Loading Classification Rules" -Completed #endregion #region Classify all assigned privileged users and groups in Device Management #region Stage 3: Classify Principals $Stage3Start = Get-Date Write-Host "" Write-Host "═══════════════════════════════════════════════════════════════════════════════" -ForegroundColor Cyan Write-Host " Stage 3/4: Classifying Principals" -ForegroundColor Cyan Write-Host "═══════════════════════════════════════════════════════════════════════════════" -ForegroundColor Cyan Write-Host "Matching principals against classified role assignments and building classification..." -ForegroundColor Gray Write-Progress -Activity "Stage 3/4: Classifying Principals" -Status "Processing role assignments..." -PercentComplete 50 # Initialize assigned objects classification (not yet implemented for Defender, placeholder for future use) if (-not $DefenderRbacClassificationsByAssignedObjects) { $DefenderRbacClassificationsByAssignedObjects = @() } $DefenderRbacClassifications = foreach ($DefenderRbacAssignment in $DefenderRbacAssignments) { $DefenderRbacAssignment = $DefenderRbacAssignment | Select-Object -ExcludeProperty Classification $Classification = @() $Classification += ($DefenderRbacClassificationsByAssignedObjects | Where-Object { $_.RoleAssignmentScopeId -contains $DefenderRbacAssignment.RoleAssignmentScopeId }).Classification $Classification += ($DefenderRbacClassificationsByJSON | Where-Object { $_.RoleAssignmentScopeId -contains $DefenderRbacAssignment.RoleAssignmentScopeId -and $_.RoleDefinitionId -eq $DefenderRbacAssignment.RoleDefinitionId }).Classification $Classification += ($DefenderRbacClassificationsByCloudSetScope | Where-Object { $_.RoleAssignmentScopeId -contains $DefenderRbacAssignment.RoleAssignmentScopeId -and $_.RoleDefinitionId -eq $DefenderRbacAssignment.RoleDefinitionId }).Classification $Classification = $Classification | select-object -Unique AdminTierLevel, AdminTierLevelName, MatchedActions, ScopedObjects, Service, TaggedBy, TaggedByObjectIds, TaggedByObjectDisplayNames, TaggedByRoleSystem, Justification | Sort-Object AdminTierLevel, AdminTierLevelName, Service, TaggedBy $DefenderRbacAssignment | Add-Member -NotePropertyName "Classification" -NotePropertyValue $Classification -Force $DefenderRbacAssignment } # Apply role definition classification overwrites (down-/upgrade by RoleDefinitionId or RoleDefinitionName) if ($ClassificationOverwrites.RoleDefinitionOverwrites.Count -gt 0) { Write-Host "Applying $($ClassificationOverwrites.RoleDefinitionOverwrites.Count) role definition classification overwrite(s) from Classification_RoleDefinitionOverwrites.json..." -ForegroundColor Yellow $DefenderRbacClassifications = Invoke-EntraOpsClassificationRoleOverwrite -RbacClassifications $DefenderRbacClassifications -RoleDefinitionOverwrites $ClassificationOverwrites.RoleDefinitionOverwrites -RoleSystem "Defender" } $Stage3Duration = ((Get-Date) - $Stage3Start).TotalSeconds Write-Host "✓ Stage 3 completed in $([Math]::Round($Stage3Duration, 2)) seconds ($($DefenderRbacClassifications.Count) role assignments classified)" -ForegroundColor Green Write-Progress -Activity "Stage 3/4: Classifying Principals" -Completed #endregion #region Apply classification to all assigned privileged users and groups in Device Management #region Stage 4: Resolve and Finalize Objects $Stage4Start = Get-Date Write-Host "" Write-Host "═══════════════════════════════════════════════════════════════════════════════" -ForegroundColor Cyan Write-Host " Stage 4/4: Resolving Object Details and Finalizing" -ForegroundColor Cyan Write-Host "═══════════════════════════════════════════════════════════════════════════════" -ForegroundColor Cyan Write-Host "Enriching principals with detailed attributes and applying exclusions..." -ForegroundColor Gray # Group assignments by ObjectId for efficient lookup $DefenderRbacByObject = $DefenderRbacClassifications | Group-Object ObjectId -AsHashTable -AsString # Collect unique objects and resolve details $UniqueObjects = $DefenderRbacAssignments | Select-Object -Unique ObjectId, ObjectType | Where-Object { $null -ne $_.ObjectId } $ObjectDetailsCache = Invoke-EntraOpsParallelObjectResolution ` -UniqueObjects $UniqueObjects ` -TenantId $TenantId ` -EnableParallelProcessing $EnableParallelProcessing ` -ParallelThrottleLimit $ParallelThrottleLimit # Aggregate classifications and build output objects $DefenderRbacClassifiedObjects = Invoke-EntraOpsEAMClassificationAggregation ` -UniqueObjects $UniqueObjects ` -ObjectDetailsCache $ObjectDetailsCache ` -RbacClassificationsByObject $DefenderRbacByObject ` -RoleSystem "Defender" ` -EnableParallelProcessing $EnableParallelProcessing ` -ParallelThrottleLimit $ParallelThrottleLimit ` -WarningMessages $WarningMessages #endregion Write-Progress -Activity "Stage 4/4: Finalizing Results" -Status "Applying global exclusions and sorting..." -PercentComplete 90 $FilteredDefenderObjects = $DefenderRbacClassifiedObjects | Where-Object { $GlobalExclusionList -notcontains $_.ObjectId } $Stage4Duration = ((Get-Date) - $Stage4Start).TotalSeconds $TotalDuration = ((Get-Date) - $Stage1Start).TotalSeconds Write-Progress -Activity "Stage 4/4: Finalizing Results" -Completed Write-Host "✓ Stage 4 completed in $([Math]::Round($Stage4Duration, 2)) seconds ($($FilteredDefenderObjects.Count) privileged objects after exclusions)" -ForegroundColor Green Show-EntraOpsWarningSummary -WarningMessages $WarningMessages -IncludeObjectDetails $IncludeObjectDetails Write-Host "" Write-Host "═══════════════════════════════════════════════════════════════════════════════" -ForegroundColor Green Write-Host " ✓ All Stages Completed Successfully" -ForegroundColor Green Write-Host "═══════════════════════════════════════════════════════════════════════════════" -ForegroundColor Green Write-Host "Total execution time: $([Math]::Round($TotalDuration, 2)) seconds" -ForegroundColor Gray Write-Host "Final result: $($FilteredDefenderObjects.Count) privileged objects ready for export" -ForegroundColor Gray #endregion $FilteredDefenderObjects | Where-Object { $null -ne $_.ObjectType -and $null -ne $_.ObjectId } | Set-EntraOpsEAMClassificationJustification -IncludeJustification:$IncludeJustification | Sort-Object ObjectAdminTierLevel, ObjectDisplayName } # SIG # Begin signature block # MIIniAYJKoZIhvcNAQcCoIIneTCCJ3UCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDYlvVxleVh4Pfu # Aam0fHN208PNDK7Gk0+as7zTgP7jhqCCIDwwggXJMIIEsaADAgECAhAbtY8lKt8j # AEkoya49fu0nMA0GCSqGSIb3DQEBDAUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK # ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2Vy # dGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5l # dHdvcmsgQ0EwHhcNMjEwNTMxMDY0MzA2WhcNMjkwOTE3MDY0MzA2WjCBgDELMAkG # A1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAl # BgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMb # Q2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyMIICIjANBgkqhkiG9w0BAQEFAAOC # Ag8AMIICCgKCAgEAvfl4+ObVgAxknYYblmRnPyI6HnUBfe/7XGeMycxca6mR5rlC # 5SBLm9qbe7mZXdmbgEvXhEArJ9PoujC7Pgkap0mV7ytAJMKXx6fumyXvqAoAl4Va # qp3cKcniNQfrcE1K1sGzVrihQTib0fsxf4/gX+GxPw+OFklg1waNGPmqJhCrKtPQ # 0WeNG0a+RzDVLnLRxWPa52N5RH5LYySJhi40PylMUosqp8DikSiJucBb+R3Z5yet # /5oCl8HGUJKbAiy9qbk0WQq/hEr/3/6zn+vZnuCYI+yma3cWKtvMrTscpIfcRnNe # GWJoRVfkkIJCu0LW8GHgwaM9ZqNd9BjuiMmNF0UpmTJ1AjHuKSbIawLmtWJFfzcV # WiNoidQ+3k4nsPBADLxNF8tNorMe0AZa3faTz1d1mfX6hhpneLO/lv403L3nUlbl # s+V1e9dBkQXcXWnjlQ1DufyDljmVe2yAWk8TcsbXfSl6RLpSpCrVQUYJIP4ioLZb # MI28iQzV13D4h1L92u+sUS4Hs07+0AnacO+Y+lbmbdu1V0vc5SwlFcieLnhO+Nqc # noYsylfzGuXIkosagpZ6w7xQEmnYDlpGizrrJvojybawgb5CAKT41v4wLsfSRvbl # jnX98sy50IdbzAYQYLuDNbdeZ95H7JlI8aShFf6tjGKOOVVPORa5sWOd/7cCAwEA # AaOCAT4wggE6MA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFLahVDkCw6A/joq8 # +tT4HKbROg79MB8GA1UdIwQYMBaAFAh2zcsH/yT2xc3tu5C84oQ3RnX3MA4GA1Ud # DwEB/wQEAwIBBjAvBgNVHR8EKDAmMCSgIqAghh5odHRwOi8vY3JsLmNlcnR1bS5w # bC9jdG5jYS5jcmwwawYIKwYBBQUHAQEEXzBdMCgGCCsGAQUFBzABhhxodHRwOi8v # c3ViY2Eub2NzcC1jZXJ0dW0uY29tMDEGCCsGAQUFBzAChiVodHRwOi8vcmVwb3Np # dG9yeS5jZXJ0dW0ucGwvY3RuY2EuY2VyMDkGA1UdIAQyMDAwLgYEVR0gADAmMCQG # CCsGAQUFBwIBFhhodHRwOi8vd3d3LmNlcnR1bS5wbC9DUFMwDQYJKoZIhvcNAQEM # BQADggEBAFHCoVgWIhCL/IYx1MIy01z4S6Ivaj5N+KsIHu3V6PrnCA3st8YeDrJ1 # BXqxC/rXdGoABh+kzqrya33YEcARCNQOTWHFOqj6seHjmOriY/1B9ZN9DbxdkjuR # mmW60F9MvkyNaAMQFtXx0ASKhTP5N+dbLiZpQjy6zbzUeulNndrnQ/tjUoCFBMQl # lVXwfqefAcVbKPjgzoZwpic7Ofs4LphTZSJ1Ldf23SIikZbr3WjtP6MZl9M7JYjs # NhI9qX7OAo0FmpKnJ25FspxihjcNpDOO16hO0EoXQ0zF8ads0h5YbBRRfopUofbv # n3l6XYGaFpAP4bvxSgD5+d2+7arszgowggZrMIIEU6ADAgECAhBX5gfP8LabvnxC # XoItEBa/MA0GCSqGSIb3DQEBCwUAMFYxCzAJBgNVBAYTAlBMMSEwHwYDVQQKExhB # c3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xJDAiBgNVBAMTG0NlcnR1bSBDb2RlIFNp # Z25pbmcgMjAyMSBDQTAeFw0yNjEwMDYwODI4MjNaFw0yNzEwMDYwODI4MjJaMIGQ # MQswCQYDVQQGEwJERTEdMBsGA1UECAwUUmhpbmVsYW5kLVBhbGF0aW5hdGUxEjAQ # BgNVBAcMCUxhaG5zdGVpbjEeMBwGA1UECgwVT3BlbiBTb3VyY2UgRGV2ZWxvcGVy # MS4wLAYDVQQDDCVPcGVuIFNvdXJjZSBEZXZlbG9wZXIgVGhvbWFzIE5hdW5oZWlt # MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAphp2ljSmVsRB6gvkEq7A # DUMENpKZiDFoAfF1ktD1nCwaVyI+bJ0ROjHwAn4iJgS+vlBDPOUIw2GLHkiqUhOg # HSwzg6gj45GNmt6zxsKP0zPlhMB/fb0zmz7/F7e3yfKCXLfhbHuk0Es9gJ+8Wmet # 9StVwwSE/K0MpW06GKA9nPWyE4N/ADwigDIj9rsTKJR4cve9w8G1b3zohpUc/qMr # onab+HVw5r9b3sOBnnaXC6zvrX4fovRz1ztwfWjRjILLoFG6mW/TuK5F2ICD3Rhl # 9R2rJWWWhzTDMsQlzvX+/SaM74q3OFpIVNdhvtmWU9pKUBRAyYMijcDqKEFGSzrc # 8JFmGMpP5TuroWF+N21d3px2eARvW1mV0DCfFAH+Og20SH/gVW6/ltQQEkH/z/Zt # 49ARyJrgESLOQtlMCIYSoKISdkk4ml4VUS1E/PcbzXEYj3a7m6DOxcd3WuY03UT9 # cnk3p0LMN6LeLYAZgVY+HRloZlH+kW2SkOHNuWgtXvZhAgMBAAGjggF4MIIBdDAM # BgNVHRMBAf8EAjAAMD0GA1UdHwQ2MDQwMqAwoC6GLGh0dHA6Ly9jY3NjYTIwMjEu # Y3JsLmNlcnR1bS5wbC9jY3NjYTIwMjEuY3JsMHMGCCsGAQUFBwEBBGcwZTAsBggr # BgEFBQcwAYYgaHR0cDovL2Njc2NhMjAyMS5vY3NwLWNlcnR1bS5jb20wNQYIKwYB # BQUHMAKGKWh0dHA6Ly9yZXBvc2l0b3J5LmNlcnR1bS5wbC9jY3NjYTIwMjEuY2Vy # MB8GA1UdIwQYMBaAFN10XUwA23ufoHTKsW73PMAywHDNMB0GA1UdDgQWBBTBvGyH # MXj1dMbVnxuof9oP4PY7cDBLBgNVHSAERDBCMAgGBmeBDAEEATA2BgsqhGgBhvZ3 # AgUBBDAnMCUGCCsGAQUFBwIBFhlodHRwczovL3d3dy5jZXJ0dW0ucGwvQ1BTMBMG # A1UdJQQMMAoGCCsGAQUFBwMDMA4GA1UdDwEB/wQEAwIHgDANBgkqhkiG9w0BAQsF # AAOCAgEAkC165c7/r6y3VeEEpNXas9bQs6ZpKPdJffHkf9xoPi4kWvAIWGc4ocG1 # DJLb18RXiDYShDmT5sb/6I08FeipKi2DNJkuOq6yOTJ3S7+hNFIZCyd6i7WKO8ea # P5I+FAbyJP4+5coZoMg45bUa9JoocaJCm+5n7WiCfN7/EQpClW5Trm4+ZMbp7EMN # F1uLJgGCMnN0SsoUarp7PHlqupMxMC4Uhhe+lAP2ytcSIU81L97/qjrADbLWqICk # 9il5iGM+aZndguq/cmfH9rJj4GRZHWnG6WwnzYD9+KgYlRI6em+/9dq+IRiXe2Bs # thUuIaFW7U2gWw8tBTEYm1UBLHdJx+L1gjJCLs5KT/wy5wU32wZxNDqPUQejUC1x # GvU3cKqmLgRq+yNf3gFVfzqIoggyM3U9wQvnk7nBtCkpjXS2hdx4yxzcmrlWsDHr # z6+6/jeyQySzbYUlFmKnc4n9Mw2soHOajEua5poFARVRS5KgUBuiiQ21YFNYzWBo # qGuECaaAI/C5rGxapMJ3dAOBnHw6NLqBet+ZXBJEccX5y89MLlOQu+jDmJP8HieR # qDLlwfhVZnw4RY8Rus43NZBwhNlVuOUXqocHKmJhKNlekda3qsJj93eQBQOxKJcc # w5O08q9jukpH2+yzFAj+7ll33DuNUgWptogc4Awtbx3glzcEvJQwggaCMIIEaqAD # AgECAhAo8HfBHDa9/l90MkdwJy4DMA0GCSqGSIb3DQEBDAUAMFYxCzAJBgNVBAYT # AlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xJDAiBgNVBAMT # G0NlcnR1bSBUaW1lc3RhbXBpbmcgMjAyMSBDQTAeFw0yNjAzMTEwNzM0NTRaFw0z # NjAyMjcwNzM0NTRaMFAxCzAJBgNVBAYTAlBMMSEwHwYDVQQKDBhBc3NlY28gRGF0 # YSBTeXN0ZW1zIFMuQS4xHjAcBgNVBAMMFUNlcnR1bSBUaW1lc3RhbXAgMjAyNjCC # AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALi9zfBw+xI12hi2F9uNQBNO # STkTIi13fuh3DiWybI5392bBfJw6tO7zDs7UqP/rejVf4xFTU3XNOPsuOFkP5SPF # snWwn3VJL+NhNhsuujvYsQtaQnvNo1wk46reTgws1L8OFEdKaxgyqT4zOQx81mLw # NZSqXNU9Rrb9oAJWJF4Mydz+C1ebu0D0+vgM3tqAQ8TU203fqgKCPqIdHloaFqH9 # eyR+8tnpmy2hnnN59ZOtmsuHeRwf5iTOhlhf0d/qqquLOSIGPgGVL1Hj5XBUox2O # E7tQRr+l/xxNbL6OuwBO4Aa2EbuxYg37cpXv5i2/lTL4NASB/duf9W4fjA3Ro+GP # +bC54n2OYiM3Cq8z92ejx8F5HWO2e4/75eC95B9tMw/eq7109GDyW2+2ut5Bn0o8 # MXJTERkyystWbqcnUkomA97qfiDCwvpWuOMdfTOksXe9S+xDxOJaCbiyTivgPulx # cT+tfQTRXBr5UwtPvc+INnafOEilzVHA11tv+pHcylryxBc08cUihf/ttqkZS0bm # x3VxQay8uohaTp0//ECA9vYGW51SKdJMJhXvKyIdBLy8WYNchTt8yRITv9Adxg9J # qGujh+TnP1bW3aQjFtlEl7SzgNeI8OVA/CJAWWUuRT3Au9ToOpHy/flrrknhN4he # Ew7/6ILMv4HSsj0YZ4otAgMBAAGjggFQMIIBTDB1BggrBgEFBQcBAQRpMGcwOwYI # KwYBBQUHMAKGL2h0dHA6Ly9zdWJjYS5yZXBvc2l0b3J5LmNlcnR1bS5wbC9jdHNj # YTIwMjEuY2VyMCgGCCsGAQUFBzABhhxodHRwOi8vc3ViY2Eub2NzcC1jZXJ0dW0u # Y29tMB8GA1UdIwQYMBaAFL5UAi+/QGxzQ86sCSVOnkNEGu7gMAwGA1UdEwEB/wQC # MAAwOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL3N1YmNhLmNybC5jZXJ0dW0ucGwv # Y3RzY2EyMDIxLmNybDAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDAOBgNVHQ8BAf8E # BAMCB4AwIgYDVR0gBBswGTAIBgZngQwBBAIwDQYLKoRoAYb2dwIFAQswHQYDVR0O # BBYEFCM5aiirmhKnpKfyH/lFmr+N/oIDMA0GCSqGSIb3DQEBDAUAA4ICAQBm/pOb # rAveTqYFPCSthxNVwBHTW4TfuBQY2KGCdMlH6ALjVPYf2XARNGMTXScR0JQ2/c2L # xLpoHHhRwxFf3d933DhFS165rYj6iPSQKm41rc9AMpTCjMdmai1aK9o870pOzTzL # RhWFVIxm+5Qf+t4V5z14tPoUsAWdfRKD1Zzvzfe5AHlE9rxOZcGROiULxs3Edf7Z # J8RZI0jzD9juj2oEX2XS7BVKuNCK1W0h1mjapv028yqo8UtZh5/1Ib48Yyp88BDY # Shh5PSGUUuS5tYXVfcduIPBe3PdNTYRYdT5VNxkwLgjMzIcr/6SH2fejFJDjnCxj # vXLuarErJg/IdI+hXdGIBDVOGv1zrkF4ktoQvFZIp5DIAYh0GwyUhc87qqn5UaYT # j2+iyiBDSNh7aGCrkuAnqg7Qh7frhX+QhMGeJ9SpLpnG76qN85hLyjvYR6gRYiLT # j8G4fxjqV400/buPw0rBo9yJZyq/8cGdCOLPOYf9qpefTcrZKeO9pg+UJHx8UABb # aTqizRxm8sUSEycccCCFhIit3AI/3wGuSOADeiA676NcQ7+dsP04YvzvdN7pTZNy # g672WpBDJdg0eItHl4yomvNeIOWh1qs4QqOW6TI8Ocsi4uSDTLorxLUDnBTwKQzz # pxd1YUctEgRh32R0J9FkFkeEruJU94RljFr1uDCCBrkwggShoAMCAQICEQCZo4AK # JlU7ZavcboSms+o5MA0GCSqGSIb3DQEBDAUAMIGAMQswCQYDVQQGEwJQTDEiMCAG # A1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVt # IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3Rl # ZCBOZXR3b3JrIENBIDIwHhcNMjEwNTE5MDUzMjE4WhcNMzYwNTE4MDUzMjE4WjBW # MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEu # MSQwIgYDVQQDExtDZXJ0dW0gQ29kZSBTaWduaW5nIDIwMjEgQ0EwggIiMA0GCSqG # SIb3DQEBAQUAA4ICDwAwggIKAoICAQCdI88EMCM7wUYs5zNzPmNdenW6vlxNur3r # Lfi+5OZ+U3iZIB+AspO+CC/bj+taJUbMbFP1gQBJUzDUCPx7BNLgid1TyztVLn52 # NKgxxu8gpyTr6EjWyGzKU/gnIu+bHAse1LCitX3CaOE13rbuHbtrxF2tPU8f253Q # gX6eO8yTbGps1Mg+yda3DcTsOYOhSYNCJiL+5wnjZ9weoGRtvFgMHtJg6i671OPX # IciiHO4Lwo2p9xh/tnj+JmCQEn5QU0NxzrOiRna4kjFaA9ZcwSaG7WAxeC/xoZSx # F1oK1UPZtKVt+yrsGKqWONoK6f5EmBOAVEK2y4ATDSkb34UD7JA32f+Rm0wsr5aj # zftDhA5mBipVZDjHpwzv8bTKzCDUSUuUmPo1govD0RwFcTtMXcfJtm1i+P2UNXad # PyYVKRxKQATHN3imsfBiNRdN5kiVVeqP55piqgxOkyt+HkwIA4gbmSc3hD8ke66t # 9MjlcNg73rZZlrLHsAIV/nJ0mmgSjBI/TthoGJDydekOQ2tQD2Dup/+sKQptalDl # ui59SerVSJg8gAeV7N/ia4mrGoiez+SqV3olVfxyLFt3o/OQOnBmjhKUANoKLYlK # mUpKEFI0PfoT8Q1W/y6s9LTI6ekbi0igEbFUIBE8KDUGfIwnisEkBw5KcBZ3XwnH # mfznwlKo8QIDAQABo4IBVTCCAVEwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU # 3XRdTADbe5+gdMqxbvc8wDLAcM0wHwYDVR0jBBgwFoAUtqFUOQLDoD+Oirz61Pgc # ptE6Dv0wDgYDVR0PAQH/BAQDAgEGMBMGA1UdJQQMMAoGCCsGAQUFBwMDMDAGA1Ud # HwQpMCcwJaAjoCGGH2h0dHA6Ly9jcmwuY2VydHVtLnBsL2N0bmNhMi5jcmwwbAYI # KwYBBQUHAQEEYDBeMCgGCCsGAQUFBzABhhxodHRwOi8vc3ViY2Eub2NzcC1jZXJ0 # dW0uY29tMDIGCCsGAQUFBzAChiZodHRwOi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwv # Y3RuY2EyLmNlcjA5BgNVHSAEMjAwMC4GBFUdIAAwJjAkBggrBgEFBQcCARYYaHR0 # cDovL3d3dy5jZXJ0dW0ucGwvQ1BTMA0GCSqGSIb3DQEBDAUAA4ICAQB1iFgP5Y9Q # KJpTnxDsQ/z0O23JmoZifZdEOEmQvo/79PQg9nLF/GJe6ZiUBEyDBHMtFRK0mXj3 # Qv3gL0sYXe+PPMfwmreJHvgFGWQ7XwnfMh2YIpBrkvJnjwh8gIlNlUl4KENTK5DL # qsYPEtRQCw7R6p4s2EtWyDDr/M58iY2UBEqfUU/ujR9NuPyKk0bEcEi62JGxauFY # zZ/yld13fHaZskIoq2XazjaD0pQkcQiIueL0HKiohS6XgZuUtCKA7S6CHttZEsOb # QJ1j2s0urIDdqF7xaXFVaTHKtAuMfwi0jXtF3JJphrJfc+FFILgCbX/uYBPBlbBI # P4Ht4xxk2GmfzMn7oxPITpigQFJFWuzTMUUgdRHTxaTSKRJ/6Uh7ki/pFjf9sUAS # WgxT69QF9Ki4JF5nBIujxZ2sOU9e1HSCJwOfK07t5nnzbs1LbHuAIGJsRJiQ6HX/ # DW1XFOlXY1rc9HufFhWU+7Uk+hFkJsfzqBz3pRO+5aI6u5abI4Qws4YaeJH7H7M8 # X/YNoaArZbV4Ql+jarKsE0+8XvC4DJB+IVcvC9Ydqahi09mjQse4fxfef0L7E3hh # o2O3bLDM6v60rIRUCi2fJT2/IRU5ohgyTch4GuYWefSBsp5NPJh4QRTP9DC3gc5Q # EKtbrTY0Ka87Web7/zScvLmvQBm8JDFpDjCCBrkwggShoAMCAQICEQDn/2nHOzXO # S5Em2HR8aKWHMA0GCSqGSIb3DQEBDAUAMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UE # ChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENl # cnRpZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBO # ZXR3b3JrIENBIDIwHhcNMjEwNTE5MDUzMjA3WhcNMzYwNTE4MDUzMjA3WjBWMQsw # CQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQw # IgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5nIDIwMjEgQ0EwggIiMA0GCSqGSIb3 # DQEBAQUAA4ICDwAwggIKAoICAQDpEh8ENe25XXrFppVBvoplf0530W0lddNmjtv4 # YSh/f7eDQKFaIqc7tHj7ox+u8vIsJZlroakUeMS3i3T8aJRC+eQs4FF0GqvkM6+W # ZO8kmzZfxmZaBYmMLs8FktgFYCzywmXeQ1fEExflee2OpbHVk665eXRHjH7MYZIz # Nnjl2m8Hy8ulB9mR8wL/W0v0pjKNT6G0sfrx1kk+3OGosFUb7yWNnVkWKU4qSxLv # 16kJ6oVJ4BSbZ4xMak6JLeB8szrK9vwGDpvGDnKCUMYL3NuviwH1x4gZG0JAXU3x # 2pOAz91JWKJSAmRy/l0s0l5bEYKolg+DMqVhlOANd8Yh5mkQWaMEvBRE/kAGzIqg # WhwzN2OsKIVtO8mf5sPWSrvyplSABAYa13rMYnzwfg08nljZHghquCJYCa/xHK9a # cev9UD7Y+usr15d7mrszzxhF1JOr1Mpup2chNSBlyOObhlSO16rwrffVrg/SzaKf # SndS5swRhr8bnDqNJY9TNyEYvBYpgF95K7p0g4LguR4A++Z1nFIHWVY5v0fNVZmg # zxD9uVo/gta3onGOQj3JCxgYx0KrCXu4yc9QiVwTFLWbNdHFSjBCt5/8Q9pLuRhV # ocdCunhcHudMS1CGQ/Rn0+7P+fzMgWdRKfEOh/hjLrnQ8BdJiYrZNxvIOhM2aa3z # EDHNwwIDAQABo4IBVTCCAVEwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUvlQC # L79AbHNDzqwJJU6eQ0Qa7uAwHwYDVR0jBBgwFoAUtqFUOQLDoD+Oirz61PgcptE6 # Dv0wDgYDVR0PAQH/BAQDAgEGMBMGA1UdJQQMMAoGCCsGAQUFBwMIMDAGA1UdHwQp # MCcwJaAjoCGGH2h0dHA6Ly9jcmwuY2VydHVtLnBsL2N0bmNhMi5jcmwwbAYIKwYB # BQUHAQEEYDBeMCgGCCsGAQUFBzABhhxodHRwOi8vc3ViY2Eub2NzcC1jZXJ0dW0u # Y29tMDIGCCsGAQUFBzAChiZodHRwOi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY3Ru # Y2EyLmNlcjA5BgNVHSAEMjAwMC4GBFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDov # L3d3dy5jZXJ0dW0ucGwvQ1BTMA0GCSqGSIb3DQEBDAUAA4ICAQC4k1l3yUwV/ZQH # CKCneqAs8EGTnwEUJLdDpokN/dMhKjK0rR5qX8nIIHzxpQR3TAw2IRw1Uxsr2Pli # G3bCFqSdQTUbfaTq6V3vBzEebDru9QFjqlKnxCF2h1jhLNFFplbPJiW+JSnJTh1f # KEqEdKdxgl9rVTvlxfEJ7exOn25MGbd/wGPwuSmMxRJVO0wnqgS7kmoJjNF9zqee # hFSDDP8ZVkWg4EZ2tIS0M3uZmByRr+1Lkwjjt8AtW83mVnZTyTsOb+FNfwJY7DS4 # FmWhkRbgcHRetreoTirPOr/ozyDKhT8MTSTf6Lttg6s6T/u08mDWw6HK04ZRDfQ9 # sb77QV8mKgO44WGP31vXnVKoWVJpFBjPvjL8/Zck/5wXX2iqjOaLStFOR/IQki+E # hn4zlcgVm22ZVCBPF+l8nAwUUShCtKuSU7GmZLKCmmxQMkSiWILTm8EtVD6AxnJh # oq8EnhjEEyUoflkeRF2WhFiVQOmWTwZRr44IxWGkNJC6tTorW5rl2Zl+2e9JLPYf # 3pStAPMDoPKIjVXd6NW2+fZrNUBeDo2eOa5Fn7Brs/HLQff5Xgris5MeUbdVgDrF # 8uxO6cLPvZPo63j62SsNg55pTWk9fUIF9iPoRbb4QurjoY/woI1RAOKtYtTic6aA # Jq3u83RIPpGXBSJKwx4KJAOZnCDCtTGCBqIwggaeAgEBMGowVjELMAkGA1UEBhMC # UEwxITAfBgNVBAoTGEFzc2VjbyBEYXRhIFN5c3RlbXMgUy5BLjEkMCIGA1UEAxMb # Q2VydHVtIENvZGUgU2lnbmluZyAyMDIxIENBAhBX5gfP8LabvnxCXoItEBa/MA0G # CWCGSAFlAwQCAQUAoIGEMBgGCisGAQQBgjcCAQwxCjAIoAKAAKECgAAwGQYJKoZI # hvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcC # ARUwLwYJKoZIhvcNAQkEMSIEINs9+2s5ADn92WYjqD45KcqX8kz8dA+xG6bxCyWI # 0SpcMA0GCSqGSIb3DQEBAQUABIIBgIUF9ZSe0WsbIiBfa2jOqX6LHpZ/4atkUMFG # oq29Au6jwtlMSsnM3nyNdqKTkQiotf9DQMRJJgTjVndNgyvd1R1LMuwweTepYOtp # hd9tqXXCjrUioMyJDn/IwdiHGZpMDqyvw81qmVyQ0/ljHELvniV8wF6dKIFyI/G0 # 7ANhF+ooD8VyFT7MiykmpsWr4MyopEU4+D8T2P7zSMslVvQ39CEDJ+IheMY8Ciyp # pmw7hFzMcVWcSdEz5fJWb9l974IURbIZkJ46wtas8w4bftszOJmpSpIRNY2YksAK # sX/1up/Nsqm66RLOWLxDIBP36Iga+tMvrCRzRo56wD+0NmcUvk+6O4guWMFZ66K4 # 2vkVPiivUYoiDN7GN8bojiwFvTPpiYaj/uRTYEQZwa+SABZIZdSas72gGoMz7dBN # 0+b8uRjDYjPKkFBetvL8VOYXjipalxQLxVc9RqOsg9gkG0PQvhM1PXGPEulU13qJ # nrbbs5chGBjoxwoe5V0weBfybpr1EKGCBAIwggP+BgkqhkiG9w0BCQYxggPvMIID # 6wIBATBqMFYxCzAJBgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0 # ZW1zIFMuQS4xJDAiBgNVBAMTG0NlcnR1bSBUaW1lc3RhbXBpbmcgMjAyMSBDQQIQ # KPB3wRw2vf5fdDJHcCcuAzANBglghkgBZQMEAgIFAKCCAVYwGgYJKoZIhvcNAQkD # MQ0GCyqGSIb3DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0yNjEwMTMwOTQxMTdaMDcG # CyqGSIb3DQEJEAIvMSgwJjAkMCIEIIW+kOEK0kONfMkotq9IsJqyCBd87PiwEmxY # 05EFJcQ8MD8GCSqGSIb3DQEJBDEyBDCQWwx1IocDEnNXsG5fQ7yPAf4v900yaBgn # iG1l6xDnxtsu0fLif3qDuQtmhWLgDVwwgZ8GCyqGSIb3DQEJEAIMMYGPMIGMMIGJ # MIGGBBRXFGhBDKha80JO+RZKUTYQ9NONmDBuMFqkWDBWMQswCQYDVQQGEwJQTDEh # MB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0 # dW0gVGltZXN0YW1waW5nIDIwMjEgQ0ECECjwd8EcNr3+X3QyR3AnLgMwDQYJKoZI # hvcNAQEBBQAEggIAY2FXA7aoPmms8ntuYlga0CRUyMw+95BMJmF7QCja3nYw9Af2 # JzFevOOixB6C/d8qg2XUWFXjqUiOlky+DoSUmKX7fCmmjW+7P/qGnOVZwCz4LAgv # pGlQFNoW9gpaMXVcG6drcScyMNQ2pnjWFFiSShU+UcibHtvS5wbUxfP3CJ7nfG7Y # LDrvS8ShWtsy75os8l8xHujHkrz1m6iDmXIvZE38Qdn00gEwdP5ekk7vDmeBkzpP # 7nilySXHkWZ+MVc0wlYbKa2fxkoR1Sb3+7HBuvtG4nyIz6hKg1a1dGW3l8YsfWeh # GK2GKl89xMrpZEgrvD1RgCK7vDUFXiehMRiCDBgj2TYWhfMbiPk5vNOgiui+xaeW # lFJ4ppB0yaKTBa6LhY92Xe5FwjuopLC1+UqUetH3/235ziqgnkenz0RtY4TRob/G # SxYPaNKhbCOb9upM1+NRmOG4org6+CVHVs43JYhQVXCfsrtO1QBfDnetWrugzAk7 # qOOVOr5xARj/UxFAzcUuXcdWWbPh4NBA+0inQplqVIM9u+N4zP+absqrgefeQyyg # /8xN2fbREUNmBIOy5k4/LHmi3t7Fi3bW7fxdWNfW9vyjvPMVMSMw45jmmwb0iZV8 # hzM5JgHb8xpXxwz6V+10V2m5gPVI6MsP1wzQsozjKNqLKuwFToIzwFsqCnc= # SIG # End signature block |