custom/Approve-ZNAssetInboundRuleReview.ps1

<#
.Synopsis
Approve a "pending review" rule with or without changes
.Description
Approve a "pending review" rule with or without changes

.Link
https://github.com/zeronetworks/zero-powershell/Approve-ZNAssetInboundRuleReview
#>

function Approve-ZNAssetInboundRuleReview {
    [OutputType([ZeroNetworks.PowerShell.Cmdlets.Api.Models.Any])]
    [CmdletBinding(DefaultParameterSetName = 'ApproveExpanded', PositionalBinding = $false, SupportsShouldProcess, ConfirmImpact = 'Medium')]
    param(
        [Parameter(ParameterSetName = 'ApproveExpanded', Mandatory)]
        [Parameter(ParameterSetName = 'ApproveWithChangesExpanded', Mandatory)]
        [ZeroNetworks.PowerShell.Cmdlets.Api.Category('Path')]
        [System.String]
        # Asset Id
        ${AssetId},
        
        [Parameter(ParameterSetName = 'ApproveExpanded', Mandatory)]
        [Parameter(ParameterSetName = 'ApproveWithChangesExpanded', Mandatory)]
        [ZeroNetworks.PowerShell.Cmdlets.Api.Category('Path')]
        [System.String]
        # rule Id
        ${RuleId},
        
        [Parameter(ParameterSetName = 'ApproveWithChangesExpanded')]
        [ZeroNetworks.PowerShell.Cmdlets.Api.Category('Body')]
        [System.String]
        # Comments
        ${Details},
        
        [Parameter(ParameterSetName = 'ApproveWithChangesExpanded', Mandatory)]
        [ZeroNetworks.PowerShell.Cmdlets.Api.Category('Body')]
        [ValidateSet('HumanTrafficCoveredByMFA', 'TightenRuleScope', 'MissingPortOrProcess', 'AffectedEntitiesContainedInAnExisitingGroup', 'RedundantRule', 'TrafficShouldBeBlocked', 'Other')]
        # Review Reason int32
        ${Reason},
        
        [Parameter(ParameterSetName = 'ApproveWithChangesExpanded')]
        [ZeroNetworks.PowerShell.Cmdlets.Api.Category('Body')]
        [int32]
        # Action
        ${Action},
        
        [Parameter(ParameterSetName = 'ApproveWithChangesExpanded')]
        [ZeroNetworks.PowerShell.Cmdlets.Api.Category('Body')]
        [System.String]
        # the rule description.
        ${Description},
        #[-RuleInfoDescription <String>]
        
        [Parameter(ParameterSetName = 'ApproveWithChangesExpanded')]
        [ZeroNetworks.PowerShell.Cmdlets.Api.Category('Body')]
        [string[]]
        # excluded destination asset(s).
        ${ExcludedLocalIdsList},
        #[-RuleInfoExcludedLocalIdsList <String[]>]
        
        [Parameter(ParameterSetName = 'ApproveWithChangesExpanded')]
        [ZeroNetworks.PowerShell.Cmdlets.Api.Category('Body')]
        [Int64]
        # when the rule should expiry.
        ${ExpiresAt},
        #[-RuleInfoExpiresAt <Int64>]

        [Parameter(ParameterSetName = 'ApproveWithChangesExpanded')]
        [ZeroNetworks.PowerShell.Cmdlets.Api.Category('Body')]
        [int32]
        # ip sec configuration
        ${IpSecOpt},

        [Parameter(ParameterSetName = 'ApproveWithChangesExpanded')]
        [ZeroNetworks.PowerShell.Cmdlets.Api.Category('Body')]
        [System.String]
        # The Destination asset(s).
        ${LocalEntityId},
        #[-RuleInfoLocalEntityId <String>]

        [Parameter(ParameterSetName = 'ApproveWithChangesExpanded')]
        [ZeroNetworks.PowerShell.Cmdlets.Api.Category('Body')]
        [System.String[]]
        # the destination process paths.
        ${LocalProcessesList},
        #[-RuleInfoLocalProcessesList <String[]>]
        
        [Parameter(ParameterSetName = 'ApproveWithChangesExpanded')]
        [ZeroNetworks.PowerShell.Cmdlets.Api.Category('Body')]
        [ZeroNetworks.PowerShell.Cmdlets.Api.Models.IPortsListItem[]]
        # the destination ports and protocols.
        ${PortsList},
        #[-RuleInfoPortsList <IPortsListItem[]>]
         
        [Parameter(ParameterSetName = 'ApproveWithChangesExpanded')]
        [ZeroNetworks.PowerShell.Cmdlets.Api.Category('Body')]
        [string[]]
        # the source asset(s).
        ${RemoteEntityIdsList},
        #[-RuleInfoRemoteEntityIdsList <String[]>]
         
        [Parameter(ParameterSetName = 'ApproveWithChangesExpanded')]
        [ZeroNetworks.PowerShell.Cmdlets.Api.Category('Body')]
        [int32]
        # the rule state.
        ${State},

        [Parameter()]
        [ZeroNetworks.PowerShell.Cmdlets.Api.Category('Runtime')]
        [System.Management.Automation.SwitchParameter]
        # Run the command as a job
        ${AsJob},

        [Parameter(DontShow)]
        [ZeroNetworks.PowerShell.Cmdlets.Api.Category('Runtime')]
        [System.Management.Automation.SwitchParameter]
        # Wait for .NET debugger to attach
        ${Break},

        [Parameter(DontShow)]
        [ValidateNotNull()]
        [ZeroNetworks.PowerShell.Cmdlets.Api.Category('Runtime')]
        [ZeroNetworks.PowerShell.Cmdlets.Api.Runtime.SendAsyncStep[]]
        # SendAsync Pipeline Steps to be appended to the front of the pipeline
        ${HttpPipelineAppend},

        [Parameter(DontShow)]
        [ValidateNotNull()]
        [ZeroNetworks.PowerShell.Cmdlets.Api.Category('Runtime')]
        [ZeroNetworks.PowerShell.Cmdlets.Api.Runtime.SendAsyncStep[]]
        # SendAsync Pipeline Steps to be prepended to the front of the pipeline
        ${HttpPipelinePrepend},

        [Parameter()]
        [ZeroNetworks.PowerShell.Cmdlets.Api.Category('Runtime')]
        [System.Management.Automation.SwitchParameter]
        # Run the command asynchronously
        ${NoWait},

        [Parameter(DontShow)]
        [ZeroNetworks.PowerShell.Cmdlets.Api.Category('Runtime')]
        [System.Uri]
        # The URI for the proxy server to use
        ${Proxy},

        [Parameter(DontShow)]
        [ValidateNotNull()]
        [ZeroNetworks.PowerShell.Cmdlets.Api.Category('Runtime')]
        [System.Management.Automation.PSCredential]
        # Credentials for a proxy server to use for the remote call
        ${ProxyCredential},

        [Parameter(DontShow)]
        [ZeroNetworks.PowerShell.Cmdlets.Api.Category('Runtime')]
        [System.Management.Automation.SwitchParameter]
        # Use the default credentials for the proxy
        ${ProxyUseDefaultCredentials}
    )

    process {
        try {
            #handle based on paramtersetname
            switch ($PsCmdlet.ParameterSetName) {
                "ApproveExpanded" {
                    ZeroNetworks.internal\Approve-ZNAssetInboundRulesReview @PSBoundParameters
                }
                "ApproveWithChangesExpanded" {
                    #Handle Get
                    $ruleId = $PSBoundParameters['RuleId'].ToString()
                    $rule = ZeroNetworks\Get-ZNInboundRule -RuleId $ruleId 
                    
                    $ruleReview = [ZeroNetworks.PowerShell.Cmdlets.Api.Models.RuleReviewApproveWithChanges]::new()

                    if ($PSBoundParameters['Reason']) {
                        if ($PSBoundParameters['Reason'] -eq 'Other') {
                            if (!$PSBoundParameters['Details']) {
                                Write-Error "You must provide Details if Reason is Other"
                            }
                        }
                        switch ($PSBoundParameters['Reason']) {
                            'HumanTrafficCoveredByMFA' { $intReason = 1 }
                            'TightenRuleScope' { $intReason = 2 }
                            'MissingPortOrProcess' { $intReason = 3 }
                            'AffectedEntitiesContainedInAnExisitingGroup' { $intReason = 4 }
                            'RedundantRule' { $intReason = 5 }
                            'TrafficShouldBeBlocked' { $intReason = 6 }
                            "Other" { $intReason = 7 }
                        }
                        $ruleReview.ReviewReason = $intReason
                        $null = $PSBoundParameters.Remove('Reason')
                    }

                    if ($PSBoundParameters['Details']) {
                        $ruleReview.ReviewDetails = $PSBoundParameters['Details']
                        $null = $PSBoundParameters.Remove('Details')
                    }else{
                        $ruleReview.ReviewDetails = ""
                    }

                    $ruleReview.RuleInfoDirection = 1

                    if ($PSBoundParameters['Action']) {
                        $ruleReview.RuleInfoAction = $PSBoundParameters['Action']
                        $null = $PSBoundParameters.Remove('Action')
                    }
                    else {
                        $ruleReview.RuleInfoAction = $rule.ItemAction
                        $null = $PSBoundParameters.Remove('Action')
                    }
                    
                    if ($PSBoundParameters['Description']) {
                        $ruleReview.RuleInfoDescription = $PSBoundParameters['Description']
                        $null = $PSBoundParameters.Remove('Description')
                    }
                    else {
                        $ruleReview.RuleInfoDescription = $rule.ItemDescription
                        $null = $PSBoundParameters.Remove('Description')
                    }

                    if ($PSBoundParameters['ExcludedLocalIdsList']) {
                        $ruleReview.RuleInfoExcludedLocalIdsList = $PSBoundParameters['ExcludedLocalIdsList']
                        $null = $PSBoundParameters.Remove('ExcludedLocalIdsList')
                    }
                    else {
                        $ruleReview.RuleInfoExcludedLocalIdsList = $rule.ItemExcludedLocalIdsList
                        $null = $PSBoundParameters.Remove('ExcludedLocalIdsList')
                    }

                    if ($PSBoundParameters['ExpiresAt']) {
                        $ruleReview.RuleInfoExpiresAt = $PSBoundParameters['ExpiresAt']
                        $null = $PSBoundParameters.Remove('ExpiresAt')
                    }
                    else {
                        $ruleReview.RuleInfoExpiresAt = $rule.ItemExpiresAt
                        $null = $PSBoundParameters.Remove('ExpiresAt')
                    }

                    if ($PSBoundParameters['IpSecOpt']) {
                        $ruleReview.RuleInfoIpSecOpt = $PSBoundParameters['IpSecOpt']
                        $null = $PSBoundParameters.Remove('IpSecOpt')
                    }
                    else {
                        $ruleReview.RuleInfoIpSecOpt = $rule.ItemIpSecOpt
                        $null = $PSBoundParameters.Remove('IpSecOpt')
                    }
                    
                    if ($PSBoundParameters['LocalEntityId']) {
                        $ruleReview.RuleInfoLocalEntityId = $PSBoundParameters['LocalEntityId']
                        $null = $PSBoundParameters.Remove('LocalEntityId')
                    }
                    else {
                        $ruleReview.RuleInfoLocalEntityId = $rule.ItemLocalEntityId
                        $null = $PSBoundParameters.Remove('LocalEntityId')
                    }
                    
                    if ($PSBoundParameters['LocalProcessesList']) {
                        $ruleReview.RuleInfoLocalProcessesList = $PSBoundParameters['LocalProcessesList']
                        $null = $PSBoundParameters.Remove('LocalProcessesList')
                    }
                    else {
                        $ruleReview.RuleInfoLocalProcessesList = $rule.ItemLocalProcessesList
                        $null = $PSBoundParameters.Remove('LocalProcessesList')
                    }

                    if ($PSBoundParameters['PortsList']) {
                        $ruleReview.RuleInfoPortsList = $PSBoundParameters['PortsList']
                        $null = $PSBoundParameters.Remove('PortsList')
                    }
                    else {
                        $ruleReview.RuleInfoPortsList = $rule.ItemPortsList
                        $null = $PSBoundParameters.Remove('PortsList')
                    }
                    
                    if ($PSBoundParameters['RemoteEntityIdsList']) {
                        $ruleReview.RuleInfoRemoteEntityIdsList = $PSBoundParameters['RemoteEntityIdsList']
                        $null = $PSBoundParameters.Remove('RemoteEntityIdsList')
                    }
                    else {
                        $ruleReview.RuleInfoRemoteEntityIdsList = $rule.ItemRemoteEntityIdsList
                        $null = $PSBoundParameters.Remove('RemoteEntityIdsList')
                    }
                    
                    if ($PSBoundParameters['State']) {
                        $ruleReview.RuleInfoState = $PSBoundParameters['State']
                        $null = $PSBoundParameters.Remove('State')
                    }
                    else {
                        $ruleReview.RuleInfoState = 1
                        $null = $PSBoundParameters.Remove('State')
                    }

                    $null = $PSBoundParameters.Add('Body', $ruleReview)
                    ZeroNetworks.internal\Approve-ZNAssetInboundRulesReview @PSBoundParameters
                }
            }
        }
        catch {
            throw
        }
    }
}
# SIG # Begin signature block
# MIIsMgYJKoZIhvcNAQcCoIIsIzCCLB8CAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUojhXN88hEuvDd3jgfkwAwMOh
# PcCggiV0MIIFbzCCBFegAwIBAgIQSPyTtGBVlI02p8mKidaUFjANBgkqhkiG9w0B
# AQwFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVy
# MRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEh
# MB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTIxMDUyNTAwMDAw
# MFoXDTI4MTIzMTIzNTk1OVowVjELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1NlY3Rp
# Z28gTGltaXRlZDEtMCsGA1UEAxMkU2VjdGlnbyBQdWJsaWMgQ29kZSBTaWduaW5n
# IFJvb3QgUjQ2MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjeeUEiIE
# JHQu/xYjApKKtq42haxH1CORKz7cfeIxoFFvrISR41KKteKW3tCHYySJiv/vEpM7
# fbu2ir29BX8nm2tl06UMabG8STma8W1uquSggyfamg0rUOlLW7O4ZDakfko9qXGr
# YbNzszwLDO/bM1flvjQ345cbXf0fEj2CA3bm+z9m0pQxafptszSswXp43JJQ8mTH
# qi0Eq8Nq6uAvp6fcbtfo/9ohq0C/ue4NnsbZnpnvxt4fqQx2sycgoda6/YDnAdLv
# 64IplXCN/7sVz/7RDzaiLk8ykHRGa0c1E3cFM09jLrgt4b9lpwRrGNhx+swI8m2J
# mRCxrds+LOSqGLDGBwF1Z95t6WNjHjZ/aYm+qkU+blpfj6Fby50whjDoA7NAxg0P
# OM1nqFOI+rgwZfpvx+cdsYN0aT6sxGg7seZnM5q2COCABUhA7vaCZEao9XOwBpXy
# bGWfv1VbHJxXGsd4RnxwqpQbghesh+m2yQ6BHEDWFhcp/FycGCvqRfXvvdVnTyhe
# Be6QTHrnxvTQ/PrNPjJGEyA2igTqt6oHRpwNkzoJZplYXCmjuQymMDg80EY2NXyc
# uu7D1fkKdvp+BRtAypI16dV60bV/AK6pkKrFfwGcELEW/MxuGNxvYv6mUKe4e7id
# FT/+IAx1yCJaE5UZkADpGtXChvHjjuxf9OUCAwEAAaOCARIwggEOMB8GA1UdIwQY
# MBaAFKARCiM+lvEH7OKvKe+CpX/QMKS0MB0GA1UdDgQWBBQy65Ka/zWWSC8oQEJw
# IDaRXBeF5jAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zATBgNVHSUE
# DDAKBggrBgEFBQcDAzAbBgNVHSAEFDASMAYGBFUdIAAwCAYGZ4EMAQQBMEMGA1Ud
# HwQ8MDowOKA2oDSGMmh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL0FBQUNlcnRpZmlj
# YXRlU2VydmljZXMuY3JsMDQGCCsGAQUFBwEBBCgwJjAkBggrBgEFBQcwAYYYaHR0
# cDovL29jc3AuY29tb2RvY2EuY29tMA0GCSqGSIb3DQEBDAUAA4IBAQASv6Hvi3Sa
# mES4aUa1qyQKDKSKZ7g6gb9Fin1SB6iNH04hhTmja14tIIa/ELiueTtTzbT72ES+
# BtlcY2fUQBaHRIZyKtYyFfUSg8L54V0RQGf2QidyxSPiAjgaTCDi2wH3zUZPJqJ8
# ZsBRNraJAlTH/Fj7bADu/pimLpWhDFMpH2/YGaZPnvesCepdgsaLr4CnvYFIUoQx
# 2jLsFeSmTD1sOXPUC4U5IOCFGmjhp0g4qdE2JXfBjRkWxYhMZn0vY86Y6GnfrDyo
# XZ3JHFuu2PMvdM+4fvbXg50RlmKarkUT2n/cR/vfw1Kf5gZV6Z2M8jpiUbzsJA8p
# 1FiAhORFe1rYMIIFjTCCBHWgAwIBAgIQDpsYjvnQLefv21DiCEAYWjANBgkqhkiG
# 9w0BAQwFADBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkw
# FwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1
# cmVkIElEIFJvb3QgQ0EwHhcNMjIwODAxMDAwMDAwWhcNMzExMTA5MjM1OTU5WjBi
# MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
# d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3Qg
# RzQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAi
# MGkz7MKnJS7JIT3yithZwuEppz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnny
# yhHS5F/WBTxSD1Ifxp4VpX6+n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE
# 5nQ7bXHiLQwb7iDVySAdYyktzuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm
# 7nfISKhmV1efVFiODCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5
# w3jHtrHEtWoYOAMQjdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsD
# dV14Ztk6MUSaM0C/CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1Z
# XUJ2h4mXaXpI8OCiEhtmmnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS0
# 0mFt6zPZxd9LBADMfRyVw4/3IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hk
# pjPRiQfhvbfmQ6QYuKZ3AeEPlAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m8
# 00ERElvlEFDrMcXKchYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+i
# sX4KJpn15GkvmB0t9dmpsh3lGwIDAQABo4IBOjCCATYwDwYDVR0TAQH/BAUwAwEB
# /zAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wHwYDVR0jBBgwFoAUReui
# r/SSy4IxLVGLp6chnfNtyA8wDgYDVR0PAQH/BAQDAgGGMHkGCCsGAQUFBwEBBG0w
# azAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEMGCCsGAQUF
# BzAChjdodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1cmVk
# SURSb290Q0EuY3J0MEUGA1UdHwQ+MDwwOqA4oDaGNGh0dHA6Ly9jcmwzLmRpZ2lj
# ZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcmwwEQYDVR0gBAowCDAG
# BgRVHSAAMA0GCSqGSIb3DQEBDAUAA4IBAQBwoL9DXFXnOF+go3QbPbYW1/e/Vwe9
# mqyhhyzshV6pGrsi+IcaaVQi7aSId229GhT0E0p6Ly23OO/0/4C5+KH38nLeJLxS
# A8hO0Cre+i1Wz/n096wwepqLsl7Uz9FDRJtDIeuWcqFItJnLnU+nBgMTdydE1Od/
# 6Fmo8L8vC6bp8jQ87PcDx4eo0kxAGTVGamlUsLihVo7spNU96LHc/RzY9HdaXFSM
# b++hUD38dglohJ9vytsgjTVgHAIDyyCwrFigDkBjxZgiwbJZ9VVrzyerbHbObyMt
# 9H5xaiNrIv8SuFQtJ37YOtnwtoeW/VvRXKwYw02fc7cBqZ9Xql4o4rmUMIIGHDCC
# BASgAwIBAgIQM9cIqJFAUxnipbvTObmtbjANBgkqhkiG9w0BAQwFADBWMQswCQYD
# VQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMS0wKwYDVQQDEyRTZWN0
# aWdvIFB1YmxpYyBDb2RlIFNpZ25pbmcgUm9vdCBSNDYwHhcNMjEwMzIyMDAwMDAw
# WhcNMzYwMzIxMjM1OTU5WjBXMQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGln
# byBMaW1pdGVkMS4wLAYDVQQDEyVTZWN0aWdvIFB1YmxpYyBDb2RlIFNpZ25pbmcg
# Q0EgRVYgUjM2MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAu9H+HrdC
# W3j1kKeuLIPxjSHTMIaFe9/TzdkWS6yFxbsBz+KMKBFyBHYsgcWrEnpASsUQ6IEU
# ORtfTwf2MDAwfzUl5cBzPUAJlOio+Os5C1XVtgyLHif43j4iwb/vZe5z7mXdKN27
# H32bMn+3mVUXqrJJqDwQajrDIbKZqEPXO4KoGWG1PmpaXbi8nhPQCp71W49pOGjq
# pR9byiPuC+280B5DQ26wU4zCcypEMW6+j7jGAva7ggQVeQxSIOiYJ3Fh7y/k+AL7
# M1m19MNV59/2CCKuttEJWewBn3OJt0NP1fLZvVZZCd23F/bEdIC6h0asBtvbBA3V
# TrrujAk0GZUb5nATBCXfj7jXhDOMbKYM62i6lU98ROjUaY0lecMh8TV3+E+2ElWV
# 0FboGALV7nnIhqFp8RtOlBNqB2Lw0GuZpZdQnhwzoR7uYYsFaByO9e4mkIPW/nGF
# p5ryDRQ+NrUSrXd1esznRjZqkFPLxpRx3gc6IfnWMmfgnG5UhqBkoIPLAgMBAAGj
# ggFjMIIBXzAfBgNVHSMEGDAWgBQy65Ka/zWWSC8oQEJwIDaRXBeF5jAdBgNVHQ4E
# FgQUgTKSQSsozUbIxKLGKjkS7EipPxQwDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB
# /wQIMAYBAf8CAQAwEwYDVR0lBAwwCgYIKwYBBQUHAwMwGgYDVR0gBBMwETAGBgRV
# HSAAMAcGBWeBDAEDMEsGA1UdHwREMEIwQKA+oDyGOmh0dHA6Ly9jcmwuc2VjdGln
# by5jb20vU2VjdGlnb1B1YmxpY0NvZGVTaWduaW5nUm9vdFI0Ni5jcmwwewYIKwYB
# BQUHAQEEbzBtMEYGCCsGAQUFBzAChjpodHRwOi8vY3J0LnNlY3RpZ28uY29tL1Nl
# Y3RpZ29QdWJsaWNDb2RlU2lnbmluZ1Jvb3RSNDYucDdjMCMGCCsGAQUFBzABhhdo
# dHRwOi8vb2NzcC5zZWN0aWdvLmNvbTANBgkqhkiG9w0BAQwFAAOCAgEAXzas+/n2
# cloUt/ALHd7Y/ZcB0v0B7pkthuj2t/A5/9aBSlqnQkoKLRWd5pT9xWlKstdL8RYS
# TPa+kGZliy101KsI92oRAwh3fL5p4bDbnySJA9beXKTgsta0z+M41bltzCfWzmQR
# 6BBydtP54OksielJ07OXlgYK4fYKyEGakV2B2DZ3mMqAQZeo+JE/Y5+qzVRUS4Dq
# 9Rdm05Rx/Z79RzHj6RqGHdO+INI/sVJfspO9jJUJmHKPlQH0mEOlSvsUJqqdNr9y
# sPzcvYQN7O00qF6VKzgWYwV12fYxLhVr4pSyKtJ0NbWYmqP++CsvthdLJ2xa5rl2
# XtqG3atk1mrqgxiIGzGC9YizlCXAIS8IaQLjTLtMKhEw64F5BuFBlSrUIPYLk+R8
# dgydHSZrX4QB9iqZza/ex/DkGKJOmy8qDGamknUmvtlANRNvrqY3GnrorRxRYwcq
# VgZs7X4Y9uPsZHOmbQg2i68Pma51axcrwk1qw1FGQVbpj8KN/xNxm9rtntOfq+VF
# phLFFFpSQZejBgAIxeYc6ieCPDvb5kbE7y0ANRPNNn2d5aonCAXMzsA2DksZT9Bj
# mm2/xSlTMSLbdVB3htDy+GruawYbPoUjK5fIfnqZQQzdWH8OqMMSPTo1m+CdLIwX
# gVREqHodmJ2Wf1lYplRl/1FCC/hH68/45b8wggauMIIElqADAgECAhAHNje3JFR8
# 2Ees/ShmKl5bMA0GCSqGSIb3DQEBCwUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK
# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV
# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMjAzMjMwMDAwMDBaFw0z
# NzAzMjIyMzU5NTlaMGMxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg
# SW5jLjE7MDkGA1UEAxMyRGlnaUNlcnQgVHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1
# NiBUaW1lU3RhbXBpbmcgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
# AQDGhjUGSbPBPXJJUVXHJQPE8pE3qZdRodbSg9GeTKJtoLDMg/la9hGhRBVCX6SI
# 82j6ffOciQt/nR+eDzMfUBMLJnOWbfhXqAJ9/UO0hNoR8XOxs+4rgISKIhjf69o9
# xBd/qxkrPkLcZ47qUT3w1lbU5ygt69OxtXXnHwZljZQp09nsad/ZkIdGAHvbREGJ
# 3HxqV3rwN3mfXazL6IRktFLydkf3YYMZ3V+0VAshaG43IbtArF+y3kp9zvU5Emfv
# DqVjbOSmxR3NNg1c1eYbqMFkdECnwHLFuk4fsbVYTXn+149zk6wsOeKlSNbwsDET
# qVcplicu9Yemj052FVUmcJgmf6AaRyBD40NjgHt1biclkJg6OBGz9vae5jtb7IHe
# IhTZgirHkr+g3uM+onP65x9abJTyUpURK1h0QCirc0PO30qhHGs4xSnzyqqWc0Jo
# n7ZGs506o9UD4L/wojzKQtwYSH8UNM/STKvvmz3+DrhkKvp1KCRB7UK/BZxmSVJQ
# 9FHzNklNiyDSLFc1eSuo80VgvCONWPfcYd6T/jnA+bIwpUzX6ZhKWD7TA4j+s4/T
# Xkt2ElGTyYwMO1uKIqjBJgj5FBASA31fI7tk42PgpuE+9sJ0sj8eCXbsq11GdeJg
# o1gJASgADoRU7s7pXcheMBK9Rp6103a50g5rmQzSM7TNsQIDAQABo4IBXTCCAVkw
# EgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUuhbZbU2FL3MpdpovdYxqII+e
# yG8wHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0PAQH/BAQD
# AgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMIMHcGCCsGAQUFBwEBBGswaTAkBggrBgEF
# BQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAChjVodHRw
# Oi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNy
# dDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGln
# aUNlcnRUcnVzdGVkUm9vdEc0LmNybDAgBgNVHSAEGTAXMAgGBmeBDAEEAjALBglg
# hkgBhv1sBwEwDQYJKoZIhvcNAQELBQADggIBAH1ZjsCTtm+YqUQiAX5m1tghQuGw
# GC4QTRPPMFPOvxj7x1Bd4ksp+3CKDaopafxpwc8dB+k+YMjYC+VcW9dth/qEICU0
# MWfNthKWb8RQTGIdDAiCqBa9qVbPFXONASIlzpVpP0d3+3J0FNf/q0+KLHqrhc1D
# X+1gtqpPkWaeLJ7giqzl/Yy8ZCaHbJK9nXzQcAp876i8dU+6WvepELJd6f8oVInw
# 1YpxdmXazPByoyP6wCeCRK6ZJxurJB4mwbfeKuv2nrF5mYGjVoarCkXJ38SNoOeY
# +/umnXKvxMfBwWpx2cYTgAnEtp/Nh4cku0+jSbl3ZpHxcpzpSwJSpzd+k1OsOx0I
# SQ+UzTl63f8lY5knLD0/a6fxZsNBzU+2QJshIUDQtxMkzdwdeDrknq3lNHGS1yZr
# 5Dhzq6YBT70/O3itTK37xJV77QpfMzmHQXh6OOmc4d0j/R0o08f56PGYX/sr2H7y
# Rp11LB4nLCbbbxV7HhmLNriT1ObyF5lZynDwN7+YAN8gFk8n+2BnFqFmut1VwDop
# hrCYoCvtlUG3OtUVmDG0YgkPCr2B2RP+v6TR81fZvAT6gt4y3wSJ8ADNXcL50CN/
# AAvkdgIm2fBldkKmKYcJRyvmfxqkhQ/8mJb2VVQrH4D6wPIOK+XW+6kvRBVK5xMO
# Hds3OBqhK/bt1nz8MIIGwjCCBKqgAwIBAgIQBUSv85SdCDmmv9s/X+VhFjANBgkq
# hkiG9w0BAQsFADBjMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIElu
# Yy4xOzA5BgNVBAMTMkRpZ2lDZXJ0IFRydXN0ZWQgRzQgUlNBNDA5NiBTSEEyNTYg
# VGltZVN0YW1waW5nIENBMB4XDTIzMDcxNDAwMDAwMFoXDTM0MTAxMzIzNTk1OVow
# SDELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMSAwHgYDVQQD
# ExdEaWdpQ2VydCBUaW1lc3RhbXAgMjAyMzCCAiIwDQYJKoZIhvcNAQEBBQADggIP
# ADCCAgoCggIBAKNTRYcdg45brD5UsyPgz5/X5dLnXaEOCdwvSKOXejsqnGfcYhVY
# wamTEafNqrJq3RApih5iY2nTWJw1cb86l+uUUI8cIOrHmjsvlmbjaedp/lvD1isg
# HMGXlLSlUIHyz8sHpjBoyoNC2vx/CSSUpIIa2mq62DvKXd4ZGIX7ReoNYWyd/nFe
# xAaaPPDFLnkPG2ZS48jWPl/aQ9OE9dDH9kgtXkV1lnX+3RChG4PBuOZSlbVH13gp
# OWvgeFmX40QrStWVzu8IF+qCZE3/I+PKhu60pCFkcOvV5aDaY7Mu6QXuqvYk9R28
# mxyyt1/f8O52fTGZZUdVnUokL6wrl76f5P17cz4y7lI0+9S769SgLDSb495uZBkH
# NwGRDxy1Uc2qTGaDiGhiu7xBG3gZbeTZD+BYQfvYsSzhUa+0rRUGFOpiCBPTaR58
# ZE2dD9/O0V6MqqtQFcmzyrzXxDtoRKOlO0L9c33u3Qr/eTQQfqZcClhMAD6FaXXH
# g2TWdc2PEnZWpST618RrIbroHzSYLzrqawGw9/sqhux7UjipmAmhcbJsca8+uG+W
# 1eEQE/5hRwqM/vC2x9XH3mwk8L9CgsqgcT2ckpMEtGlwJw1Pt7U20clfCKRwo+wK
# 8REuZODLIivK8SgTIUlRfgZm0zu++uuRONhRB8qUt+JQofM604qDy0B7AgMBAAGj
# ggGLMIIBhzAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH/BAIwADAWBgNVHSUBAf8E
# DDAKBggrBgEFBQcDCDAgBgNVHSAEGTAXMAgGBmeBDAEEAjALBglghkgBhv1sBwEw
# HwYDVR0jBBgwFoAUuhbZbU2FL3MpdpovdYxqII+eyG8wHQYDVR0OBBYEFKW27xPn
# 783QZKHVVqllMaPe1eNJMFoGA1UdHwRTMFEwT6BNoEuGSWh0dHA6Ly9jcmwzLmRp
# Z2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNFJTQTQwOTZTSEEyNTZUaW1lU3Rh
# bXBpbmdDQS5jcmwwgZAGCCsGAQUFBwEBBIGDMIGAMCQGCCsGAQUFBzABhhhodHRw
# Oi8vb2NzcC5kaWdpY2VydC5jb20wWAYIKwYBBQUHMAKGTGh0dHA6Ly9jYWNlcnRz
# LmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNFJTQTQwOTZTSEEyNTZUaW1l
# U3RhbXBpbmdDQS5jcnQwDQYJKoZIhvcNAQELBQADggIBAIEa1t6gqbWYF7xwjU+K
# PGic2CX/yyzkzepdIpLsjCICqbjPgKjZ5+PF7SaCinEvGN1Ott5s1+FgnCvt7T1I
# jrhrunxdvcJhN2hJd6PrkKoS1yeF844ektrCQDifXcigLiV4JZ0qBXqEKZi2V3mP
# 2yZWK7Dzp703DNiYdk9WuVLCtp04qYHnbUFcjGnRuSvExnvPnPp44pMadqJpddNQ
# 5EQSviANnqlE0PjlSXcIWiHFtM+YlRpUurm8wWkZus8W8oM3NG6wQSbd3lqXTzON
# 1I13fXVFoaVYJmoDRd7ZULVQjK9WvUzF4UbFKNOt50MAcN7MmJ4ZiQPq1JE3701S
# 88lgIcRWR+3aEUuMMsOI5ljitts++V+wQtaP4xeR0arAVeOGv6wnLEHQmjNKqDbU
# uXKWfpd5OEhfysLcPTLfddY2Z1qJ+Panx+VPNTwAvb6cKmx5AdzaROY63jg7B145
# WPR8czFVoIARyxQMfq68/qTreWWqaNYiyjvrmoI1VygWy2nyMpqy0tg6uLFGhmu6
# F/3Ed2wVbK6rr3M66ElGt9V/zLY4wNjsHPW2obhDLN9OTH0eaHDAdwrUAuBcYLso
# /zjlUlrWrBciI0707NMX+1Br/wd3H3GXREHJuEbTbDJ8WC9nR2XlG3O2mflrLAZG
# 70Ee8PBf4NvZrZCARK+AEEGKMIIG1DCCBTygAwIBAgIQSGozlQY7aWLSD92JgcOc
# YzANBgkqhkiG9w0BAQsFADBXMQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGln
# byBMaW1pdGVkMS4wLAYDVQQDEyVTZWN0aWdvIFB1YmxpYyBDb2RlIFNpZ25pbmcg
# Q0EgRVYgUjM2MB4XDTI0MDUwNjAwMDAwMFoXDTI3MDUwNjIzNTk1OVowgZgxEjAQ
# BgNVBAUTCTUxNjAxNjE1MTETMBEGCysGAQQBgjc8AgEDEwJJTDEdMBsGA1UEDxMU
# UHJpdmF0ZSBPcmdhbml6YXRpb24xCzAJBgNVBAYTAklMMREwDwYDVQQIDAhUZWwg
# QXZpdjEWMBQGA1UECgwNWmVybyBOZXR3b3JrczEWMBQGA1UEAwwNWmVybyBOZXR3
# b3JrczCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMqdB4K7T+uL7y/u
# gvCk1VTnOAP7kcVUZl1biQ8tEAg9aKqDOvu2ouOXpq9ROATJqYz4NAp2ECu0nHiu
# Yjp/zetGcezadxFRhlViKYj3yrYGLCJzhZwdOt66g2qyFbp1PrSWBW2QasHbtFv0
# dk7IAAYA92O09eOqVgq5/fvdD/p/xbtXwIzw6CBW1a1vELrNBxnGT/JuGLR1FEhr
# HbXniSS4i3BKmtjHOWdrEDPbd0ZOxfUdPb74/ZtWoQrbpYPsu61WJaRgWXdQlhKo
# dsZmmKlGppw4VDL/UzYiG1gQlShvFbkowADU3IcEfKj3/xD+ceVv1vpYpYfG1h2G
# /x2sfQAFJP3FjsfcXUo0/PAYoMkJMlhtaLXpF8CbO/mAxtOhHVsp26O76lmmeCNP
# CI6187J51nYZBwio0LoPWRQy57qe1eC2EYtX4sIMnmgk9h8B8KOAxxWYofysl0lk
# pQ/Sn39Mkmin3tJuX4lqqgW4jnpdZDX5WcWh06di6KXQTZ6pCH/10a4sqhzwIZ43
# gCbuZ09qrzUyqb32ou//XZVoDwgZFIM0ryG+Gp5S2ZSMWmC9JjlX/9ob4m35MdXz
# fZl1u0/hpj09cTduTv3thuVmiBvuEMmfmXW450HFE1iIIsKAiZwRovvmE5GRMcJp
# 46QUaSFo+9BiXzqNHJcfZq2C1Gs9AgMBAAGjggHYMIIB1DAfBgNVHSMEGDAWgBSB
# MpJBKyjNRsjEosYqORLsSKk/FDAdBgNVHQ4EFgQUalI4jlFQGsLHuCItVo6TMtTJ
# QnAwDgYDVR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwEwYDVR0lBAwwCgYIKwYB
# BQUHAwMwSQYDVR0gBEIwQDA1BgwrBgEEAbIxAQIBBgEwJTAjBggrBgEFBQcCARYX
# aHR0cHM6Ly9zZWN0aWdvLmNvbS9DUFMwBwYFZ4EMAQMwSwYDVR0fBEQwQjBAoD6g
# PIY6aHR0cDovL2NybC5zZWN0aWdvLmNvbS9TZWN0aWdvUHVibGljQ29kZVNpZ25p
# bmdDQUVWUjM2LmNybDB7BggrBgEFBQcBAQRvMG0wRgYIKwYBBQUHMAKGOmh0dHA6
# Ly9jcnQuc2VjdGlnby5jb20vU2VjdGlnb1B1YmxpY0NvZGVTaWduaW5nQ0FFVlIz
# Ni5jcnQwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLnNlY3RpZ28uY29tMEoGA1Ud
# EQRDMEGgHAYIKwYBBQUHCAOgEDAODAxJTC01MTYwMTYxNTGBIWRhbmllbC5sdXBv
# bmVua29AemVyb25ldHdvcmtzLmNvbTANBgkqhkiG9w0BAQsFAAOCAYEAdpKwFb6F
# W2HEMyD2wfwlYBcdK2cCBceUyTu5qErfQxjViYhWJw8Jm6G0tdnXqsmdx/s5ygIH
# 3YwE+B8qnIs49uKI9EnsTWS8Ait1XMYmkCtvFAkJ+oBZqCnj/MmQrE8g48lmUtfy
# gmn0BDeg47DVpXo74GdnnGDMtOnYcIC4cJ+clhgLuBePDxdP4T9z/Sb2jdEIMabI
# YtScWqxfe9AZ2dkQ7lMgw/U4W8VbnCL0kty1fDWPPiXy6LmkqZhgY4VOwMRIvNOZ
# O0FOHvfsJk5BuN3ygkB/bhLgUlLMCyqjN1Q3qd7UMdZYjxEhjrIWDYHMdi6ZrnH7
# Pc2WmepnU5ODwu5vyMY4bVq8s3qPDfIOTgVtWp0E2DfjIINmhlKf0C/GtD57bDj9
# fchN7MT8VypF5VeeV09x+fxi7jyHSLfBzPXwvjmcJFBrkvApK4KjKOA4n0hs91tp
# tsXvhuOEhbkTllaXtEEYIX1ZrjUseYEOyAKw5AaeuoTJB1wbGcKtTZZIMYIGKDCC
# BiQCAQEwazBXMQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVk
# MS4wLAYDVQQDEyVTZWN0aWdvIFB1YmxpYyBDb2RlIFNpZ25pbmcgQ0EgRVYgUjM2
# AhBIajOVBjtpYtIP3YmBw5xjMAkGBSsOAwIaBQCgcDAQBgorBgEEAYI3AgEMMQIw
# ADAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgorBgEEAYI3AgELMQ4wDAYK
# KwYBBAGCNwIBFTAjBgkqhkiG9w0BCQQxFgQUm0vfEkCRNRlCpOls+nI9B22JZIkw
# DQYJKoZIhvcNAQEBBQAEggIAqXvXKfU7t7wZ7bplxmlHO7ZvvNzD8kmpHfR3uJkt
# Oexv2klDopcSr7uJqBAI9J41b3eOjpxfNBqkDbLjegpmg89u/WANPt7ehVdjOnn0
# wuntUrKlDYbtcD0iF25S1gQgoModUqZxrQCW4rzidGtOQKkoRWAFoJd8kgOs46qd
# 6a4uBfg5i8l1dwtyzOmWZ138DB2ZpZUr6oYAEChqR2i0dJooTCrCE/rT+pdGle5K
# ArI55dtUukSut+ELAuLrv0BTolZRZzi5LvZgGvr9z8FPBQZ91Er15JpyX31e1NSe
# NFWdRRJD+9ssZ22eP7cUwvPUIX3XoPajDlHbaV/THSv8crmyfBNjULgIOrvhLCa3
# ROS2fbGm++VyAYTwoc8ndZrNxa5431EjQjwPlhVyMXU6K7o9+MLc5VTXJeLoeb1o
# uGcUc8V4BqiwJKfn8M4V8t4sFMF2a9Ac7A7YhIreUbjuqK/ucmChhKnntTPiQ8fE
# pFNh8a28ZDis+vUl0OOce3QuMlO6cz9DYlkWFzcl8VWv/q7tmKFbP+2VGAiAgtGV
# trLzTt9HWdQ+s9svY9G4jzR5gMII5buGonR6ky7Ss0YuhBoR1Dxv0Zi0v6HwN49v
# o3snioM1+tMghD/WZMtruUemYF6Xl/BRi9hkMyI/IzPVNSGQq0Mwydu+1BrSLSiM
# M7WhggMgMIIDHAYJKoZIhvcNAQkGMYIDDTCCAwkCAQEwdzBjMQswCQYDVQQGEwJV
# UzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xOzA5BgNVBAMTMkRpZ2lDZXJ0IFRy
# dXN0ZWQgRzQgUlNBNDA5NiBTSEEyNTYgVGltZVN0YW1waW5nIENBAhAFRK/zlJ0I
# Oaa/2z9f5WEWMA0GCWCGSAFlAwQCAQUAoGkwGAYJKoZIhvcNAQkDMQsGCSqGSIb3
# DQEHATAcBgkqhkiG9w0BCQUxDxcNMjQwNzI5MTE1NjUyWjAvBgkqhkiG9w0BCQQx
# IgQg7F0GtLI3l89pbFtakxqrl2SydqCrmhScwhOfu7cMsqwwDQYJKoZIhvcNAQEB
# BQAEggIAnH6pR5lNP16SNic+AOkPb+xLEYYKNOkSJbK3ala4QIP+RwcGBJtzPZ3Y
# GyJs3Le5qbr6xSTZYv52MbK+LGujPrMaIE+abw+asUjpJZaDfYfYIU797geNQyVp
# W3VESd4BGm1XFvx8Hi0KT73A4pyPSO1UNOiO7fU/06L6JFLtznLL3Ax+4ZwjD5s7
# sYds4s5FcRu2HZNc4efeLvHneP9o6vXLDbr0esgzUpNKibKrxmvkkl4dqVtbtUZb
# 3Ug+tNRuYOsi3aIoSf3ZIRzeHWGFtb7KNR/8h109tOeSV2zAHZnedTgev/yRNQqD
# UhtL00Ke8F56uq3FzTnNslaQ1prAkstuBSanIMRCBT+w5fUk86icpF+XGTzLIL5z
# UWkc++sLDm1wxjxHslIXMXNuV2qLCo2im0OeqoUUu+N3qpYNC5lt8VGV2pXDElPg
# bk40RDxMzDrlrx8z1u9TX8kS6mba/VUb+kj6rFQsi9yb0bfDyox16lpndu9ETUKG
# e8OWos2GW5YbJQzgu+fghUD4mnjQkkG4h2z7eAiLW74tP/eMnQK4xKrc1u4GrBpx
# KilUTwLRGJLutzCfIY21UBm3aZFi1qFBwxy1WJjL9ZAan6PXTbZPFs8WbqqlOi+Y
# nGbcTVJfP2CwliS67v4wsA7mm2Fr6ZPAEn1YeCUbC9niw+1DZ0U=
# SIG # End signature block