Library/New-ARMParameterObjects.ps1

# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.
Function New-ARMParameterObjects
{
    <#
    .SYNOPSIS
    Creates the parameter files, and an object which points to both the created parameter and template files.

    .DESCRIPTION
    Creates a new PowerShell object that contains the Azure Resource type, name, and parameter values. Once created it'll
    output the parameter files into a *.json file that can be used in combination with with template files to build Azure
    resources required for hosting a Windows Package Manager REST source. Returns the PowerShell object.

    .PARAMETER ParameterFolderPath
    Path to the directory where the Parameter files will be created.

    .PARAMETER TemplateFolderPath
    Path to the directory containing the Template files.

    .PARAMETER Name
    The name of the objects to be created.

    .PARAMETER Region
    The Azure location where objects will be created in.

    .PARAMETER ImplementationPerformance
    ["Developer", "Basic", "Enhanced"] specifies the performance of the resources to be created for the Windows Package Manager REST source.

    .PARAMETER PublisherName
    [Optional] The WinGet rest source publisher name

    .PARAMETER PublisherEmail
    [Optional] The WinGet rest source publisher email

    .PARAMETER RestSourceAuthentication
    [Optional] ["None", "MicrosoftEntraId"] The WinGet rest source authentication type. (Default: None)

    .PARAMETER MicrosoftEntraIdResource
    [Optional] Microsoft Entra Id authentication resource

    .PARAMETER MicrosoftEntraIdResourceScope
    [Optional] Microsoft Entra Id authentication resource scope

    .PARAMETER ForUpdate
    [Optional] The operation is for update. (Default: False)

    .EXAMPLE
    New-ARMParameterObjects -ParameterFolderPath "C:\WinGet\Parameters" -TemplateFolderPath "C:\WinGet\Templates" -Name "contosorestsource" -AzLocation "westus" -ImplementationPerformance "Developer"

    Creates the Parameter files required for the creation of the ARM objects.

    #>

    PARAM(
        [Parameter(Position=0, Mandatory=$true)] [string]$ParameterFolderPath,
        [Parameter(Position=1, Mandatory=$true)] [string]$TemplateFolderPath,
        [Parameter(Position=2, Mandatory=$true)] [string]$Name,
        [Parameter(Position=3, Mandatory=$true)] [string]$Region,
        [Parameter(Position=4, Mandatory=$true)] [string]$ImplementationPerformance,
        [Parameter(Mandatory=$false)] [string]$PublisherName = "",
        [Parameter(Mandatory=$false)] [string]$PublisherEmail = "",
        [ValidateSet("None", "MicrosoftEntraId")]
        [Parameter(Mandatory=$false)] [string]$RestSourceAuthentication = "None",
        [Parameter(Mandatory=$false)] [string]$MicrosoftEntraIdResource = "",
        [Parameter(Mandatory=$false)] [string]$MicrosoftEntraIdResourceScope = "",
        [Parameter()] [switch]$ForUpdate
    )

    $ARMObjects = @()
    
    ## The Names that are to be assigned to each resource.
    $AppInsightsName    = "appi-" + $Name -replace "[^a-zA-Z0-9-]", ""
    $KeyVaultName       = "kv-" + $Name -replace "[^a-zA-Z0-9-]", ""
    $StorageAccountName = "st" + $Name.ToLower() -replace "[^a-z0-9]", ""
    $AspName            = "asp-" + $Name -replace "[^a-zA-Z0-9-]", ""
    $CDBAccountName     = "cosmos-" + $Name.ToLower() -replace "[^a-z0-9-]", ""
    $FunctionName       = "func-" + $Name -replace "[^a-zA-Z0-9-]", ""
    $AppConfigName      = "appcs-" + $Name -replace "[^a-zA-Z0-9-]", ""
    $ApiManagementName  = "apim-" + $Name -replace "[^a-zA-Z0-9-]", ""
    $ServerIdentifier   = "WinGetRestSource-" + $Name -replace "[^a-zA-Z0-9-]", ""
    
    ## Not supported in deployment script
    ## $FrontDoorName = ""
    ## $AspGenevaName = ""

    ## The names of the Azure Cosmos Database and Container - Do not change (Must match with the values in the compiled
    ## Windows Package Manager Functions [WinGet.RestSource.Functions.zip])
    $CDBDatabaseName    = "WinGet"
    $CDBContainerName   = "Manifests"
    
    if ($RestSourceAuthentication -eq "MicrosoftEntraId") {
        $ServerAuthenticationType = "microsoftEntraId"
        $QueryApiValidationEnabled = $true
    }
    else {
        $ServerAuthenticationType = "none"
        $MicrosoftEntraIdResource = ""
        $MicrosoftEntraIdResourceScope = ""
        $QueryApiValidationEnabled = $false
    }

    ## The values required for Function ARM Template. But not supported in deployment script.
    $ManifestCacheEndpoint      = ""
    $MonitoringTenant           = ""
    $MonitoringRole             = ""
    $MonitoringMetricsAccount   = ""
    $RunFromPackageUrl          = ""

    ## Relative Path from the Working Directory to the Azure ARM Template Files
    $TemplateAppInsightsPath    = "$TemplateFolderPath\applicationinsights.json"
    $TemplateKeyVaultPath       = "$TemplateFolderPath\keyvault.json"
    $TemplateStorageAccountPath = "$TemplateFolderPath\storageaccount.json"
    $TemplateASPPath            = "$TemplateFolderPath\asp.json"
    $TemplateCDBAccountPath     = "$TemplateFolderPath\cosmosdb.json"
    $TemplateCDBPath            = "$TemplateFolderPath\cosmosdb-sql.json"
    $TemplateCDBContainerPath   = "$TemplateFolderPath\cosmosdb-sql-container.json"
    $TemplateFunctionPath       = "$TemplateFolderPath\azurefunction.json"
    $TemplateAppConfigPath      = "$TemplateFolderPath\appconfig.json"
    $TemplateApiManagementPath  = "$TemplateFolderPath\apimanagement.json"

    $ParameterAppInsightsPath    = "$ParameterFolderPath\applicationinsights.json"
    $ParameterKeyVaultPath       = "$ParameterFolderPath\keyvault.json"
    $ParameterStorageAccountPath = "$ParameterFolderPath\storageaccount.json"
    $ParameterASPPath            = "$ParameterFolderPath\asp.json"
    $ParameterCDBAccountPath     = "$ParameterFolderPath\cosmosdb.json"
    $ParameterCDBPath            = "$ParameterFolderPath\cosmosdb-sql.json"
    $ParameterCDBContainerPath   = "$ParameterFolderPath\cosmosdb-sql-container.json"
    $ParameterFunctionPath       = "$ParameterFolderPath\azurefunction.json"
    $ParameterAppConfigPath      = "$ParameterFolderPath\appconfig.json"
    $ParameterApiManagementPath  = "$ParameterFolderPath\apimanagement.json"

    Write-Verbose -Message "ARM Parameter Resource performance is based on the: $ImplementationPerformance."
    
    $PrimaryRegionName   = $(Get-AzLocation).Where({$_.Location -eq $Region}).DisplayName
    $SecondaryRegion     = Get-PairedAzureRegion -Region $Region
    $SecondaryRegionName = $(Get-AzLocation).Where({$_.Location -eq $SecondaryRegion}).DisplayName
    
    Write-Verbose -Message "Retrieving the Azure Tenant and User Information"
    $AzContext = Get-AzContext
    $AzTenantID = $AzContext.Tenant.Id
    $AzTenantDomain = $AzContext.Tenant.Domains[0]

    if ($AzContext.Account.Type -eq "User")
    {
        $LocalDeployment = $true
        $AzObjectID = $(Get-AzADUser -SignedIn).Id
        if (!$PublisherEmail) {
            $PublisherEmail = $AzContext.Account.Id
        }
        if (!$PublisherName) {
            $PublisherName = $AzContext.Account.Id
        }
    }
    else
    {
        $LocalDeployment = $false
        $AzObjectID = $(Get-AzADServicePrincipal -ApplicationId $AzContext.Account.ID).Id
        if (!$PublisherEmail) {
            $PublisherEmail = "WinGetRestSource@$AzTenantDomain"
        }
        if (!$PublisherName) {
            $PublisherName = "WinGetRestSource@$AzTenantDomain"
        }
    }
    Write-Verbose -Message "Retrieved the Azure Object Id: $AzObjectID"

    switch ($ImplementationPerformance) {
        "Developer" {
            $AppConfigSku = "Free"
            $KeyVaultSKU  = "Standard"
            $StorageAccountPerformance = "Standard_LRS"
            $AspSku = "B1"
            $CosmosDBAEnableFreeTier   = $true
            ## To enable Serverless then set CosmosDBACapatilities to "[{"name": ""EnableServerless""}]"
            $CosmosDBACapabilities     = "[]"
            $CosmosDBAConsistency      = "ConsistentPrefix"
            $CosmosDBALocations = @(
                            @{
                                locationName     = $PrimaryRegionName
                                failoverPriority = 0
                                isZoneRedundant  = $false
                            }
                        )
            $ApiManagementSku = "Developer"
        }
        "Basic" {
            $AppConfigSku = "Standard"
            $KeyVaultSKU  = "Standard"
            $StorageAccountPerformance = "Standard_GRS"
            $AspSku = "S1"
            $CosmosDBAEnableFreeTier   = $false
            ## To enable Serverless then set CosmosDBACapatilities to "[{"name": ""EnableServerless""}]"
            $CosmosDBACapabilities     = "[]"
            $CosmosDBAConsistency      = "Session"
            $CosmosDBALocations = @(
                            @{
                                locationName     = $PrimaryRegionName
                                failoverPriority = 0
                                isZoneRedundant  = $false
                            }
                            @{
                                locationName     = $SecondaryRegionName
                                failoverPriority = 1
                                isZoneRedundant  = $false
                            }
                        )
            $ApiManagementSku = "Basic"
        }
        "Enhanced" {
            $AppConfigSku = "Standard"
            $KeyVaultSKU  = "Standard"
            $StorageAccountPerformance = "Standard_GRS"
            $AspSku = "P1V2"
            $CosmosDBAEnableFreeTier   = $false
            ## To enable Serverless then set CosmosDBACapatilities to "[{"name": ""EnableServerless""}]"
            $CosmosDBACapabilities     = "[]"
            $CosmosDBAConsistency      = "Session"
            $CosmosDBALocations = @(
                            @{
                                locationName     = $PrimaryRegionName
                                failoverPriority = 0
                                isZoneRedundant  = $false
                            }
                            @{
                                locationName     = $SecondaryRegionName
                                failoverPriority = 1
                                isZoneRedundant  = $false
                            }
                        )
            $ApiManagementSku = "Standard"
        }
    }

    ## This is specific to the JSON file creation
    $JSONContentVersion = "1.0.0.0"
    $JSONSchema         = "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#"

    ## Creates a PowerShell object array to contain the details of the Parameter files.
    $ARMObjects = @(
        @{  ObjectType = "AppInsight"
            ObjectName = $AppInsightsName
            ParameterPath  = "$ParameterAppInsightsPath"
            TemplatePath   = "$TemplateAppInsightsPath"
            Error      = ""
            Parameters = @{
                '$Schema' = $JSONSchema
                contentVersion = $JSONContentVersion
                Parameters = @{
                    name       = @{ value = $AppInsightsName }
                    location   = @{ value = $Region          }
                }
            }
        },
        @{  ObjectType = "Keyvault"
            ObjectName = $KeyVaultName
            ParameterPath  = "$ParameterKeyVaultPath"
            TemplatePath   = "$TemplateKeyVaultPath"
            Error      = ""
            Parameters = @{
                '$Schema' = $JSONSchema
                contentVersion = $JSONContentVersion
                Parameters = @{
                    name            = @{ value = $KeyVaultName }
                    location        = @{ value = $Region }
                    sku             = @{ value = $KeyVaultSKU }
                    accessPolicies  = @{
                        value = @(
                            @{
                                tenantId = $AzTenantID
                                objectID = $AzObjectID
                                permissions = @{
                                    keys         = @()
                                    secrets      = @( "Get", "Set" )
                                    certificates = @()
                                }
                            }
                        )
                    }
                }
            }
        },
        @{  ObjectType = "AppConfig"
            ObjectName = $FunctionName
            ParameterPath  = "$ParameterAppConfigPath"
            TemplatePath   = "$TemplateAppConfigPath"
            Error      = ""
            Parameters = @{
                '$Schema' = $JSONSchema
                contentVersion = $JSONContentVersion
                Parameters = @{
                    appConfigName           = @{ value = $appConfigName         }   # Name used to contain the Storage Account connection string in the Key Value
                    location                = @{ value = $Region                }   # Azure hosting location
                    sku                     = @{ value = $AppConfigSku          }
                    localDeployment         = @{ value = $LocalDeployment       }
                }
            }
        },
        @{  ObjectType = "StorageAccount"
            ObjectName = $StorageAccountName
            ParameterPath  = "$ParameterStorageAccountPath"
            TemplatePath   = "$TemplateStorageAccountPath"
            Error      = ""
            Parameters = @{
                '$Schema' = $JSONSchema
                contentVersion = $JSONContentVersion
                Parameters = @{
                    location           = @{ value = $Region }
                    storageAccountName = @{ value = $StorageAccountName }
                    accountType        = @{ value = $StorageAccountPerformance }
                }
            }
        },
        @{  ObjectType = "asp"
            ObjectName = $aspName
            ParameterPath  = "$ParameterASPPath"
            TemplatePath   = "$TemplateASPPath"
            Error      = ""
            Parameters = @{
                '$Schema' = $JSONSchema
                contentVersion = $JSONContentVersion
                Parameters = @{
                    aspName         = @{ value = $aspName }
                    location        = @{ value = $Region }
                    skuCode         = @{ value = $AspSku }
                }
            }
        },
        @{  ObjectType = "CosmosDBAccount"
            ObjectName = $CDBAccountName
            ParameterPath  = "$ParameterCDBAccountPath"
            TemplatePath   = "$TemplateCDBAccountPath"
            Error      = ""
            Parameters = @{
                '$Schema' = $JSONSchema
                contentVersion = $JSONContentVersion
                Parameters = @{
                    name = @{ value = $CDBAccountName }
                    location = @{ value = $Region }
                    enableFreeTier = @{ value = $CosmosDBAEnableFreeTier }
                    consistencyPolicy = @{
                        value = @{
                            defaultConsistencyLevel = $CosmosDBAConsistency
                            maxIntervalInSeconds    = 5
                            maxStalenessPrefix      = 100
                        }
                    }
                    locations = @{ value = $CosmosDBALocations }
                    # Allows requests from azure portal and Azure datacenter ip range (0.0.0.0)
                    ipRules = @{
                        value = @(
                            @{
                                ipAddressOrRange = "13.91.105.215"
                            }
                            @{
                                ipAddressOrRange = "4.210.172.107"
                            }
                            @{
                                ipAddressOrRange = "13.88.56.148"
                            }
                            @{
                                ipAddressOrRange = "40.91.218.243"
                            }
                            @{
                                ipAddressOrRange = "0.0.0.0"
                            }
                        )
                    }
                    backupPolicy = @{
                        value = @{
                            type = "Periodic"
                            periodicModeProperties = @{
                                backupIntervalInMinutes        = 240
                                backupRetentionIntervalInHours = 720
                            }
                        }
                    }
                }
            }
        },
        @{  ObjectType = "CosmosDBDatabase"
            ObjectName = $CDBDatabaseName
            ParameterPath  = "$ParameterCDBPath"
            TemplatePath   = "$TemplateCDBPath"
            Error      = ""
            Parameters = @{
                '$Schema' = $JSONSchema
                contentVersion = $JSONContentVersion
                Parameters = @{
                    cosmosName = @{ value = $CDBAccountName }
                    sqlname    = @{ value = $CDBDatabaseName }
                    options    = @{
                        Value  = @{
                            autoscaleSettings = @{
                                maxThroughput = 4000
                            }
                        }
                    }
                }
            }
        },
        @{  ObjectType = "CosmosDBContainer"
            ObjectName = $CDBContainerName
            ParameterPath  = "$ParameterCDBContainerPath"
            TemplatePath   = "$TemplateCDBContainerPath"
            Error      = ""
            Parameters = @{
                '$Schema' = $JSONSchema
                contentVersion = $JSONContentVersion
                Parameters = @{
                    cosmosName     = @{ Value = $CDBAccountName }
                    sqlname        = @{ Value = $CDBDatabaseName }
                    containerName  = @{ value = $CDBContainerName}
                    indexingPolicy = @{ Value = @{
                        IndexingMode  = "consistent"
                        automatic     = $true
                        includedPaths = @(@{
                            path = "/*"
                        })
                        excludePaths = @(@{
                            path = '/"_etag"/?'
                        })
                    }}
                    partitionKey = @{
                        value = @{
                            paths = @("/id")
                            kind = "Hash"
                        }
                    }
                    conflictResolutionPolicy = @{
                        value = @{
                            mode = "LastWriterWins"
                            conflictResolutionPath = "/_ts"
                        }
                    }
                }
            }
        },
        @{  ObjectType = "Function"
            ObjectName = $FunctionName
            ParameterPath  = "$ParameterFunctionPath"
            TemplatePath   = "$TemplateFunctionPath"
            Error      = ""
            Parameters = @{
                '$Schema' = $JSONSchema
                contentVersion = $JSONContentVersion
                Parameters = @{
                    location                 = @{ value = $Region                   }   # Azure hosting location
                    cosmosDatabase           = @{ value = $CDBDatabaseName          }   # Cosmos Database Name
                    cosmosContainer          = @{ value = $CDBContainerName         }   # Cosmos Container Name
                    serverIdentifier         = @{ value = $ServerIdentifier         }   # Azure Function Server Identifier
                    functionName             = @{ value = $FunctionName             }   # Azure Function Name
                    appServiceName           = @{ value = $aspName                  }   # Azure App Service Name
                    keyVaultName             = @{ value = $KeyVaultName             }   # Azure Keyvault Name
                    azFuncStorageName        = @{ value = $StorageAccountName       }   # Azure Storage Account Name
                    appInsightName           = @{ value = $AppInsightsName          }   # Azure App Insights Name
                    manifestCacheEndpoint    = @{ value = $manifestCacheEndpoint    }   # Not suported
                    monitoringTenant         = @{ value = $monitoringTenant         }   # Not suported
                    monitoringRole           = @{ value = $monitoringRole           }   # Not suported
                    monitoringMetricsAccount = @{ value = $monitoringMetricsAccount }   # Not suported
                    runFromPackageUrl        = @{ value = $RunFromPackageUrl        }   # Not suported
                    serverAuthenticationType = @{ value = $ServerAuthenticationType }   # Server authentication type
                    microsoftEntraIdResource = @{ value = $MicrosoftEntraIdResource }   # Microsoft Entra Id Resource
                    microsoftEntraIdResourceScope = @{ value = $MicrosoftEntraIdResourceScope }  # Microsoft Entra Id Resource Scope
                }
            }
        },
        @{  ObjectType = "ApiManagement"
            ObjectName = $ApiManagementName
            ParameterPath  = "$ParameterApiManagementPath"
            TemplatePath   = "$TemplateApiManagementPath"
            Error      = ""
            Parameters = @{
                '$Schema' = $JSONSchema
                contentVersion = $JSONContentVersion
                Parameters = @{
                    serviceName = @{ value = $ApiManagementName }
                    publisherEmail = @{ value = $PublisherEmail }
                    publisherName = @{ value = $PublisherName }
                    sku = @{ value = $ApiManagementSku }
                    location = @{ value = $Region }
                    keyVaultName = @{ value = $KeyVaultName }
                    backendUrls = @{ value = @() }  # Value to be populated after Azure Function is created
                    queryApiValidationEnabled = @{ value = $QueryApiValidationEnabled }
                    microsoftEntraIdResource = @{ value = $MicrosoftEntraIdResource }
                }
            }
        }    
    )

    ## Uses the newly created ARMObjects[#].Parameters to create new JSON Parameter files.
    Write-Verbose -Message "Creating JSON Parameter files for Azure Object Creation:"

    ## Creates each JSON Parameter file inside of a Parameter folder in the working directory
    foreach ($object in $ARMObjects) {
        ## Converts the structure of the variable to a JSON file.
        Write-Verbose -Message "Creating the Parameter file for $($Object.ObjectType) in the following location: $($Object.ParameterPath)"

        if ($ForUpdate -and (Test-Path -Path $Object.ParameterPath)) {
            $Object.Parameters = Get-Content -Path $Object.ParameterPath -Raw | ConvertFrom-Json
        }
        else {
            $ParameterFileContent = $Object.Parameters | ConvertTo-Json -Depth 8
            $ParameterFileContent | Out-File -FilePath $Object.ParameterPath -Force
        }
    }

    ## Returns the completed object.
    return $ARMObjects
}

# SIG # Begin signature block
# MIIoQwYJKoZIhvcNAQcCoIIoNDCCKDACAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCD95naQX3jqjE3b
# 66r/w3dHkLOy0CvsFrjE4yTOK1Uss6CCDXYwggX0MIID3KADAgECAhMzAAAEBGx0
# Bv9XKydyAAAAAAQEMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD
# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
# b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p
# bmcgUENBIDIwMTEwHhcNMjQwOTEyMjAxMTE0WhcNMjUwOTExMjAxMTE0WjB0MQsw
# CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u
# ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy
# b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
# AQC0KDfaY50MDqsEGdlIzDHBd6CqIMRQWW9Af1LHDDTuFjfDsvna0nEuDSYJmNyz
# NB10jpbg0lhvkT1AzfX2TLITSXwS8D+mBzGCWMM/wTpciWBV/pbjSazbzoKvRrNo
# DV/u9omOM2Eawyo5JJJdNkM2d8qzkQ0bRuRd4HarmGunSouyb9NY7egWN5E5lUc3
# a2AROzAdHdYpObpCOdeAY2P5XqtJkk79aROpzw16wCjdSn8qMzCBzR7rvH2WVkvF
# HLIxZQET1yhPb6lRmpgBQNnzidHV2Ocxjc8wNiIDzgbDkmlx54QPfw7RwQi8p1fy
# 4byhBrTjv568x8NGv3gwb0RbAgMBAAGjggFzMIIBbzAfBgNVHSUEGDAWBgorBgEE
# AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQU8huhNbETDU+ZWllL4DNMPCijEU4w
# RQYDVR0RBD4wPKQ6MDgxHjAcBgNVBAsTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEW
# MBQGA1UEBRMNMjMwMDEyKzUwMjkyMzAfBgNVHSMEGDAWgBRIbmTlUAXTgqoXNzci
# tW2oynUClTBUBgNVHR8ETTBLMEmgR6BFhkNodHRwOi8vd3d3Lm1pY3Jvc29mdC5j
# b20vcGtpb3BzL2NybC9NaWNDb2RTaWdQQ0EyMDExXzIwMTEtMDctMDguY3JsMGEG
# CCsGAQUFBwEBBFUwUzBRBggrBgEFBQcwAoZFaHR0cDovL3d3dy5taWNyb3NvZnQu
# Y29tL3BraW9wcy9jZXJ0cy9NaWNDb2RTaWdQQ0EyMDExXzIwMTEtMDctMDguY3J0
# MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADggIBAIjmD9IpQVvfB1QehvpC
# Ge7QeTQkKQ7j3bmDMjwSqFL4ri6ae9IFTdpywn5smmtSIyKYDn3/nHtaEn0X1NBj
# L5oP0BjAy1sqxD+uy35B+V8wv5GrxhMDJP8l2QjLtH/UglSTIhLqyt8bUAqVfyfp
# h4COMRvwwjTvChtCnUXXACuCXYHWalOoc0OU2oGN+mPJIJJxaNQc1sjBsMbGIWv3
# cmgSHkCEmrMv7yaidpePt6V+yPMik+eXw3IfZ5eNOiNgL1rZzgSJfTnvUqiaEQ0X
# dG1HbkDv9fv6CTq6m4Ty3IzLiwGSXYxRIXTxT4TYs5VxHy2uFjFXWVSL0J2ARTYL
# E4Oyl1wXDF1PX4bxg1yDMfKPHcE1Ijic5lx1KdK1SkaEJdto4hd++05J9Bf9TAmi
# u6EK6C9Oe5vRadroJCK26uCUI4zIjL/qG7mswW+qT0CW0gnR9JHkXCWNbo8ccMk1
# sJatmRoSAifbgzaYbUz8+lv+IXy5GFuAmLnNbGjacB3IMGpa+lbFgih57/fIhamq
# 5VhxgaEmn/UjWyr+cPiAFWuTVIpfsOjbEAww75wURNM1Imp9NJKye1O24EspEHmb
# DmqCUcq7NqkOKIG4PVm3hDDED/WQpzJDkvu4FrIbvyTGVU01vKsg4UfcdiZ0fQ+/
# V0hf8yrtq9CkB8iIuk5bBxuPMIIHejCCBWKgAwIBAgIKYQ6Q0gAAAAAAAzANBgkq
# hkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x
# EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
# bjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
# IDIwMTEwHhcNMTEwNzA4MjA1OTA5WhcNMjYwNzA4MjEwOTA5WjB+MQswCQYDVQQG
# EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG
# A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQg
# Q29kZSBTaWduaW5nIFBDQSAyMDExMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
# CgKCAgEAq/D6chAcLq3YbqqCEE00uvK2WCGfQhsqa+laUKq4BjgaBEm6f8MMHt03
# a8YS2AvwOMKZBrDIOdUBFDFC04kNeWSHfpRgJGyvnkmc6Whe0t+bU7IKLMOv2akr
# rnoJr9eWWcpgGgXpZnboMlImEi/nqwhQz7NEt13YxC4Ddato88tt8zpcoRb0Rrrg
# OGSsbmQ1eKagYw8t00CT+OPeBw3VXHmlSSnnDb6gE3e+lD3v++MrWhAfTVYoonpy
# 4BI6t0le2O3tQ5GD2Xuye4Yb2T6xjF3oiU+EGvKhL1nkkDstrjNYxbc+/jLTswM9
# sbKvkjh+0p2ALPVOVpEhNSXDOW5kf1O6nA+tGSOEy/S6A4aN91/w0FK/jJSHvMAh
# dCVfGCi2zCcoOCWYOUo2z3yxkq4cI6epZuxhH2rhKEmdX4jiJV3TIUs+UsS1Vz8k
# A/DRelsv1SPjcF0PUUZ3s/gA4bysAoJf28AVs70b1FVL5zmhD+kjSbwYuER8ReTB
# w3J64HLnJN+/RpnF78IcV9uDjexNSTCnq47f7Fufr/zdsGbiwZeBe+3W7UvnSSmn
# Eyimp31ngOaKYnhfsi+E11ecXL93KCjx7W3DKI8sj0A3T8HhhUSJxAlMxdSlQy90
# lfdu+HggWCwTXWCVmj5PM4TasIgX3p5O9JawvEagbJjS4NaIjAsCAwEAAaOCAe0w
# ggHpMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRIbmTlUAXTgqoXNzcitW2o
# ynUClTAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTALBgNVHQ8EBAMCAYYwDwYD
# VR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBRyLToCMZBDuRQFTuHqp8cx0SOJNDBa
# BgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2Ny
# bC9wcm9kdWN0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFfMDNfMjIuY3JsMF4GCCsG
# AQUFBwEBBFIwUDBOBggrBgEFBQcwAoZCaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
# L3BraS9jZXJ0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFfMDNfMjIuY3J0MIGfBgNV
# HSAEgZcwgZQwgZEGCSsGAQQBgjcuAzCBgzA/BggrBgEFBQcCARYzaHR0cDovL3d3
# dy5taWNyb3NvZnQuY29tL3BraW9wcy9kb2NzL3ByaW1hcnljcHMuaHRtMEAGCCsG
# AQUFBwICMDQeMiAdAEwAZQBnAGEAbABfAHAAbwBsAGkAYwB5AF8AcwB0AGEAdABl
# AG0AZQBuAHQALiAdMA0GCSqGSIb3DQEBCwUAA4ICAQBn8oalmOBUeRou09h0ZyKb
# C5YR4WOSmUKWfdJ5DJDBZV8uLD74w3LRbYP+vj/oCso7v0epo/Np22O/IjWll11l
# hJB9i0ZQVdgMknzSGksc8zxCi1LQsP1r4z4HLimb5j0bpdS1HXeUOeLpZMlEPXh6
# I/MTfaaQdION9MsmAkYqwooQu6SpBQyb7Wj6aC6VoCo/KmtYSWMfCWluWpiW5IP0
# wI/zRive/DvQvTXvbiWu5a8n7dDd8w6vmSiXmE0OPQvyCInWH8MyGOLwxS3OW560
# STkKxgrCxq2u5bLZ2xWIUUVYODJxJxp/sfQn+N4sOiBpmLJZiWhub6e3dMNABQam
# ASooPoI/E01mC8CzTfXhj38cbxV9Rad25UAqZaPDXVJihsMdYzaXht/a8/jyFqGa
# J+HNpZfQ7l1jQeNbB5yHPgZ3BtEGsXUfFL5hYbXw3MYbBL7fQccOKO7eZS/sl/ah
# XJbYANahRr1Z85elCUtIEJmAH9AAKcWxm6U/RXceNcbSoqKfenoi+kiVH6v7RyOA
# 9Z74v2u3S5fi63V4GuzqN5l5GEv/1rMjaHXmr/r8i+sLgOppO6/8MO0ETI7f33Vt
# Y5E90Z1WTk+/gFcioXgRMiF670EKsT/7qMykXcGhiJtXcVZOSEXAQsmbdlsKgEhr
# /Xmfwb1tbWrJUnMTDXpQzTGCGiMwghofAgEBMIGVMH4xCzAJBgNVBAYTAlVTMRMw
# EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN
# aWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNp
# Z25pbmcgUENBIDIwMTECEzMAAAQEbHQG/1crJ3IAAAAABAQwDQYJYIZIAWUDBAIB
# BQCgga4wGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEO
# MAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEINtsHHDyEXkplQvt5Z9KcGeB
# 3NoeJikyZR2uUYbo9TiRMEIGCisGAQQBgjcCAQwxNDAyoBSAEgBNAGkAYwByAG8A
# cwBvAGYAdKEagBhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20wDQYJKoZIhvcNAQEB
# BQAEggEASQJeJdVum+GEn1ZZsykHnRyg20o6c92fH0fzoWRySsrdV6OLAQiWalzA
# RLoFTfc0SCpQFjROe21SpfOykbURYpyEF4i8IkY5EyvkO7G9mMUAtehzL5bl33XH
# 87yXn3sdlAV3xQ0p7d7iKuPnO3KfgyeUeje88pWkrbN3LH4HG5kMSyEiVrx8svPV
# OVAk7StcwPZb+N5QpH7TJaDYMxNFrUaNKTYDlzGzKyInIk9Z8IRaYWO7pXrI4DG7
# o7YI8JJX8xwxmeS90XwFTmD8KcWbsnd9Zx3zkL6a0ikwxlayF1y/u/R+l3i90E4I
# mBAi/TAond4VaI7PdG8zkoVetkb0ZqGCF60wghepBgorBgEEAYI3AwMBMYIXmTCC
# F5UGCSqGSIb3DQEHAqCCF4YwgheCAgEDMQ8wDQYJYIZIAWUDBAIBBQAwggFaBgsq
# hkiG9w0BCRABBKCCAUkEggFFMIIBQQIBAQYKKwYBBAGEWQoDATAxMA0GCWCGSAFl
# AwQCAQUABCCmuOjZfR+SVag8P04Uw/K8Xnk8WPQaO99IBNZpV88HSQIGZ2L4pPBD
# GBMyMDI0MTIyMDIyMjcyNS4xMTRaMASAAgH0oIHZpIHWMIHTMQswCQYDVQQGEwJV
# UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE
# ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMS0wKwYDVQQLEyRNaWNyb3NvZnQgSXJl
# bGFuZCBPcGVyYXRpb25zIExpbWl0ZWQxJzAlBgNVBAsTHm5TaGllbGQgVFNTIEVT
# Tjo1NTFBLTA1RTAtRDk0NzElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAg
# U2VydmljZaCCEfswggcoMIIFEKADAgECAhMzAAACAdFFWZgQzEJPAAEAAAIBMA0G
# CSqGSIb3DQEBCwUAMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9u
# MRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRp
# b24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMB4XDTI0
# MDcyNTE4MzEyMloXDTI1MTAyMjE4MzEyMlowgdMxCzAJBgNVBAYTAlVTMRMwEQYD
# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
# b3NvZnQgQ29ycG9yYXRpb24xLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9w
# ZXJhdGlvbnMgTGltaXRlZDEnMCUGA1UECxMeblNoaWVsZCBUU1MgRVNOOjU1MUEt
# MDVFMC1EOTQ3MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNl
# MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtWrf+HzDu7sk50y5YHhe
# CIJG0uxRSFFcHNek+Td9ZmyJj20EEjaU8JDJu5pWc4pPAsBI38NEAJ1b+KBnlStq
# U8uvXF4qnEShDdi8nPsZZQsTZDKWAgUM2iZTOiWIuZcFs5ZC8/+GlrVLM5h1Y9nf
# Mh5B4DnUQOXMremAT9MkvUhg3uaYgmqLlmYyODmba4lXZBu104SLAFsXOfl/TLhp
# ToT46y7lI9sbI9uq3/Aerh3aPi2knHvEEazilXeooXNLCwdu+Is6o8kQLouUn3Kw
# UQm0b7aUtsv1X/OgPmsOJi6yN3LYWyHISvrNuIrJ4iYNgHdBBumQYK8LjZmQaTKF
# acxhmXJ0q2gzaIfxF2yIwM+V9sQqkHkg/Q+iSDNpMr6mr/OwknOEIjI0g6ZMOymi
# vpChzDNoPz9hkK3gVHZKW7NV8+UBXN4G0aBX69fKUbxBBLyk2cC+PhOoUjkl6UC8
# /c0huqj5xX8m+YVIk81e7t6I+V/E4yXReeZgr0FhYqNpvTjGcaO2WrkP5XmsYS7I
# vMPIf4DCyIJUZaqoBMToAJJHGRe+DPqCHg6bmGPm97MrOWv16/Co6S9cQDkXp9vM
# SSRQWXy4KtJhZfmuDz2vr1jw4NeixwuIDGw1mtV/TdSI+vpLJfUiLl/b9w/tJB92
# BALQT8e1YH8NphdOo1xCwkcCAwEAAaOCAUkwggFFMB0GA1UdDgQWBBSwcq9blqLo
# PPiVrym9mFmFWbyyUjAfBgNVHSMEGDAWgBSfpxVdAF5iXYP05dJlpxtTNRnpcjBf
# BgNVHR8EWDBWMFSgUqBQhk5odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3Bz
# L2NybC9NaWNyb3NvZnQlMjBUaW1lLVN0YW1wJTIwUENBJTIwMjAxMCgxKS5jcmww
# bAYIKwYBBQUHAQEEYDBeMFwGCCsGAQUFBzAChlBodHRwOi8vd3d3Lm1pY3Jvc29m
# dC5jb20vcGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRpbWUtU3RhbXAlMjBQQ0El
# MjAyMDEwKDEpLmNydDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQMMAoGCCsGAQUF
# BwMIMA4GA1UdDwEB/wQEAwIHgDANBgkqhkiG9w0BAQsFAAOCAgEAOjQAyz0cVztT
# FGqXX5JLRxFK/O/oMe55uDqEC8Vd1gbcM28KBUPgvUIPXm/vdDN2IVBkWHmwCp4A
# Icy4dZtkuUmd0fnu6aT9Mvo1ndsLp2YJcMoFLEt3TtriLaO+i4Grv0ZULtWXUPAW
# /Mn5Scjgn0xZduGPBD/Xs3J7+get9+8ZvBipsg/N7poimYOVsHxLcem7V5XdMNsy
# tTm/uComhM/wgR5KlDYTVNAXBxcSKMeJaiD3V1+HhNkVliMl5VOP+nw5xWF55u9h
# 6eF2G7eBPqT+qSFQ+rQCQdIrN0yG1QN9PJroguK+FJQJdQzdfD3RWVsciBygbYaZ
# lT1cGJI1IyQ74DQ0UBdTpfeGsyrEQ9PI8QyqVLqb2q7LtI6DJMNphYu+jr//0spr
# 1UVvyDPtuRnbGQRNi1COwJcj9OYmlkFgKNeCfbDT7U3uEOvWomekX60Y/m5utRcU
# PVeAPdhkB+DxDaev3J1ywDNdyu911nAVPgRkyKgMK3USLG37EdlatDk8FyuCrx4t
# iHyqHO3wE6xPw32Q8e/vmuQPoBZuX3qUeoFIsyZEenHq2ScMunhcqW32SUVAi5oZ
# 4Z3nf7dAgNau21NEPwgW+2wkrNqDg7Hp8yHyoOKbgEBu6REQbvSfZ5Kh4PV+S2gx
# f2uq6GoYDnlqABOMYwz309ISi0bPMh8wggdxMIIFWaADAgECAhMzAAAAFcXna54C
# m0mZAAAAAAAVMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQGEwJVUzETMBEGA1UE
# CBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9z
# b2Z0IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUm9vdCBDZXJ0aWZp
# Y2F0ZSBBdXRob3JpdHkgMjAxMDAeFw0yMTA5MzAxODIyMjVaFw0zMDA5MzAxODMy
# MjVaMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH
# EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNV
# BAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMIICIjANBgkqhkiG9w0B
# AQEFAAOCAg8AMIICCgKCAgEA5OGmTOe0ciELeaLL1yR5vQ7VgtP97pwHB9KpbE51
# yMo1V/YBf2xK4OK9uT4XYDP/XE/HZveVU3Fa4n5KWv64NmeFRiMMtY0Tz3cywBAY
# 6GB9alKDRLemjkZrBxTzxXb1hlDcwUTIcVxRMTegCjhuje3XD9gmU3w5YQJ6xKr9
# cmmvHaus9ja+NSZk2pg7uhp7M62AW36MEBydUv626GIl3GoPz130/o5Tz9bshVZN
# 7928jaTjkY+yOSxRnOlwaQ3KNi1wjjHINSi947SHJMPgyY9+tVSP3PoFVZhtaDua
# Rr3tpK56KTesy+uDRedGbsoy1cCGMFxPLOJiss254o2I5JasAUq7vnGpF1tnYN74
# kpEeHT39IM9zfUGaRnXNxF803RKJ1v2lIH1+/NmeRd+2ci/bfV+AutuqfjbsNkz2
# K26oElHovwUDo9Fzpk03dJQcNIIP8BDyt0cY7afomXw/TNuvXsLz1dhzPUNOwTM5
# TI4CvEJoLhDqhFFG4tG9ahhaYQFzymeiXtcodgLiMxhy16cg8ML6EgrXY28MyTZk
# i1ugpoMhXV8wdJGUlNi5UPkLiWHzNgY1GIRH29wb0f2y1BzFa/ZcUlFdEtsluq9Q
# BXpsxREdcu+N+VLEhReTwDwV2xo3xwgVGD94q0W29R6HXtqPnhZyacaue7e3Pmri
# Lq0CAwEAAaOCAd0wggHZMBIGCSsGAQQBgjcVAQQFAgMBAAEwIwYJKwYBBAGCNxUC
# BBYEFCqnUv5kxJq+gpE8RjUpzxD/LwTuMB0GA1UdDgQWBBSfpxVdAF5iXYP05dJl
# pxtTNRnpcjBcBgNVHSAEVTBTMFEGDCsGAQQBgjdMg30BATBBMD8GCCsGAQUFBwIB
# FjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL0RvY3MvUmVwb3NpdG9y
# eS5odG0wEwYDVR0lBAwwCgYIKwYBBQUHAwgwGQYJKwYBBAGCNxQCBAweCgBTAHUA
# YgBDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU
# 1fZWy4/oolxiaNE9lJBb186aGMQwVgYDVR0fBE8wTTBLoEmgR4ZFaHR0cDovL2Ny
# bC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvTWljUm9vQ2VyQXV0XzIw
# MTAtMDYtMjMuY3JsMFoGCCsGAQUFBwEBBE4wTDBKBggrBgEFBQcwAoY+aHR0cDov
# L3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNSb29DZXJBdXRfMjAxMC0w
# Ni0yMy5jcnQwDQYJKoZIhvcNAQELBQADggIBAJ1VffwqreEsH2cBMSRb4Z5yS/yp
# b+pcFLY+TkdkeLEGk5c9MTO1OdfCcTY/2mRsfNB1OW27DzHkwo/7bNGhlBgi7ulm
# ZzpTTd2YurYeeNg2LpypglYAA7AFvonoaeC6Ce5732pvvinLbtg/SHUB2RjebYIM
# 9W0jVOR4U3UkV7ndn/OOPcbzaN9l9qRWqveVtihVJ9AkvUCgvxm2EhIRXT0n4ECW
# OKz3+SmJw7wXsFSFQrP8DJ6LGYnn8AtqgcKBGUIZUnWKNsIdw2FzLixre24/LAl4
# FOmRsqlb30mjdAy87JGA0j3mSj5mO0+7hvoyGtmW9I/2kQH2zsZ0/fZMcm8Qq3Uw
# xTSwethQ/gpY3UA8x1RtnWN0SCyxTkctwRQEcb9k+SS+c23Kjgm9swFXSVRk2XPX
# fx5bRAGOWhmRaw2fpCjcZxkoJLo4S5pu+yFUa2pFEUep8beuyOiJXk+d0tBMdrVX
# VAmxaQFEfnyhYWxz/gq77EFmPWn9y8FBSX5+k77L+DvktxW/tM4+pTFRhLy/AsGC
# onsXHRWJjXD+57XQKBqJC4822rpM+Zv/Cuk0+CQ1ZyvgDbjmjJnW4SLq8CdCPSWU
# 5nR0W2rRnj7tfqAxM328y+l7vzhwRNGQ8cirOoo6CGJ/2XBjU02N7oJtpQUQwXEG
# ahC0HVUzWLOhcGbyoYIDVjCCAj4CAQEwggEBoYHZpIHWMIHTMQswCQYDVQQGEwJV
# UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE
# ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMS0wKwYDVQQLEyRNaWNyb3NvZnQgSXJl
# bGFuZCBPcGVyYXRpb25zIExpbWl0ZWQxJzAlBgNVBAsTHm5TaGllbGQgVFNTIEVT
# Tjo1NTFBLTA1RTAtRDk0NzElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAg
# U2VydmljZaIjCgEBMAcGBSsOAwIaAxUA1+26cR/yH100DiNFGWhuAv2rYBqggYMw
# gYCkfjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE
# BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYD
# VQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDANBgkqhkiG9w0BAQsF
# AAIFAOsQGgEwIhgPMjAyNDEyMjAxNjI5NTNaGA8yMDI0MTIyMTE2Mjk1M1owdDA6
# BgorBgEEAYRZCgQBMSwwKjAKAgUA6xAaAQIBADAHAgEAAgIkWzAHAgEAAgITuzAK
# AgUA6xFrgQIBADA2BgorBgEEAYRZCgQCMSgwJjAMBgorBgEEAYRZCgMCoAowCAIB
# AAIDB6EgoQowCAIBAAIDAYagMA0GCSqGSIb3DQEBCwUAA4IBAQCv5MU7s5EPcRN4
# nItnXBWo86ZJx7lD9sc0/2xpCLdN9pkUEK6mcsW21Wt6fq/1gM9M26CNanlaQSuZ
# RNf1Ra+jaY7hiT43OR26k5LHCj71aYqI8/63OpFX1uAYY6sCB+EUMS5C6kMTw7mf
# eOL6UUuUN6qWZIT3wL84BcBHY2m1kHsBoUSBJyg4Uw4DMw/Tvh8AUVh+/2fbD5QO
# RF04SkgwoVdf5jDCRu8khbxHSkFvv4dUUkBXnq65qSu3fHQSJ46/7hNZlE5iYSTm
# jiXjcFpU/DwG4J9ySp50Fboqr8BO3hMSf7rahCGIXn+OU8KWILzpAPsyEn0pv0Lc
# PKEoMf7WMYIEDTCCBAkCAQEwgZMwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh
# c2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBD
# b3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIw
# MTACEzMAAAIB0UVZmBDMQk8AAQAAAgEwDQYJYIZIAWUDBAIBBQCgggFKMBoGCSqG
# SIb3DQEJAzENBgsqhkiG9w0BCRABBDAvBgkqhkiG9w0BCQQxIgQgWx4nAN6Yf+RL
# 6iHjfMMwoXBDJWRnTceZdh6udkRPIaUwgfoGCyqGSIb3DQEJEAIvMYHqMIHnMIHk
# MIG9BCBYa7I6TJQRcmx0HaSTWZdJgowdrl9+Zrr0pIdqHtc4IzCBmDCBgKR+MHwx
# CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt
# b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1p
# Y3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwAhMzAAACAdFFWZgQzEJPAAEAAAIB
# MCIEIO0aV9omEXd0B8aVFuggjiw1MySaZ6NdPZlIZqlECzmHMA0GCSqGSIb3DQEB
# CwUABIICAAb1b880kZZn4I5TTv2q/XbnDBZehV+qNDcCt7PJYpQqDdPkuMOR9Pdp
# NrYOqLPNZavMRvCkoRsjcbopl9QBPtUjA5M17nWkmo2WmB5tcVy4Fx5HgwFf5zC/
# sWTP7mJadJHl4xmr2I1rnUma+Iju/ceL9uNMjXVBOzh9F16DaNU+PfiSaKHbF71N
# +cggfxOvx1Z5q5McISgTBCpOkJonBCMlU827eh1UH3W//RtTSUvyRSWI1B4saRQY
# +u47V6BtMlmv8M8UDQwIN9+hsNq5HdpbTC0nRzAF3vOWe0h66+IYZoeu133zvbIO
# 9sGagJXWgPD9T9k7XEHcBsaL0VCE3QYMMDB89AwU9FtrMl01DYXfep8w567YLjN3
# yzlGP/6A6/PJA7x0VzKOnvZUuWlzyA/14v/yGsQ4isyuAeT7iQleEM0wfDLFGP4f
# NXKapCfZFTWRkyfsFUhXSBEhFARu0cBMHVIHHl5nDD4FJnL5RtkfnMnjnuGQmwN0
# V1LqNVl3GhtYjLAa8raHy2kXNAPMJBhEqJkSrHOOAZ1kYXHLohltXPVGwJhxhadU
# wttLnfPLZ7i80fqP5f75iMc7NFNYH2NKVzuI4eFrrdmxD6Gdt1v3m1U76bm9u+30
# ENIMjtVmX1QA8grdPP04zFD3yPTqZVZHegzYDlO2+SjWozv2lxjP
# SIG # End signature block