Public/Import-IvantiWCNetworkDrive.ps1

function Import-IvantiWCNetworkDrive {
    <#
    .SYNOPSIS
        Imports Ivanti Workspace Control network drives into Citrix WEM.
    .DESCRIPTION
        Reads network drive configurations from an Ivanti Workspace Control Building Block XML file
        using Get-IvantiWCNetworkDrive, creates a WEM Network Drive action for each entry via
        New-WEMNetworkDrive, and assigns it to the appropriate AD targets via
        New-WEMNetworkDriveAssignment.
 
        Disabled network drives are skipped. AD users and groups are resolved from the WEM active
        domain; if a group cannot be found it is skipped with a warning. Assignment targets that do
        not yet exist in WEM are created automatically.
    .PARAMETER XmlFilePath
        Path to the Ivanti Workspace Control Building Block XML file.
    .PARAMETER DomainFqdn
        Domain FQDN to use when resolving AD objects. Defaults to the current user's DNS domain
        ($Env:USERDNSDOMAIN).
    .PARAMETER SiteId
        The ID of the WEM Configuration Set to import into. If not specified, uses the active
        Configuration Set from the current WEM API connection.
    .PARAMETER GUI
        If specified, opens a grid view to allow selection of which network drives to import.
    .EXAMPLE
        Import-IvantiWCNetworkDrive -XmlFilePath 'C:\temp\LAB-BB.xml' -SiteId 1
 
        Imports all enabled network drives from the building block into Configuration Set 1.
    .EXAMPLE
        Import-IvantiWCNetworkDrive -XmlFilePath 'C:\temp\LAB-BB.xml' -SiteId 1 -GUI
 
        Opens a selection grid before importing, letting you choose which network drives to process.
    .NOTES
        Function : Import-IvantiWCNetworkDrive
        Author : John Billekens
        Copyright : (c) John Billekens Consultancy
        Version : 2026.0410.1200
    #>

    [CmdletBinding(SupportsShouldProcess)]
    param (
        [Parameter(
            Mandatory = $true,
            HelpMessage = "Path to the Ivanti Workspace Control XML configuration file."
        )]
        [Parameter(ParameterSetName = 'BuildingBlock')]
        [ValidateScript({ Test-Path $_ -PathType Leaf })]
        [string]$XmlFilePath,

        [Parameter(
            Mandatory = $false,
            HelpMessage = "Domain FQDN to append to non-FQDN SMB paths."
        )]
        [string]$DomainFqdn = ${Env:USERDNSDOMAIN},

        [switch]$GUI,

        [Parameter(Mandatory = $false)]
        [Alias("ConfigurationSiteId")]
        [int]$SiteId
    )
    if ($script:WemApiConnection.IsConnected -ne $true) {
        throw "Not connected to WEM API. Please run Connect-WEMApi first."
    }
    if ($ActiveDomain = Get-WEMActiveDomain) {

        $Params = @{
            XmlFilePath = $XmlFilePath
            ExportFor   = "WEM"
        }
        if ($PSBoundParameters.ContainsKey('DomainFqdn')) {
            $Params.DomainFqdn = $DomainFqdn
        }
        # Get connection details. Throws an error if not connected.
        if ($Connection = Get-WemApiConnection) {
            Write-Verbose "Successfully retrieved WEM API connection details."
        } else {
            throw "Failed to retrieve WEM API connection details. Please ensure you are connected to the WEM API using Connect-WEMApi."
        }

        $ResolvedSiteId = 0
        if ($PSBoundParameters.ContainsKey('SiteId')) {
            $ResolvedSiteId = $SiteId
        } elseif ($Connection.ActiveSiteId) {
            $ResolvedSiteId = $Connection.ActiveSiteId
            Write-Verbose "Using active Configuration Set '$($Connection.ActiveSiteName)' (ID: $ResolvedSiteId)"
        } else {
            throw "No -SiteId was provided, and no active Configuration Set has been set. Please use Set-WEMActiveConfigurationSite or specify the -SiteId parameter."
        }
        $itemsToProcess = @(Get-IvantiWCNetworkDrive @Params)

        if ($GUI.IsPresent -eq $true) {
            $itemsToProcess = @(
                $itemsToProcess | Select-ObjectFromGrid -Title "Select Network Drives to import from Ivanti IWC" `
                    -ColumnsToShow @('Label', 'Enabled', 'DriveLetter', 'Action', 'NetworkPath', 'Description')
            )
        }
        if (-not $itemsToProcess -or $itemsToProcess.Count -eq 0) {
            Write-Warning "No network drives found to import."
            return
        }

        Write-Host "We got $($itemsToProcess.count) network drives"
        foreach ( $Item in $itemsToProcess ) {
            if ($Item.Success -and $Item.Success -eq $true) {
                continue
            }
            $Params = $Item.WEMNetworkDriveParams | ConvertTo-Hashtable

            $Forest = $ActiveDomain.Forest
            $Domain = $ActiveDomain.Domain
            $AvailableDomains = $ActiveDomain.AvailableDomains

            if (-not ($Item.Enabled -eq $true)) {
                Write-Host "Skipping Network Drive, Network Drive entry `"$($Item.Label)`" is not enabled" -ForegroundColor Yellow
                continue
            }

            if (-not $Forest -or -not $Domain) {
                Write-Error "Unable to retrieve Active Directory domain information from WEM. Please ensure you are connected to the WEM API and that the Active Directory domain is properly configured."
                return
            }
            try {
                Write-Verbose "Creating new WEM network drive $($Item.Label)"
                try {
                    $WEMNetworkDrive = New-WEMNetworkDrive @Params -SiteId $ResolvedSiteId -PassThru -ErrorAction Stop
                    Write-Host "Successfully created the network drive `"$($Item.Label)`"" -ForegroundColor Green
                } catch {
                    Write-Host "Error creating WEM network drive $($Item.Label), Error $($_.Exception.Message)" -ForegroundColor Red
                    Write-Host "At Line: $($_.InvocationInfo.ScriptLineNumber)" -ForegroundColor Red
                    Write-Host "Script Name: $($_.InvocationInfo.ScriptName)" -ForegroundColor Red
                    $Item | Add-Member -MemberType NoteProperty -Name "Success" -Value $false -Force
                    continue
                }
                # Check if Network Drive was created
                if (-not $WEMNetworkDrive) {
                    Write-Error "Network Drive $($Item.Label) not found in WEM"
                    return
                } else {
                    Write-Host "WEM network drive $($WEMNetworkDrive.DisplayName) with path $($WEMNetworkDrive.TargetPath) created successfully." -ForegroundColor Green
                }

                foreach ($WEMAssignment in $Item.WEMAssignments) {
                    if ($WEMAssignment.Name -like "*\*") {
                        $ADObjectName = $WEMAssignment.Name.Split('\')[-1]
                    } else {
                        $ADObjectName = $WEMAssignment.Name
                    }
                    $AssignmentDomain = $null
                    if ($WEMAssignment.DomainFQDN) {
                        $AssignmentDomain = $AvailableDomains | Where-Object { $_.fqdn -eq $WEMAssignment.DomainFQDN } | Select-Object -ExpandProperty fqdn -ErrorAction SilentlyContinue
                    }
                    if ($WEMAssignment.DomainNETBIOS) {
                        $AssignmentDomain = $AvailableDomains | Where-Object { $_.netBiosName -eq $WEMAssignment.DomainNETBIOS } | Select-Object -ExpandProperty fqdn -ErrorAction SilentlyContinue
                    }
                    if ([string]::IsNullOrEmpty($AssignmentDomain)) {
                        $AssignmentDomain = $Domain
                    }

                    $WEMAssignmentTargetGroupName = '{0}/{1}/{2}' -f $Forest, $AssignmentDomain, $ADObjectName
                    Write-Verbose "[$($WEMAssignment.Name)] Processing WEM assignment for target group/user: $WEMAssignmentTargetGroupName"
                    $WEMAssignmentTarget = Get-WEMAssignmentTarget -SiteId $ResolvedSiteId | Where-Object { $_.name -ieq $WEMAssignmentTargetGroupName -or $_.name -ieq $WEMAssignment.Name -or $_.sid -ieq $WEMAssignment.Sid }
                    if (-not $WEMAssignmentTarget) {
                        # Find the group or user in Active Directory using the WEM cmdlets
                        # The Where-Object ensures an exact match on the account name
                        if ($WEMAssignment.Type -ieq "user") {
                            $ADObject = Get-WEMADUser -Filter $ADObjectName -ForestName $Forest -DomainName $AssignmentDomain -ErrorAction SilentlyContinue | Where-Object { $_.AccountName -ieq $ADObjectName -or $_.Name -like "*/*/$ADObjectName" }
                            if ([String]::IsNullOrEmpty($ADObject)) {
                                Write-Host "Could not find user with name `"$($ADObjectName)`""
                                Write-Warning "Known issue, we are looking at this issue"
                                continue
                            }
                        } else {
                            $ADObject = Get-WEMADGroup -Filter $ADObjectName -ForestName $Forest -DomainName $AssignmentDomain -ErrorAction SilentlyContinue | Where-Object { $_.AccountName -ieq $ADObjectName -or $_.Name -like "*/*/$ADObjectName" }
                            if ([String]::IsNullOrEmpty($ADObject)) {
                                <# There seems to be a bug with long group names#>
                                $MaxLength = "$($ADObjectName)".Length
                                if ($MaxLength -gt 23) {
                                    $MaxLength = 23
                                }
                                $ADObjectAlternativeSearch = "$($ADObjectName)".Substring(0, $MaxLength)
                                $ADObject = Get-WEMADGroup -Filter $ADObjectAlternativeSearch -ForestName $Forest -DomainName $AssignmentDomain -ErrorAction SilentlyContinue | Where-Object { $_.AccountName -ieq $ADObjectName -or $_.Name -like "*/*/$ADObjectName" }
                            }
                            if ([String]::IsNullOrEmpty($ADObject)) {
                                Write-Host "Could not find group with name `"$($ADObjectName)`""
                                continue
                            }
                        }
                        # Create a new assignment target in WEM using the AD group's properties
                        # The -PassThru parameter outputs the newly created object to the pipeline
                        $WEMAssignmentTarget = New-WEMAssignmentTarget -SiteId $ResolvedSiteId -Sid $ADObject.Sid -Name $ADObject.AccountName -ForestName $ADObject.ForestName -DomainName $ADObject.DomainName -Type $ADObject.Type -PassThru
                        Write-Host "Created new WEM assignment target for AD group $($ADObject.Name)"
                    } else {
                        Write-Host "Found existing WEM assignment target for AD group $($ADObjectName)"
                    }
                    # Assign the network drive to the target group
                    Write-Verbose "[$($WEMAssignment.Name)] Building WEM network drive assignment"
                    $WEMAssignmentParams = $Item.WEMAssignmentParams | ConvertTo-Hashtable
                    Write-Verbose "[$($WEMAssignment.Name)] Creating WEM network drive assignment"
                    $WEMNetworkDriveAssignment = New-WEMNetworkDriveAssignment -SiteId $ResolvedSiteId -Target $WEMAssignmentTarget -NetworkDrive $WEMNetworkDrive -PassThru @WEMAssignmentParams
                    if ($WEMNetworkDriveAssignment) {
                        Write-Host "Successfully created WEM network drive assignment for $($WEMAssignment.Name)" -ForegroundColor Green
                    } else {
                        Write-Error "Failed to create WEM network drive assignment for $($WEMAssignment.Name)"
                    }
                }
                $Item | Add-Member -MemberType NoteProperty -Name "Success" -Value $true -Force
            } catch {
                $Item | Add-Member -MemberType NoteProperty -Name "Success" -Value $false -Force
                Write-Host "Error creating WEM network drive $($Item.Label), ErrorDetails`r`n $(Get-ExceptionDetails -ErrorRecord $_ -AsPlainText)" -ForegroundColor Red
                continue
            }
        }
    } else {
        Write-Error "Failed to retrieve active WEM AD Domain. Please ensure you configure the active domain correctly using Set-WEMActiveDomain [-ForestName <ForestName> -DomainName <DomainName>]."
    }

}

# SIG # Begin signature block
# MII6BQYJKoZIhvcNAQcCoII59jCCOfICAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDu7q3EXiCCe7nz
# oPTZPMpN+p0IgIHJAiLnJ+qMfYxKvaCCIiowggXMMIIDtKADAgECAhBUmNLR1FsZ
# lUgTecgRwIeZMA0GCSqGSIb3DQEBDAUAMHcxCzAJBgNVBAYTAlVTMR4wHAYDVQQK
# ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xSDBGBgNVBAMTP01pY3Jvc29mdCBJZGVu
# dGl0eSBWZXJpZmljYXRpb24gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAy
# MDAeFw0yMDA0MTYxODM2MTZaFw00NTA0MTYxODQ0NDBaMHcxCzAJBgNVBAYTAlVT
# MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xSDBGBgNVBAMTP01pY3Jv
# c29mdCBJZGVudGl0eSBWZXJpZmljYXRpb24gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRo
# b3JpdHkgMjAyMDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALORKgeD
# Bmf9np3gx8C3pOZCBH8Ppttf+9Va10Wg+3cL8IDzpm1aTXlT2KCGhFdFIMeiVPvH
# or+Kx24186IVxC9O40qFlkkN/76Z2BT2vCcH7kKbK/ULkgbk/WkTZaiRcvKYhOuD
# PQ7k13ESSCHLDe32R0m3m/nJxxe2hE//uKya13NnSYXjhr03QNAlhtTetcJtYmrV
# qXi8LW9J+eVsFBT9FMfTZRY33stuvF4pjf1imxUs1gXmuYkyM6Nix9fWUmcIxC70
# ViueC4fM7Ke0pqrrBc0ZV6U6CwQnHJFnni1iLS8evtrAIMsEGcoz+4m+mOJyoHI1
# vnnhnINv5G0Xb5DzPQCGdTiO0OBJmrvb0/gwytVXiGhNctO/bX9x2P29Da6SZEi3
# W295JrXNm5UhhNHvDzI9e1eM80UHTHzgXhgONXaLbZ7LNnSrBfjgc10yVpRnlyUK
# xjU9lJfnwUSLgP3B+PR0GeUw9gb7IVc+BhyLaxWGJ0l7gpPKWeh1R+g/OPTHU3mg
# trTiXFHvvV84wRPmeAyVWi7FQFkozA8kwOy6CXcjmTimthzax7ogttc32H83rwjj
# O3HbbnMbfZlysOSGM1l0tRYAe1BtxoYT2v3EOYI9JACaYNq6lMAFUSw0rFCZE4e7
# swWAsk0wAly4JoNdtGNz764jlU9gKL431VulAgMBAAGjVDBSMA4GA1UdDwEB/wQE
# AwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTIftJqhSobyhmYBAcnz1AQ
# T2ioojAQBgkrBgEEAYI3FQEEAwIBADANBgkqhkiG9w0BAQwFAAOCAgEAr2rd5hnn
# LZRDGU7L6VCVZKUDkQKL4jaAOxWiUsIWGbZqWl10QzD0m/9gdAmxIR6QFm3FJI9c
# Zohj9E/MffISTEAQiwGf2qnIrvKVG8+dBetJPnSgaFvlVixlHIJ+U9pW2UYXeZJF
# xBA2CFIpF8svpvJ+1Gkkih6PsHMNzBxKq7Kq7aeRYwFkIqgyuH4yKLNncy2RtNwx
# AQv3Rwqm8ddK7VZgxCwIo3tAsLx0J1KH1r6I3TeKiW5niB31yV2g/rarOoDXGpc8
# FzYiQR6sTdWD5jw4vU8w6VSp07YEwzJ2YbuwGMUrGLPAgNW3lbBeUU0i/OxYqujY
# lLSlLu2S3ucYfCFX3VVj979tzR/SpncocMfiWzpbCNJbTsgAlrPhgzavhgplXHT2
# 6ux6anSg8Evu75SjrFDyh+3XOjCDyft9V77l4/hByuVkrrOj7FjshZrM77nq81YY
# uVxzmq/FdxeDWds3GhhyVKVB0rYjdaNDmuV3fJZ5t0GNv+zcgKCf0Xd1WF81E+Al
# GmcLfc4l+gcK5GEh2NQc5QfGNpn0ltDGFf5Ozdeui53bFv0ExpK91IjmqaOqu/dk
# ODtfzAzQNb50GQOmxapMomE2gj4d8yu8l13bS3g7LfU772Aj6PXsCyM2la+YZr9T
# 03u4aUoqlmZpxJTG9F9urJh4iIAGXKKy7aIwggbCMIIEqqADAgECAhMzAABWh4wS
# B8KYYL2uAAAAAFaHMA0GCSqGSIb3DQEBDAUAMFoxCzAJBgNVBAYTAlVTMR4wHAYD
# VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKzApBgNVBAMTIk1pY3Jvc29mdCBJ
# RCBWZXJpZmllZCBDUyBFT0MgQ0EgMDQwHhcNMjYwNDE0MjExOTE0WhcNMjYwNDE3
# MjExOTE0WjCBgzELMAkGA1UEBhMCTkwxFjAUBgNVBAgTDU5vb3JkLUJyYWJhbnQx
# EjAQBgNVBAcTCVNjaGlqbmRlbDEjMCEGA1UEChMaSm9obiBCaWxsZWtlbnMgQ29u
# c3VsdGFuY3kxIzAhBgNVBAMTGkpvaG4gQmlsbGVrZW5zIENvbnN1bHRhbmN5MIIB
# ojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEA2Y6MEBzN5XmjmQCUBmrWP3Xv
# 3kqEH4vtMaEMUsDJnl9lgweqe71Z5LQiuq0PapngjF/YRk95c8rqxtQJRMFvsnkv
# snlFeBZCsPPOzSbRUnlkyHLDQmOc9nKI/KFbqmkds70bB2z+gLQVkEZepiMgApJH
# y/eODoUZTXv58Yl4DFFdEvwW/TyC0vOI112mqqFCyN653yeBLDJ8LMvTvEvEaBih
# OXU0zNV1y52HvqIWg2h+e5WWaB2yL7locAD4dub1ZinnnRYochg5egSx41hHZDwe
# dcDyvzihq5IdqB3IeFnN5+kByQbLajYmXK+xy8G1QnIjMorDLx2+xWFBdzkOeKdF
# lPnHTAEFqlpqBFlNSU2axvcXUCJmgMVLjNW2lDNVzdpD1pgJpg+SBz7XBQ96IxVj
# TBKmLcoAlurLXPN0nzyDaAhja17p1zSFBR0idEi/T6Pr++HanksyVQLIpe0A/k8F
# zkLtGLeLOknRmsOC5gOT7nvGa8fUyWTptZJ3JohPAgMBAAGjggHVMIIB0TAMBgNV
# HRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDA8BgNVHSUENTAzBgorBgEEAYI3YQEA
# BggrBgEFBQcDAwYbKwYBBAGCN2G789NTgYr4ukmC0/31KIOytcN0MB0GA1UdDgQW
# BBRPZasnKEZjDvsbRxzbBI296OsPPzAfBgNVHSMEGDAWgBSa8VR3dQyHFjdGoKze
# efn0f8F46TBnBgNVHR8EYDBeMFygWqBYhlZodHRwOi8vd3d3Lm1pY3Jvc29mdC5j
# b20vcGtpb3BzL2NybC9NaWNyb3NvZnQlMjBJRCUyMFZlcmlmaWVkJTIwQ1MlMjBF
# T0MlMjBDQSUyMDA0LmNybDB0BggrBgEFBQcBAQRoMGYwZAYIKwYBBQUHMAKGWGh0
# dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIw
# SUQlMjBWZXJpZmllZCUyMENTJTIwRU9DJTIwQ0ElMjAwNC5jcnQwVAYDVR0gBE0w
# SzBJBgRVHSAAMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly93d3cubWljcm9zb2Z0LmNv
# bS9wa2lvcHMvRG9jcy9SZXBvc2l0b3J5Lmh0bTANBgkqhkiG9w0BAQwFAAOCAgEA
# PH2f5SqSZRvE8G4BSeLiAJmu6YZ9MjnxZuMLlgjBRPX1/NF2oQ3U6OOK16b9Z6Cd
# Y/LCzdhDI1Dtvp36745TzKhUt3jCxONo5zFKbDlja/nR7Vly3qeKyQqop5hxzlEM
# xv3jSBBOLJUa5MppzjnYJEX7zInegb9213At3+fjYRNE2ZN5PwAdgo3jx2jHKIUE
# RVp3zMB2nwFEa6WPSL0rL5Qgu+jSXZDcZzBn8knxUTuMIHEAm3inxSsc7Kuy0Xw7
# eIPVndyZMC44RAbuMKWN2wv6FZJzecIfglGRamh/lpmgZLTHiTHmdkK/2mvAfQ6v
# cSHcngb3LYNGXkB0/BZf4PwTKL/vMLeaetQqyA+LuNXN20A6NSsE859WMNT/JjUU
# UJvF+3WUJ0mn2ufw79pLQyWAdXCHPaaDFLBlnGnN68eQ6w5tBOIxaFaPEtvCkBQ2
# c3QqHaiZS4FfLvP/XraDGEo8zALrYdWRaQxfUO+x2lo0/rn+d0BQoZPlc6c8KaIC
# RjzZDx6YqVlY1r4rWGzzWUkabduS7hsr1XM8l+OsD9gKI59ISz154ksW3NKtraSj
# z5GZFvgZB81TfXfbQmvdjXApiflx2HQ/ny3uLTiQGov+Zu5trrNTZsEJc3OGnVii
# Xx/vHOTUzGM4VgleXuALu9LifQxcgrVbZ39bw7vMGLowggbCMIIEqqADAgECAhMz
# AABWh4wSB8KYYL2uAAAAAFaHMA0GCSqGSIb3DQEBDAUAMFoxCzAJBgNVBAYTAlVT
# MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKzApBgNVBAMTIk1pY3Jv
# c29mdCBJRCBWZXJpZmllZCBDUyBFT0MgQ0EgMDQwHhcNMjYwNDE0MjExOTE0WhcN
# MjYwNDE3MjExOTE0WjCBgzELMAkGA1UEBhMCTkwxFjAUBgNVBAgTDU5vb3JkLUJy
# YWJhbnQxEjAQBgNVBAcTCVNjaGlqbmRlbDEjMCEGA1UEChMaSm9obiBCaWxsZWtl
# bnMgQ29uc3VsdGFuY3kxIzAhBgNVBAMTGkpvaG4gQmlsbGVrZW5zIENvbnN1bHRh
# bmN5MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEA2Y6MEBzN5XmjmQCU
# BmrWP3Xv3kqEH4vtMaEMUsDJnl9lgweqe71Z5LQiuq0PapngjF/YRk95c8rqxtQJ
# RMFvsnkvsnlFeBZCsPPOzSbRUnlkyHLDQmOc9nKI/KFbqmkds70bB2z+gLQVkEZe
# piMgApJHy/eODoUZTXv58Yl4DFFdEvwW/TyC0vOI112mqqFCyN653yeBLDJ8LMvT
# vEvEaBihOXU0zNV1y52HvqIWg2h+e5WWaB2yL7locAD4dub1ZinnnRYochg5egSx
# 41hHZDwedcDyvzihq5IdqB3IeFnN5+kByQbLajYmXK+xy8G1QnIjMorDLx2+xWFB
# dzkOeKdFlPnHTAEFqlpqBFlNSU2axvcXUCJmgMVLjNW2lDNVzdpD1pgJpg+SBz7X
# BQ96IxVjTBKmLcoAlurLXPN0nzyDaAhja17p1zSFBR0idEi/T6Pr++HanksyVQLI
# pe0A/k8FzkLtGLeLOknRmsOC5gOT7nvGa8fUyWTptZJ3JohPAgMBAAGjggHVMIIB
# 0TAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDA8BgNVHSUENTAzBgorBgEE
# AYI3YQEABggrBgEFBQcDAwYbKwYBBAGCN2G789NTgYr4ukmC0/31KIOytcN0MB0G
# A1UdDgQWBBRPZasnKEZjDvsbRxzbBI296OsPPzAfBgNVHSMEGDAWgBSa8VR3dQyH
# FjdGoKzeefn0f8F46TBnBgNVHR8EYDBeMFygWqBYhlZodHRwOi8vd3d3Lm1pY3Jv
# c29mdC5jb20vcGtpb3BzL2NybC9NaWNyb3NvZnQlMjBJRCUyMFZlcmlmaWVkJTIw
# Q1MlMjBFT0MlMjBDQSUyMDA0LmNybDB0BggrBgEFBQcBAQRoMGYwZAYIKwYBBQUH
# MAKGWGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9z
# b2Z0JTIwSUQlMjBWZXJpZmllZCUyMENTJTIwRU9DJTIwQ0ElMjAwNC5jcnQwVAYD
# VR0gBE0wSzBJBgRVHSAAMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly93d3cubWljcm9z
# b2Z0LmNvbS9wa2lvcHMvRG9jcy9SZXBvc2l0b3J5Lmh0bTANBgkqhkiG9w0BAQwF
# AAOCAgEAPH2f5SqSZRvE8G4BSeLiAJmu6YZ9MjnxZuMLlgjBRPX1/NF2oQ3U6OOK
# 16b9Z6CdY/LCzdhDI1Dtvp36745TzKhUt3jCxONo5zFKbDlja/nR7Vly3qeKyQqo
# p5hxzlEMxv3jSBBOLJUa5MppzjnYJEX7zInegb9213At3+fjYRNE2ZN5PwAdgo3j
# x2jHKIUERVp3zMB2nwFEa6WPSL0rL5Qgu+jSXZDcZzBn8knxUTuMIHEAm3inxSsc
# 7Kuy0Xw7eIPVndyZMC44RAbuMKWN2wv6FZJzecIfglGRamh/lpmgZLTHiTHmdkK/
# 2mvAfQ6vcSHcngb3LYNGXkB0/BZf4PwTKL/vMLeaetQqyA+LuNXN20A6NSsE859W
# MNT/JjUUUJvF+3WUJ0mn2ufw79pLQyWAdXCHPaaDFLBlnGnN68eQ6w5tBOIxaFaP
# EtvCkBQ2c3QqHaiZS4FfLvP/XraDGEo8zALrYdWRaQxfUO+x2lo0/rn+d0BQoZPl
# c6c8KaICRjzZDx6YqVlY1r4rWGzzWUkabduS7hsr1XM8l+OsD9gKI59ISz154ksW
# 3NKtraSjz5GZFvgZB81TfXfbQmvdjXApiflx2HQ/ny3uLTiQGov+Zu5trrNTZsEJ
# c3OGnViiXx/vHOTUzGM4VgleXuALu9LifQxcgrVbZ39bw7vMGLowggcoMIIFEKAD
# AgECAhMzAAAAFydFCQuLh6/GAAAAAAAXMA0GCSqGSIb3DQEBDAUAMGMxCzAJBgNV
# BAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xNDAyBgNVBAMT
# K01pY3Jvc29mdCBJRCBWZXJpZmllZCBDb2RlIFNpZ25pbmcgUENBIDIwMjEwHhcN
# MjYwMzI2MTgxMTMxWhcNMzEwMzI2MTgxMTMxWjBaMQswCQYDVQQGEwJVUzEeMBwG
# A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSswKQYDVQQDEyJNaWNyb3NvZnQg
# SUQgVmVyaWZpZWQgQ1MgRU9DIENBIDA0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
# MIICCgKCAgEAgsdk/gMPZioBlcyfk6tDzJ+PRt4rSLGKW8ewpS0kRxXtURC3T3Gd
# bCKljobEn8ussqhGqQpRh/SXvRVwNXEIGb76UG5IPkCJ1S6/9BD61QQsKzPepW0S
# Nj8TXgsFxvS7MltoRuikIIp7Q5jQgaOM6QyK9++6ZVXUpYmZulAe6x8JrwZ0dNkE
# +rZ66lqtoocwepUSVUxM7odDmn8yDHjJ2DNPsfr3uRDix3X4qvh14jH/SW+2Cx7W
# IMhyIiQO201i6hUixmk4e2ZW8W7C1wPdTjq6BKb+zo8xbrt7ZKQvRX5QOA6dhLqu
# Pqj5sVKnxqfk19IC0SafTSTs8yC43Ew965BRRW8VL9ccoOmr4rxQy7aCgYTNk3dd
# /LphNaTTmnGp7kmLTxyHkB5geoWhYuuGrywS8E0wJv0W4rfOtHBV0e9sKvuUIeIU
# pnsx6ilxEVj6VQXvgD6yeCKnPmj3jJiJKAlmUDtth5yzRVBUl44sMiG4L5R/yyAC
# RKk2n088Q2YCoZS1O86+oMLKt1jaXGECOjbsVp8Id1VQw8he6J0KirOS5e25XlTd
# GPFb6oBOOaacgW78Kjf0bp+XzAgkc92mDGNJGYSjvdnj+7eMx6meW0DAIGdLRNj8
# /429MIspFBfz3KDqqpN71S4kQ2LLer3dxhDDczKVFL0HLwRuOvgjiG8CAwEAAaOC
# AdwwggHYMA4GA1UdDwEB/wQEAwIBhjAQBgkrBgEEAYI3FQEEAwIBADAdBgNVHQ4E
# FgQUmvFUd3UMhxY3RqCs3nn59H/BeOkwVAYDVR0gBE0wSzBJBgRVHSAAMEEwPwYI
# KwYBBQUHAgEWM2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvRG9jcy9S
# ZXBvc2l0b3J5Lmh0bTAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTASBgNVHRMB
# Af8ECDAGAQH/AgEAMB8GA1UdIwQYMBaAFNlBKbAPD2Ns72nX9c0pnqRIajDmMHAG
# A1UdHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMv
# Y3JsL01pY3Jvc29mdCUyMElEJTIwVmVyaWZpZWQlMjBDb2RlJTIwU2lnbmluZyUy
# MFBDQSUyMDIwMjEuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0
# cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBJ
# RCUyMFZlcmlmaWVkJTIwQ29kZSUyMFNpZ25pbmclMjBQQ0ElMjAyMDIxLmNydDAN
# BgkqhkiG9w0BAQwFAAOCAgEAkHVaGf1NJt/JdoimmRZbMWr6baaDi8mkdWvWStk0
# hdZDpxSYTA7HuipAoLL3qIhI101XOl7fOiCh5++jZOamQdAV79ojEUNoIgCZmL2X
# JrLaGanwdjNynecJyYVCTrRf2+h7KknpWOp4axdOs6K9ZQ5g0IsQWXCwfc0dfkSk
# LKNY3pDcWLlJPh2jd5NUue6pNDv/2G5MFNJhCwltODebyAjGceU+XOzav+7i721Y
# QnQ+39m2aQOFO7zpAdaKAeAGhEd6Y6CdDGneSxcoujWvafWbv4ay3jo1ORSLUuWM
# bKr5X18QE4Sde+gppGLLSkZsrUh2eyYSkX1envWX7ZPzg2/wiuKRlQFarDn+N9+2
# 0BqzhxwkNyLzfYJp1Lg4fCXb24XqFjx8SDdRgebFImOfOLVze8XQ/CwkrEaib0PH
# u2t4GVk4FYroEbNUFqvjdBvTY3uiR5TdQoyXoYHvh+TxpLSY2vo7hhK9D/rpEpHC
# +qmmcRUE4d0gyO9Zb1vvt25fxM3ekjvDfVHcPq3qMr0Rwsk4krKZWUEgU1SXT5qN
# 6gqRrshxbT6OQgZ9/xT04qiXdzPQR6KindBvSpoOnxnALxcJyzVwNpKL+9u8EZYy
# 98qX6i+4gE/2J6cbpekcB0ZXDn/XQxoNUUb6/djT/wllVyG+vIHkdq71PzbH5rYx
# dcAwggeeMIIFhqADAgECAhMzAAAAB4ejNKN7pY4cAAAAAAAHMA0GCSqGSIb3DQEB
# DAUAMHcxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRp
# b24xSDBGBgNVBAMTP01pY3Jvc29mdCBJZGVudGl0eSBWZXJpZmljYXRpb24gUm9v
# dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAyMDAeFw0yMTA0MDEyMDA1MjBaFw0z
# NjA0MDEyMDE1MjBaMGMxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQg
# Q29ycG9yYXRpb24xNDAyBgNVBAMTK01pY3Jvc29mdCBJRCBWZXJpZmllZCBDb2Rl
# IFNpZ25pbmcgUENBIDIwMjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
# AQCy8MCvGYgo4t1UekxJbGkIVQm0Uv96SvjB6yUo92cXdylN65Xy96q2YpWCiTas
# 7QPTkGnK9QMKDXB2ygS27EAIQZyAd+M8X+dmw6SDtzSZXyGkxP8a8Hi6EO9Zcwh5
# A+wOALNQbNO+iLvpgOnEM7GGB/wm5dYnMEOguua1OFfTUITVMIK8faxkP/4fPdEP
# CXYyy8NJ1fmskNhW5HduNqPZB/NkWbB9xxMqowAeWvPgHtpzyD3PLGVOmRO4ka0W
# csEZqyg6efk3JiV/TEX39uNVGjgbODZhzspHvKFNU2K5MYfmHh4H1qObU4JKEjKG
# sqqA6RziybPqhvE74fEp4n1tiY9/ootdU0vPxRp4BGjQFq28nzawuvaCqUUF2PWx
# h+o5/TRCb/cHhcYU8Mr8fTiS15kRmwFFzdVPZ3+JV3s5MulIf3II5FXeghlAH9Cv
# icPhhP+VaSFW3Da/azROdEm5sv+EUwhBrzqtxoYyE2wmuHKws00x4GGIx7NTWznO
# m6x/niqVi7a/mxnnMvQq8EMse0vwX2CfqM7Le/smbRtsEeOtbnJBbtLfoAsC3TdA
# OnBbUkbUfG78VRclsE7YDDBUbgWt75lDk53yi7C3n0WkHFU4EZ83i83abd9nHWCq
# fnYa9qIHPqjOiuAgSOf4+FRcguEBXlD9mAInS7b6V0UaNwIDAQABo4ICNTCCAjEw
# DgYDVR0PAQH/BAQDAgGGMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBTZQSmw
# Dw9jbO9p1/XNKZ6kSGow5jBUBgNVHSAETTBLMEkGBFUdIAAwQTA/BggrBgEFBQcC
# ARYzaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9zaXRv
# cnkuaHRtMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMA8GA1UdEwEB/wQFMAMB
# Af8wHwYDVR0jBBgwFoAUyH7SaoUqG8oZmAQHJ89QEE9oqKIwgYQGA1UdHwR9MHsw
# eaB3oHWGc2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jv
# c29mdCUyMElkZW50aXR5JTIwVmVyaWZpY2F0aW9uJTIwUm9vdCUyMENlcnRpZmlj
# YXRlJTIwQXV0aG9yaXR5JTIwMjAyMC5jcmwwgcMGCCsGAQUFBwEBBIG2MIGzMIGB
# BggrBgEFBQcwAoZ1aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0
# cy9NaWNyb3NvZnQlMjBJZGVudGl0eSUyMFZlcmlmaWNhdGlvbiUyMFJvb3QlMjBD
# ZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMjAuY3J0MC0GCCsGAQUFBzABhiFo
# dHRwOi8vb25lb2NzcC5taWNyb3NvZnQuY29tL29jc3AwDQYJKoZIhvcNAQEMBQAD
# ggIBAH8lKp7+1Kvq3WYK21cjTLpebJDjW4ZbOX3HD5ZiG84vjsFXT0OB+eb+1TiJ
# 55ns0BHluC6itMI2vnwc5wDW1ywdCq3TAmx0KWy7xulAP179qX6VSBNQkRXzReFy
# jvF2BGt6FvKFR/imR4CEESMAG8hSkPYso+GjlngM8JPn/ROUrTaeU/BRu/1RFESF
# VgK2wMz7fU4VTd8NXwGZBe/mFPZG6tWwkdmA/jLbp0kNUX7elxu2+HtHo0QO5gdi
# KF+YTYd1BGrmNG8sTURvn09jAhIUJfYNotn7OlThtfQjXqe0qrimgY4Vpoq2MgDW
# 9ESUi1o4pzC1zTgIGtdJ/IvY6nqa80jFOTg5qzAiRNdsUvzVkoYP7bi4wLCj+ks2
# GftUct+fGUxXMdBUv5sdr0qFPLPB0b8vq516slCfRwaktAxK1S40MCvFbbAXXpAZ
# nU20FaAoDwqq/jwzwd8Wo2J83r7O3onQbDO9TyDStgaBNlHzMMQgl95nHBYMelLE
# HkUnVVVTUsgC0Huj09duNfMaJ9ogxhPNThgq3i8w3DAGZ61AMeF0C1M+mU5eucj1
# Ijod5O2MMPeJQ3/vKBtqGZg4eTtUHt/BPjN74SsJsyHqAdXVS5c+ItyKWg3Eforh
# ox9k3WgtWTpgV4gkSiS4+A09roSdOI4vrRw+p+fL4WrxSK5nMYIXMTCCFy0CAQEw
# cTBaMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u
# MSswKQYDVQQDEyJNaWNyb3NvZnQgSUQgVmVyaWZpZWQgQ1MgRU9DIENBIDA0AhMz
# AABWh4wSB8KYYL2uAAAAAFaHMA0GCWCGSAFlAwQCAQUAoF4wEAYKKwYBBAGCNwIB
# DDECMAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwLwYJKoZIhvcNAQkEMSIE
# IMapfMtk6PEuYbjZ1K/V03nILU+OYEGVPAg5wbDWirfEMA0GCSqGSIb3DQEBAQUA
# BIIBgEd5Iflww46pJWbAa2MZEyBWsNx52KeY6esIny8SurUVO6W1mA71FvHrVWav
# mv/zk8Cv3glGusAqhaCnG694yf2lVa80gfuNRjupCfvG1lPocravNSTRUZrc6g+O
# pNwZfVQ+uxypJd8HwdjuCVYLN5Sqw8cfCXWZ/VEuB5458xHKEtLNgltPGjU0JcM0
# 8D9WSK5k9dZdR6InPJSYG6aPWgaUZuf9qgtiGnxuLWtBv0uUF3IN6XrIzfYpGVF2
# Uo+g2dqwXuLHmQXcRDJDFawo57ExKmLWmFasOSmZr6DayucbVSUhujMYiVC6sprC
# k19G/5zVK9e9muP2Gb1di/MeZlGdtz6QDzOeNm9Ctxm5mKxGOn/DwjuRm76dE+I7
# ZcoyDtXqW+RWvr9ahKLj6SRdsuPsWZLK8baDh0fexJbfMd0oPvVMC/JIS9ZtXk3Q
# 6Rb6GJEJ3IDN82IA5SaT+zeSpxaRzMs5wLq8XbG8m7dwQXf3hzuqZ1YoQf3xFOVv
# 8HYccqGCFLEwghStBgorBgEEAYI3AwMBMYIUnTCCFJkGCSqGSIb3DQEHAqCCFIow
# ghSGAgEDMQ8wDQYJYIZIAWUDBAIBBQAwggFpBgsqhkiG9w0BCRABBKCCAVgEggFU
# MIIBUAIBAQYKKwYBBAGEWQoDATAxMA0GCWCGSAFlAwQCAQUABCBJPgKDpl+2XujC
# CtXcFE14n8jtuAhun2rUN8k+wJQQKAIGacZcchrHGBIyMDI2MDQxNTE5NDcwMy41
# MVowBIACAfSggemkgeYwgeMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5n
# dG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y
# YXRpb24xLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJhdGlvbnMgTGlt
# aXRlZDEnMCUGA1UECxMeblNoaWVsZCBUU1MgRVNOOjQ1MUEtMDVFMC1EOTQ3MTUw
# MwYDVQQDEyxNaWNyb3NvZnQgUHVibGljIFJTQSBUaW1lIFN0YW1waW5nIEF1dGhv
# cml0eaCCDykwggeCMIIFaqADAgECAhMzAAAABeXPD/9mLsmHAAAAAAAFMA0GCSqG
# SIb3DQEBDAUAMHcxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
# cG9yYXRpb24xSDBGBgNVBAMTP01pY3Jvc29mdCBJZGVudGl0eSBWZXJpZmljYXRp
# b24gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAyMDAeFw0yMDExMTkyMDMy
# MzFaFw0zNTExMTkyMDQyMzFaMGExCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNy
# b3NvZnQgQ29ycG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBQdWJsaWMgUlNB
# IFRpbWVzdGFtcGluZyBDQSAyMDIwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
# CgKCAgEAnnznUmP94MWfBX1jtQYioxwe1+eXM9ETBb1lRkd3kcFdcG9/sqtDlwxK
# oVIcaqDb+omFio5DHC4RBcbyQHjXCwMk/l3TOYtgoBjxnG/eViS4sOx8y4gSq8Zg
# 49REAf5huXhIkQRKe3Qxs8Sgp02KHAznEa/Ssah8nWo5hJM1xznkRsFPu6rfDHeZ
# eG1Wa1wISvlkpOQooTULFm809Z0ZYlQ8Lp7i5F9YciFlyAKwn6yjN/kR4fkquUWf
# GmMopNq/B8U/pdoZkZZQbxNlqJOiBGgCWpx69uKqKhTPVi3gVErnc/qi+dR8A2Mi
# Az0kN0nh7SqINGbmw5OIRC0EsZ31WF3Uxp3GgZwetEKxLms73KG/Z+MkeuaVDQQh
# eangOEMGJ4pQZH55ngI0Tdy1bi69INBV5Kn2HVJo9XxRYR/JPGAaM6xGl57Ei95H
# Uw9NV/uC3yFjrhc087qLJQawSC3xzY/EXzsT4I7sDbxOmM2rl4uKK6eEpurRduOQ
# 2hTkmG1hSuWYBunFGNv21Kt4N20AKmbeuSnGnsBCd2cjRKG79+TX+sTehawOoxfe
# OO/jR7wo3liwkGdzPJYHgnJ54UxbckF914AqHOiEV7xTnD1a69w/UTxwjEugpIPM
# IIE67SFZ2PMo27xjlLAHWW3l1CEAFjLNHd3EQ79PUr8FUXetXr0CAwEAAaOCAhsw
# ggIXMA4GA1UdDwEB/wQEAwIBhjAQBgkrBgEEAYI3FQEEAwIBADAdBgNVHQ4EFgQU
# a2koOjUvSGNAz3vYr0npPtk92yEwVAYDVR0gBE0wSzBJBgRVHSAAMEEwPwYIKwYB
# BQUHAgEWM2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvRG9jcy9SZXBv
# c2l0b3J5Lmh0bTATBgNVHSUEDDAKBggrBgEFBQcDCDAZBgkrBgEEAYI3FAIEDB4K
# AFMAdQBiAEMAQTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFMh+0mqFKhvK
# GZgEByfPUBBPaKiiMIGEBgNVHR8EfTB7MHmgd6B1hnNodHRwOi8vd3d3Lm1pY3Jv
# c29mdC5jb20vcGtpb3BzL2NybC9NaWNyb3NvZnQlMjBJZGVudGl0eSUyMFZlcmlm
# aWNhdGlvbiUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMjAu
# Y3JsMIGUBggrBgEFBQcBAQSBhzCBhDCBgQYIKwYBBQUHMAKGdWh0dHA6Ly93d3cu
# bWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwSWRlbnRpdHkl
# MjBWZXJpZmljYXRpb24lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHkl
# MjAyMDIwLmNydDANBgkqhkiG9w0BAQwFAAOCAgEAX4h2x35ttVoVdedMeGj6TuHY
# RJklFaW4sTQ5r+k77iB79cSLNe+GzRjv4pVjJviceW6AF6ycWoEYR0LYhaa0ozJL
# U5Yi+LCmcrdovkl53DNt4EXs87KDogYb9eGEndSpZ5ZM74LNvVzY0/nPISHz0Xva
# 71QjD4h+8z2XMOZzY7YQ0Psw+etyNZ1CesufU211rLslLKsO8F2aBs2cIo1k+aHO
# hrw9xw6JCWONNboZ497mwYW5EfN0W3zL5s3ad4Xtm7yFM7Ujrhc0aqy3xL7D5FR2
# J7x9cLWMq7eb0oYioXhqV2tgFqbKHeDick+P8tHYIFovIP7YG4ZkJWag1H91KlEL
# GWi3SLv10o4KGag42pswjybTi4toQcC/irAodDW8HNtX+cbz0sMptFJK+KObAnDF
# HEsukxD+7jFfEV9Hh/+CSxKRsmnuiovCWIOb+H7DRon9TlxydiFhvu88o0w35JkN
# bJxTk4MhF/KgaXn0GxdH8elEa2Imq45gaa8D+mTm8LWVydt4ytxYP/bqjN49D9NZ
# 81coE6aQWm88TwIf4R4YZbOpMKN0CyejaPNN41LGXHeCUMYmBx3PkP8ADHD1J2Cr
# /6tjuOOCztfp+o9Nc+ZoIAkpUcA/X2gSMkgHAPUvIdtoSAHEUKiBhI6JQivRepyv
# Wcl+JYbYbBh7pmgAXVswggefMIIFh6ADAgECAhMzAAAAXGFMAKan8ukjAAAAAABc
# MA0GCSqGSIb3DQEBDAUAMGExCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3Nv
# ZnQgQ29ycG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBQdWJsaWMgUlNBIFRp
# bWVzdGFtcGluZyBDQSAyMDIwMB4XDTI2MDEwODE4NTkwNloXDTI3MDEwNzE4NTkw
# NlowgeMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH
# EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xLTArBgNV
# BAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJhdGlvbnMgTGltaXRlZDEnMCUGA1UE
# CxMeblNoaWVsZCBUU1MgRVNOOjQ1MUEtMDVFMC1EOTQ3MTUwMwYDVQQDEyxNaWNy
# b3NvZnQgUHVibGljIFJTQSBUaW1lIFN0YW1waW5nIEF1dGhvcml0eTCCAiIwDQYJ
# KoZIhvcNAQEBBQADggIPADCCAgoCggIBAK41jM5VeZNHd4NtVlUxNoOHqf6e/Tgn
# DjNbq/s5M3WhNLEEiHKrpAowFqcDZ5ek7KpDRW9xeBwLlLPdoyCV1fIpHv1swh4t
# U9C1dIKyOusuN32al13lVCrgd8qBqKw8sW/rKenXHaDW94g2HlX5ssQWnVcKpZYI
# R3UpExCmRSQtIVEFloWZvo3PcwatECZTifG3TAhX/bTBKXOFoUpqWk/SFLAj7WxU
# LE3wfyuWCH7SMY1mAIkSdcrDdI7/AkSNGFkw9pRIYRftzAKvOqP/LWGcD5rwZvB9
# nSUJA+YyuNty/HePVUvpV5wWel2F/I/kCksfkJKRe01iGIWLuYbzz34yLP4Jyvtr
# A+IU/Uu8BH0JMNkfPi5r8DmviM56Ef0BTt4Q/G6UDDLQEHLA6Xu2kreAox7HBDKA
# cWll7l3tM+K5XMrCS1uH2ujgKQPByl1QcJGDKw065mvxZ3rR/0MuSKihAVGH+aJx
# nHzYNRMOUzkK1yXg2zgd6Nk1Eav4a93tX2Qq5kXpeZba132ohkYvh5vnXkjQVQ9H
# Jwfe+J+09lUpgNuSHwb/gjzi2Z8+Hg9pwe7okJ2QLQGw5TQRkw/xK7aH02aDBXOT
# zo1Uft/UmEVxbCzFnGFGAjcr0RwfnGFaIyyrF5uZmSsWKCF2o7v7LOjNlneWSSoF
# aKRhODuKRjw/AgMBAAGjggHLMIIBxzAdBgNVHQ4EFgQUrvsyHJEYZEQ5bnTgWgMS
# J7ok52kwHwYDVR0jBBgwFoAUa2koOjUvSGNAz3vYr0npPtk92yEwbAYDVR0fBGUw
# YzBhoF+gXYZbaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWlj
# cm9zb2Z0JTIwUHVibGljJTIwUlNBJTIwVGltZXN0YW1waW5nJTIwQ0ElMjAyMDIw
# LmNybDB5BggrBgEFBQcBAQRtMGswaQYIKwYBBQUHMAKGXWh0dHA6Ly93d3cubWlj
# cm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwUHVibGljJTIwUlNB
# JTIwVGltZXN0YW1waW5nJTIwQ0ElMjAyMDIwLmNydDAMBgNVHRMBAf8EAjAAMBYG
# A1UdJQEB/wQMMAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQEAwIHgDBmBgNVHSAEXzBd
# MFEGDCsGAQQBgjdMg30BATBBMD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jv
# c29mdC5jb20vcGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0wCAYGZ4EMAQQCMA0G
# CSqGSIb3DQEBDAUAA4ICAQCFdtA33LEkhAWdgIW55V5nT1ZG/VaQ4M2yBBDuIKUf
# 20fPW0PqluLQtPcodrXGZDeCiON3Op3kUTXAYwBpm+7YPMrJbRlZgMQPsFtbSdHC
# 9bET0NJV8oXDGEWBOQe7lwwH05+Pa17xB2/mmVenWWtrZX11I8BoFjcP2DwZSJ5X
# 1G6TTe6GYJl99H58ihs7Tv/TEZP7c8mj6eVeOCsiyKGXpRTYJL9yltt6cKKccmcr
# aVSjMTv43bmpLLL1WCq+y/T3HEtjXizKXRo5m3TE69UgiosqZ66LeH0dvFB9u1+B
# 7EtDjTPvCyc4n83+W3vm9BqzBmvf3ESgwt4J5KHK+CoyKieaRBdP3rVOLouk3MaF
# kAFHthWlf6rzh/0DopuXxqYby3Eot1c530MqQJ31v72xJMSe5Qs+zK55qsKg22vc
# k6b2mwhD/ZNh66YeBsVY2kS9ahkGMtR+OgPz0DnDi+OeR60bwiZHJifwyHMTcGuT
# 9pUnp7nCt6e0vIhhtmJ1tlEIMurW4SYtUKiULzP6SLdq8ys1+BUohCht/tgi+ibW
# fTSno7veBC7xaJi6JskqA/E8PdEzUOWHabwYiSHXlZMbobOTR0Dk3IzaqgUUX+E2
# xsfmVj2outhvWZ55c1/PfLK1p4yzRe9+rY3V4Ni0ORGUQWhefgkNYspB1jZiXDq8
# gzGCA9QwggPQAgEBMHgwYTELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29m
# dCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFB1YmxpYyBSU0EgVGlt
# ZXN0YW1waW5nIENBIDIwMjACEzMAAABcYUwApqfy6SMAAAAAAFwwDQYJYIZIAWUD
# BAIBBQCgggEtMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAvBgkqhkiG9w0B
# CQQxIgQgYd7RR2qaQ13ZlYd8IU7wfcc3pX0397iFZVR7Lw0kqHYwgd0GCyqGSIb3
# DQEJEAIvMYHNMIHKMIHHMIGgBCD3umpBh3duMPkt6ItkJtOzRwBRt1Q8I513q8lr
# fqDu3DB8MGWkYzBhMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENv
# cnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUHVibGljIFJTQSBUaW1lc3Rh
# bXBpbmcgQ0EgMjAyMAITMwAAAFxhTACmp/LpIwAAAAAAXDAiBCCtxyL1vsc4jEog
# EftiDcSvcNrpDzR88tAef6LIuMqF9DANBgkqhkiG9w0BAQsFAASCAgCaGtwaiKH1
# seJBCiE8OPe1TkX8fdqiJWFd2rrxnnJqVVEqbpoyZ7um0fmwJH7OGoaXhZp1zmMX
# H2RCaRLjSYgA+PxitiEys5VgTKB4PahgvNbpqmNxHX5kpmc8a3meHjfv2HFkZHST
# gBXXXgMVWqQmNi2aHX4I5Xs77yD23Iuq3g8F0xjPRTgBLP6QH1ocEvGennlQCPPt
# AxiRnCRZoJ1cYr6Xpc+BiqXt+p874XN94niHxbatTK1N70DG+IFZ7IJvBxLioIAv
# SEugV9+B4r6Y8urEQND890CUNzo2NensHrPYNBtJx92yIktaztAI3/+nGF1tCpAc
# BRu1uF7JucdKFI+a4c1bA56ZKei8jXwQnos42VwZOnv6QNTd3xbV0e+8UiVt/ook
# ayBT0Y7SD/QabZO3T9qqoI0sdtpRSKznXMx07hZrdHT7ZDzcZbtQn1yA17YLcy0B
# cQMiGIyZsM59ET5ldeISCdzfNFcVfO75wgVFXKX4A07L1gepGiD8lOw6GG1EqS2z
# x5xJn/GZGX9y1S5TAlzBLD23g6Hc6tV/rhAgx79tYiSWFwX1ypfYE7l4z/lygpPi
# iTCdJ1vzkXUQfXqlDDhOswIHvV0CEf+O7kK3Wh0F684avGaT+VFcoAzVxUpkhr4/
# wbJIJ9b6vGOy5iF0u7/uDY0N6oW+OiWB0w==
# SIG # End signature block