public/Write-ConsoleResult.ps1

function Write-ConsoleResult {
    <#
        .SYNOPSIS
            Closes an item line with a colored status block, and records the item.
 
        .DESCRIPTION
            Fills the unused part of the progress field with the fill character, so a failed item
            still shows how far it got, writes the detail right aligned in front of the status, and
            writes the status right aligned at the line width.
 
            Unless NoRecord is used, the item is counted in the summary, appended to the log and
            passed to LogAction.
 
        .PARAMETER Status
            The outcome: OK, FAIL, WARN or SKIP. Drives the color, the tally and the record.
 
        .PARAMETER ErrorRecord
            The exception behind a FAIL. Its message fills the detail when none was given, and is
            stored on the record as Error and repeated in the summary.
 
        .PARAMETER Detail
            Overrides anything set with Set-ConsoleStepDetail. On FAIL without a detail, the
            exception message from ErrorRecord is used instead.
 
            A detail is never truncated. If it does not fit next to the status it becomes a note,
            wrapped to the line width.
 
        .PARAMETER Note
            Text always written on its own line underneath, whether or not it would have fitted.
            Overrides anything set with Set-ConsoleStepNote.
 
        .PARAMETER ShowDuration
            Print the elapsed time for this item, whatever the ShowDuration setting says. Use
            -ShowDuration:$false to suppress it when the setting has it on globally. The duration
            travels with the detail: if the detail ends up in a note, so does the duration. A
            duration on its own never creates a note.
 
        .PARAMETER NoRecord
            Render the line but do not count or log it. Used by Write-ConsoleSummary so the summary
            does not appear in its own totals.
 
        .EXAMPLE
            Write-ConsoleResult -Status OK
 
        .EXAMPLE
            Write-ConsoleResult -Status OK -Detail '340 found'
    #>

    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true)]
        [ValidateSet('OK', 'FAIL', 'WARN', 'SKIP')]
        [string]$Status,

        [Parameter(Mandatory = $false)]
        [AllowNull()]
        [AllowEmptyString()]
        [string]$Detail,

        [Parameter(Mandatory = $false)]
        [AllowNull()]
        [AllowEmptyString()]
        [string]$Note,

        [Parameter(Mandatory = $false)]
        [switch]$ShowDuration,

        [Parameter(Mandatory = $false)]
        [AllowNull()]
        [System.Management.Automation.ErrorRecord]$ErrorRecord,

        [Parameter(Mandatory = $false)]
        [switch]$NoRecord
    )

    $cfg = $script:ConsoleStatus

    # Closing is idempotent, so a catch or a finally can close whatever was left open without
    # knowing how far the work got. A second close writes nothing and records nothing.
    if (-not $cfg.ItemOpen) {
        return
    }

    $cfg.ItemOpen = $false
    $colors = @{
        OK   = 'Green'
        FAIL = 'Red'
        WARN = 'Yellow'
        SKIP = 'DarkGray'
    }

    $milliseconds = 0

    if ($null -ne $cfg.Stopwatch) {
        $cfg.Stopwatch.Stop()
        $milliseconds = [int]$cfg.Stopwatch.ElapsedMilliseconds
        $cfg.Stopwatch = $null
    }

    # Detail precedence: parameter, step, exception message.
    $detailText = ''

    if ($PSBoundParameters.ContainsKey('Detail')) {
        $detailText = Format-SingleLine -Text $Detail
    } elseif (-not [string]::IsNullOrEmpty($cfg.Detail)) {
        $detailText = $cfg.Detail
    } elseif ($Status -eq 'FAIL' -and $null -ne $ErrorRecord) {
        $detailText = Format-SingleLine -Text $ErrorRecord.Exception.Message
    }
    $noteText = ''

    if ($PSBoundParameters.ContainsKey('Note')) {
        $noteText = Format-SingleLine -Text $Note
    } elseif (-not [string]::IsNullOrEmpty($cfg.Note)) {
        $noteText = $cfg.Note
    }

    # Switch overrides the setting. Summary lines never show their own duration.
    $withDuration = $cfg.ShowDuration

    if ($PSBoundParameters.ContainsKey('ShowDuration')) {
        $withDuration = [bool]$ShowDuration
    }

    $text = $detailText

    if ($withDuration -and -not $NoRecord) {
        $duration = Format-Duration -Milliseconds $milliseconds
        $text = if ([string]::IsNullOrEmpty($text)) { $duration } else { "$text $duration" }
    }
    $room = $cfg.FieldWidth - $cfg.Ticks - 2   # one fill character in front, one space behind
    $inline = ''
    $notes = New-Object -TypeName 'System.Collections.Generic.List[string]'

    if ($room -ge 4 -and -not [string]::IsNullOrEmpty($text) -and $text.Length -le $room) {
        $inline = $text
    } elseif ($room -ge 4 -and -not [string]::IsNullOrEmpty($detailText) -and $detailText.Length -le $room) {
        # Detail fits, duration does not: drop the duration.
        $inline = $detailText
    } elseif (-not [string]::IsNullOrEmpty($detailText)) {
        # Neither fits: the detail becomes a note and takes the duration with it.
        $notes.Add($text)
    }

    if (-not [string]::IsNullOrEmpty($noteText)) {
        $notes.Add($noteText)
    }

    $fill = $cfg.FieldWidth - $cfg.Ticks

    if (-not [string]::IsNullOrEmpty($inline)) {
        Write-HostText -Text ([string]$cfg.FillChar * ($fill - $inline.Length - 1)) -NoNewline -Color 'DarkGray'
        Write-HostText -Text " $inline" -NoNewline -Color 'Gray'
    } elseif ($fill -gt 0) {
        Write-HostText -Text ([string]$cfg.FillChar * $fill) -NoNewline -Color 'DarkGray'
    }

    # Gap between the field and the status block.
    Write-HostText -Text ' ' -NoNewline

    $inner = $cfg.StatusWidth - 2
    $left = [int][Math]::Floor(($inner - $Status.Length) / 2)
    $block = $Status.PadLeft($Status.Length + $left).PadRight($inner)

    Write-HostText -Text '[' -NoNewline -Color 'DarkGray'
    Write-HostText -Text $block -NoNewline -Color $colors[$Status]
    Write-HostText -Text ']' -Color 'DarkGray'
    foreach ($entry in $notes) {
        Write-ConsoleNoteBlock -Text $entry
    }

    $cfg.Detail = ''
    $cfg.Note = ''

    if ($NoRecord) {
        return
    }

    $script:ConsoleStatusTally[$Status]++

    $record = [PSCustomObject]@{
        Timestamp  = (Get-Date).ToString('o')
        Section    = $cfg.Section
        Label      = $cfg.CurrentLabel
        Value      = $cfg.CurrentValue
        Detail     = $detailText
        Note       = $noteText
        Status     = $Status
        DurationMs = $milliseconds
        Error      = if ($null -ne $ErrorRecord) { Format-SingleLine -Text $ErrorRecord.Exception.Message } else { '' }
    }

    $script:ConsoleStatusLog.Add($record)

    if ($null -ne $cfg.LogAction) {
        try {
            $null = & $cfg.LogAction $record
        } catch {
            if (-not $script:LogActionWarned) {
                $script:LogActionWarned = $true
                Write-Warning -Message "LogAction threw an exception and will be reported only once: $($_.Exception.Message)"
            }
        }
    }
}

# SIG # Begin signature block
# MII6AgYJKoZIhvcNAQcCoII58zCCOe8CAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBRhvRfMyQXZJNI
# E6VJdC6HRHzVRqt7KMsLEjyNBvtPw6CCIiYwggXMMIIDtKADAgECAhBUmNLR1FsZ
# 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
# 03u4aUoqlmZpxJTG9F9urJh4iIAGXKKy7aIwggbAMIIEqKADAgECAhMzAAQyFPAY
# SugxouNXAAAABDIUMA0GCSqGSIb3DQEBDAUAMFoxCzAJBgNVBAYTAlVTMR4wHAYD
# VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKzApBgNVBAMTIk1pY3Jvc29mdCBJ
# RCBWZXJpZmllZCBDUyBFT0MgQ0EgMDMwHhcNMjYwODExMjAwMzQ0WhcNMjYwODE0
# MjAwMzQ0WjCBgzELMAkGA1UEBhMCTkwxFjAUBgNVBAgTDU5vb3JkLUJyYWJhbnQx
# EjAQBgNVBAcTCVNjaGlqbmRlbDEjMCEGA1UEChMaSm9obiBCaWxsZWtlbnMgQ29u
# c3VsdGFuY3kxIzAhBgNVBAMTGkpvaG4gQmlsbGVrZW5zIENvbnN1bHRhbmN5MIIB
# ojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAl2pkW+UFmY9d2Kcm7Z8wApSf
# 2dHEsgry/XBR2+rZFXU6NR/8sfKW0Djh0yw/PpCKJG69CDyklZRDwjLpJL3brooU
# e4iUMF7XO/28YR8iiGPPR0rDSmJj9Z02wOgeCmdW9VxLcCgFa9079oB1LvJuAlFJ
# 13+BdZ5xfQjlULe/RFLHbCynnDCKZNewx2x3vQ6ySbiLXm9bWQX2PQtIs4cma/1B
# wobcm2uS+LKPv8f3ZMaQJi0+ig3lf/xhsPPxz+fxf+Lx6lKSA+NLo7if9u4KHemA
# 6fmQinE/19Vs0Ih0aeEoNjzDlJMz7Qf9pUpOiQ6fZwejmYASKS3wxcu56YGVIK08
# ZIeyKFO9nFQ+1jp4ojgV9mAjl/XfQmZ+QDelGcD4XqMEQBDWprScS2KkNENSHe0U
# VtYGnDc8dbzMOJYxLVGsnWM8pps7z4B0IQIJNsVL/CYpF3S7UhZJyfOLyzZaZDKq
# r7aBenR2VW1WYlDk+KtvgS+11jrlKEltzBYm0lc1AgMBAAGjggHTMIIBzzAMBgNV
# HRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDA6BgNVHSUEMzAxBgorBgEEAYI3YQEA
# BggrBgEFBQcDAwYZKwYBBAGCN2HK9PELgrHSgxH33KNOluu6MTAdBgNVHQ4EFgQU
# fU2TCJo1YcxscqAZk3GlzoyzeW0wHwYDVR0jBBgwFoAUa16lNMMFxWJKIVqOq3Ng
# YtSsY4UwZwYDVR0fBGAwXjBcoFqgWIZWaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
# L3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwSUQlMjBWZXJpZmllZCUyMENTJTIwRU9D
# JTIwQ0ElMjAwMy5jcmwwdAYIKwYBBQUHAQEEaDBmMGQGCCsGAQUFBzAChlhodHRw
# Oi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMElE
# JTIwVmVyaWZpZWQlMjBDUyUyMEVPQyUyMENBJTIwMDMuY3J0MFQGA1UdIARNMEsw
# SQYEVR0gADBBMD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
# cGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0wDQYJKoZIhvcNAQEMBQADggIBADVM
# Raa+z8SOmFvQ/jMHIi5omZ80bW9uDvA++DM0WKcI05jqXD1RbKP/BoqJa3wICSFx
# yIV5qJXtM3UV1+/U591POTI2GYUrSdrHHbAnJUHkmmx+H6MxuCuamQzz7Yl4I3L5
# EbbAtQThwvBarD5f27jKh5xS+TOVzGo8CR8r3E5RjKhhAGQeKq7rRma7iKZBvTeK
# CzOel+eUoqqXPGHN7pqWqqy/WVO2ErH43fjvFViXI7fPxy257J1OpIOLD7ofm+St
# x2jQV7rv4iGAPnEnxpM1ZWt1oNffPJ9sawsjhoeZ/VM0MMJ6mZsfKOMJQvcCUI7L
# Xq1QqhWURvGVlwWbl16ywiK1iNQjAFf6NmpQumD0kMO0CmL6VN/CXCelqP5zGDwL
# DfSuf4/6HBq3goPY/8J6ZoKzKlc4H/fWtsdL6pA+Q+lcTr3aqKz0fXJ94zwLdHQE
# TnPiGX2hlQVntCNOEhhARIda1S2wUiFLv11JbMicpskPDv/l4rlYyGwKFu1ecz+J
# JJWzhCbIcp6O2v+t8pEU2LG4bhCmn3nWa17UTDo5vJeVOI8vYOoNYGw6GV9ctS+e
# k6MemZXh/nNkHk9tbxX75ps3ar93h22Bs0HXC2im64sANJCsWEXPf8Xram9rOkGp
# nEtZHWVkVFX1lsftyqV1MB57/OazLgvkkN+uy196MIIGwDCCBKigAwIBAgITMwAE
# MhTwGEroMaLjVwAAAAQyFDANBgkqhkiG9w0BAQwFADBaMQswCQYDVQQGEwJVUzEe
# MBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSswKQYDVQQDEyJNaWNyb3Nv
# ZnQgSUQgVmVyaWZpZWQgQ1MgRU9DIENBIDAzMB4XDTI2MDgxMTIwMDM0NFoXDTI2
# MDgxNDIwMDM0NFowgYMxCzAJBgNVBAYTAk5MMRYwFAYDVQQIEw1Ob29yZC1CcmFi
# YW50MRIwEAYDVQQHEwlTY2hpam5kZWwxIzAhBgNVBAoTGkpvaG4gQmlsbGVrZW5z
# IENvbnN1bHRhbmN5MSMwIQYDVQQDExpKb2huIEJpbGxla2VucyBDb25zdWx0YW5j
# eTCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBAJdqZFvlBZmPXdinJu2f
# MAKUn9nRxLIK8v1wUdvq2RV1OjUf/LHyltA44dMsPz6QiiRuvQg8pJWUQ8Iy6SS9
# 266KFHuIlDBe1zv9vGEfIohjz0dKw0piY/WdNsDoHgpnVvVcS3AoBWvdO/aAdS7y
# bgJRSdd/gXWecX0I5VC3v0RSx2wsp5wwimTXsMdsd70Oskm4i15vW1kF9j0LSLOH
# Jmv9QcKG3Jtrkviyj7/H92TGkCYtPooN5X/8YbDz8c/n8X/i8epSkgPjS6O4n/bu
# Ch3pgOn5kIpxP9fVbNCIdGnhKDY8w5STM+0H/aVKTokOn2cHo5mAEikt8MXLuemB
# lSCtPGSHsihTvZxUPtY6eKI4FfZgI5f130JmfkA3pRnA+F6jBEAQ1qa0nEtipDRD
# Uh3tFFbWBpw3PHW8zDiWMS1RrJ1jPKabO8+AdCECCTbFS/wmKRd0u1IWScnzi8s2
# WmQyqq+2gXp0dlVtVmJQ5Pirb4EvtdY65ShJbcwWJtJXNQIDAQABo4IB0zCCAc8w
# DAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCB4AwOgYDVR0lBDMwMQYKKwYBBAGC
# N2EBAAYIKwYBBQUHAwMGGSsGAQQBgjdhyvTxC4Kx0oMR99yjTpbrujEwHQYDVR0O
# BBYEFH1NkwiaNWHMbHKgGZNxpc6Ms3ltMB8GA1UdIwQYMBaAFGtepTTDBcViSiFa
# jqtzYGLUrGOFMGcGA1UdHwRgMF4wXKBaoFiGVmh0dHA6Ly93d3cubWljcm9zb2Z0
# LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMElEJTIwVmVyaWZpZWQlMjBDUyUy
# MEVPQyUyMENBJTIwMDMuY3JsMHQGCCsGAQUFBwEBBGgwZjBkBggrBgEFBQcwAoZY
# aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQl
# MjBJRCUyMFZlcmlmaWVkJTIwQ1MlMjBFT0MlMjBDQSUyMDAzLmNydDBUBgNVHSAE
# TTBLMEkGBFUdIAAwQTA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNyb3NvZnQu
# Y29tL3BraW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMA0GCSqGSIb3DQEBDAUAA4IC
# AQA1TEWmvs/Ejphb0P4zByIuaJmfNG1vbg7wPvgzNFinCNOY6lw9UWyj/waKiWt8
# CAkhcciFeaiV7TN1Fdfv1OfdTzkyNhmFK0naxx2wJyVB5Jpsfh+jMbgrmpkM8+2J
# eCNy+RG2wLUE4cLwWqw+X9u4yoecUvkzlcxqPAkfK9xOUYyoYQBkHiqu60Zmu4im
# Qb03igsznpfnlKKqlzxhze6alqqsv1lTthKx+N347xVYlyO3z8ctueydTqSDiw+6
# H5vkrcdo0Fe67+IhgD5xJ8aTNWVrdaDX3zyfbGsLI4aHmf1TNDDCepmbHyjjCUL3
# AlCOy16tUKoVlEbxlZcFm5dessIitYjUIwBX+jZqULpg9JDDtApi+lTfwlwnpaj+
# cxg8Cw30rn+P+hwat4KD2P/CemaCsypXOB/31rbHS+qQPkPpXE692qis9H1yfeM8
# C3R0BE5z4hl9oZUFZ7QjThIYQESHWtUtsFIhS79dSWzInKbJDw7/5eK5WMhsChbt
# XnM/iSSVs4QmyHKejtr/rfKRFNixuG4Qpp951mte1Ew6ObyXlTiPL2DqDWBsOhlf
# XLUvnpOjHpmV4f5zZB5PbW8V++abN2q/d4dtgbNB1wtopuuLADSQrFhFz3/F62pv
# azpBqZxLWR1lZFRV9ZbH7cqldTAee/zmsy4L5JDfrstfejCCBygwggUQoAMCAQIC
# EzMAAAAVBT5uGY6TKdkAAAAAABUwDQYJKoZIhvcNAQEMBQAwYzELMAkGA1UEBhMC
# VVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE0MDIGA1UEAxMrTWlj
# cm9zb2Z0IElEIFZlcmlmaWVkIENvZGUgU2lnbmluZyBQQ0EgMjAyMTAeFw0yNjAz
# MjYxODExMjhaFw0zMTAzMjYxODExMjhaMFoxCzAJBgNVBAYTAlVTMR4wHAYDVQQK
# ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKzApBgNVBAMTIk1pY3Jvc29mdCBJRCBW
# ZXJpZmllZCBDUyBFT0MgQ0EgMDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK
# AoICAQDg9Ms9AqovDnMePvMOe+KybhCd8+lokzYORlS3kBVXseecbyGwBcsenlm5
# bLtMGPjiIFLzBQF+ghlVV/U29q5GcdeEEBCHTTGhL2koIrLc4UrliMRcbv9mOMtR
# /l7/xAmv0Fx4BJHn1dHt37fvrBqXmKjKfGf5DpyO/+hnV7TEreMtS19iO+bjZ/9H
# npg3PCk0e7YSbRTFkx97FZwRWpC4s3NepRfRXQh/WMAj7JmsYeVZohi4TF5yW2JM
# rJZqwHcyzJZYtD2Hlno5ZEJkdiZcEaxHOobmwO06Z1J9c23ps9PGIhGaq1sKLEAz
# 9Doc5rLkYWGteDrscKhAp2kIc/oYlH9Ij6BkOqqgWINEkEtC8ZNG1Mak+h3o65aj
# 0iQKmdxW7IZaHO5cuyoMi+KtYfXeIIg3sVIbS2EL8kUtsDGdEqNqAq/isqTi1jXq
# Le6iKp1ni1SPdvPW9G03CTsYF68b/yuIQRwbdoBCXemMNJCS0dorCRY4b2WAAy4n
# g7SANcEgrBgZf535+QfLU5hGzrKjIpbMabauWb5FKWUKkMsPcXFkXRWO4noKPm4K
# WlFypqOpbJ/KONVReIlxHQRegAOBzIhRB7gr9IDQ1sc2MgOgQ+xVGW4oq4HD0mfA
# iwiyLskZrkaQ7JoanYjBNcR9RS26YxAVbcBtLitFTzCIEg5ZdQIDAQABo4IB3DCC
# AdgwDgYDVR0PAQH/BAQDAgGGMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRr
# XqU0wwXFYkohWo6rc2Bi1KxjhTBUBgNVHSAETTBLMEkGBFUdIAAwQTA/BggrBgEF
# BQcCARYzaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9z
# aXRvcnkuaHRtMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMBIGA1UdEwEB/wQI
# MAYBAf8CAQAwHwYDVR0jBBgwFoAU2UEpsA8PY2zvadf1zSmepEhqMOYwcAYDVR0f
# BGkwZzBloGOgYYZfaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwv
# TWljcm9zb2Z0JTIwSUQlMjBWZXJpZmllZCUyMENvZGUlMjBTaWduaW5nJTIwUENB
# JTIwMjAyMS5jcmwwfQYIKwYBBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8v
# d3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMElEJTIw
# VmVyaWZpZWQlMjBDb2RlJTIwU2lnbmluZyUyMFBDQSUyMDIwMjEuY3J0MA0GCSqG
# SIb3DQEBDAUAA4ICAQBdbiI8zwXLX8glJEh/8Q22UMCUhWBO46Z9FPhwOR3mdlqR
# VLkYOon/MczUwrjDhx3X99SPH5PSflkGoTvnO9ZWHM5YFVYpO7NYuB+mfVSGAGZw
# iGOASWk0i2B7vn9nElJJmoiXxugfH5YdBsrUgTt0AFNXkzmqTgk+S1Hxb1u/0HCq
# EHVZPk2A/6eJXYbtpRM5Fcz00jisUl9BRZgSebODV85bBzOveqyC3f0PnHCxRJNh
# Mb8xP/sB/VI7pf2rheSV7zqUSv8vn/fIMblXeaVIlpqoq8SP9BJMjE/CoVXJxnkZ
# QRM1Fa7kN9yztvReOhxSgPgpZx/Xl/jkwyEFVJTBfBp3sTgfIc/pmqv2ehtakL2A
# Ej78EmOPQohxJT3wyX+P78GA25tLpAvzj3RMMHd8z18ZuuVi+60MAzGpOASH1L8N
# lr3fZRZnQO+pyye2DCvYmHaIfdUgYJqn7noxxGVv89+RaETh1tgCDvwNpFCSG7vl
# 5A4ako+2fx409r9TWjXC7Oif1IQ5ZJzB4Rf8GvBiHYjvMmHpledp1FGRLdSRFVpC
# 3/OKpZY6avIqZp7+8pP/WQP903DdgrvAT6W4xPOBxXPa4tGksN3SuqJaiFYHSNye
# Bufn8iseujW4IbBSbHD4BPqbF3qZ+7nG9d/d/G2/Lx4kH9cCmBfmsZdSkHmukDCC
# B54wggWGoAMCAQICEzMAAAAHh6M0o3uljhwAAAAAAAcwDQYJKoZIhvcNAQEMBQAw
# dzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjFI
# MEYGA1UEAxM/TWljcm9zb2Z0IElkZW50aXR5IFZlcmlmaWNhdGlvbiBSb290IENl
# cnRpZmljYXRlIEF1dGhvcml0eSAyMDIwMB4XDTIxMDQwMTIwMDUyMFoXDTM2MDQw
# MTIwMTUyMFowYzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw
# b3JhdGlvbjE0MDIGA1UEAxMrTWljcm9zb2Z0IElEIFZlcmlmaWVkIENvZGUgU2ln
# bmluZyBQQ0EgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALLw
# wK8ZiCji3VR6TElsaQhVCbRS/3pK+MHrJSj3Zxd3KU3rlfL3qrZilYKJNqztA9OQ
# acr1AwoNcHbKBLbsQAhBnIB34zxf52bDpIO3NJlfIaTE/xrweLoQ71lzCHkD7A4A
# s1Bs076Iu+mA6cQzsYYH/Cbl1icwQ6C65rU4V9NQhNUwgrx9rGQ//h890Q8JdjLL
# w0nV+ayQ2Fbkd242o9kH82RZsH3HEyqjAB5a8+Ae2nPIPc8sZU6ZE7iRrRZywRmr
# KDp5+TcmJX9MRff241UaOBs4NmHOyke8oU1TYrkxh+YeHgfWo5tTgkoSMoayqoDp
# HOLJs+qG8Tvh8SnifW2Jj3+ii11TS8/FGngEaNAWrbyfNrC69oKpRQXY9bGH6jn9
# NEJv9weFxhTwyvx9OJLXmRGbAUXN1U9nf4lXezky6Uh/cgjkVd6CGUAf0K+Jw+GE
# /5VpIVbcNr9rNE50Sbmy/4RTCEGvOq3GhjITbCa4crCzTTHgYYjHs1NbOc6brH+e
# KpWLtr+bGecy9CrwQyx7S/BfYJ+ozst7+yZtG2wR461uckFu0t+gCwLdN0A6cFtS
# RtR8bvxVFyWwTtgMMFRuBa3vmUOTnfKLsLefRaQcVTgRnzeLzdpt32cdYKp+dhr2
# ogc+qM6K4CBI5/j4VFyC4QFeUP2YAidLtvpXRRo3AgMBAAGjggI1MIICMTAOBgNV
# HQ8BAf8EBAMCAYYwEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFNlBKbAPD2Ns
# 72nX9c0pnqRIajDmMFQGA1UdIARNMEswSQYEVR0gADBBMD8GCCsGAQUFBwIBFjNo
# dHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5o
# dG0wGQYJKwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwDwYDVR0TAQH/BAUwAwEB/zAf
# BgNVHSMEGDAWgBTIftJqhSobyhmYBAcnz1AQT2ioojCBhAYDVR0fBH0wezB5oHeg
# dYZzaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0
# JTIwSWRlbnRpdHklMjBWZXJpZmljYXRpb24lMjBSb290JTIwQ2VydGlmaWNhdGUl
# MjBBdXRob3JpdHklMjAyMDIwLmNybDCBwwYIKwYBBQUHAQEEgbYwgbMwgYEGCCsG
# AQUFBzAChnVodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01p
# Y3Jvc29mdCUyMElkZW50aXR5JTIwVmVyaWZpY2F0aW9uJTIwUm9vdCUyMENlcnRp
# ZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAyMC5jcnQwLQYIKwYBBQUHMAGGIWh0dHA6
# Ly9vbmVvY3NwLm1pY3Jvc29mdC5jb20vb2NzcDANBgkqhkiG9w0BAQwFAAOCAgEA
# fyUqnv7Uq+rdZgrbVyNMul5skONbhls5fccPlmIbzi+OwVdPQ4H55v7VOInnmezQ
# EeW4LqK0wja+fBznANbXLB0KrdMCbHQpbLvG6UA/Xv2pfpVIE1CRFfNF4XKO8XYE
# a3oW8oVH+KZHgIQRIwAbyFKQ9iyj4aOWeAzwk+f9E5StNp5T8FG7/VEURIVWArbA
# zPt9ThVN3w1fAZkF7+YU9kbq1bCR2YD+MtunSQ1Rft6XG7b4e0ejRA7mB2IoX5hN
# h3UEauY0byxNRG+fT2MCEhQl9g2i2fs6VOG19CNep7SquKaBjhWmirYyANb0RJSL
# WjinMLXNOAga10n8i9jqeprzSMU5ODmrMCJE12xS/NWShg/tuLjAsKP6SzYZ+1Ry
# 358ZTFcx0FS/mx2vSoU8s8HRvy+rnXqyUJ9HBqS0DErVLjQwK8VtsBdekBmdTbQV
# oCgPCqr+PDPB3xajYnzevs7eidBsM71PINK2BoE2UfMwxCCX3mccFgx6UsQeRSdV
# VVNSyALQe6PT12418xon2iDGE81OGCreLzDcMAZnrUAx4XQLUz6ZTl65yPUiOh3k
# 7Yww94lDf+8oG2oZmDh5O1Qe38E+M3vhKwmzIeoB1dVLlz4i3IpaDcR+iuGjH2Td
# aC1ZOmBXiCRKJLj4DT2uhJ04ji+tHD6n58vhavFIrmcxghcyMIIXLgIBATBxMFox
# CzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKzAp
# BgNVBAMTIk1pY3Jvc29mdCBJRCBWZXJpZmllZCBDUyBFT0MgQ0EgMDMCEzMABDIU
# 8BhK6DGi41cAAAAEMhQwDQYJYIZIAWUDBAIBBQCgXjAQBgorBgEEAYI3AgEMMQIw
# ADAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAvBgkqhkiG9w0BCQQxIgQgzLul
# r7JlRO9TEcJ5thExUrJFSP9FCisc1MJcxct89fIwDQYJKoZIhvcNAQEBBQAEggGA
# Ty/qwTWdCDsY1kx+2BZMOARCyFqvUZrD6AIurdxygxpqWyQUgDRjxMPxUU4BPZaJ
# eAcjCQXr6T2+/+FCvy1SkV9p7XaEVyKY/sgA3FbkdRrQqwl0xkFYCGCdUOTuDrQ8
# sG2F4JFzfjKppTUiyENqBRs5Z4C9WTRwa61Thq4VrWE6sIdZg0xzE7ybORD9mWM7
# tkrpkZWs+9A1S1/AiLSwZaOvgOOKBE+NGf7Z6BkLabbXpn/54tkSNc30ggppuG5Z
# mk/EbF6QyDTTOIVzdnvMHfd/5MFT1s+InBkrmxzT/epQ3+TW7Ecgb71mHLq8YR+J
# hFX80vdOWYJxEYQZxDNRr5KJ/UPkw0RlMTBmZScuS+zEaPkbyuqHCTqRBRtutu54
# rBKZmMYXT7LrGBTTVeUz4umE4G1klL3wKyxriGPfJfAr8YuGZpbc5d2PQNwhLO9t
# kb5uxNr241a5ZmwhXQbWjrqPyluwvvF/noMWt3+3lCuwRG75DCdecqXJymE0S9c/
# oYIUsjCCFK4GCisGAQQBgjcDAwExghSeMIIUmgYJKoZIhvcNAQcCoIIUizCCFIcC
# AQMxDzANBglghkgBZQMEAgEFADCCAWoGCyqGSIb3DQEJEAEEoIIBWQSCAVUwggFR
# AgEBBgorBgEEAYRZCgMBMDEwDQYJYIZIAWUDBAIBBQAEIEUAAoztRhHfa4L5a2FI
# JUCoHzO3jaxCHp0NnnyxcvxcAgZqddIqXpYYEzIwMjYwODEyMjEyNzQ1LjE3MVow
# BIACAfSggemkgeYwgeMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9u
# MRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRp
# b24xLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJhdGlvbnMgTGltaXRl
# ZDEnMCUGA1UECxMeblNoaWVsZCBUU1MgRVNOOjdBMUEtMDVFMC1EOTQ3MTUwMwYD
# VQQDEyxNaWNyb3NvZnQgUHVibGljIFJTQSBUaW1lIFN0YW1waW5nIEF1dGhvcml0
# eaCCDykwggeCMIIFaqADAgECAhMzAAAABeXPD/9mLsmHAAAAAAAFMA0GCSqGSIb3
# DQEBDAUAMHcxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y
# YXRpb24xSDBGBgNVBAMTP01pY3Jvc29mdCBJZGVudGl0eSBWZXJpZmljYXRpb24g
# Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAyMDAeFw0yMDExMTkyMDMyMzFa
# Fw0zNTExMTkyMDQyMzFaMGExCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3Nv
# ZnQgQ29ycG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBQdWJsaWMgUlNBIFRp
# bWVzdGFtcGluZyBDQSAyMDIwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKC
# AgEAnnznUmP94MWfBX1jtQYioxwe1+eXM9ETBb1lRkd3kcFdcG9/sqtDlwxKoVIc
# aqDb+omFio5DHC4RBcbyQHjXCwMk/l3TOYtgoBjxnG/eViS4sOx8y4gSq8Zg49RE
# Af5huXhIkQRKe3Qxs8Sgp02KHAznEa/Ssah8nWo5hJM1xznkRsFPu6rfDHeZeG1W
# a1wISvlkpOQooTULFm809Z0ZYlQ8Lp7i5F9YciFlyAKwn6yjN/kR4fkquUWfGmMo
# pNq/B8U/pdoZkZZQbxNlqJOiBGgCWpx69uKqKhTPVi3gVErnc/qi+dR8A2MiAz0k
# N0nh7SqINGbmw5OIRC0EsZ31WF3Uxp3GgZwetEKxLms73KG/Z+MkeuaVDQQheang
# OEMGJ4pQZH55ngI0Tdy1bi69INBV5Kn2HVJo9XxRYR/JPGAaM6xGl57Ei95HUw9N
# V/uC3yFjrhc087qLJQawSC3xzY/EXzsT4I7sDbxOmM2rl4uKK6eEpurRduOQ2hTk
# mG1hSuWYBunFGNv21Kt4N20AKmbeuSnGnsBCd2cjRKG79+TX+sTehawOoxfeOO/j
# R7wo3liwkGdzPJYHgnJ54UxbckF914AqHOiEV7xTnD1a69w/UTxwjEugpIPMIIE6
# 7SFZ2PMo27xjlLAHWW3l1CEAFjLNHd3EQ79PUr8FUXetXr0CAwEAAaOCAhswggIX
# MA4GA1UdDwEB/wQEAwIBhjAQBgkrBgEEAYI3FQEEAwIBADAdBgNVHQ4EFgQUa2ko
# OjUvSGNAz3vYr0npPtk92yEwVAYDVR0gBE0wSzBJBgRVHSAAMEEwPwYIKwYBBQUH
# AgEWM2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvRG9jcy9SZXBvc2l0
# b3J5Lmh0bTATBgNVHSUEDDAKBggrBgEFBQcDCDAZBgkrBgEEAYI3FAIEDB4KAFMA
# dQBiAEMAQTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFMh+0mqFKhvKGZgE
# ByfPUBBPaKiiMIGEBgNVHR8EfTB7MHmgd6B1hnNodHRwOi8vd3d3Lm1pY3Jvc29m
# dC5jb20vcGtpb3BzL2NybC9NaWNyb3NvZnQlMjBJZGVudGl0eSUyMFZlcmlmaWNh
# dGlvbiUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMjAuY3Js
# MIGUBggrBgEFBQcBAQSBhzCBhDCBgQYIKwYBBQUHMAKGdWh0dHA6Ly93d3cubWlj
# cm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwSWRlbnRpdHklMjBW
# ZXJpZmljYXRpb24lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAy
# MDIwLmNydDANBgkqhkiG9w0BAQwFAAOCAgEAX4h2x35ttVoVdedMeGj6TuHYRJkl
# FaW4sTQ5r+k77iB79cSLNe+GzRjv4pVjJviceW6AF6ycWoEYR0LYhaa0ozJLU5Yi
# +LCmcrdovkl53DNt4EXs87KDogYb9eGEndSpZ5ZM74LNvVzY0/nPISHz0Xva71Qj
# D4h+8z2XMOZzY7YQ0Psw+etyNZ1CesufU211rLslLKsO8F2aBs2cIo1k+aHOhrw9
# xw6JCWONNboZ497mwYW5EfN0W3zL5s3ad4Xtm7yFM7Ujrhc0aqy3xL7D5FR2J7x9
# cLWMq7eb0oYioXhqV2tgFqbKHeDick+P8tHYIFovIP7YG4ZkJWag1H91KlELGWi3
# SLv10o4KGag42pswjybTi4toQcC/irAodDW8HNtX+cbz0sMptFJK+KObAnDFHEsu
# kxD+7jFfEV9Hh/+CSxKRsmnuiovCWIOb+H7DRon9TlxydiFhvu88o0w35JkNbJxT
# k4MhF/KgaXn0GxdH8elEa2Imq45gaa8D+mTm8LWVydt4ytxYP/bqjN49D9NZ81co
# E6aQWm88TwIf4R4YZbOpMKN0CyejaPNN41LGXHeCUMYmBx3PkP8ADHD1J2Cr/6tj
# uOOCztfp+o9Nc+ZoIAkpUcA/X2gSMkgHAPUvIdtoSAHEUKiBhI6JQivRepyvWcl+
# JYbYbBh7pmgAXVswggefMIIFh6ADAgECAhMzAAAAW0q1jUEybdx0AAAAAABbMA0G
# CSqGSIb3DQEBDAUAMGExCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQg
# Q29ycG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBQdWJsaWMgUlNBIFRpbWVz
# dGFtcGluZyBDQSAyMDIwMB4XDTI2MDEwODE4NTkwNVoXDTI3MDEwNzE4NTkwNVow
# geMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS
# ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xLTArBgNVBAsT
# JE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJhdGlvbnMgTGltaXRlZDEnMCUGA1UECxMe
# blNoaWVsZCBUU1MgRVNOOjdBMUEtMDVFMC1EOTQ3MTUwMwYDVQQDEyxNaWNyb3Nv
# ZnQgUHVibGljIFJTQSBUaW1lIFN0YW1waW5nIEF1dGhvcml0eTCCAiIwDQYJKoZI
# hvcNAQEBBQADggIPADCCAgoCggIBAJBUzBbbnlDXee0B0KD5G4/475thFyfctCyu
# ESTWQXvlLi4Wx/td2qUdeq4ideeg6VWhiOHfu3wJV4TUGSRtqh9Ccr1BmiBKv9iu
# FpgHyIBu5Qx38ZsxwlFeXVS+ZqJJKnXRbDNQdcYSoC/6c0hQJ/PH50DBRDQkPXVw
# yFizLrRH9AlrJeUg7BKeT23zftS8/KOJLvEEbHOF6pSOY3ZVprZUWbWjWwRTmoHa
# Q/E8vrWtLNyEJ+b089VW1Ikra3t4GTB5Wby3CL1K2zYnAxBIvafsKMFyj9OuXHcT
# PKMDoFSMeamG9MKOMb6uoG1PjdnDgsLP6EOMRSzrLL7jED1mbB9RSd9fhty+HQr6
# vZgsBn6oUy+YTpNVLskwdtUM82WYAkPztlOt3AiL0qyV7/U3j/uq3vHMjPM0w034
# 0M57Nei0g4BCcMt0dbqoc91VgCb3/36sHQANontn1HOF2oLk8190QRS43isHVra8
# H8sf5+GlqIYsYiCKX04HZiOzZW826nVI6d++8lyTeWmpj90Ua9uPbJhVjwE3oh6t
# O510ySqmSMSLEN07p3Ibe3E6BAb2w93rWzb26+dpSthbKF4kApofqBsWPX4MEtHK
# SOftPmVTCQ47tghrVuHia9jY+Hsj01m4KW4WtkmVm3L6hMZECMa4sjMxAXz+bX/A
# JhWTe6TZAgMBAAGjggHLMIIBxzAdBgNVHQ4EFgQU7/LqUlWWYhXJdXwgYKx4b8Gv
# 0rYwHwYDVR0jBBgwFoAUa2koOjUvSGNAz3vYr0npPtk92yEwbAYDVR0fBGUwYzBh
# oF+gXYZbaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9z
# b2Z0JTIwUHVibGljJTIwUlNBJTIwVGltZXN0YW1waW5nJTIwQ0ElMjAyMDIwLmNy
# bDB5BggrBgEFBQcBAQRtMGswaQYIKwYBBQUHMAKGXWh0dHA6Ly93d3cubWljcm9z
# b2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwUHVibGljJTIwUlNBJTIw
# VGltZXN0YW1waW5nJTIwQ0ElMjAyMDIwLmNydDAMBgNVHRMBAf8EAjAAMBYGA1Ud
# JQEB/wQMMAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQEAwIHgDBmBgNVHSAEXzBdMFEG
# DCsGAQQBgjdMg30BATBBMD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jvc29m
# dC5jb20vcGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0wCAYGZ4EMAQQCMA0GCSqG
# SIb3DQEBDAUAA4ICAQAAH+zd+XKh4OxXYMWFmtgilXAQGctOjCUB1w/uBiC/OXcH
# 3Ia4/XbdUhKzFbaiTbIE6vYZKd1p4u7nKOLkawymAMVyuO7LSl6rLKttZIyLhWjT
# K0zXOz0u4xLq9+bRtBEKJvA6sD5nJwH1IO6z1YizyuIRoalMCnbrUixfWxQn4TAm
# N7t9uk+X2FUThEa3ewzRwhtG+xwaAbLMkxRmR24JnfXd1VxKo90+m7Wzuov96Uug
# x5wZdewiIIm1ZWTj4lCJHup679LcOa7tAxJMipVaSltQH9fm9TOKczlfxtWuBcLU
# 4duZfqwgsILsH7PMkcX1zwQzQD0yAtPhnYz9KNG125bX+iilOe1S8RHqv2bbBpMp
# ao4kcUvQI6dMgKRvFmm1eLbhSNOQplDMTGD1tNVdNGkI96jUu+troUjWMMi46TQf
# BAHxtDTpRhIu/87vAVQ8Z6RHhFxesz4Ed5JThaIQRAy6GcO/Jk+QzDzoZ0arRIkI
# sGJ7rZgOVAjx9ctfw8lH9RfjcwB3wdGBYNMNVJqQpUai2Taddf5pXzTZEHIqLEF5
# 3SrBjIeInoQrP7U5VlXiMQsxewLdINrAE2l2TR3KBikb+RQRygbTp8jj2yiC0NCU
# wG+K+ndglN5RMbXjFW6aKa59Xq+b8XzK/DK+AJtgOpHgJv8Qrk62A+twOVLOpjGC
# A9QwggPQAgEBMHgwYTELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBD
# b3Jwb3JhdGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFB1YmxpYyBSU0EgVGltZXN0
# YW1waW5nIENBIDIwMjACEzMAAABbSrWNQTJt3HQAAAAAAFswDQYJYIZIAWUDBAIB
# BQCgggEtMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAvBgkqhkiG9w0BCQQx
# IgQgo5jcu8EIbeTmzkQ2JROCfXzsGA8ZMxQrM0EI2NSc0Pwwgd0GCyqGSIb3DQEJ
# EAIvMYHNMIHKMIHHMIGgBCAvMQNVXZ0b0xxlGw8X/3IEybObuT6a5W1d61CW+cGD
# 7zB8MGWkYzBhMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
# cmF0aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUHVibGljIFJTQSBUaW1lc3RhbXBp
# bmcgQ0EgMjAyMAITMwAAAFtKtY1BMm3cdAAAAAAAWzAiBCD7YS8CH8Kb57HhggJK
# +tJS+18x8wLTydTxE6wMzn1wTjANBgkqhkiG9w0BAQsFAASCAgAXsF74rf6D3wlR
# KF4eZd4j+SOewaY9WjxPvnztJE5KQ3voT3XzIqe7oscW/qyasTZo0kDLL9yhoXbZ
# 0LNkvZ7AOHA20HcsiH2kmX7fBQX+RhGBynuW8KIfKh/XLF62du3Mz3QD4dgACWz8
# hXEKop0Q+xh2tGBitPF6Orjd26p8SgofEV9/vE9cluw+nPxE/TPZZOvH08UKtyO+
# UJAzeDaxkBsr65A0oG3ZrQhZ+tojY0wiKgUr/AVTYICP+EWUbMHTxpqn8jXf3oIO
# YhcijHwcwuyl13imduzPpQ8F7TjIfOEJfGjQvYiiuQfQ5U3mtB/BaF2mADSXlvge
# 9l5i8GNF+hPWCDppITTl0lho0f4dOAjcGNzuXePGdJYW+L0lG5g5DhkTYyYo331y
# qgQPOxzrO8IcpoJa02WtCtFEGnVR1JPJfsMmgBQwK895kWHwXINLOQXKJISFG5C3
# UBb4DMUL8katMYo7iM5HGyzkKBuIwdiYP7il+aG6gnqsuWvbVagt8oVxpBIttXsW
# duNR1O8ckAzmM07+Q4BdKhSwS9Zml+ki2qnVN15Ls7/Gq2d6WP6ocVowdZII3pMw
# B78hMiCPWlLdplWQ3fMn1f4EpDyDmPQTRooaL4Ndbda4OjLhg2tDY2ZPc4GhUdZK
# xoKEiYpebOtT+Cf2tKoQkUUHvw+4Dw==
# SIG # End signature block