ComplianceDiagnosticIB.psm1

Import-Module "$PSScriptRoot\ComplianceDiagnosticUtils.psm1"


#region IB

function Initialize-IB{
    $global:IBControlVariables.fileData = $null
}

function Confirm-IBCommandsPresent {
    # Check if MIP Label Commands are present
    $command = Get-Command Get-Informationbarrierpolicy -ErrorAction SilentlyContinue
    if ($command -eq $null) {
        return $false
    }
    
    $command = Get-Command Get-Organizationsegment -ErrorAction SilentlyContinue
    if ($command -eq $null) {
        return $false
    }
    
    $command = Get-Command Get-InformationBarrierPoliciesApplicationStatus -ErrorAction SilentlyContinue
    if ($command -eq $null) {
        return $false
    }
    
    return $true
}

function Get-IBTabContent($TabObject){
    [Parameter(Mandatory=$true)]
    [Windows.Controls.TabItem] $TabObject

    # Collect diagnostic data from user
    $global:IBControlVariables.IBSupportDataTabContent = New-Object Windows.Controls.StackPanel
    $global:IBControlVariables.IBSupportDataTabContent.HorizontalAlignment = [Windows.HorizontalAlignment]::Center

    $IBDiagButton = Get-Button -ButtonName "Information Barrier" -Margin '10,50,10,10' -width 200 -HorizontalAlignment "Left"
    
    GetGlobalIBPol

    $IBPanelGrid = New-Object Windows.Controls.Grid
    $IBTopTabControl = Get-TopTabControl
    $IBPanelGrid.Children.Add($IBTopTabControl.TopTabControl) > $null
    
    $global:IBControlVariables.IBOutput = New-Object Windows.Controls.StackPanel

    $IBoutputPanelTemplate = Get-TemplateGrid

    $IBoutputPanelTemplate.Column1.Children.Add($IBDiagButton) > $null
    
    $blueColor = [System.Windows.Media.Color]::FromRgb(63, 119, 206)
    $supportDataHeader = Show-Text -Text "IB Support Data Template" -Color $blueColor -fontSize 20

    $global:IBControlVariables.IBSupportDataTabContent.Children.Add($supportDataHeader) > $null

    # Define Gather Support data in a table format and pinning all the Controlds to Table Grid$tableGrid = New-Object System.Windows.Controls.Grid
    $tableGrid = Get-Table -columns 4 -rows 7

    
    #Row 0

    $ImpactedUserSMTP = Show-Text -Text "Affected user email ID" -IsBold $false -margin "0,0,10,0" -VerticalAlignment "Center" -HorizontalAlignment "Left"
    Add-ControlToTableAt -TableObj $tableGrid -row 0 -column 1 -Control $ImpactedUserSMTP

    $global:IBControlVariables.ImpactedUserTextBox = Get-TextBox -Width 400 -Margin "0,0,10,0" -HorizontalAlignment "Left"
    Add-ControlToTableAt -TableObj $tableGrid -row 0 -column 2 -Control $global:IBControlVariables.ImpactedUserTextBox

    #Row 1
    $ImpactedDomain = Show-Text -Text "Enter Domain Info (Ex: Contoso.com)" -IsBold $false -margin "0,0,10,0" -VerticalAlignment "Center" -HorizontalAlignment "Left"
    Add-ControlToTableAt -TableObj $tableGrid -row 1 -column 1 -Control $ImpactedDomain

    $global:IBControlVariables.ImpactedDomainTextBox = Get-TextBox -Width 400 -Margin "0,0,10,0" -HorizontalAlignment "Left"
    Add-ControlToTableAt -TableObj $tableGrid -row 1 -column 2 -Control $global:IBControlVariables.ImpactedDomainTextBox

    #Row 2
    $dateTimeLabel = Show-Text -Text "Date & Time of issue (UTC)" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left"
    Add-ControlToTableAt -TableObj $tableGrid -row 2 -column 1 -Control $dateTimeLabel

    $dateTimeButton = Get-Button -ButtonName "Select date & Time" -Margin "0,0,10,0" -HorizontalAlignment "Left" -height 30 -width 220
    Add-ControlToTableAt -TableObj $tableGrid -row 2 -column 2 -Control $dateTimeButton

    $global:ContextScopeVariables["IBDateTimeLabel"] = Show-Text -Text "UTC Date Time" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left"
    Add-ControlToTableAt -TableObj $tableGrid -row 2 -column 3 -Control $global:ContextScopeVariables["IBDateTimeLabel"]
    
    $dateTimeButton.Add_Click({
        $global:ContextScopeVariables.DateTimeProp = "IBDateTime"
        $global:ContextScopeVariables["IBDateTime"] = ""
        Get-DateTimePickerDialog 
    })
    
    #Row 3
    $IBPolicy = Show-Text -Text "IB Policy" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left"
    Add-ControlToTableAt -TableObj $tableGrid -row 3 -column 1 -Control $IBPolicy

    $global:IBControlVariables.IBPolicycombo = Get-ComboBox  -Margin "0,5,10,5" -Width 400 -HorizontalAlignment "Left"
    $global:IBControlVariables.IBPolicycombo.ItemsSource = $global:ContextScopeVariables.IBPolicyDropDown
    Add-ControlToTableAt -TableObj $tableGrid -row 3 -column 2 -Control $global:IBControlVariables.IBPolicycombo


    #row 4
    $IBSegment = Show-Text -Text "IB segment" -IsBold $false -margin "0,0,10,0" -VerticalAlignment "Center" -HorizontalAlignment "Left"
    Add-ControlToTableAt -TableObj $tableGrid -row 4 -column 1 -Control $IBSegment

    $global:IBControlVariables.IBSegment = Get-ComboBox  -Margin "0,5,10,5" -Width 400 -HorizontalAlignment "Left"
    $global:IBControlVariables.IBSegment.ItemsSource = $global:ContextScopeVariables.SegmentsDropDown
    Add-ControlToTableAt -TableObj $tableGrid -row 4 -column 2 -Control $global:IBControlVariables.IBSegment   

    #row 5
    $global:IBControlVariables.BrowseAttachLabel = Show-Text -Text "Screenshot/ Fiddler /HAR / screen recording/ Other info?" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left"
    Add-ControlToTableAt -TableObj $tableGrid -row 5 -column 1 -Control $global:IBControlVariables.BrowseAttachLabel

    $global:IBControlVariables.IBBrowseAttachButton = Get-FileButton `
        -GlobalScopeName "IBControlVariables" `
        -GlobalVariableName "BrowsedFileLabel" `
        -GlobalFileListName "fileData" `
        -ButtonName "Browse Supporting Files" `
        -Margin "0,0,10,0" `
        -HorizontalAlignment "Left" `
        -height 30 `
        -width 220 `
        -VerticalAlignment "Center"
    Add-ControlToTableAt -TableObj $tableGrid -row 5 -column 2 -Control $global:IBControlVariables.IBBrowseAttachButton

    $global:IBControlVariables.BrowsedFileLabel = Show-Text -Text "Attached Files" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" 
    $FilesScrollViewer = New-Object Windows.Controls.ScrollViewer
    $FilesScrollViewer.VerticalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto
    $FilesScrollViewer.HorizontalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto
    $FilesScrollViewer.Content = $global:IBControlVariables.BrowsedFileLabel
    Add-ControlToTableAt -TableObj $tableGrid -row 6 -column 2 -Control $FilesScrollViewer
    $tableGrid.Margin = New-Object System.Windows.Thickness(10,30,10,10)
    $tableGrid.HorizontalAlignment = "Center"

    $global:IBControlVariables.IBSupportDataTabContent.Children.Add($tableGrid) > $null

    $IBoutputPanelTemplate.Column2.Children.Add($global:IBControlVariables.IBSupportDataTabContent ) > $null

    $DiagscrollViewer = New-Object Windows.Controls.ScrollViewer
    $DiagscrollViewer.VerticalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto
    $DiagscrollViewer.HorizontalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto
    $DiagscrollViewer.Content = $IBoutputPanelTemplate.Grid
    $IBTopTabControl.GatherSupportDataTabItem.Content = $DiagscrollViewer

    $global:IBControlVariables.IBSupportDataTabContent.Visibility = "hidden"

    $IBDiagButton.Add_Click({
        Initialize-IB
        $global:IBControlVariables.IBSupportDataTabContent.Visibility = "visible"
    })



    $IBExport = Get-Button -ButtonName "Export Support Data" 
    $IBExport.Margin = New-Object System.Windows.Thickness(10,50,10,10)
    $global:IBControlVariables.IBSupportDataTabContent.Children.Add($IBExport) > $null
    
    $IBExport.Add_Click({
    
        # Create a new SaveFileDialog object
        $Folder = Get-ExportFolder("ExportedIBData")
        if (!$Folder) {
            return
        }
        $filePath = $Folder + "\"+"IBExport.xmla"
            
        $supportData=@{}
        $supportData["ImpactedUser"] = $global:IBControlVariables.ImpactedUserTextBox.Text
        $supportData["ImpactedDomain"] = $global:IBControlVariables.ImpactedDomainTextBox.Text
        $supportData["IBPolicy"] = $global:IBControlVariables.IBPolicycombo.Text
        $supportData["IBSegment"] = $global:IBControlVariables.IBSegment.Text
        $supportData["AllIBPolicy"] = $global:ContextScopeVariables.IBPolicy
        $supportData["AllIBSegment"] = $global:ContextScopeVariables.Segments
        $supportData["PolicyApplication"]= $global:ContextScopeVariables.IBAppStatus
        $supportData["Forests"] = Get-ForestInfo
        $supportData["DateTime"] = $global:ContextScopeVariables["IBDateTime"]
      
    
    
        try {
            # Copy the files to the destination folder
            $supportData["SupportingFiles"] = Get-FileName($global:IBControlVariables.fileData)
            foreach ($file in $global:IBControlVariables.fileData) {
                # $destinationFile = Join-Path $zipFilePath (Split-Path $file -Leaf)
                Copy-Item $file $Folder -Force
            }
    
            # Save the object as an XMLA file
            $supportData | Export-Clixml -Path $filePath
    
            # Zip the destination folder
            CleanAndShowFolder -Folder $Folder -supportData $supportData -filePath $filePath
        }
        catch {
            [System.Windows.MessageBox]::Show("Failed to create zip file. Error message: $_", "Error", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error)
        }
    })
    $TabObject.Content = $IBPanelGrid
}


function GetGlobalIBPol {
    [System.Windows.Input.Mouse]::SetCursor([System.Windows.Input.Cursors]::Wait)
    Write-Host "Getting IB segments in your organization."
    $global:ContextScopeVariables.Segments = Get-Organizationsegment
    if ($global:ContextScopeVariables.Segments -ne $null)
    {
        if ($global:ContextScopeVariables.Segments.GetType().Name -eq "PSObject")
        {
            $global:ContextScopeVariables.SegmentsDropDown = @( $global:ContextScopeVariables.Segments.Name )
        }
        else
        {
            $global:ContextScopeVariables.SegmentsDropDown = $global:ContextScopeVariables.Segments.Name
        }
    }
    
    Write-Host "Getting IB policies in your organization."
    $global:ContextScopeVariables.IBPolicy=Get-Informationbarrierpolicy
    if ($global:ContextScopeVariables.Segments -ne $null)
    {
        if ($global:ContextScopeVariables.IBPolicy.GetType().Name -eq "PSObject")
        {
            $global:ContextScopeVariables.IBPolicyDropDown = @( $global:ContextScopeVariables.IBPolicy.Name )
        }
        else
        {
            $global:ContextScopeVariables.IBPolicyDropDown = $global:ContextScopeVariables.IBPolicy.Name
        }
    }

    Write-Host "Getting IB Application Status for your organization."
    $global:ContextScopeVariables.IBAppStatus=Get-InformationBarrierPoliciesApplicationStatus -ErrorAction SilentlyContinue
    [System.Windows.Input.Mouse]::SetCursor([System.Windows.Input.Cursors]::Arrow)
}

#endregion IB




Export-ModuleMember -Function *
# SIG # Begin signature block
# MIIn0AYJKoZIhvcNAQcCoIInwTCCJ70CAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDXxV7NS9+EYyaO
# 6lYiMIbzNEa/+mq8kTppH8vyLdTG/KCCDYUwggYDMIID66ADAgECAhMzAAADri01
# UchTj1UdAAAAAAOuMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD
# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
# b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p
# bmcgUENBIDIwMTEwHhcNMjMxMTE2MTkwODU5WhcNMjQxMTE0MTkwODU5WjB0MQsw
# CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u
# ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy
# b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
# AQD0IPymNjfDEKg+YyE6SjDvJwKW1+pieqTjAY0CnOHZ1Nj5irGjNZPMlQ4HfxXG
# yAVCZcEWE4x2sZgam872R1s0+TAelOtbqFmoW4suJHAYoTHhkznNVKpscm5fZ899
# QnReZv5WtWwbD8HAFXbPPStW2JKCqPcZ54Y6wbuWV9bKtKPImqbkMcTejTgEAj82
# 6GQc6/Th66Koka8cUIvz59e/IP04DGrh9wkq2jIFvQ8EDegw1B4KyJTIs76+hmpV
# M5SwBZjRs3liOQrierkNVo11WuujB3kBf2CbPoP9MlOyyezqkMIbTRj4OHeKlamd
# WaSFhwHLJRIQpfc8sLwOSIBBAgMBAAGjggGCMIIBfjAfBgNVHSUEGDAWBgorBgEE
# AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQUhx/vdKmXhwc4WiWXbsf0I53h8T8w
# VAYDVR0RBE0wS6RJMEcxLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJh
# dGlvbnMgTGltaXRlZDEWMBQGA1UEBRMNMjMwMDEyKzUwMTgzNjAfBgNVHSMEGDAW
# gBRIbmTlUAXTgqoXNzcitW2oynUClTBUBgNVHR8ETTBLMEmgR6BFhkNodHRwOi8v
# d3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNDb2RTaWdQQ0EyMDExXzIw
# MTEtMDctMDguY3JsMGEGCCsGAQUFBwEBBFUwUzBRBggrBgEFBQcwAoZFaHR0cDov
# L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNDb2RTaWdQQ0EyMDEx
# XzIwMTEtMDctMDguY3J0MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADggIB
# AGrJYDUS7s8o0yNprGXRXuAnRcHKxSjFmW4wclcUTYsQZkhnbMwthWM6cAYb/h2W
# 5GNKtlmj/y/CThe3y/o0EH2h+jwfU/9eJ0fK1ZO/2WD0xi777qU+a7l8KjMPdwjY
# 0tk9bYEGEZfYPRHy1AGPQVuZlG4i5ymJDsMrcIcqV8pxzsw/yk/O4y/nlOjHz4oV
# APU0br5t9tgD8E08GSDi3I6H57Ftod9w26h0MlQiOr10Xqhr5iPLS7SlQwj8HW37
# ybqsmjQpKhmWul6xiXSNGGm36GarHy4Q1egYlxhlUnk3ZKSr3QtWIo1GGL03hT57
# xzjL25fKiZQX/q+II8nuG5M0Qmjvl6Egltr4hZ3e3FQRzRHfLoNPq3ELpxbWdH8t
# Nuj0j/x9Crnfwbki8n57mJKI5JVWRWTSLmbTcDDLkTZlJLg9V1BIJwXGY3i2kR9i
# 5HsADL8YlW0gMWVSlKB1eiSlK6LmFi0rVH16dde+j5T/EaQtFz6qngN7d1lvO7uk
# 6rtX+MLKG4LDRsQgBTi6sIYiKntMjoYFHMPvI/OMUip5ljtLitVbkFGfagSqmbxK
# 7rJMhC8wiTzHanBg1Rrbff1niBbnFbbV4UDmYumjs1FIpFCazk6AADXxoKCo5TsO
# zSHqr9gHgGYQC2hMyX9MGLIpowYCURx3L7kUiGbOiMwaMIIHejCCBWKgAwIBAgIK
# YQ6Q0gAAAAAAAzANBgkqhkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNV
# BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv
# c29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlm
# aWNhdGUgQXV0aG9yaXR5IDIwMTEwHhcNMTEwNzA4MjA1OTA5WhcNMjYwNzA4MjEw
# OTA5WjB+MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE
# BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSgwJgYD
# VQQDEx9NaWNyb3NvZnQgQ29kZSBTaWduaW5nIFBDQSAyMDExMIICIjANBgkqhkiG
# 9w0BAQEFAAOCAg8AMIICCgKCAgEAq/D6chAcLq3YbqqCEE00uvK2WCGfQhsqa+la
# UKq4BjgaBEm6f8MMHt03a8YS2AvwOMKZBrDIOdUBFDFC04kNeWSHfpRgJGyvnkmc
# 6Whe0t+bU7IKLMOv2akrrnoJr9eWWcpgGgXpZnboMlImEi/nqwhQz7NEt13YxC4D
# dato88tt8zpcoRb0RrrgOGSsbmQ1eKagYw8t00CT+OPeBw3VXHmlSSnnDb6gE3e+
# lD3v++MrWhAfTVYoonpy4BI6t0le2O3tQ5GD2Xuye4Yb2T6xjF3oiU+EGvKhL1nk
# kDstrjNYxbc+/jLTswM9sbKvkjh+0p2ALPVOVpEhNSXDOW5kf1O6nA+tGSOEy/S6
# A4aN91/w0FK/jJSHvMAhdCVfGCi2zCcoOCWYOUo2z3yxkq4cI6epZuxhH2rhKEmd
# X4jiJV3TIUs+UsS1Vz8kA/DRelsv1SPjcF0PUUZ3s/gA4bysAoJf28AVs70b1FVL
# 5zmhD+kjSbwYuER8ReTBw3J64HLnJN+/RpnF78IcV9uDjexNSTCnq47f7Fufr/zd
# sGbiwZeBe+3W7UvnSSmnEyimp31ngOaKYnhfsi+E11ecXL93KCjx7W3DKI8sj0A3
# T8HhhUSJxAlMxdSlQy90lfdu+HggWCwTXWCVmj5PM4TasIgX3p5O9JawvEagbJjS
# 4NaIjAsCAwEAAaOCAe0wggHpMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRI
# bmTlUAXTgqoXNzcitW2oynUClTAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTAL
# BgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBRyLToCMZBD
# uRQFTuHqp8cx0SOJNDBaBgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsLm1pY3Jv
# c29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFf
# MDNfMjIuY3JsMF4GCCsGAQUFBwEBBFIwUDBOBggrBgEFBQcwAoZCaHR0cDovL3d3
# dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFf
# MDNfMjIuY3J0MIGfBgNVHSAEgZcwgZQwgZEGCSsGAQQBgjcuAzCBgzA/BggrBgEF
# BQcCARYzaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9kb2NzL3ByaW1h
# cnljcHMuaHRtMEAGCCsGAQUFBwICMDQeMiAdAEwAZQBnAGEAbABfAHAAbwBsAGkA
# YwB5AF8AcwB0AGEAdABlAG0AZQBuAHQALiAdMA0GCSqGSIb3DQEBCwUAA4ICAQBn
# 8oalmOBUeRou09h0ZyKbC5YR4WOSmUKWfdJ5DJDBZV8uLD74w3LRbYP+vj/oCso7
# v0epo/Np22O/IjWll11lhJB9i0ZQVdgMknzSGksc8zxCi1LQsP1r4z4HLimb5j0b
# pdS1HXeUOeLpZMlEPXh6I/MTfaaQdION9MsmAkYqwooQu6SpBQyb7Wj6aC6VoCo/
# KmtYSWMfCWluWpiW5IP0wI/zRive/DvQvTXvbiWu5a8n7dDd8w6vmSiXmE0OPQvy
# CInWH8MyGOLwxS3OW560STkKxgrCxq2u5bLZ2xWIUUVYODJxJxp/sfQn+N4sOiBp
# mLJZiWhub6e3dMNABQamASooPoI/E01mC8CzTfXhj38cbxV9Rad25UAqZaPDXVJi
# hsMdYzaXht/a8/jyFqGaJ+HNpZfQ7l1jQeNbB5yHPgZ3BtEGsXUfFL5hYbXw3MYb
# BL7fQccOKO7eZS/sl/ahXJbYANahRr1Z85elCUtIEJmAH9AAKcWxm6U/RXceNcbS
# oqKfenoi+kiVH6v7RyOA9Z74v2u3S5fi63V4GuzqN5l5GEv/1rMjaHXmr/r8i+sL
# gOppO6/8MO0ETI7f33VtY5E90Z1WTk+/gFcioXgRMiF670EKsT/7qMykXcGhiJtX
# cVZOSEXAQsmbdlsKgEhr/Xmfwb1tbWrJUnMTDXpQzTGCGaEwghmdAgEBMIGVMH4x
# CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt
# b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01p
# Y3Jvc29mdCBDb2RlIFNpZ25pbmcgUENBIDIwMTECEzMAAAOuLTVRyFOPVR0AAAAA
# A64wDQYJYIZIAWUDBAIBBQCggbAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQw
# HAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIKuz
# HXn94fkgHShnibc4PEEi45TN3CoKpG4PaFxrA99jMEQGCisGAQQBgjcCAQwxNjA0
# oBSAEgBNAGkAYwByAG8AcwBvAGYAdKEcgBpodHRwczovL3d3dy5taWNyb3NvZnQu
# Y29tIDANBgkqhkiG9w0BAQEFAASCAQAdPXPCg4wpk6GMrYtTPqX3He/FKPRS7seK
# AkX1ddu8UeKu/hV0ZTiIo9ME5ooES5IqLT+f73hhgL8l6IAcC7JDJj6sm2xdCRqu
# eChY3rZm2S8ft3UL3pKhcf7iv7MIhD+Rydh3X5pL6PzMPPhc5/ProPgEi6NnYxG/
# kpOrNbuaIyY20RNiIuKbX/SsLxCGKwMiiwbQa3bgqM0E6pNWxGeEp30K8gpHaXKr
# fJ0brmriLdUhmBbyzNGGSLIbvjCUxtftlLJBKQkAk8Cc6db7gZk7hHxrtWD2HPPl
# vLB72yHIoh9ua1dqqewTBc+CUl5nQF0GuHpVVI2H2Xy0Q4c2R12yoYIXKTCCFyUG
# CisGAQQBgjcDAwExghcVMIIXEQYJKoZIhvcNAQcCoIIXAjCCFv4CAQMxDzANBglg
# hkgBZQMEAgEFADCCAVkGCyqGSIb3DQEJEAEEoIIBSASCAUQwggFAAgEBBgorBgEE
# AYRZCgMBMDEwDQYJYIZIAWUDBAIBBQAEIL6gGmM/1WE7V/1XIHZARl6n1wzwshSX
# 2HiZJLrvXtB/AgZlup3MLmsYEzIwMjQwMjIwMjEyNTM4Ljg5MVowBIACAfSggdik
# gdUwgdIxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH
# EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xLTArBgNV
# BAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJhdGlvbnMgTGltaXRlZDEmMCQGA1UE
# CxMdVGhhbGVzIFRTUyBFU046MkFENC00QjkyLUZBMDExJTAjBgNVBAMTHE1pY3Jv
# c29mdCBUaW1lLVN0YW1wIFNlcnZpY2WgghF4MIIHJzCCBQ+gAwIBAgITMwAAAd6e
# SJ6WnyhEPQABAAAB3jANBgkqhkiG9w0BAQsFADB8MQswCQYDVQQGEwJVUzETMBEG
# A1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWlj
# cm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFt
# cCBQQ0EgMjAxMDAeFw0yMzEwMTIxOTA3MTJaFw0yNTAxMTAxOTA3MTJaMIHSMQsw
# CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u
# ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMS0wKwYDVQQLEyRNaWNy
# b3NvZnQgSXJlbGFuZCBPcGVyYXRpb25zIExpbWl0ZWQxJjAkBgNVBAsTHVRoYWxl
# cyBUU1MgRVNOOjJBRDQtNEI5Mi1GQTAxMSUwIwYDVQQDExxNaWNyb3NvZnQgVGlt
# ZS1TdGFtcCBTZXJ2aWNlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
# tIH0HIX1QgOEDrEWs6eLD/GwOXyxKL2s4I5dJI7hUxCOc0YCjlUfHSKKMwQwf0tj
# ZJQgGRVBLQyXqRH5NqCRQ9toSnCOFDWamuFGAlP+OVKeJzjZUMCjR6fgkjrGdegC
# hagrJJjz9E4gp2mmGAjs4lvhceTU/exfak1nfYsNjWS1yErX+FbI+VuVpcAdG7QT
# fKe/CtLz9tyisA07oOO7KzJL3NSav7DcfcAS9KCzZF64uPamQFx9bVQ8IW50t3sg
# 9nZELih1BwQ+djXaPKlg+dLrJkCzSkumrQpEVTIHXHrHo5Tvey52Ic43XqYTSXos
# tP06YajRL3gHGDc3/doTp9RudWh6ZVzsWQUu6bwqRlxtDtw4dIBYYnF0K+jk61S1
# F1Kp/zkWSUJcgiSDiybucz1OS1RV87SSnqTHubKyAPRCvHHr/mhqqfA5NYs3Mr4E
# KLUbudQPWm165e9Cnx8TUqlOOcb/U4l56HAo00+Ma33xXQGaiBlN7dLEGQ545DIs
# D77kfKD8vryl74Otmhk9cloZT+IGIWYv66X86Ld3zfMsAeUdCYf9UY0F9HA/6LG+
# qHKT8R5vC5dUlj6tPJ9tF+6H2fQBoyGE3HGDq0YrJlLgQASIPGsX2YBkTLx7yt/p
# 2Uohfl3dpAuj18N1rVlM7D5cBwC+Pb83cMtUZmUeceUCAwEAAaOCAUkwggFFMB0G
# A1UdDgQWBBRrMCZvGx5pqmB3HMrw6z6do9ASyDAfBgNVHSMEGDAWgBSfpxVdAF5i
# XYP05dJlpxtTNRnpcjBfBgNVHR8EWDBWMFSgUqBQhk5odHRwOi8vd3d3Lm1pY3Jv
# c29mdC5jb20vcGtpb3BzL2NybC9NaWNyb3NvZnQlMjBUaW1lLVN0YW1wJTIwUENB
# JTIwMjAxMCgxKS5jcmwwbAYIKwYBBQUHAQEEYDBeMFwGCCsGAQUFBzAChlBodHRw
# Oi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRp
# bWUtU3RhbXAlMjBQQ0ElMjAyMDEwKDEpLmNydDAMBgNVHRMBAf8EAjAAMBYGA1Ud
# JQEB/wQMMAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQEAwIHgDANBgkqhkiG9w0BAQsF
# AAOCAgEA4pTAexcNpwY69QiCzkcOA+zQtnWrIdLoLrB8qUtoPfq1l9ta3XH4YyJr
# NK7L4azGJUfOSExb4WoryCu4tBY3+w4Jf58ZSBP0tPbVxEilxmPj9kUi/C2QFywL
# PVcRSxdg5IlQ+K1jsTxtuV2aaFhnb2n5dCkhywb+r5iOSoFb2bDSu7Ux/ExNCz0x
# MOIPbyABUas8Dc3KSJIKG92pLtVf78twTP1RvO2j/DbxYDwc4IeoFNsNEeaI/swi
# P5JCYj1UhrJiwgZGO96WY1rQ69tT0IlLP818wSB/Y0cxlRhbwqpYSMiM98cgrFaU
# 0xiG5Z9ZFIdkIrIgA0DRokviygdC3PNnYyc1+NhjznXAdiMaDBSP+GUtGBA7lLfR
# nHvwaoEp/KWnblo5Yn+o+EL4NczaBdqMhduX6OkZxUA3C0UW6MIlF1lt4fVH5DjU
# WOAGDibc5MUMai3kNK5WRCCOS7uk5U+2V0TjpCUOD/ZaE+lNDFcfriw/UZ+QDBS2
# 3qutkz88LBEbqCKtiadNEsuyJwGGhguH4QQWNW+JcAZOTqme7yPH/hY9a7SOzPvI
# XODzb8UyoKT3Arcu/IsDIMc34XFscDG2DBp3ugtA8zRYYRF0HW6Y8IiJixJ/+Pv0
# Sod2g3BBhE5Wb5lfXRFfefptGYCeyR42GLTCdVp5WiAsx0YP6eowggdxMIIFWaAD
# AgECAhMzAAAAFcXna54Cm0mZAAAAAAAVMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYD
# VQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEe
# MBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3Nv
# ZnQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAxMDAeFw0yMTA5MzAxODIy
# MjVaFw0zMDA5MzAxODMyMjVaMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNo
# aW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
# cG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEw
# MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA5OGmTOe0ciELeaLL1yR5
# vQ7VgtP97pwHB9KpbE51yMo1V/YBf2xK4OK9uT4XYDP/XE/HZveVU3Fa4n5KWv64
# NmeFRiMMtY0Tz3cywBAY6GB9alKDRLemjkZrBxTzxXb1hlDcwUTIcVxRMTegCjhu
# je3XD9gmU3w5YQJ6xKr9cmmvHaus9ja+NSZk2pg7uhp7M62AW36MEBydUv626GIl
# 3GoPz130/o5Tz9bshVZN7928jaTjkY+yOSxRnOlwaQ3KNi1wjjHINSi947SHJMPg
# yY9+tVSP3PoFVZhtaDuaRr3tpK56KTesy+uDRedGbsoy1cCGMFxPLOJiss254o2I
# 5JasAUq7vnGpF1tnYN74kpEeHT39IM9zfUGaRnXNxF803RKJ1v2lIH1+/NmeRd+2
# ci/bfV+AutuqfjbsNkz2K26oElHovwUDo9Fzpk03dJQcNIIP8BDyt0cY7afomXw/
# TNuvXsLz1dhzPUNOwTM5TI4CvEJoLhDqhFFG4tG9ahhaYQFzymeiXtcodgLiMxhy
# 16cg8ML6EgrXY28MyTZki1ugpoMhXV8wdJGUlNi5UPkLiWHzNgY1GIRH29wb0f2y
# 1BzFa/ZcUlFdEtsluq9QBXpsxREdcu+N+VLEhReTwDwV2xo3xwgVGD94q0W29R6H
# XtqPnhZyacaue7e3PmriLq0CAwEAAaOCAd0wggHZMBIGCSsGAQQBgjcVAQQFAgMB
# AAEwIwYJKwYBBAGCNxUCBBYEFCqnUv5kxJq+gpE8RjUpzxD/LwTuMB0GA1UdDgQW
# BBSfpxVdAF5iXYP05dJlpxtTNRnpcjBcBgNVHSAEVTBTMFEGDCsGAQQBgjdMg30B
# ATBBMD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3Bz
# L0RvY3MvUmVwb3NpdG9yeS5odG0wEwYDVR0lBAwwCgYIKwYBBQUHAwgwGQYJKwYB
# BAGCNxQCBAweCgBTAHUAYgBDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQFMAMB
# Af8wHwYDVR0jBBgwFoAU1fZWy4/oolxiaNE9lJBb186aGMQwVgYDVR0fBE8wTTBL
# oEmgR4ZFaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMv
# TWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3JsMFoGCCsGAQUFBwEBBE4wTDBKBggr
# BgEFBQcwAoY+aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNS
# b29DZXJBdXRfMjAxMC0wNi0yMy5jcnQwDQYJKoZIhvcNAQELBQADggIBAJ1Vffwq
# reEsH2cBMSRb4Z5yS/ypb+pcFLY+TkdkeLEGk5c9MTO1OdfCcTY/2mRsfNB1OW27
# DzHkwo/7bNGhlBgi7ulmZzpTTd2YurYeeNg2LpypglYAA7AFvonoaeC6Ce5732pv
# vinLbtg/SHUB2RjebYIM9W0jVOR4U3UkV7ndn/OOPcbzaN9l9qRWqveVtihVJ9Ak
# vUCgvxm2EhIRXT0n4ECWOKz3+SmJw7wXsFSFQrP8DJ6LGYnn8AtqgcKBGUIZUnWK
# NsIdw2FzLixre24/LAl4FOmRsqlb30mjdAy87JGA0j3mSj5mO0+7hvoyGtmW9I/2
# kQH2zsZ0/fZMcm8Qq3UwxTSwethQ/gpY3UA8x1RtnWN0SCyxTkctwRQEcb9k+SS+
# c23Kjgm9swFXSVRk2XPXfx5bRAGOWhmRaw2fpCjcZxkoJLo4S5pu+yFUa2pFEUep
# 8beuyOiJXk+d0tBMdrVXVAmxaQFEfnyhYWxz/gq77EFmPWn9y8FBSX5+k77L+Dvk
# txW/tM4+pTFRhLy/AsGConsXHRWJjXD+57XQKBqJC4822rpM+Zv/Cuk0+CQ1Zyvg
# DbjmjJnW4SLq8CdCPSWU5nR0W2rRnj7tfqAxM328y+l7vzhwRNGQ8cirOoo6CGJ/
# 2XBjU02N7oJtpQUQwXEGahC0HVUzWLOhcGbyoYIC1DCCAj0CAQEwggEAoYHYpIHV
# MIHSMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH
# UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMS0wKwYDVQQL
# EyRNaWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRpb25zIExpbWl0ZWQxJjAkBgNVBAsT
# HVRoYWxlcyBUU1MgRVNOOjJBRDQtNEI5Mi1GQTAxMSUwIwYDVQQDExxNaWNyb3Nv
# ZnQgVGltZS1TdGFtcCBTZXJ2aWNloiMKAQEwBwYFKw4DAhoDFQBooFKKzLjLzqmX
# xfLbYIlkTETa86CBgzCBgKR+MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNo
# aW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
# cG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEw
# MA0GCSqGSIb3DQEBBQUAAgUA6X95hzAiGA8yMDI0MDIyMTAzMTgzMVoYDzIwMjQw
# MjIyMDMxODMxWjB0MDoGCisGAQQBhFkKBAExLDAqMAoCBQDpf3mHAgEAMAcCAQAC
# AhreMAcCAQACAhJVMAoCBQDpgMsHAgEAMDYGCisGAQQBhFkKBAIxKDAmMAwGCisG
# AQQBhFkKAwKgCjAIAgEAAgMHoSChCjAIAgEAAgMBhqAwDQYJKoZIhvcNAQEFBQAD
# gYEAi/SnVvKlI5zoid/vFePJ+3dYRtCaJC+5ALReHayBrQCVnszSnQkcj0CtyGVD
# 1q3P7Pluk/DUWYIuegwcny1JNfFOh5oUrX2SNK9p6kIfI64tZ13SJvKnTsvfdtEM
# qkyNvVzRuwjWnuN0QJpQtV2iiCZUa1BVKGfHqL2zKB4xKhYxggQNMIIECQIBATCB
# kzB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH
# UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQD
# Ex1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMAITMwAAAd6eSJ6WnyhEPQAB
# AAAB3jANBglghkgBZQMEAgEFAKCCAUowGgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJ
# EAEEMC8GCSqGSIb3DQEJBDEiBCBM7zreJPAFM9TTL7bfjCGMO+9V4ObeKqg5j8JB
# F00rvTCB+gYLKoZIhvcNAQkQAi8xgeowgecwgeQwgb0EII4+I58NwV4QEEkCf+YL
# cyCtPnD9TbPzUtgPjgdzfh17MIGYMIGApH4wfDELMAkGA1UEBhMCVVMxEzARBgNV
# BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv
# c29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAg
# UENBIDIwMTACEzMAAAHenkielp8oRD0AAQAAAd4wIgQgfWC9enJkErTjSzOejesk
# VV+3EGebPe9JDzs4tTq10aMwDQYJKoZIhvcNAQELBQAEggIAoRarkUmpz92gDhZE
# 4XEFvqDOeuIimV6GihJOHEV+bAZhx60ZAeO2MTYahAIzcAJVvauF3/XZYWDpIA4V
# hDYyBhflV3iheCKkViegWUBTlfm03sDA+48lTlfcQzGBwB0m0Xvuw7MoaTJksswy
# BczBzkNQVuY8EzjjCiit8JmlMOqFA/ejcWda0UMx5ZEKLkDt9bqOK4luaJwpNoeQ
# 8jPKx+gO/Iv+sZg0/zQLhWdWCzP4SOx/IAc1igepBNxGUkm85XnZbiSjYGdNyqmK
# 6j6VZwRVVzqYM8J+I4iGjyiQpOG33WJ0HvR1yAyfz/yQGqLQzt8H/uGjFldvBGEO
# dUZgWm2xrcoRGczRu4Ta4bqHibcWTgzgqYz7DGOtQHJquYb9PTa8zV9d7bVTYiwH
# zyv3BUnwQ8GxQbIgHs7vzHHwsEio8A2YfuTjCC3RW6uUTWLxT8OQwY8/g+3K4FzI
# U4x6k9Z2p9TRuyzPp1dZTUecXOI/isDHgFvUb7wtYZmqDcjKcLt6/J5U1u0vPU2F
# XjstPYaeBaDjFU8ZYha/pIPvwoAdsIHqGTpnNENdI5X/6gtMHzIR5or0862LOz5L
# nKTPJNoCOidOphaCDbmiKwOw1dvGwVR5Laiku/QekubtGJ0gsk49sLKj84yME3Bg
# kxVJjoOsaTAVQWnniU7VmOMbdXM=
# SIG # End signature block