New-AaddsResourceForest.ps1
<#PSScriptInfo
.VERSION 1.1 .GUID fbc2de0b-325d-450c-a6c6-34669155d3d5 .AUTHOR aaddsfb@microsoft.com .COMPANYNAME Microsoft Corporation .COPYRIGHT (c) Microsoft Corporation .TAGS Azure-AD-Domain-Services ResourceForest .LICENSEURI .PROJECTURI .ICONURI .EXTERNALMODULEDEPENDENCIES .REQUIREDSCRIPTS .EXTERNALSCRIPTDEPENDENCIES .RELEASENOTES 07/19/2020 - Initial release #> <# .SYNOPSIS Creates a Azure AD Domain Services resource forest instance. .DESCRIPTION Creates a Azure AD Domain Services resource forest instance. .PARAMETER azureSubscriptionId The subscription ID used for Azure AD Domain Services billing. You can get the list of subscriptions using the Get-AzureRMSubscription cmdlet. This parameter is MANDATORY .PARAMETER aaddsAdminUser The user principal name of the first Azure AD Domain Services administrator This user and the user running this script will be Azure AD Domain Services Administrators This parameter is MANDATORY .PARAMETER aaddsDomainName The FQDN of the Azure AD Domain Services forest. This name MUST be different from your on-premises forest. The first part of the domain name cannot exceed 15 characters. It is recommended to use 'aadds' or 'aaddsrf' This parameter is MANDATORY .PARAMETER aaddsResourceGroupName The resource group hosting the Azure AD Domain Services instance (and its associated resources). This can be an existing resource group or a new one that will be created. This parameter is MANDATORY .PARAMETER aaddsVnetName The name of the virtual network hosting the Azure AD Domain Services instance. This can be an existing virtual network or a new one that will be created. This parameter is MANDATORY .PARAMETER aaddsVnetCIDRAddressSpace The virtual network's address range in CIDR notation. This parameter is MANDATORY when creating a new virtual network. OMIT/SKIP this parameter if you are using an existing virutal network. .PARAMETER aaddsSubnetName The name of the subnet hosting Azure AD Domain Services. This CANNOT be an existing subnet on the virtual network. This parameter is MANDATORY .PARAMETER aaddsSubnetCIRDAddressRange The subnet's address range in CIDR notation for the Azure AD Domain Services instance (e.g. 192.168.1.0/24). It must be contained by the address range of the virtual network and different from other subnets. This parameter is MANDATORY .PARAMETER aaddsLocation The name of the Azure Region hosting your Azure AD Domain Services instance. Use "Get-AzLocation | fl -Property Location" for a list of locations. This parameter is MANDATORY .PARAMETER createWorkloadSubnet Determines if the script creates a workload subnet for your application workloads. $true = workload subnet is created; $false = workload subnet is not created. This parameter is OPTIONAL .PARAMETER workloadSubnetName The name of the subnet of the $aaddsVnetName virtual network that hosts your application workload (if the workload is hosted on the same virtual network). NOTE! It is recommended you host your application in its own virtual network and peer the workload virtual network to the virtual network hosting Azure AD Domain Services. This parameter is OPTIONAL .PARAMETER workloadSubnetCIRDAddressRange The subnet's address range in CIDR notation for application workload (e.g. 192.168.1.0/24). It must be contained by the address range of the virtual network and different from other subnets. This parameter is OPTIONAL .NOTES * This cmdlet creates a new Azure AD Domain Services resource forest instance in the tenant and subscription. * The cmdlet prompts for authentication twice. The first authentication is to Azure Active Directory. The second authentication is to Azure Resource Manager. * Your tenant must have an active subscription. You must authenticate as a global adminstrator of the tenant to create an instance of Azure AD Domain Services. * The cmdlet create a new resource group and virtual network if the named items do not exist. * The cmdlet MUST create the subnet that hosts Azure AD Domain Services and fails if the named subnet exists. * The cmdlet can optionally create a workload subnet. If it exists, it will skip the operation. #> [CmdletBinding()] Param ( [Parameter( Mandatory=$true, Position=0)] [string] $azureSubscriptionId, [Parameter( Mandatory=$true, Position=1)] [string] $aaddsAdminUser, [Parameter( Mandatory=$true, Position=2)] [string] $aaddsDomainName, [Parameter( Mandatory=$true, Position=3)] [string] $aaddsResourceGroupName, [Parameter( Mandatory=$true, Position=4)] [string] $aaddsVnetName, [Parameter( Mandatory=$false, Position=5)] [string] $aaddsVnetCIDRAddressSpace, [Parameter( Mandatory=$true, Position=6)] [string] $aaddsSubnetName, [Parameter( Mandatory=$true, Position=7)] [string] $aaddsSubnetCIRDAddressRange, [Parameter( Mandatory=$true, Position=8)] [string] $aaddsLocation, [Parameter( Mandatory=$false, Position=9)] [switch] $createWorkloadSubnet = $false, [Parameter( Mandatory=$false, Position=10)] [string] $workloadSubnetName, [Parameter( Mandatory=$false, Position=11)] [string] $workloadSubnetCIRDAddressRange ) Process { Write-Host ([String]::Empty) Write-Host ([String]::Empty) Write-Host -ForegroundColor Cyan "New-AaddsResourceForest" Write-Host ([String]::Empty) Write-Host -ForegroundColor White "This cmdlet creates a Azure AD Domain Services resource forest. You will need to authenticate two times." Write-Host ([String]::Empty) Write-Host -ForegroundColor White "1. Use Azure AD Global Adminstrator credentials from your Azure AD for the first authentication." Write-Host -ForegroundColor White "This creates the service principal, group and group memberships needed for the managed domain." Write-Host -ForegroundColor White "2. For the second authetnication, use credentials that allow you to create resources in the" Write-host -ForegroundColor white "provided subscription id. This is the subscription that will host your Azure AD Domain Services instance." Write-Host ([String]::Empty) Write-Host -ForegroundColor Green "Type 'Yes' to continue or 'No' to quit" $answer = Read-Host if("Yes" -cne $answer) { Write-Host "User canceled." Return } $scriptStart = Get-Date # The constructed Azure AD Domain Services resource id. $aaddsResourceId = ` "/subscriptions/$AzureSubscriptionId/resourceGroups/$aaddsResourceGroupName/providers/Microsoft.AAD/DomainServices/$aaddsDomainName" # # Authenticate to Azure to create AAD DC Administrators group and group memberships Write-Host ([string]::Empty) Write-Host ([string]::Empty) Write-Host -ForegroundColor White "First authentication..." Write-Host "Authenticating to Azure... " -NoNewline $azSession = Connect-AzureAD if($null -eq $azSession) { # Authentication failed Write-Host -ForegroundColor Red "[Failed!]" Write-Host -ForegroundColor Red "ERROR: Could not authenticate to Azure. Check your credentials and try again." Return } Write-Host -ForegroundColor Green "[Successs!]" Write-Host "INFO: Authenticated to Azure as $($azSession.Account.Id)..." # # Create the delegated administration group for Azure AD Domain Services (AAD DC Administrators group) Write-Host "Searching Azure AD for an existsing AAD DC Administrators group in Azure AD... " -NoNewline $aaddsAdminGroup = $null $aaddsAdminGroup = Get-AzureADGroup |Where-Object -Property DisplayName -eq "AAD DC Administrators" -ErrorAction SilentlyContinue if($null -eq $aaddsAdminGroup) { Write-Host -ForegroundColor Yellow "[Not Found!]" Write-Host "Creating the AAD DC Administrators group in Azure AD... " -NoNewline $aaddsAdminGroup = New-AzureADGroup ` -DisplayName "AAD DC Administrators" ` -SecurityEnabled $true ` -MailEnabled $false ` -MailNickName "AADDCAdministrators" -ErrorAction SilentlyContinue if($null -eq $aaddsAdminGroup) { Write-Host -ForegroundColor Red "[Failed!]" Write-Host -ForegroundColor Red "FAILURE: Could not create AAD DC Administrators group." Return } else { Write-Host -ForegroundColor Green "[Successs!]" } } else { Write-Host -ForegroundColor Green "[Found!]" if(1 -eq $aaddsAdminGroup.Count) { Write-Host "INFO: Using the existing group." } else { Write-Host -ForegroundColor Red "ERROR: There is more than one AAD DC Administrators group." Write-Host -ForegroundColor Red "ERROR: Delete one or more groups and try the operation again." Return } } # # Get an instance of the Azure AD Domain Services admin user $skipUser = $false Write-Host "Searching Azure AD for the Azure AD Domain Services delegated admin user... " -NoNewline $aaddsAdmin = Get-AzureADUser -Filter "UserPrincipalName eq '$aaddsAdminUser'" if($null -eq $aaddsAdmin) { # Skip if the named user account is not found in Azure AD Write-Host -ForegroundColor Yellow "[Not Found!]" Write-Host -ForegroundColor Yellow "WARNING: $aaddsAdminUser not found. Skipping. Add user manually." $skipUser = $true } else { # Account Found. Check if it's already a member of the group Write-Host -ForegroundColor Green "[Found!]" Write-Host "Checking Group Membership for the delegated user $($aaddsAdmin.UserPrincipalName) in $($aaddsAdminGroup.DisplayName)..." -NoNewline $memberOf = Get-AzureADGroupMember -ObjectId $aaddsAdminGroup.ObjectId |` Where-Object -Property ObjectId -eq $aaddsAdmin.ObjectId if($null -eq $memberOf) { # Not a member of the group. Add. Write-Host -ForegroundColor Yellow "[Not Found!]" Write-Host "INFO: Adding user to group..." -NoNewline Add-AzureADGroupMember -ObjectId $aaddsAdminGroup.ObjectId -RefObjectId $aaddsAdmin.ObjectId $memberOf = $null $memberOf = Get-AzureADGroupMember -ObjectId $aaddsAdminGroup.ObjectId |` Where-Object -Property ObjectId -eq $aaddsAdmin.ObjectId if($null -eq $memberOf) { Write-Host -ForegroundColor Yellow "[Failed!]" Write-Host -ForegroundColor Yellow "WARNING: Manually add $($aaddsAdmin.UserPrincipalName) to $($aaddsAdminGroup.DisplayName)" } else { Write-Host -ForegroundColor Green "[Success!]" } } else { # Already a member of the group Write-Host -ForegroundColor Green "[Found!]" Write-Host "INFO: $($aaddsAdmin.UserPrincipalName) is already a member of $($aaddsAdminGroup.DisplayName). Skipping!" } } # Add the currently signed in User to the Group $tempUser = $($azSession.Account) Write-Host "Searching Azure AD for the current user: $tempUser..." -NoNewline $currentUser = Get-AzureADUser -Filter "UserPrincipalName eq '$tempUser'" if($null -eq $currentUser) { Write-Host -ForegroundColor Yellow "[Not Found!]" if($true -eq $skipUser) { Write-HOst -ForegroundColor Yellow "WARNING: The AAD DC Administrators group is empty. Add users manually using Azure AD." } else { Write-Host -ForegroundColor White "INFO: The current user $tempUser was not added to the AAD DC Administratrors group." } } else { # Account Found. Check if it's already a member of the group Write-Host -ForegroundColor Green "[Found!]" Write-Host "Checking Group Membership for the current user $($currentUser.UserPrincipalName) in $($aaddsAdminGroup.DisplayName)..." -NoNewline $memberOf = $null $memberOf = Get-AzureADGroupMember -ObjectId $aaddsAdminGroup.ObjectId |` Where-Object -Property ObjectId -eq $currentUser.ObjectId if($null -eq $memberOf) { # Not a member of the group. Add. Write-Host -ForegroundColor Yellow "[Not Found!]" Write-Host "INFO: Adding user to group..." -NoNewline Add-AzureADGroupMember -ObjectId $aaddsAdminGroup.ObjectId -RefObjectId $currentUser.ObjectId $memberOf = $null $memberOf = Get-AzureADGroupMember -ObjectId $aaddsAdminGroup.ObjectId |` Where-Object -Property ObjectId -eq $currentUser.ObjectId if($null -eq $memberOf) { Write-Host -ForegroundColor Yellow "[Failed!]" Write-Host -ForegroundColor Yellow "WARNING: Manually add $($currentUser.UserPrincipalName) to $($aaddsAdminGroup.DisplayName)" } else { Write-Host -ForegroundColor Green "[Success!]" } } else { # Already a member of the group Write-Host -ForegroundColor Green "[Found!]" Write-Host "INFO: $($currentUser.UserPrincipalName) is already a member of $($aaddsAdminGroup.DisplayName). Skipping!" } } # # Create the service principal for Azure AD Domain Services, if it does not exist. Write-Host "Checking for the Azure AD Domain Services Service Principal..." -NoNewline $rv = $null $rv = Get-AzureADServicePrincipal | Where-Object -Property AppId -eq "2565bd9d-da50-47d4-8b85-4c97f669dc36" if($null -eq $rv) { Write-Host -ForegroundColor Yellow "[Not Found!]" Write-Host "Creating Azure AD Domain Services Service Principal..." -NoNewline $rv = $null $rv = New-AzureADServicePrincipal -AppId "2565bd9d-da50-47d4-8b85-4c97f669dc36" if($null -eq $rv) { Write-Host -ForegroundColor Red "[Failed!]" Write-Host -ForegroundColor Red "ERROR: Failed to create the service principal for Azure AD Domain Services." Return } Write-Host -ForegroundColor Green "[Success!]" } else { # Service principal was found Write-Host -ForegroundColor Green "[Found!]" Write-Host "INFO: Azure AD Domain Services service principal exists. Skipping!" } # # Authenticate to Azure Resource Manager Write-Host ([string]::Empty) Write-Host ([string]::Empty) Write-Host -ForegroundColor White "Second authentication (Azure Resource Manager)..." -NoNewline $armSession = Connect-AzAccount if($null -eq $armSession) { # Authentication failed Write-Host -ForegroundColor Red "[Failed!]" Write-Host -ForegroundColor Red "ERROR: Could not authenticate to Azure Resource Manager. Check your credentials and try again." Return } Write-Host -ForegroundColor Green "[Successs!]" Write-Host "INFO: Authenticated to Azure as $($armSession.Context.Account.Id)..." Set-AzContext $azureSubscriptionId | Out-Null # # Azure AD Domain Services Resource Group Write-Host "Checking for the resource group $aaddsResourceGroupName in $aaddsLocation..." -NoNewline $aaddsResourceGroup = Get-AzResourceGroup -Name $aaddsResourceGroupName -Location $aaddsLocation -ErrorAction SilentlyContinue if($null -eq $aaddsResourceGroup) { # not found; create Write-Host -ForegroundColor Yellow "[Not Found!]" Write-Host "Creating resource group $aaddsResourceGroupName in $aaddsLocation..." -NoNewline $aaddsResourceGroup = New-AzResourceGroup ` -Name $aaddsResourceGroupName ` -Location $aaddsLocation -ErrorAction SilentlyContinue if($null -eq $aaddsResourceGroup) { Write-Host -ForegroundColor Red "[Failed!]" Write-Host -ForegroundColor Red "ERROR: Failed creating the resource group $aaddsResourceGroupName." Return } else { Write-Host -ForegroundColor Green "[Success!]" } } else { Write-Host -ForegroundColor Green "[Found!]" Write-Host "INFO: Reusing existing resouce group ->$($aaddsResourceGroup.ResourceGroupName)" } # # # Azure AD Domain Services Virtual Network Write-Host "Checking for the $aaddsVnetName virtual network..." -NoNewline $aaddsVirtualNetwork = Get-AzVirtualNetwork -Name $aaddsVnetName -ResourceGroupName $aaddsResourceGroupName -ErrorAction SilentlyContinue if($null -eq $aaddsVirtualNetwork) { Write-Host -ForegroundColor Yellow "[Not Found!]" # Check if the virtual Network CIDR address space was provided if( ($null -eq $aaddsVnetCIDRAddressSpace) -or ("" -eq $aaddsVnetCIDRAddressSpace)) { Write-Host -ForegroundColor Red "ERROR: Missing the virtual address space information." Write-Host -ForegroundColor Red "ERROR: Run the cmdlet again with the -aaddsVnetCIDRAddressSpace parameter and the appropriate value." Return } Write-Host "Creating $aaddsVnetName virtual network..." -NoNewline # # Create a virtual network to host Azure AD Domain Services $aaddsVirtualNetwork = New-AzVirtualNetwork ` -ResourceGroupName $aaddsResourceGroupName ` -Location $aaddsLocation ` -Name $aaddsVnetName ` -AddressPrefix $aaddsVnetCIDRAddressSpace -ErrorAction SilentlyContinue if($null -eq $aaddsVirtualNetwork) { Write-Host -ForegroundColor Red "[Failed!]" Write-host -ForegroundColor Red "ERROR: Failed creating the $aaddsVnetName virtual network." } else { Write-Host -ForegroundColor Green "[Success!]" } } else { write-Host -ForegroundColor Green "[Found!]" Write-Host "INFO: Reusing existing virtual network ->$($aaddsVirtualNetwork.Name)" } # # # Search the subnet, the script MUST create the Azure AD Domain Services subnet # Create a dedicated subnet to host Azure AD Domain Services # Get the Azure AD Domain Services subnet from the virtual network Write-Host "Checking for the $aaddsSubnetName subnet in $($aaddsVirtualNetwork.Name)..." -NoNewline $aaddsSubnet = Get-AzVirtualNetworkSubnetConfig ` -Name $aaddsSubnetName ` -VirtualNetwork $aaddsVirtualNetwork -ErrorAction SilentlyContinue if($null -ne $aaddsSubnet) { # Subnet Exists # Do not allow the reuse of a subnet Write-Host -ForegroundColor Red "[Found!]" Write-Host -ForegroundColor Red "ERROR: A subnet with the name $($aaddsSubnet.Name) exists in the $($aaddsVirtualNetwork.Name) virtual network." Write-Host -ForegroundColor Red "ERROR: Choose a different name or delete the subnet." Return } else { Write-Host -ForegroundColor Green "[Not Found!]" Write-Host "Creating the $aaddsSubnetName subnet and adding it to the $($aaddsVirtualNetwork.Name) virtual network..." -NoNewline $rv = $null $rv = Add-AzVirtualNetworkSubnetConfig ` -Name $aaddsSubnetName ` -VirtualNetwork $aaddsVirtualNetwork ` -AddressPrefix $aaddsSubnetCIRDAddressRange -ErrorAction SilentlyContinue $aaddsVirtualNetwork = Set-AzVirtualNetwork -VirtualNetwork $aaddsVirtualNetwork -ErrorAction SilentlyContinue $aaddsSubnet = Get-AzVirtualNetworkSubnetConfig ` -Name $aaddsSubnetName ` -VirtualNetwork $aaddsVirtualNetwork -ErrorAction SilentlyContinue if( ($null -eq $rv) -or ($null -eq $aaddsVirtualNetwork) -or ($null -eq $aaddsSubnet) ) { Write-Host -ForegroundColor Red "[Failed!]" Write-Host -ForegroundColor REd "ERROR: Could not create the $aaddsSubnetName subnet." Return } else { Write-Host -ForegroundColor Green "[Successs!]" } } # # Workload subnet detection and creation if($createWorkloadSubnet) { Write-Host "INFO: Create Workload subnet detected" Write-Host "Checking for the $workloadSubnetName subnet in $($aaddsVirtualNetwork.Name)..." -NoNewline $workloadSubnet = Get-AzVirtualNetworkSubnetConfig ` -Name $workloadSubnetName ` -VirtualNetwork $aaddsVirtualNetwork -ErrorAction SilentlyContinue if($null -ne $workloadSubnet) { # Subnet Exists Write-Host -ForegroundColor Yellow "[Found!]" Write-Host "INFO: A subnet with the name $($workloadSubnet.Name) exists in the $($aaddsVirtualNetwork.Name) virtual network. Skipping!" } else { Write-Host -ForegroundColor Green "[Not Found!]" Write-Host "Creating the $workloadSubnetName subnet and adding it to the $($aaddsVirtualNetwork.Name) virtual network..." -NoNewline $rv = $null $rv = Add-AzVirtualNetworkSubnetConfig ` -Name $workloadSubnetName ` -VirtualNetwork $aaddsVirtualNetwork ` -AddressPrefix $workloadSubnetCIRDAddressRange -ErrorAction SilentlyContinue $aaddsVirtualNetwork = Set-AzVirtualNetwork -VirtualNetwork $aaddsVirtualNetwork -ErrorAction SilentlyContinue if( ($null -eq $rv) -or ($null -eq $aaddsVirtualNetwork) ) { Write-Host -ForegroundColor Red "[Failed!]" Write-Host -ForegroundColor Yellow "WARNING: Could not create the $workloadSubnetName subnet." Write-Host "INFO: Skipping workload subnet creation. Please create manually." } else { Write-Host -ForegroundColor Green "[Successs!]" } } } # # Get the start time $domainCreateStart = Get-Date Write-Host ([string]::Empty) Write-Host "Sending request to Azure. This action may take 45 and 60 minutes to complete. Please wait..." # # Enable Azure AD Domain Services for the directory. $aaddsResource = New-AzResource ` -ResourceId $aaddsResourceId ` -Location $aaddsLocation ` -ApiVersion "2017-06-01" ` -Properties @{"DomainName"=$aaddsDomainName; ` "domainConfigurationType" = "ResourceTrusting"; ` "SubnetId"=$aaddsSubnet.Id;} ` -Force # # Get the stop time $scriptStop = Get-Date Write-Host ([String]::Empty) Write-Host "Script Elapsed Time: " ($scriptStop - $scriptStart) Write-Host "Azure AD Domain Services Creation Elapsed Time: " ($scriptStop - $domainCreateStart) } # SIG # Begin signature block # MIInMgYJKoZIhvcNAQcCoIInIzCCJx8CAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAKGiZT3N6BX46n # KiItxtwI+A5ZxMkLjghjXlJgB7fcqqCCEW8wggiBMIIHaaADAgECAhM2AAABDBla # ELMo09izAAEAAAEMMA0GCSqGSIb3DQEBCwUAMEExEzARBgoJkiaJk/IsZAEZFgNH # QkwxEzARBgoJkiaJk/IsZAEZFgNBTUUxFTATBgNVBAMTDEFNRSBDUyBDQSAwMTAe # Fw0yMDAyMDkxMzI1MDFaFw0yMTAyMDgxMzI1MDFaMC8xLTArBgNVBAMTJE1pY3Jv # c29mdCBBenVyZSBEZXBlbmRlbmN5IENvZGUgU2lnbjCCASIwDQYJKoZIhvcNAQEB # BQADggEPADCCAQoCggEBAJL4kx4D2erD4cliqomE3dMX+gvfMz/ovrjRwJqG80Kl # kGP+kOn35E80o/Ua/SdfQq3gjLNJSJpa6Yn0ph8FOf7U4NT7a8+zrwBTpZ/7llv9 # /jGf037eKxEWsCtMTRfL1dKBOQhn1lHAZvjKdgIgJAFG7ydg1oKsn0wfGBXSgile # g1IWbTNpR5luLpuHPWRspqDtXCXif/+rjukP5tvDqZmxYP0tQXER4I1eUXiJIXHf # 7dFZR7VxjZ4BP1rEUU8Gk+BMGpTJTTB21MjwtEjF2U5WAv1KeUpxxlYPKEYGgr2/ # lCXgkoWmPWqSLMbLjcX5uLfMP9j/IW/UnpoaReR1gVsCAwEAAaOCBYIwggV+MCkG # CSsGAQQBgjcVCgQcMBowDAYKKwYBBAGCN1sDATAKBggrBgEFBQcDAzA8BgkrBgEE # AYI3FQcELzAtBiUrBgEEAYI3FQiGkOMNhNW0eITxiz6Fm90Wzp0SgWDigi2HkK4D # AgFkAgEOMIICdgYIKwYBBQUHAQEEggJoMIICZDBiBggrBgEFBQcwAoZWaHR0cDov # L2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NlcnRzL0JZMlBLSUNTQ0EwMS5B # TUUuR0JMX0FNRSUyMENTJTIwQ0ElMjAwMSgxKS5jcnQwUgYIKwYBBQUHMAKGRmh0 # dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0JZMlBLSUNTQ0EwMS5BTUUuR0JMX0FNRSUy # MENTJTIwQ0ElMjAwMSgxKS5jcnQwUgYIKwYBBQUHMAKGRmh0dHA6Ly9jcmwyLmFt # ZS5nYmwvYWlhL0JZMlBLSUNTQ0EwMS5BTUUuR0JMX0FNRSUyMENTJTIwQ0ElMjAw # MSgxKS5jcnQwUgYIKwYBBQUHMAKGRmh0dHA6Ly9jcmwzLmFtZS5nYmwvYWlhL0JZ # MlBLSUNTQ0EwMS5BTUUuR0JMX0FNRSUyMENTJTIwQ0ElMjAwMSgxKS5jcnQwUgYI # KwYBBQUHMAKGRmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0JZMlBLSUNTQ0EwMS5B # TUUuR0JMX0FNRSUyMENTJTIwQ0ElMjAwMSgxKS5jcnQwga0GCCsGAQUFBzAChoGg # bGRhcDovLy9DTj1BTUUlMjBDUyUyMENBJTIwMDEsQ049QUlBLENOPVB1YmxpYyUy # MEtleSUyMFNlcnZpY2VzLENOPVNlcnZpY2VzLENOPUNvbmZpZ3VyYXRpb24sREM9 # QU1FLERDPUdCTD9jQUNlcnRpZmljYXRlP2Jhc2U/b2JqZWN0Q2xhc3M9Y2VydGlm # aWNhdGlvbkF1dGhvcml0eTAdBgNVHQ4EFgQUkku2i4tvXu/fb2UHKKZiDd81U7Aw # DgYDVR0PAQH/BAQDAgeAMFAGA1UdEQRJMEekRTBDMSkwJwYDVQQLEyBNaWNyb3Nv # ZnQgT3BlcmF0aW9ucyBQdWVydG8gUmljbzEWMBQGA1UEBRMNMjM2MTY5KzQ1Nzc5 # NTCCAdQGA1UdHwSCAcswggHHMIIBw6CCAb+gggG7hjxodHRwOi8vY3JsLm1pY3Jv # c29mdC5jb20vcGtpaW5mcmEvQ1JML0FNRSUyMENTJTIwQ0ElMjAwMS5jcmyGLmh0 # dHA6Ly9jcmwxLmFtZS5nYmwvY3JsL0FNRSUyMENTJTIwQ0ElMjAwMS5jcmyGLmh0 # dHA6Ly9jcmwyLmFtZS5nYmwvY3JsL0FNRSUyMENTJTIwQ0ElMjAwMS5jcmyGLmh0 # dHA6Ly9jcmwzLmFtZS5nYmwvY3JsL0FNRSUyMENTJTIwQ0ElMjAwMS5jcmyGLmh0 # dHA6Ly9jcmw0LmFtZS5nYmwvY3JsL0FNRSUyMENTJTIwQ0ElMjAwMS5jcmyGgbps # ZGFwOi8vL0NOPUFNRSUyMENTJTIwQ0ElMjAwMSxDTj1CWTJQS0lDU0NBMDEsQ049 # Q0RQLENOPVB1YmxpYyUyMEtleSUyMFNlcnZpY2VzLENOPVNlcnZpY2VzLENOPUNv # bmZpZ3VyYXRpb24sREM9QU1FLERDPUdCTD9jZXJ0aWZpY2F0ZVJldm9jYXRpb25M # aXN0P2Jhc2U/b2JqZWN0Q2xhc3M9Y1JMRGlzdHJpYnV0aW9uUG9pbnQwHwYDVR0j # BBgwFoAUG2aiGfyb66XahI8YmOkQpMN7kr0wHwYDVR0lBBgwFgYKKwYBBAGCN1sD # AQYIKwYBBQUHAwMwDQYJKoZIhvcNAQELBQADggEBAFdWLRaOg25JZG+Hm01zB/zB # oSC3MUJ7lWHPIE44xH/7Ek9n0KnzXthnL345WNBcnW3pNbqHGVeLx7SlYJFbsiLi # vKm3+FUc71F5AQvySUTOpRvHRmEBgzuZo9t6n211l2GQLWdGMGvzrIaeV81wsP2r # W0G++acIHvczziw0mDTM3UYNeyxI6rFwsZsdfbvzbmsqcZuK9B699sEQoWQO19Fu # 0sIkj3WPKlATUk9dAAhHkwl2dcPckrvhBvwa9rYPLPAjWsFTZLdRTBubE9ukikdd # PDTqTM+9FhlPwo7PGMKyBngj9jp4WsfIyDfVfE1W/LgtDa+0SN7mPPNNbW5SKcMw # ggjmMIIGzqADAgECAhMfAAAAFLTFH8bygL5xAAAAAAAUMA0GCSqGSIb3DQEBCwUA # MDwxEzARBgoJkiaJk/IsZAEZFgNHQkwxEzARBgoJkiaJk/IsZAEZFgNBTUUxEDAO # BgNVBAMTB2FtZXJvb3QwHhcNMTYwOTE1MjEzMzAzWhcNMjEwOTE1MjE0MzAzWjBB # MRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRUwEwYD # VQQDEwxBTUUgQ1MgQ0EgMDEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB # AQDVV4EC1vn60PcbgLndN80k3GZh/OGJcq0pDNIbG5q/rrRtNLVUR4MONKcWGyae # VvoaQ8J5iYInBaBkaz7ehYnzJp3f/9Wg/31tcbxrPNMmZPY8UzXIrFRdQmCLsj3L # cLiWX8BN8HBsYZFcP7Y92R2VWnEpbN40Q9XBsK3FaNSEevoRzL1Ho7beP7b9FJlK # B/Nhy0PMNaE1/Q+8Y9+WbfU9KTj6jNxrffv87O7T6doMqDmL/MUeF9IlmSrl088b # oLzAOt2LAeHobkgasx3ZBeea8R+O2k+oT4bwx5ZuzNpbGXESNAlALo8HCf7xC3hW # qVzRqbdnd8HDyTNG6c6zwyf/AgMBAAGjggTaMIIE1jAQBgkrBgEEAYI3FQEEAwIB # ATAjBgkrBgEEAYI3FQIEFgQUkfwzzkKe9pPm4n1U1wgYu7jXcWUwHQYDVR0OBBYE # FBtmohn8m+ul2oSPGJjpEKTDe5K9MIIBBAYDVR0lBIH8MIH5BgcrBgEFAgMFBggr # BgEFBQcDAQYIKwYBBQUHAwIGCisGAQQBgjcUAgEGCSsGAQQBgjcVBgYKKwYBBAGC # NwoDDAYJKwYBBAGCNxUGBggrBgEFBQcDCQYIKwYBBQUIAgIGCisGAQQBgjdAAQEG # CysGAQQBgjcKAwQBBgorBgEEAYI3CgMEBgkrBgEEAYI3FQUGCisGAQQBgjcUAgIG # CisGAQQBgjcUAgMGCCsGAQUFBwMDBgorBgEEAYI3WwEBBgorBgEEAYI3WwIBBgor # BgEEAYI3WwMBBgorBgEEAYI3WwUBBgorBgEEAYI3WwQBBgorBgEEAYI3WwQCMBkG # CSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1UdDwQEAwIBhjASBgNVHRMBAf8E # CDAGAQH/AgEAMB8GA1UdIwQYMBaAFCleUV5krjS566ycDaeMdQHRCQsoMIIBaAYD # VR0fBIIBXzCCAVswggFXoIIBU6CCAU+GI2h0dHA6Ly9jcmwxLmFtZS5nYmwvY3Js # L2FtZXJvb3QuY3JshjFodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEv # Y3JsL2FtZXJvb3QuY3JshiNodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9hbWVyb290 # LmNybIYjaHR0cDovL2NybDMuYW1lLmdibC9jcmwvYW1lcm9vdC5jcmyGgapsZGFw # Oi8vL0NOPWFtZXJvb3QsQ049QU1FUk9PVCxDTj1DRFAsQ049UHVibGljJTIwS2V5 # JTIwU2VydmljZXMsQ049U2VydmljZXMsQ049Q29uZmlndXJhdGlvbixEQz1BTUUs # REM9R0JMP2NlcnRpZmljYXRlUmV2b2NhdGlvbkxpc3Q/YmFzZT9vYmplY3RDbGFz # cz1jUkxEaXN0cmlidXRpb25Qb2ludDCCAasGCCsGAQUFBwEBBIIBnTCCAZkwNwYI # KwYBBQUHMAKGK2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNRVJPT1RfYW1lcm9v # dC5jcnQwRwYIKwYBBQUHMAKGO2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2lp # bmZyYS9jZXJ0cy9BTUVST09UX2FtZXJvb3QuY3J0MDcGCCsGAQUFBzAChitodHRw # Oi8vY3JsMi5hbWUuZ2JsL2FpYS9BTUVST09UX2FtZXJvb3QuY3J0MDcGCCsGAQUF # BzAChitodHRwOi8vY3JsMy5hbWUuZ2JsL2FpYS9BTUVST09UX2FtZXJvb3QuY3J0 # MIGiBggrBgEFBQcwAoaBlWxkYXA6Ly8vQ049YW1lcm9vdCxDTj1BSUEsQ049UHVi # bGljJTIwS2V5JTIwU2VydmljZXMsQ049U2VydmljZXMsQ049Q29uZmlndXJhdGlv # bixEQz1BTUUsREM9R0JMP2NBQ2VydGlmaWNhdGU/YmFzZT9vYmplY3RDbGFzcz1j # ZXJ0aWZpY2F0aW9uQXV0aG9yaXR5MA0GCSqGSIb3DQEBCwUAA4ICAQAot0qGmo8f # pAFozcIA6pCLygDhZB5ktbdA5c2ZabtQDTXwNARrXJOoRBu4Pk6VHVa78Xbz0OZc # 1N2xkzgZMoRpl6EiJVoygu8Qm27mHoJPJ9ao9603I4mpHWwaqh3RfCfn8b/NxNhL # Gfkrc3wp2VwOtkAjJ+rfJoQlgcacD14n9/VGt9smB6j9ECEgJy0443B+mwFdyCJO # 5OaUP+TQOqiC/MmA+r0Y6QjJf93GTsiQ/Nf+fjzizTMdHggpTnxTcbWg9JCZnk4c # C+AdoQBKR03kTbQfIm/nM3t275BjTx8j5UhyLqlqAt9cdhpNfdkn8xQz1dT6hTnL # iowvNOPUkgbQtV+4crzKgHuHaKfJN7tufqHYbw3FnTZopnTFr6f8mehco2xpU8bV # KhO4i0yxdXmlC0hKGwGqdeoWNjdskyUyEih8xyOK47BEJb6mtn4+hi8TY/4wvuCz # cvrkZn0F0oXd9JbdO+ak66M9DbevNKV71YbEUnTZ81toX0Ltsbji4PMyhlTg/669 # BoHsoTg4yoC9hh8XLW2/V2lUg3+qHHQf/2g2I4mm5lnf1mJsu30NduyrmrDIeZ0l # dqKzHAHnfAmyFSNzWLvrGoU9Q0ZvwRlDdoUqXbD0Hju98GL6dTew3S2mcs+17Dgs # dargsEPm6I1lUE5iixnoEqFKWTX5j/TLUjGCFRkwghUVAgEBMFgwQTETMBEGCgmS # JomT8ixkARkWA0dCTDETMBEGCgmSJomT8ixkARkWA0FNRTEVMBMGA1UEAxMMQU1F # IENTIENBIDAxAhM2AAABDBlaELMo09izAAEAAAEMMA0GCWCGSAFlAwQCAQUAoIGu # MBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgor # BgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEiBCCLn9XgRI6uY1x+CVKXQSNW8iKCP0Td # jaYWN8xnU14YbjBCBgorBgEEAYI3AgEMMTQwMqAUgBIATQBpAGMAcgBvAHMAbwBm # AHShGoAYaHR0cDovL3d3dy5taWNyb3NvZnQuY29tMA0GCSqGSIb3DQEBAQUABIIB # AF8/Nf5aDyPslUMl2fBAKcA8SE/QiqrKYzLTEG3kHwTcLVABuo4id41VYBYSh/JY # F1piKanVI9guH6+THpc/5WTB6d5QL3+7ybpiBEUxcJshoNqmcaZZRGgyRb0vx9n2 # 8Xblk2G+zjgFc560JylUvy9r9/ftlRRQPWGfYdUD0/LMhgY8aOrCinGkN38H6BWb # dlyEHkwXVaOgzdCuQyWgeLDdtsjsQiguz+buA/RML891FX4vFu7Y5/YntnWURFup # gZ6XZzbzj7ddchqYfjgclL3/TZ/x8Qmk+BxdGANMoNZVuk/PXCUpnsnsn1k2W8e3 # kXr1c52C0CFIy8DEB/Mc6/yhghLhMIIS3QYKKwYBBAGCNwMDATGCEs0wghLJBgkq # hkiG9w0BBwKgghK6MIIStgIBAzEPMA0GCWCGSAFlAwQCAQUAMIIBUAYLKoZIhvcN # AQkQAQSgggE/BIIBOzCCATcCAQEGCisGAQQBhFkKAwEwMTANBglghkgBZQMEAgEF # AAQgohesMRGTkR36B07hc550x8m7gTz9ZgHYwKK/8b67f+0CBl8V/u5o8BgSMjAy # MDA3MjgwNDE5MjUuMTJaMASAAgH0oIHQpIHNMIHKMQswCQYDVQQGEwJVUzETMBEG # A1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWlj # cm9zb2Z0IENvcnBvcmF0aW9uMSUwIwYDVQQLExxNaWNyb3NvZnQgQW1lcmljYSBP # cGVyYXRpb25zMSYwJAYDVQQLEx1UaGFsZXMgVFNTIEVTTjozQkJELUUzMzgtRTlB # MTElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaCCDjkwggTx # MIID2aADAgECAhMzAAABHcLCCK4+uq5IAAAAAAEdMA0GCSqGSIb3DQEBCwUAMHwx # CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt # b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1p # Y3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMB4XDTE5MTExMzIxNDAzOVoXDTIx # MDIxMTIxNDAzOVowgcoxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9u # MRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRp # b24xJTAjBgNVBAsTHE1pY3Jvc29mdCBBbWVyaWNhIE9wZXJhdGlvbnMxJjAkBgNV # BAsTHVRoYWxlcyBUU1MgRVNOOjNCQkQtRTMzOC1FOUExMSUwIwYDVQQDExxNaWNy # b3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A # MIIBCgKCAQEAnIUB+qF+9ZgKHPlQgCkog4JxE7nDBGiccHUtx3G4Dmf7Sq1xPxbY # hj47XjszH4ko6Hpd9FogVJLRMdXOs/+At1zCGh1jY+/yEeg/We+4torptCryEChr # H5hfWuijIINh1jOESX852lVrR/U+SryLRdrBygw3Hjv3O4VAGiMy6lQjTBNq+la+ # 5GHyJ7uTRx9KpIDiBmVvQVYJraXqVmaErl3Bphfx9THN9jfyr/LF1f4WJRN004As # wPLObTaL7KKYcw/V9AHLLDbCdKkamwO7v7K9yWbUGs4z7Y38NcBr4dVDCd5XJq4G # ncJZZUcNtSs49VzRLvjWKfIszyO6r6D85QIDAQABo4IBGzCCARcwHQYDVR0OBBYE # FBdeWhRg3sjyCL4rQ2oIz8Ctm8KpMB8GA1UdIwQYMBaAFNVjOlyKMZDzQ3t8RhvF # M2hahW1VMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNv # bS9wa2kvY3JsL3Byb2R1Y3RzL01pY1RpbVN0YVBDQV8yMDEwLTA3LTAxLmNybDBa # BggrBgEFBQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9zb2Z0 # LmNvbS9wa2kvY2VydHMvTWljVGltU3RhUENBXzIwMTAtMDctMDEuY3J0MAwGA1Ud # EwEB/wQCMAAwEwYDVR0lBAwwCgYIKwYBBQUHAwgwDQYJKoZIhvcNAQELBQADggEB # AGCMkZ2Q8AzLOODQFevh+mz54xvfUV8OEXinY9EkjuSHcAhRIzC5Dx38/ZXuVd4Q # AYWuvPOhDMb90tvcn6VB1uamwrSwp/AsnYmfHsjSnBR7iphJsOrMlquFP7Vjh4+O # bwBadetdlSN//m2dJ4PNgHTeo54ypbsP8E37arRuiHP7TTWOsbalUfmWXKvKDBJy # n2I96L7NoluPC9u8hrVg/ReobiUkSLiGyttzNL6IUTns+bZ51ky1C6NXEY/LZmnU # y03FTnM4H7t2c2tMxbhQW1H5BGdIDButZya5BZ14pcl4feBYev/SMBRsg6aGB/Cd # wQFKf1oW3gX60Mk1VhvMSTAwggZxMIIEWaADAgECAgphCYEqAAAAAAACMA0GCSqG # SIb3DQEBCwUAMIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQ # MA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u # MTIwMAYDVQQDEylNaWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkg # MjAxMDAeFw0xMDA3MDEyMTM2NTVaFw0yNTA3MDEyMTQ2NTVaMHwxCzAJBgNVBAYT # AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYD # VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBU # aW1lLVN0YW1wIFBDQSAyMDEwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC # AQEAqR0NvHcRijog7PwTl/X6f2mUa3RUENWlCgCChfvtfGhLLF/Fw+Vhwna3PmYr # W/AVUycEMR9BGxqVHc4JE458YTBZsTBED/FgiIRUQwzXTbg4CLNC3ZOs1nMwVyaC # o0UN0Or1R4HNvyRgMlhgRvJYR4YyhB50YWeRX4FUsc+TTJLBxKZd0WETbijGGvmG # gLvfYfxGwScdJGcSchohiq9LZIlQYrFd/XcfPfBXday9ikJNQFHRD5wGPmd/9WbA # A5ZEfu/QS/1u5ZrKsajyeioKMfDaTgaRtogINeh4HLDpmc085y9Euqf03GS9pAHB # IAmTeM38vMDJRF1eFpwBBU8iTQIDAQABo4IB5jCCAeIwEAYJKwYBBAGCNxUBBAMC # AQAwHQYDVR0OBBYEFNVjOlyKMZDzQ3t8RhvFM2hahW1VMBkGCSsGAQQBgjcUAgQM # HgoAUwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB8GA1Ud # IwQYMBaAFNX2VsuP6KJcYmjRPZSQW9fOmhjEMFYGA1UdHwRPME0wS6BJoEeGRWh0 # dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0Nl # ckF1dF8yMDEwLTA2LTIzLmNybDBaBggrBgEFBQcBAQROMEwwSgYIKwYBBQUHMAKG # Pmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljUm9vQ2VyQXV0 # XzIwMTAtMDYtMjMuY3J0MIGgBgNVHSABAf8EgZUwgZIwgY8GCSsGAQQBgjcuAzCB # gTA9BggrBgEFBQcCARYxaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL1BLSS9kb2Nz # L0NQUy9kZWZhdWx0Lmh0bTBABggrBgEFBQcCAjA0HjIgHQBMAGUAZwBhAGwAXwBQ # AG8AbABpAGMAeQBfAFMAdABhAHQAZQBtAGUAbgB0AC4gHTANBgkqhkiG9w0BAQsF # AAOCAgEAB+aIUQ3ixuCYP4FxAz2do6Ehb7Prpsz1Mb7PBeKp/vpXbRkws8LFZslq # 3/Xn8Hi9x6ieJeP5vO1rVFcIK1GCRBL7uVOMzPRgEop2zEBAQZvcXBf/XPleFzWY # JFZLdO9CEMivv3/Gf/I3fVo/HPKZeUqRUgCvOA8X9S95gWXZqbVr5MfO9sp6AG9L # MEQkIjzP7QOllo9ZKby2/QThcJ8ySif9Va8v/rbljjO7Yl+a21dA6fHOmWaQjP9q # Yn/dxUoLkSbiOewZSnFjnXshbcOco6I8+n99lmqQeKZt0uGc+R38ONiU9MalCpaG # pL2eGq4EQoO4tYCbIjggtSXlZOz39L9+Y1klD3ouOVd2onGqBooPiRa6YacRy5rY # DkeagMXQzafQ732D8OE7cQnfXXSYIghh2rBQHm+98eEA3+cxB6STOvdlR3jo+KhI # q/fecn5ha293qYHLpwmsObvsxsvYgrRyzR30uIUBHoD7G4kqVDmyW9rIDVWZeodz # OwjmmC3qjeAzLhIp9cAvVCch98isTtoouLGp25ayp0Kiyc8ZQU3ghvkqmqMRZjDT # u3QyS99je/WZii8bxyGvWbWu3EQ8l1Bx16HSxVXjad5XwdHeMMD9zOZN+w2/XU/p # nR4ZOC+8z1gFLu8NoFA12u8JJxzVs341Hgi62jbb01+P3nSISRKhggLLMIICNAIB # ATCB+KGB0KSBzTCByjELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x # EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv # bjElMCMGA1UECxMcTWljcm9zb2Z0IEFtZXJpY2EgT3BlcmF0aW9uczEmMCQGA1UE # CxMdVGhhbGVzIFRTUyBFU046M0JCRC1FMzM4LUU5QTExJTAjBgNVBAMTHE1pY3Jv # c29mdCBUaW1lLVN0YW1wIFNlcnZpY2WiIwoBATAHBgUrDgMCGgMVAEQjn0R34rNH # bg1CEPwsfWkeOCdCoIGDMIGApH4wfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh # c2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBD # b3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIw # MTAwDQYJKoZIhvcNAQEFBQACBQDiybeNMCIYDzIwMjAwNzI4MDQyOTAxWhgPMjAy # MDA3MjkwNDI5MDFaMHQwOgYKKwYBBAGEWQoEATEsMCowCgIFAOLJt40CAQAwBwIB # AAICEHQwBwIBAAICEZgwCgIFAOLLCQ0CAQAwNgYKKwYBBAGEWQoEAjEoMCYwDAYK # KwYBBAGEWQoDAqAKMAgCAQACAwehIKEKMAgCAQACAwGGoDANBgkqhkiG9w0BAQUF # AAOBgQBNeQEmffqtdBPhIHNhaDat8kE7+9pwPX4DaimX7dqFCWwbTeVJk8E+eikT # jlxPfpC1hcDy1+CeZKoPsrPULZeMrGDCJmKyQ32JoCFWpFtP6wymW9pjVa4L4V6Z # ikwhDRMVdmbheHc7dvE4DUKgmMgfj713GsbP9VPJAmKz3ztgrTGCAw0wggMJAgEB # MIGTMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH # EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNV # BAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwAhMzAAABHcLCCK4+uq5I # AAAAAAEdMA0GCWCGSAFlAwQCAQUAoIIBSjAaBgkqhkiG9w0BCQMxDQYLKoZIhvcN # AQkQAQQwLwYJKoZIhvcNAQkEMSIEINUmnJU4rn+ykf5ZurVSDcVbtJau9gTjv+Of # 9j4hO63qMIH6BgsqhkiG9w0BCRACLzGB6jCB5zCB5DCBvQQgAr4Mw0Kfd3yHC65s # 6QntiApCRe1xG1Je3XJG6WXvmpMwgZgwgYCkfjB8MQswCQYDVQQGEwJVUzETMBEG # A1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWlj # cm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFt # cCBQQ0EgMjAxMAITMwAAAR3CwgiuPrquSAAAAAABHTAiBCC3hl1X8ooZDkyxLvgu # H3KVdNZnPK3GW/AUxX66aWROnTANBgkqhkiG9w0BAQsFAASCAQBx79+ywNjNifsA # XcMAZyK8klsDs1My6jcpT6STWTRp2Wuka0x7b1+krpw/UcjFmO52womCgFphCkKV # 0E+1LIEwfyb1GzxVgc5Jkp1/hkKc4ld0bJysJy5ZywW4KlCnRxUOW/9yw2Q0UIvE # jjc53RTBowRz0sRdyz/x+OnfZAXYIw11QrBoSsaIXU0HNZJAqq0+AGUeuRzI48Ms # HadmE1HOLufL0EqScOdEx+VN7ViihyapgZb5zGDs/9zR6eLWRfTmvtuop+DCzyCC # 9mzN6jH6s+1YAWAJlAeunYWqbT4jxmFqWaMatk0CTZycrp3jXGbXWNdPBWDK/EIK # yjinHbP3 # SIG # End signature block |