AWS.Tools.ElasticLoadBalancingV2.Completers.psm1

# Auto-generated argument completers for parameters of SDK ConstantClass-derived type used in cmdlets.
# Do not modify this file; it may be overwritten during version upgrades.

$psMajorVersion = $PSVersionTable.PSVersion.Major
if ($psMajorVersion -eq 2) 
{ 
    Write-Verbose "Dynamic argument completion not supported in PowerShell version 2; skipping load."
    return 
}

# PowerShell's native Register-ArgumentCompleter cmdlet is available on v5.0 or higher. For lower
# version, we can use the version in the TabExpansion++ module if installed.
$registrationCmdletAvailable = ($psMajorVersion -ge 5) -Or !((Get-Command Register-ArgumentCompleter -ea Ignore) -eq $null)

# internal function to perform the registration using either cmdlet or manipulation
# of the options table
function _awsArgumentCompleterRegistration()
{
    param
    (
        [scriptblock]$scriptBlock,
        [hashtable]$param2CmdletsMap
    )

    if ($registrationCmdletAvailable)
    {
        foreach ($paramName in $param2CmdletsMap.Keys)
        {
             $args = @{
                "ScriptBlock" = $scriptBlock
                "Parameter" = $paramName
            }

            $cmdletNames = $param2CmdletsMap[$paramName]
            if ($cmdletNames -And $cmdletNames.Length -gt 0)
            {
                $args["Command"] = $cmdletNames
            }

            Register-ArgumentCompleter @args
        }
    }
    else
    {
        if (-not $global:options) { $global:options = @{ CustomArgumentCompleters = @{ }; NativeArgumentCompleters = @{ } } }

        foreach ($paramName in $param2CmdletsMap.Keys)
        {
            $cmdletNames = $param2CmdletsMap[$paramName]

            if ($cmdletNames -And $cmdletNames.Length -gt 0)
            {
                foreach ($cn in $cmdletNames)
                {
                    $fqn =  [string]::Concat($cn, ":", $paramName)
                    $global:options['CustomArgumentCompleters'][$fqn] = $scriptBlock
                }
            }
            else
            {
                $global:options['CustomArgumentCompleters'][$paramName] = $scriptBlock
            }
        }

        $function:tabexpansion2 = $function:tabexpansion2 -replace 'End\r\n{', 'End { if ($null -ne $options) { $options += $global:options} else {$options = $global:options}'
    }
}

# To allow for same-name parameters of different ConstantClass-derived types
# each completer function checks on command name concatenated with parameter name.
# Additionally, the standard code pattern for completers is to pipe through
# sort-object after filtering against $wordToComplete but we omit this as our members
# are already sorted.

# Argument completions for service Elastic Load Balancing V2


$ELB2_Completers = {
    param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameter)

    switch ($("$commandName/$parameterName"))
    {
        # Amazon.ElasticLoadBalancingV2.IpAddressType
        {
            ($_ -eq "New-ELB2LoadBalancer/IpAddressType") -Or
            ($_ -eq "Set-ELB2IpAddressType/IpAddressType") -Or
            ($_ -eq "Set-ELB2Subnet/IpAddressType")
        }
        {
            $v = "dualstack","ipv4"
            break
        }

        # Amazon.ElasticLoadBalancingV2.LoadBalancerSchemeEnum
        "New-ELB2LoadBalancer/Scheme"
        {
            $v = "internal","internet-facing"
            break
        }

        # Amazon.ElasticLoadBalancingV2.LoadBalancerTypeEnum
        {
            ($_ -eq "Get-ELB2SSLPolicy/LoadBalancerType") -Or
            ($_ -eq "New-ELB2LoadBalancer/Type")
        }
        {
            $v = "application","gateway","network"
            break
        }

        # Amazon.ElasticLoadBalancingV2.ProtocolEnum
        {
            ($_ -eq "Edit-ELB2TargetGroup/HealthCheckProtocol") -Or
            ($_ -eq "New-ELB2TargetGroup/HealthCheckProtocol") -Or
            ($_ -eq "Edit-ELB2Listener/Protocol") -Or
            ($_ -eq "New-ELB2Listener/Protocol") -Or
            ($_ -eq "New-ELB2TargetGroup/Protocol")
        }
        {
            $v = "GENEVE","HTTP","HTTPS","TCP","TCP_UDP","TLS","UDP"
            break
        }

        # Amazon.ElasticLoadBalancingV2.TargetGroupIpAddressTypeEnum
        "New-ELB2TargetGroup/IpAddressType"
        {
            $v = "ipv4","ipv6"
            break
        }

        # Amazon.ElasticLoadBalancingV2.TargetTypeEnum
        "New-ELB2TargetGroup/TargetType"
        {
            $v = "alb","instance","ip","lambda"
            break
        }


    }

    $v |
        Where-Object { $_ -like "$wordToComplete*" } |
        ForEach-Object { New-Object System.Management.Automation.CompletionResult $_, $_, 'ParameterValue', $_ }
}

$ELB2_map = @{
    "HealthCheckProtocol"=@("Edit-ELB2TargetGroup","New-ELB2TargetGroup")
    "IpAddressType"=@("New-ELB2LoadBalancer","New-ELB2TargetGroup","Set-ELB2IpAddressType","Set-ELB2Subnet")
    "LoadBalancerType"=@("Get-ELB2SSLPolicy")
    "Protocol"=@("Edit-ELB2Listener","New-ELB2Listener","New-ELB2TargetGroup")
    "Scheme"=@("New-ELB2LoadBalancer")
    "TargetType"=@("New-ELB2TargetGroup")
    "Type"=@("New-ELB2LoadBalancer")
}

_awsArgumentCompleterRegistration $ELB2_Completers $ELB2_map

$ELB2_SelectCompleters = {
    param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameter)

    $cmdletType = Invoke-Expression "[Amazon.PowerShell.Cmdlets.ELB2.$($commandName.Replace('-', ''))Cmdlet]"
    if (-not $cmdletType) {
        return
    }
    $awsCmdletAttribute = $cmdletType.GetCustomAttributes([Amazon.PowerShell.Common.AWSCmdletAttribute], $false)
    if (-not $awsCmdletAttribute) {
        return
    }
    $type = $awsCmdletAttribute.SelectReturnType
    if (-not $type) {
        return
    }

    $splitSelect = $wordToComplete -Split '\.'
    $splitSelect | Select-Object -First ($splitSelect.Length - 1) | ForEach-Object {
        $propertyName = $_
        $properties = $type.GetProperties(('Instance', 'Public', 'DeclaredOnly')) | Where-Object { $_.Name -ieq $propertyName }
        if ($properties.Length -ne 1) {
            break
        }
        $type = $properties.PropertyType
        $prefix += "$($properties.Name)."

        $asEnumerableType = $type.GetInterface('System.Collections.Generic.IEnumerable`1')
        if ($asEnumerableType -and $type -ne [System.String]) {
            $type =  $asEnumerableType.GetGenericArguments()[0]
        }
    }

    $v = @( '*' )
    $properties = $type.GetProperties(('Instance', 'Public', 'DeclaredOnly')).Name | Sort-Object
    if ($properties) {
        $v += ($properties | ForEach-Object { $prefix + $_ })
    }
    $parameters = $cmdletType.GetProperties(('Instance', 'Public')) | Where-Object { $_.GetCustomAttributes([System.Management.Automation.ParameterAttribute], $true) } | Select-Object -ExpandProperty Name | Sort-Object
    if ($parameters) {
        $v += ($parameters | ForEach-Object { "^$_" })
    }

    $v |
        Where-Object { $_ -match "^$([System.Text.RegularExpressions.Regex]::Escape($wordToComplete)).*" } |
        ForEach-Object { New-Object System.Management.Automation.CompletionResult $_, $_, 'ParameterValue', $_ }
}

$ELB2_SelectMap = @{
    "Select"=@("Add-ELB2ListenerCertificate",
               "Add-ELB2Tag",
               "New-ELB2Listener",
               "New-ELB2LoadBalancer",
               "New-ELB2Rule",
               "New-ELB2TargetGroup",
               "Remove-ELB2Listener",
               "Remove-ELB2LoadBalancer",
               "Remove-ELB2Rule",
               "Remove-ELB2TargetGroup",
               "Unregister-ELB2Target",
               "Get-ELB2AccountLimit",
               "Get-ELB2ListenerCertificate",
               "Get-ELB2Listener",
               "Get-ELB2LoadBalancerAttribute",
               "Get-ELB2LoadBalancer",
               "Get-ELB2Rule",
               "Get-ELB2SSLPolicy",
               "Get-ELB2Tag",
               "Get-ELB2TargetGroupAttribute",
               "Get-ELB2TargetGroup",
               "Get-ELB2TargetHealth",
               "Edit-ELB2Listener",
               "Edit-ELB2LoadBalancerAttribute",
               "Edit-ELB2Rule",
               "Edit-ELB2TargetGroup",
               "Edit-ELB2TargetGroupAttribute",
               "Register-ELB2Target",
               "Remove-ELB2ListenerCertificate",
               "Remove-ELB2Tag",
               "Set-ELB2IpAddressType",
               "Set-ELB2RulePriority",
               "Set-ELB2SecurityGroup",
               "Set-ELB2Subnet")
}

_awsArgumentCompleterRegistration $ELB2_SelectCompleters $ELB2_SelectMap


# SIG # Begin signature block
# MIIqDAYJKoZIhvcNAQcCoIIp/TCCKfkCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCC7+3HsSH9t5zkG
# gvEpvAR1JiXsMoHkOfLrJvpczBZbNqCCDlkwggawMIIEmKADAgECAhAIrUCyYNKc
# TJ9ezam9k67ZMA0GCSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK
# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV
# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMTA0MjkwMDAwMDBaFw0z
# NjA0MjgyMzU5NTlaMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg
# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg
# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
# ggIKAoICAQDVtC9C0CiteLdd1TlZG7GIQvUzjOs9gZdwxbvEhSYwn6SOaNhc9es0
# JAfhS0/TeEP0F9ce2vnS1WcaUk8OoVf8iJnBkcyBAz5NcCRks43iCH00fUyAVxJr
# Q5qZ8sU7H/Lvy0daE6ZMswEgJfMQ04uy+wjwiuCdCcBlp/qYgEk1hz1RGeiQIXhF
# LqGfLOEYwhrMxe6TSXBCMo/7xuoc82VokaJNTIIRSFJo3hC9FFdd6BgTZcV/sk+F
# LEikVoQ11vkunKoAFdE3/hoGlMJ8yOobMubKwvSnowMOdKWvObarYBLj6Na59zHh
# 3K3kGKDYwSNHR7OhD26jq22YBoMbt2pnLdK9RBqSEIGPsDsJ18ebMlrC/2pgVItJ
# wZPt4bRc4G/rJvmM1bL5OBDm6s6R9b7T+2+TYTRcvJNFKIM2KmYoX7BzzosmJQay
# g9Rc9hUZTO1i4F4z8ujo7AqnsAMrkbI2eb73rQgedaZlzLvjSFDzd5Ea/ttQokbI
# YViY9XwCFjyDKK05huzUtw1T0PhH5nUwjewwk3YUpltLXXRhTT8SkXbev1jLchAp
# QfDVxW0mdmgRQRNYmtwmKwH0iU1Z23jPgUo+QEdfyYFQc4UQIyFZYIpkVMHMIRro
# OBl8ZhzNeDhFMJlP/2NPTLuqDQhTQXxYPUez+rbsjDIJAsxsPAxWEQIDAQABo4IB
# WTCCAVUwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUaDfg67Y7+F8Rhvv+
# YXsIiGX0TkIwHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0P
# AQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHcGCCsGAQUFBwEBBGswaTAk
# BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAC
# hjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9v
# dEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5j
# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAcBgNVHSAEFTATMAcGBWeBDAED
# MAgGBmeBDAEEATANBgkqhkiG9w0BAQwFAAOCAgEAOiNEPY0Idu6PvDqZ01bgAhql
# +Eg08yy25nRm95RysQDKr2wwJxMSnpBEn0v9nqN8JtU3vDpdSG2V1T9J9Ce7FoFF
# UP2cvbaF4HZ+N3HLIvdaqpDP9ZNq4+sg0dVQeYiaiorBtr2hSBh+3NiAGhEZGM1h
# mYFW9snjdufE5BtfQ/g+lP92OT2e1JnPSt0o618moZVYSNUa/tcnP/2Q0XaG3Ryw
# YFzzDaju4ImhvTnhOE7abrs2nfvlIVNaw8rpavGiPttDuDPITzgUkpn13c5Ubdld
# AhQfQDN8A+KVssIhdXNSy0bYxDQcoqVLjc1vdjcshT8azibpGL6QB7BDf5WIIIJw
# 8MzK7/0pNVwfiThV9zeKiwmhywvpMRr/LhlcOXHhvpynCgbWJme3kuZOX956rEnP
# LqR0kq3bPKSchh/jwVYbKyP/j7XqiHtwa+aguv06P0WmxOgWkVKLQcBIhEuWTatE
# QOON8BUozu3xGFYHKi8QxAwIZDwzj64ojDzLj4gLDb879M4ee47vtevLt/B3E+bn
# KD+sEq6lLyJsQfmCXBVmzGwOysWGw/YmMwwHS6DTBwJqakAwSEs0qFEgu60bhQji
# WQ1tygVQK+pKHJ6l/aCnHwZ05/LWUpD9r4VIIflXO7ScA+2GRfS0YW6/aOImYIbq
# yK+p/pQd52MbOoZWeE4wggehMIIFiaADAgECAhALyko14sGCglkXWPsT8gmbMA0G
# CSqGSIb3DQEBCwUAMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg
# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg
# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwHhcNMjExMjI4MDAwMDAwWhcNMjMwMTAz
# MjM1OTU5WjCB9jEdMBsGA1UEDwwUUHJpdmF0ZSBPcmdhbml6YXRpb24xEzARBgsr
# BgEEAYI3PAIBAxMCVVMxGTAXBgsrBgEEAYI3PAIBAhMIRGVsYXdhcmUxEDAOBgNV
# BAUTBzQxNTI5NTQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAw
# DgYDVQQHEwdTZWF0dGxlMSIwIAYDVQQKExlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ
# bmMuMRcwFQYDVQQLEw5TREtzIGFuZCBUb29sczEiMCAGA1UEAxMZQW1hem9uIFdl
# YiBTZXJ2aWNlcywgSW5jLjCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGB
# AKHRLdQSyJ6AfhQ8U7Gi6le7gshUhu34xQ7jaTCfpKaKQRGu+oNfAYDRSSfh498e
# K+jFnGHU/TMzVHEgBb4TUrc1e2f5LHhXAtYTJK0uis9OJ5n3MjHwOJt/uGSSMUAI
# IIselvbSF2mOE0lIz0CNMIlUiXI9O+y9+FJP7Vsg/NU/zAVsQ4Ok0GLd+Yp566nR
# uj9aNU+L+TxRhSHA7KKjJ9oE0mVblUGQaeNrOd1Ql9djJy0pg6oT2s9Peh8lqB3t
# UsMaoQ/FMV0P/e1S6V3yFg/I1OvQdtm29ryJTdg9ZvIV/FGnIYdW5s5T8t//nf+7
# LToQVhpML/ZWEhFRAa6We80Y8zs9glIPDZyYmi6OPbpY7kVHa4dr8S49tPwrVMjC
# 3hk9v9S6poDx/hR9kytwVt1Lo4LjAlpmKLeHVmOnn5uenpXqFOJMbTMYmciwHz8y
# WJwZYMKKLJPCGa79xaAkZj9HCop5yPUPccqjyz2i0v/Pt8yFH77s8q86e99O2a+/
# oQIDAQABo4ICNTCCAjEwHwYDVR0jBBgwFoAUaDfg67Y7+F8Rhvv+YXsIiGX0TkIw
# HQYDVR0OBBYEFGmlIp+0bnVEmnOvWcJjnCup9DbsMC4GA1UdEQQnMCWgIwYIKwYB
# BQUHCAOgFzAVDBNVUy1ERUxBV0FSRS00MTUyOTU0MA4GA1UdDwEB/wQEAwIHgDAT
# BgNVHSUEDDAKBggrBgEFBQcDAzCBtQYDVR0fBIGtMIGqMFOgUaBPhk1odHRwOi8v
# Y3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmluZ1JT
# QTQwOTZTSEEzODQyMDIxQ0ExLmNybDBToFGgT4ZNaHR0cDovL2NybDQuZGlnaWNl
# cnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0Q29kZVNpZ25pbmdSU0E0MDk2U0hBMzg0
# MjAyMUNBMS5jcmwwPQYDVR0gBDYwNDAyBgVngQwBAzApMCcGCCsGAQUFBwIBFhto
# dHRwOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwgZQGCCsGAQUFBwEBBIGHMIGEMCQG
# CCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYBBQUHMAKG
# UGh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENv
# ZGVTaWduaW5nUlNBNDA5NlNIQTM4NDIwMjFDQTEuY3J0MAwGA1UdEwEB/wQCMAAw
# DQYJKoZIhvcNAQELBQADggIBALlYa6PSDPPulVJbqEi7XGz23lFZwYa1PiXk+PkJ
# O2HDXv2zep26LZriwBHT2yA/KbDvbwZpf4VOBKn5lQC9R+DsgwW/xZbNq7y3cWf9
# Ad1AQ9Do/FXfBqVO1if+GpqFbqUme5wOjn8/8dc4nFR4erbDgkM4ICn/astBigYn
# fM5wTO+J8ex+7fE2D1kFAwfZAuiRNdDreVMDlYXpJMQ4CtTKVLHYentLR747zzRj
# O4PqgL1exvbvpOMZlSDLWhaDjtKwUDb645ziHDA3DXe8K51+hIFuadKTinJa8Pfs
# bgg2W7aTfBdi2gTyXkeVJ836631Ks4KD3cXui9Jx2PWRAVxKIEvXuebZ09Mph2ji
# BH75urqS57i1mpS7OA5lIj7a7NIYsVl26PVpJUEr3LRKV8GO3tRC7KP0zE7sB7k2
# VQKwBXbsifq/vpcmeyy4OeQbZ1i8GwZLPHuygP9exTWK2o2wWByJs62Wdk6JmSRE
# vr9Wr59BVNbQfRSRaF9q058bBK68hGZtDBpJ9gJX4V12DI2UpSbcGf10+afL1J4z
# FDv98GIGkgmfLQJUpJeC/FnNrEXJbINndCsOb6gdLvLX1grMdUPmPkpRZyvG3HEy
# EMCV5ODMItTx7K6TDyeZDIXXP5oBnBMK9EjtRD3XkEb9dDfuzCrdlTpEoTElt2mG
# uEE7MYIbCTCCGwUCAQEwfTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNl
# cnQsIEluYy4xQTA/BgNVBAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBTaWdu
# aW5nIFJTQTQwOTYgU0hBMzg0IDIwMjEgQ0ExAhALyko14sGCglkXWPsT8gmbMA0G
# CWCGSAFlAwQCAQUAoHwwEAYKKwYBBAGCNwIBDDECMAAwGQYJKoZIhvcNAQkDMQwG
# CisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZI
# hvcNAQkEMSIEIPHvAAUHGx9B5ecZHnkEpd1tK1DJbJNOM1qUun2ZZIVVMA0GCSqG
# SIb3DQEBAQUABIIBgF0JWPR3fVCkleIoo7PXKHXG+8+di4/9BkUVpf9+Cuy9mETT
# aLtKlRO2iKLnlPChbF5uAnK1FtRpfyG17JAA236qXUr008V+sz/2wCmfhfUEiO4P
# cR9l+ncGiAbADOj+/ZbLBPpziaIlYQjlzutcAFK2bRp/420EovRB7hDNzzIFOn13
# l2lfUEiBKVmIWN/0co2TdoGtVRKW+8Z867+FAlh70+Iq+3nA08BR5nZLAYfWJpW/
# HEUhImJG9YkVTonO07MwWuEqjHaRZ3Yx6neUdCSMmkuw2eKGP7+CehZUh8ZzxIYl
# 7S+9PqEx7gDHHnavoqA5kdSkdzMTq4STUxybWecTtq2YbLIqPEbYNB94NzfMMsmu
# kn5MgumJmuoEH3rJRiS/bUC4B8KxQl3xCVQsWXVS+DVCLE6xCU+FFIjROa7W6wIk
# eTUCWmjvkq9FYwXuOSLUtQEulC57Uj6uypvyM3FZS7d7QL/nH5CDWlIUmR3UOxWI
# /pve37U42TpTGgPJOaGCGF8wghhbBgorBgEEAYI3AwMBMYIYSzCCGEcGCSqGSIb3
# DQEHAqCCGDgwghg0AgEDMQ0wCwYJYIZIAWUDBAIDMIHzBgsqhkiG9w0BCRABBKCB
# 4wSB4DCB3QIBAQYKYIZIAYb6bAoDBTAxMA0GCWCGSAFlAwQCAQUABCCzbwC17oCF
# zNTekx+GlDXLhRmi1eR/u+sN+c4VzStyngIIAyQwlKIp26IYDzIwMjIwNzAxMjA1
# MDQ1WjADAgEBoHmkdzB1MQswCQYDVQQGEwJDQTEQMA4GA1UECBMHT250YXJpbzEP
# MA0GA1UEBxMGT3R0YXdhMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSswKQYDVQQD
# EyJFbnRydXN0IFRpbWVzdGFtcCBBdXRob3JpdHkgLSBUU0EyoIITDjCCBd8wggTH
# oAMCAQICEE5A5DdU7eaMAAAAAFHTlH8wDQYJKoZIhvcNAQELBQAwgb4xCzAJBgNV
# BAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3
# LmVudHJ1c3QubmV0L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAwOSBFbnRy
# dXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMjAwBgNVBAMTKUVu
# dHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTIxMDUw
# NzE1NDM0NVoXDTMwMTEwNzE2MTM0NVowaTELMAkGA1UEBhMCVVMxFjAUBgNVBAoM
# DUVudHJ1c3QsIEluYy4xQjBABgNVBAMMOUVudHJ1c3QgQ29kZSBTaWduaW5nIFJv
# b3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBDU0JSMTCCAiIwDQYJKoZIhvcN
# AQEBBQADggIPADCCAgoCggIBAKeBj/cURbZiQ/LYrtMlXkhPUb/FfZ9QHDXR1n5h
# KpQZbSdGpKYaXfdUUWqAIsaoZnVNVIPJXmgbq/ZbZLCtrSC9VO9Ga20C50WudfaO
# irkyLou4dxxSTXmIX6U6GMlQLJcnLb/aAH1jf+8y7EaHY9uan8NaITZ7+ZvVyqBu
# ciz84fGecE0IVhVvkKv7SLq518GCeIVlLn+1ycDiFLc3EUEG4orgqPblfrZ4BQHD
# YO1PB0EuChNJ45Cbf929+qy/ZFHRXJu09VznXP87m6WgGtd9CbLCt/9uHLzIfebp
# K/xysxTpSlUShJxEJXUd9irwT6UgPWgl62GXfA/ltj3zrsPBEbwbjszgRzBeQgCG
# ceNYrAbKZR97lKZLV2cMfl6teGdbVeNe68fY7Exuhsvz3Pifh6pyWBIPfab4+EI5
# Ozws5DJNSYzg4QDCOKCc+oQ+QdxuVq7GGlv0Z2gFAc0bv66HvJ1T9i7otmvkmd7F
# T4dYqNJlHsgf1XJu7lkcVzsJcp3XyreQxs17RZKRQgNMfT/K8qq4wg6G8xCfRi6k
# ZoZoWmgYcCk4EYBga4pDo3Ns47NrN//mnWcBkobfL0jR+1Bg1Vz+IdMBQmP+73C0
# F8CPqO7TwUtfEur9/S4Oh0Rg46n0whij4/3ODIQiDfOneNqT89s4z7kvM8b/Bzxe
# vkXTAgMBAAGjggErMIIBJzAOBgNVHQ8BAf8EBAMCAYYwEgYDVR0TAQH/BAgwBgEB
# /wIBATAdBgNVHSUEFjAUBggrBgEFBQcDAwYIKwYBBQUHAwgwOwYDVR0gBDQwMjAw
# BgRVHSAAMCgwJgYIKwYBBQUHAgEWGmh0dHA6Ly93d3cuZW50cnVzdC5uZXQvcnBh
# MDMGCCsGAQUFBwEBBCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVz
# dC5uZXQwMAYDVR0fBCkwJzAloCOgIYYfaHR0cDovL2NybC5lbnRydXN0Lm5ldC9n
# MmNhLmNybDAdBgNVHQ4EFgQUgrrWPZfOn89x6JI3r/2ztWk1V88wHwYDVR0jBBgw
# FoAUanImetAe733nO2lR1GyNn5ASZqswDQYJKoZIhvcNAQELBQADggEBAB9eQQS2
# g3AkUyxVcx1lOsDstHsEmF5ZOBMJpFmUQl5Qv09sbiUgkJNYQA31GbRi7iRewgFY
# FQIdEAlvqNT7kn43OD4vFH2PHUM2ZLNmE18UzKVx91shS8aXvtyV/HB9ERzTId3Q
# JDkpxf4KGqXPe3nuOm/e3L/pEd0WgwjTLI1/TagUeS8FYVI462DzFGh9y7KKrcCU
# XOQmDiyK3UbDzuRWUcVW44W4TZtFcosH8Yr7Sbhf0fKWgV1pUiTxCCPS1iMP64vX
# fovBk2v68WJ7WOlQm5duF4gN4cZDmNeBYbaFnUfssZ6uPyA7Q53Yohzg1HwIwq92
# BvhiZnq29/rIrzUwggZvMIIEV6ADAgECAhAlvCvzKcoQfx6puoiF1J07MA0GCSqG
# SIb3DQEBDQUAMGkxCzAJBgNVBAYTAlVTMRYwFAYDVQQKDA1FbnRydXN0LCBJbmMu
# MUIwQAYDVQQDDDlFbnRydXN0IENvZGUgU2lnbmluZyBSb290IENlcnRpZmljYXRp
# b24gQXV0aG9yaXR5IC0gQ1NCUjEwHhcNMjEwNTA3MTkyMjE0WhcNNDAxMjI5MjM1
# OTAwWjBOMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNRW50cnVzdCwgSW5jLjEnMCUG
# A1UEAxMeRW50cnVzdCBUaW1lIFN0YW1waW5nIENBIC0gVFMyMIICIjANBgkqhkiG
# 9w0BAQEFAAOCAg8AMIICCgKCAgEAtQMqBraETzTMnjG+6o7Ge24gJA8D172BNjPm
# b9I+u8SeqqDMZl1CYDRR4i1hg7o8nmi4S8NmjqXeK7qbLUGl3tDLVwUtiNnARoht
# PDUNGZCsuAwZ8EzF20Vb3DvCvI1EAOA4//9dyM8Imj3Usut7lcPEpQDgYgFkWV+M
# 43uLqflFt8awogo3Q7hGgauGfn8v3vBf680gzKUtMeOoLpmb4Hjd9NtdgmN9MDmI
# fiQG5nxghHjIXCnllcv1e0/PWNyQz6eiexRUxOA3mDDBm7aunCn2ayVD5xJqPhmL
# vsDngddKMAh+fI3fPPNIkyHegYNqnQA+12C60bNiCJbptkkAOPRcdg3ad2o9oJXe
# HqHMWXpen8/pdl1A8rUVtWBoLPNaySOD2PUaa2kopLbUrmIG3iZFvd7pVneq3GSw
# Qc3ME/FdcXSylAhLTzJufnC4d+nVMjfCet5CEuhxHOLYYr+qa0GGBlvmab4mCfSX
# wv5M9IByhG7b3sUHqY4Vom3hG+AJD/WgB6C7xHdzCTwHk40BtRJnLU0ZtbjFyRCr
# cM9C/6UnHdYS1uQYRGD7OV2Eu2a1UxKdAxSCZSm07Ely/bND5cMCKSS6H/i4vl2j
# ty6p/M9i2fqXxBN441W5WnqE6/+7z2mIwLb5i2CFQRBQxwUQ0l52nT417PZPivkS
# ez+vCzcCAwEAAaOCASwwggEoMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYE
# FCYP8MRICBvN3ZH1VFS2s7P8mfEIMB8GA1UdIwQYMBaAFIK61j2Xzp/PceiSN6/9
# s7VpNVfPMDMGCCsGAQUFBwEBBCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3Au
# ZW50cnVzdC5uZXQwMQYDVR0fBCowKDAmoCSgIoYgaHR0cDovL2NybC5lbnRydXN0
# Lm5ldC9jc2JyMS5jcmwwDgYDVR0PAQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUF
# BwMIMEUGA1UdIAQ+MDwwMAYEVR0gADAoMCYGCCsGAQUFBwIBFhpodHRwOi8vd3d3
# LmVudHJ1c3QubmV0L3JwYTAIBgZngQwBBAIwDQYJKoZIhvcNAQENBQADggIBAHY9
# RmiFXwnAzsn4x7jXfqdcOwtGc84iU4s49hG6d8TChyGPJ9kMlevoS+Vc15AVb6gq
# LIpq4CIRNHn6vZZ5yHYWzbFE6nFRD5tVyRh81YJ5nPOmt5OpBThyAgaXoaiyeX5e
# COJubHmaqIeUzn+PVTZAD58/UdVmvnurhuZuh7pOY12x2I4fy2fDDXDaeuuTshSE
# 0j59kz8WDDagXHkAnwtu5YQq2IjBbQS3N/OSmnDgOwP9zbsngs4v/I3kssq++CWF
# xu10yD01XzgJPXlP6xvgQV6ldIE/URXA+EmIj7q7BdStRYIzecEljV9UPZHkuJ8X
# mABdrSjlT18b+/hUtaXEJPzwdjv4DV7MR7DKqrtuUd9TtUka8WCHt/n9aQZ1X3PW
# EZDygFiO5cMPA5iMBFOzKYffP/ew6UxXgSREeWj+GzYH1mU97G/WwrWqYXxmBuzS
# 5WmA+HGSLlziEUYYRUvW+gVk77veBspDJb3fjckBdGGI2/DHpj3jDHG8f0vnyOBu
# 4NqA+QCewGsl1aO6XCv+xGAgFEoHIzHlGsuRRLKae0PxW5i1IUu4MTsiVO55Yfea
# lBtmJyrG3+FlXe9xOeZQJf2HNLmuXXwnO+dlk/gohLFvhpMsk5O2cK+h7sikYamE
# O/sKt/i4bSbuR071XgX6nA8RfdfLka5DIPcVWWO8MIIGtDCCBJygAwIBAgIQdNny
# 21E8Imf9R5w2Bz97HTANBgkqhkiG9w0BAQ0FADBOMQswCQYDVQQGEwJVUzEWMBQG
# A1UEChMNRW50cnVzdCwgSW5jLjEnMCUGA1UEAxMeRW50cnVzdCBUaW1lIFN0YW1w
# aW5nIENBIC0gVFMyMB4XDTIxMDUxNDAwMDAwMFoXDTMyMDgxNDAwMDAwMFowdTEL
# MAkGA1UEBhMCQ0ExEDAOBgNVBAgTB09udGFyaW8xDzANBgNVBAcTBk90dGF3YTEW
# MBQGA1UEChMNRW50cnVzdCwgSW5jLjErMCkGA1UEAxMiRW50cnVzdCBUaW1lc3Rh
# bXAgQXV0aG9yaXR5IC0gVFNBMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC
# ggIBAK+/LEa8azGwJn8Cpvhw62SW6EoaKQxBXOAcSqW5gjOTps5WBh+UnqlRAhmN
# u/IPntuJ0DOEWOMOoN75UkEgvGDXC2GnT29CTHCcnCkjC8Knwlzdnrgs8164QblI
# yjNwNBN191BebSZuxRQzMRfNgbu6ElCgrMF7BYNyEG8pQ/wbaS/FwuuF14OVYAgj
# dd9cIv+kgQbRzvC3XBxOmbCopB2A43A82Hlew8kJB9kzkjWWIUl/1Ot40vin8wu5
# SoARNaks2EKbtm6Yq1DDUKEt9t3ypzGfGwtnVTOeGHvMYguU1CPTpem6KWMRJWZn
# lFv/O3k4sNMtFnWJ9PN4kFq/a34XqoOk8VCBnILcHspisXUPiL8NF3oK7QPEDY+1
# 7ywl1YiU51wW03hPsvI0e1lJGM/Kg9xQAL4ib8pUvCYnJzqnrco4PgyvqCHtlXLo
# 1dJ7eBLxnmLZ/gLfoLvJfvBkbMjYrUPkKc1nvJtNBW5zrh4MdIOg1/Go0RO6xpPd
# Ee4Eo1lhDaIBJFcWPzMEZGoGB9dpVvGKZKkYPwmwDDwH9Qo/mdSF5w+XwdErwx2u
# h9tydRjzm3ZVQAnHVZwsRken2kyjnBHv4XRUd3t4wLYU4s/anNRGXdDWCpMfASfn
# 2PzDCmzffK1PHZCz1o4n6Ka/S0ZxZjrG+WjpRPp5BwZN7xu9AgMBAAGjggFlMIIB
# YTAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBTC9dEWwc29rXhhVM4IFG72AQ++ZjAf
# BgNVHSMEGDAWgBQmD/DESAgbzd2R9VRUtrOz/JnxCDBoBggrBgEFBQcBAQRcMFow
# IwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmVudHJ1c3QubmV0MDMGCCsGAQUFBzAC
# hidodHRwOi8vYWlhLmVudHJ1c3QubmV0L3RzMi1jaGFpbjI1Ni5jZXIwMQYDVR0f
# BCowKDAmoCSgIoYgaHR0cDovL2NybC5lbnRydXN0Lm5ldC90czJjYS5jcmwwDgYD
# VR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMIMEwGA1UdIARFMEMw
# NwYKYIZIAYb6bAoDBTApMCcGCCsGAQUFBwIBFhtodHRwczovL3d3dy5lbnRydXN0
# Lm5ldC9ycGEwCAYGZ4EMAQQCMA0GCSqGSIb3DQEBDQUAA4ICAQB1IotTwHGXTkoF
# rU0ODiuUQOK8p/ujaCXErVBnNcsUvHSWYHn/4bF7Dz9o6/KG+R09T1e6Lsgn06e7
# J4uT4+oYz1Esf6I6xZ/gmwArdCjyluD0whqEWLbnkIvF7EkGvOgRBBSW1b/dnp1K
# MK/hyuZrqATSq6eRIq/N/GZZf1omY7pnQIYoi+zdjiO6OEDcwwvWP0KO+c4CaDOL
# S6gb5pmmbF4ca42N5C9rgE0Nz5JiYnjWC8FcgbrszTuOi1uuawDbuByfMMiZAo0N
# GnBZM//Yn7wQUKTAwBX7L9oEY+w5OoK9xSdLZIK1XQ9w53zSVRXINhK1/vJaCGSa
# g/DJi2k8+rlyPstP14lyDBMXQFI6ufgQEk3k6C1a1dj6zJkBgkzSFC/dZWbOMQIv
# Xtk8X5Phkpy41lWtDrSv6/UzvzYXYbQ0Nnjs9gqNcoN0FRO8CHYby/wWnWD/pv8I
# m/x5UyJ2skI22Y4n93jw4XN/MGqwsGRn1rsBT414ene2wX19f3roVOT3rtr0SDB5
# ++YoY718HOn3s7S1dg95xNXtYRMbcUaWHWbeEqZqHx2rtW7/WB5HkP/qZTpIHQsg
# SYUiR3S2AaKwud/ghu1T3ZimLa7hvShHJudtMxoih6vH/vMbagTIud/bsvs925oj
# yXOeX8fYXKIEmxLBqqKOG/wUEZJt3DGCBBYwggQSAgEBMGIwTjELMAkGA1UEBhMC
# VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xJzAlBgNVBAMTHkVudHJ1c3QgVGlt
# ZSBTdGFtcGluZyBDQSAtIFRTMgIQdNny21E8Imf9R5w2Bz97HTALBglghkgBZQME
# AgOgggGJMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkqhkiG9w0BCQUx
# DxcNMjIwNzAxMjA1MDQ1WjApBgkqhkiG9w0BCTQxHDAaMAsGCWCGSAFlAwQCA6EL
# BgkqhkiG9w0BAQ0wTwYJKoZIhvcNAQkEMUIEQDj9yIlL2Qi/Chof39G0hRuJWsQX
# oPcaxccuoeNghTc77AH1XQca5yzf7LgCpEd6TUQ03gfHJ20uGnIzY3GnilYwgdAG
# CyqGSIb3DQEJEAIvMYHAMIG9MIG6MIG3MAsGCWCGSAFlAwQCAwRAYHlfLRbGnFn9
# od5ZY63P46SIFLZc6BFL1b/uDxK7PPBWMeQkFLkZuMEx1qut5ULXgsiKMZBlL0sK
# /PIZEck3jDBmMFKkUDBOMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNRW50cnVzdCwg
# SW5jLjEnMCUGA1UEAxMeRW50cnVzdCBUaW1lIFN0YW1waW5nIENBIC0gVFMyAhB0
# 2fLbUTwiZ/1HnDYHP3sdMAsGCSqGSIb3DQEBDQSCAgCBAsRAeqX7t0DPuO6hTg7v
# LjOFxCh4hPgzFvOXbNZDR1tpkqK8hkn4JLpSuvozoJQ9Vy/k+Yp1B+AMnV5ejM+v
# NnO5Jx8DuDHoENeMjSjyP6tTWnPgseplzmUnQp6KuQdkrqVKbYVNyGh5GQ+QVB1h
# PTfgSJnvuPCOccj/5h0Xi1pBPkqIedLA+JlXQpfjR9Vb+OxHiozCF4R2/LdmR6it
# qRTXTrjG8k3559NChpuN7UsebCO0T74qylhWgtUuF04wTX99IzKHyFv5Z4Elj3Ng
# 69/lyq3XcpJXUHgwKX2TKA0KGlS63vtfDNutREda/FDewafb3erIE/0bNlnnwbG4
# xTwk8QOipA7KBByOovf4A4mKn2XJWARgb1P0605y76b/RMjgmWSnVR7XinG7f7s5
# P25Nw2FXxUapm2+6m8/UEOda98C5e+mw4xxvpeZ3Qw2nNkmZKseCh/zoLILUWE5T
# +j9fIAPLE6Sxchk5T+Q0d1CcInm1lDbZRc1Qjlq3IOyEeNNlL/qgvvgWtYh+FZYA
# e+I+fE2HTxXGWl2ZKyLCgCmbmXl85HWirLLkkwQ7N9ppe8czmIjIwZL9sfhu+Q9Y
# lZxaDyhLWP4xzyvU1mu0pDyPtm0xPbjwqGUFAIV59h3Z/cgSRB3WUBScNKVJrKcI
# 9nEQv7JThrd+XDUj98cpsw==
# SIG # End signature block