install.ps1 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. # Copyright (c) .NET Foundation. All rights reserved.
  2. # Licensed under the MIT license. See LICENSE file in the project root for full license information.
  3. param($installPath, $toolsPath, $package, $project)
  4. $compilerPackageName = 'Microsoft.Net.Compilers'
  5. $roslynSubFolder = 'roslyn'
  6. if ($project -eq $null) {
  7. $project = Get-Project
  8. }
  9. $libDirectory = Join-Path $installPath 'lib\net45'
  10. $projectRoot = $project.Properties.Item('FullPath').Value
  11. $binDirectory = Join-Path $projectRoot 'bin'
  12. # We need to copy the provider assembly into the bin\ folder, otherwise
  13. # Microsoft.VisualStudio.Web.Host.exe cannot find the assembly.
  14. # However, users will see the error after they clean solutions.
  15. New-Item $binDirectory -type directory -force | Out-Null
  16. Copy-Item $libDirectory\* $binDirectory -force | Out-Null
  17. # For Web Site, we need to copy the Roslyn toolset into
  18. # the applicaiton's bin folder.
  19. # For Web Applicaiton project, this is done in csproj.
  20. if ($project.Type -eq 'Web Site') {
  21. $packageDirectory = Split-Path $installPath
  22. # Get the installed Microsoft.Net.Compilers package.
  23. $compilerPackage = Get-Package -ProjectName $project.Name | Where-Object {$_.Id -eq $compilerPackageName}
  24. if ($compilerPackage -eq $null)
  25. {
  26. Write-Host "Package $compilerPackageName is not installed correctly."
  27. Write-Host 'The install.ps1 did not complete.'
  28. break
  29. }
  30. if($compilerPackage.Versions -eq $null)
  31. {
  32. $compilerVersion = $compilerPackage.Version
  33. }
  34. else
  35. {
  36. $compilerVersion = @($compilerPackage.Versions)[0]
  37. }
  38. $compilerPackageFolderName = $compilerPackage.Id + "." + $compilerVersion
  39. $compilerPackageDirectory = Join-Path $packageDirectory $compilerPackageFolderName
  40. if ((Get-Item $compilerPackageDirectory) -isnot [System.IO.DirectoryInfo])
  41. {
  42. Write-Host "The install.ps1 cannot find the installation location of package $compilerPackageName, or the pakcage is not installed correctly."
  43. Write-Host 'The install.ps1 did not complete.'
  44. break
  45. }
  46. $compilerPackageToolsDirectory = Join-Path $compilerPackageDirectory 'tools'
  47. $roslynSubDirectory = Join-Path $binDirectory $roslynSubFolder
  48. New-Item $roslynSubDirectory -type directory -force | Out-Null
  49. Copy-Item $compilerPackageToolsDirectory\* $roslynSubDirectory -force | Out-Null
  50. # Generate a .refresh file for each dll/exe file.
  51. Push-Location
  52. Set-Location $projectRoot
  53. $relativeAssemblySource = Resolve-Path -relative $compilerPackageToolsDirectory
  54. Pop-Location
  55. Get-ChildItem -Path $roslynSubDirectory | `
  56. Foreach-Object {
  57. if (($_.Extension -eq ".dll") -or ($_.Extension -eq ".exe")) {
  58. $refreshFile = $_.FullName
  59. $refreshFile += ".refresh"
  60. $refreshContent = Join-Path $relativeAssemblySource $_.Name
  61. Set-Content $refreshFile $refreshContent
  62. }
  63. }
  64. }
  65. # SIG # Begin signature block
  66. # MIIj9AYJKoZIhvcNAQcCoIIj5TCCI+ECAQExDzANBglghkgBZQMEAgEFADB5Bgor
  67. # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
  68. # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAf2MwHY6B6NpA8
  69. # BGxEha31/ErMnwdzPRjp4gsxT9P5T6CCDYIwggYAMIID6KADAgECAhMzAAAAww6b
  70. # p9iy3PcsAAAAAADDMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD
  71. # VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
  72. # b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p
  73. # bmcgUENBIDIwMTEwHhcNMTcwODExMjAyMDI0WhcNMTgwODExMjAyMDI0WjB0MQsw
  74. # CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u
  75. # ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy
  76. # b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
  77. # AQC7V9c40bEGf0ktqW2zY596urY6IVu0mK6N1KSBoMV1xSzvgkAqt4FTd/NjAQq8
  78. # zjeEA0BDV4JLzu0ftv2AbcnCkV0Fx9xWWQDhDOtX3v3xuJAnv3VK/HWycli2xUib
  79. # M2IF0ZWUpb85Iq2NEk1GYtoyGc6qIlxWSLFvRclndmJdMIijLyjFH1Aq2YbbGhEl
  80. # gcL09Wcu53kd9eIcdfROzMf8578LgEcp/8/NabEMC2DrZ+aEG5tN/W1HOsfZwWFh
  81. # 8pUSoQ0HrmMh2PSZHP94VYHupXnoIIJfCtq1UxlUAVcNh5GNwnzxVIaA4WLbgnM+
  82. # Jl7wQBLSOdUmAw2FiDFfCguLAgMBAAGjggF/MIIBezAfBgNVHSUEGDAWBgorBgEE
  83. # AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQUpxNdHyGJVegD7p4XNuryVIg1Ga8w
  84. # UQYDVR0RBEowSKRGMEQxDDAKBgNVBAsTA0FPQzE0MDIGA1UEBRMrMjMwMDEyK2M4
  85. # MDRiNWVhLTQ5YjQtNDIzOC04MzYyLWQ4NTFmYTIyNTRmYzAfBgNVHSMEGDAWgBRI
  86. # bmTlUAXTgqoXNzcitW2oynUClTBUBgNVHR8ETTBLMEmgR6BFhkNodHRwOi8vd3d3
  87. # Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNDb2RTaWdQQ0EyMDExXzIwMTEt
  88. # MDctMDguY3JsMGEGCCsGAQUFBwEBBFUwUzBRBggrBgEFBQcwAoZFaHR0cDovL3d3
  89. # dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNDb2RTaWdQQ0EyMDExXzIw
  90. # MTEtMDctMDguY3J0MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADggIBAE2X
  91. # TzR+8XCTnOPVGkucEX5rJsSlJPTfRNQkurNqCImZmssx53Cb/xQdsAc5f+QwOxMi
  92. # 3g7IlWe7bn74fJWkkII3k6aD00kCwaytWe+Rt6dmAA6iTCXU3OddBwLKKDRlOzmD
  93. # rZUqjsqg6Ag6HP4+e0BJlE2OVCUK5bHHCu5xN8abXjb1p0JE+7yHsA3ANdkmh1//
  94. # Z+8odPeKMAQRimfMSzVgaiHnw40Hg16bq51xHykmCRHU9YLT0jYHKa7okm2QfwDJ
  95. # qFvu0ARl+6EOV1PM8piJ858Vk8gGxGNSYQJPV0gc9ft1Esq1+fTCaV+7oZ0NaYMn
  96. # 64M+HWsxw+4O8cSEQ4fuMZwGADJ8tyCKuQgj6lawGNSyvRXsN+1k02sVAiPGijOH
  97. # OtGbtsCWWSygAVOEAV/ye8F6sOzU2FL2X3WBRFkWOCdTu1DzXnHf99dR3DHVGmM1
  98. # Kpd+n2Y3X89VM++yyrwsI6pEHu77Z0i06ELDD4pRWKJGAmEmWhm/XJTpqEBw51sw
  99. # THyA1FBnoqXuDus9tfHleR7h9VgZb7uJbXjiIFgl/+RIs+av8bJABBdGUNQMbJEU
  100. # fe7K4vYm3hs7BGdRLg+kF/dC/z+RiTH4p7yz5TpS3Cozf0pkkWXYZRG222q3tGxS
  101. # /L+LcRbELM5zmqDpXQjBRUWlKYbsATFtXnTGVjELMIIHejCCBWKgAwIBAgIKYQ6Q
  102. # 0gAAAAAAAzANBgkqhkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgT
  103. # Cldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29m
  104. # dCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNh
  105. # dGUgQXV0aG9yaXR5IDIwMTEwHhcNMTEwNzA4MjA1OTA5WhcNMjYwNzA4MjEwOTA5
  106. # WjB+MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH
  107. # UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSgwJgYDVQQD
  108. # Ex9NaWNyb3NvZnQgQ29kZSBTaWduaW5nIFBDQSAyMDExMIICIjANBgkqhkiG9w0B
  109. # AQEFAAOCAg8AMIICCgKCAgEAq/D6chAcLq3YbqqCEE00uvK2WCGfQhsqa+laUKq4
  110. # BjgaBEm6f8MMHt03a8YS2AvwOMKZBrDIOdUBFDFC04kNeWSHfpRgJGyvnkmc6Whe
  111. # 0t+bU7IKLMOv2akrrnoJr9eWWcpgGgXpZnboMlImEi/nqwhQz7NEt13YxC4Ddato
  112. # 88tt8zpcoRb0RrrgOGSsbmQ1eKagYw8t00CT+OPeBw3VXHmlSSnnDb6gE3e+lD3v
  113. # ++MrWhAfTVYoonpy4BI6t0le2O3tQ5GD2Xuye4Yb2T6xjF3oiU+EGvKhL1nkkDst
  114. # rjNYxbc+/jLTswM9sbKvkjh+0p2ALPVOVpEhNSXDOW5kf1O6nA+tGSOEy/S6A4aN
  115. # 91/w0FK/jJSHvMAhdCVfGCi2zCcoOCWYOUo2z3yxkq4cI6epZuxhH2rhKEmdX4ji
  116. # JV3TIUs+UsS1Vz8kA/DRelsv1SPjcF0PUUZ3s/gA4bysAoJf28AVs70b1FVL5zmh
  117. # D+kjSbwYuER8ReTBw3J64HLnJN+/RpnF78IcV9uDjexNSTCnq47f7Fufr/zdsGbi
  118. # wZeBe+3W7UvnSSmnEyimp31ngOaKYnhfsi+E11ecXL93KCjx7W3DKI8sj0A3T8Hh
  119. # hUSJxAlMxdSlQy90lfdu+HggWCwTXWCVmj5PM4TasIgX3p5O9JawvEagbJjS4NaI
  120. # jAsCAwEAAaOCAe0wggHpMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRIbmTl
  121. # UAXTgqoXNzcitW2oynUClTAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTALBgNV
  122. # HQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBRyLToCMZBDuRQF
  123. # TuHqp8cx0SOJNDBaBgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsLm1pY3Jvc29m
  124. # dC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFfMDNf
  125. # MjIuY3JsMF4GCCsGAQUFBwEBBFIwUDBOBggrBgEFBQcwAoZCaHR0cDovL3d3dy5t
  126. # aWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFfMDNf
  127. # MjIuY3J0MIGfBgNVHSAEgZcwgZQwgZEGCSsGAQQBgjcuAzCBgzA/BggrBgEFBQcC
  128. # ARYzaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9kb2NzL3ByaW1hcnlj
  129. # cHMuaHRtMEAGCCsGAQUFBwICMDQeMiAdAEwAZQBnAGEAbABfAHAAbwBsAGkAYwB5
  130. # AF8AcwB0AGEAdABlAG0AZQBuAHQALiAdMA0GCSqGSIb3DQEBCwUAA4ICAQBn8oal
  131. # mOBUeRou09h0ZyKbC5YR4WOSmUKWfdJ5DJDBZV8uLD74w3LRbYP+vj/oCso7v0ep
  132. # o/Np22O/IjWll11lhJB9i0ZQVdgMknzSGksc8zxCi1LQsP1r4z4HLimb5j0bpdS1
  133. # HXeUOeLpZMlEPXh6I/MTfaaQdION9MsmAkYqwooQu6SpBQyb7Wj6aC6VoCo/KmtY
  134. # SWMfCWluWpiW5IP0wI/zRive/DvQvTXvbiWu5a8n7dDd8w6vmSiXmE0OPQvyCInW
  135. # H8MyGOLwxS3OW560STkKxgrCxq2u5bLZ2xWIUUVYODJxJxp/sfQn+N4sOiBpmLJZ
  136. # iWhub6e3dMNABQamASooPoI/E01mC8CzTfXhj38cbxV9Rad25UAqZaPDXVJihsMd
  137. # YzaXht/a8/jyFqGaJ+HNpZfQ7l1jQeNbB5yHPgZ3BtEGsXUfFL5hYbXw3MYbBL7f
  138. # QccOKO7eZS/sl/ahXJbYANahRr1Z85elCUtIEJmAH9AAKcWxm6U/RXceNcbSoqKf
  139. # enoi+kiVH6v7RyOA9Z74v2u3S5fi63V4GuzqN5l5GEv/1rMjaHXmr/r8i+sLgOpp
  140. # O6/8MO0ETI7f33VtY5E90Z1WTk+/gFcioXgRMiF670EKsT/7qMykXcGhiJtXcVZO
  141. # SEXAQsmbdlsKgEhr/Xmfwb1tbWrJUnMTDXpQzTGCFcgwghXEAgEBMIGVMH4xCzAJ
  142. # BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k
  143. # MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jv
  144. # c29mdCBDb2RlIFNpZ25pbmcgUENBIDIwMTECEzMAAADDDpun2LLc9ywAAAAAAMMw
  145. # DQYJYIZIAWUDBAIBBQCggbowGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYK
  146. # KwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIEoPsTC3
  147. # 1/pDivlkpNbAGjYa9p5+3H/Rx+1SC8XLqZeAME4GCisGAQQBgjcCAQwxQDA+oCSA
  148. # IgBNAGkAYwByAG8AcwBvAGYAdAAgAEEAUwBQAC4ATgBFAFShFoAUaHR0cDovL3d3
  149. # dy5hc3AubmV0LyAwDQYJKoZIhvcNAQEBBQAEggEAbSqleID4IT7oaGSzNGup96hW
  150. # lCPnBetoYLWWc2YNw+99esly5FencuJW5HyejxysCtA4pOl/LmhoZ2OOM4ZJ7Dmj
  151. # 0SjsWKbv5iZQAk7UPLYuUldcNMUsLs7iHbqES/irQESpDE0sW0kxrIEr+1CULEd5
  152. # x6fkwsfA5SG+5XiD8OQmgeLBaznN4ddCcfh6Hrt1VT09p0RZdXVQX1BNUj0z8pwf
  153. # +HbUQyFlczz4F3lIMHvHXpSGVstlJ7KJvUY9LDOJk8uB5XOoWDyBKI6x08eO5wd3
  154. # HesnpE2ORLIvMSxD5NQ5IZqw0FnLnzO5EV1dCaE7k0xAwuqbnoB4D1tRkhctnqGC
  155. # E0YwghNCBgorBgEEAYI3AwMBMYITMjCCEy4GCSqGSIb3DQEHAqCCEx8wghMbAgED
  156. # MQ8wDQYJYIZIAWUDBAIBBQAwggE8BgsqhkiG9w0BCRABBKCCASsEggEnMIIBIwIB
  157. # AQYKKwYBBAGEWQoDATAxMA0GCWCGSAFlAwQCAQUABCC1zaDGNu/+Ty+fMauQDUIy
  158. # RNdiJ06pb7NCdqQIbh7rsQIGWdm5e7muGBMyMDE3MTAxNjIxMTI0OC4zOTFaMAcC
  159. # AQGAAgH0oIG4pIG1MIGyMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv
  160. # bjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0
  161. # aW9uMQwwCgYDVQQLEwNBT0MxJzAlBgNVBAsTHm5DaXBoZXIgRFNFIEVTTjowREU4
  162. # LTJEQzUtM0NBOTElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2Vydmlj
  163. # ZaCCDsowggZxMIIEWaADAgECAgphCYEqAAAAAAACMA0GCSqGSIb3DQEBCwUAMIGI
  164. # MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk
  165. # bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTIwMAYDVQQDEylN
  166. # aWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAxMDAeFw0xMDA3
  167. # MDEyMTM2NTVaFw0yNTA3MDEyMTQ2NTVaMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQI
  168. # EwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv
  169. # ZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBD
  170. # QSAyMDEwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqR0NvHcRijog
  171. # 7PwTl/X6f2mUa3RUENWlCgCChfvtfGhLLF/Fw+Vhwna3PmYrW/AVUycEMR9BGxqV
  172. # Hc4JE458YTBZsTBED/FgiIRUQwzXTbg4CLNC3ZOs1nMwVyaCo0UN0Or1R4HNvyRg
  173. # MlhgRvJYR4YyhB50YWeRX4FUsc+TTJLBxKZd0WETbijGGvmGgLvfYfxGwScdJGcS
  174. # chohiq9LZIlQYrFd/XcfPfBXday9ikJNQFHRD5wGPmd/9WbAA5ZEfu/QS/1u5ZrK
  175. # sajyeioKMfDaTgaRtogINeh4HLDpmc085y9Euqf03GS9pAHBIAmTeM38vMDJRF1e
  176. # FpwBBU8iTQIDAQABo4IB5jCCAeIwEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYE
  177. # FNVjOlyKMZDzQ3t8RhvFM2hahW1VMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBB
  178. # MAsGA1UdDwQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNX2VsuP
  179. # 6KJcYmjRPZSQW9fOmhjEMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwubWlj
  180. # cm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0NlckF1dF8yMDEwLTA2
  181. # LTIzLmNybDBaBggrBgEFBQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cu
  182. # bWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMu
  183. # Y3J0MIGgBgNVHSABAf8EgZUwgZIwgY8GCSsGAQQBgjcuAzCBgTA9BggrBgEFBQcC
  184. # ARYxaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL1BLSS9kb2NzL0NQUy9kZWZhdWx0
  185. # Lmh0bTBABggrBgEFBQcCAjA0HjIgHQBMAGUAZwBhAGwAXwBQAG8AbABpAGMAeQBf
  186. # AFMAdABhAHQAZQBtAGUAbgB0AC4gHTANBgkqhkiG9w0BAQsFAAOCAgEAB+aIUQ3i
  187. # xuCYP4FxAz2do6Ehb7Prpsz1Mb7PBeKp/vpXbRkws8LFZslq3/Xn8Hi9x6ieJeP5
  188. # vO1rVFcIK1GCRBL7uVOMzPRgEop2zEBAQZvcXBf/XPleFzWYJFZLdO9CEMivv3/G
  189. # f/I3fVo/HPKZeUqRUgCvOA8X9S95gWXZqbVr5MfO9sp6AG9LMEQkIjzP7QOllo9Z
  190. # Kby2/QThcJ8ySif9Va8v/rbljjO7Yl+a21dA6fHOmWaQjP9qYn/dxUoLkSbiOewZ
  191. # SnFjnXshbcOco6I8+n99lmqQeKZt0uGc+R38ONiU9MalCpaGpL2eGq4EQoO4tYCb
  192. # IjggtSXlZOz39L9+Y1klD3ouOVd2onGqBooPiRa6YacRy5rYDkeagMXQzafQ732D
  193. # 8OE7cQnfXXSYIghh2rBQHm+98eEA3+cxB6STOvdlR3jo+KhIq/fecn5ha293qYHL
  194. # pwmsObvsxsvYgrRyzR30uIUBHoD7G4kqVDmyW9rIDVWZeodzOwjmmC3qjeAzLhIp
  195. # 9cAvVCch98isTtoouLGp25ayp0Kiyc8ZQU3ghvkqmqMRZjDTu3QyS99je/WZii8b
  196. # xyGvWbWu3EQ8l1Bx16HSxVXjad5XwdHeMMD9zOZN+w2/XU/pnR4ZOC+8z1gFLu8N
  197. # oFA12u8JJxzVs341Hgi62jbb01+P3nSISRIwggTZMIIDwaADAgECAhMzAAAApv1S
  198. # 4IsWJz8AAAAAAACmMA0GCSqGSIb3DQEBCwUAMHwxCzAJBgNVBAYTAlVTMRMwEQYD
  199. # VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
  200. # b3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1w
  201. # IFBDQSAyMDEwMB4XDTE2MDkwNzE3NTY1MVoXDTE4MDkwNzE3NTY1MVowgbIxCzAJ
  202. # BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k
  203. # MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xDDAKBgNVBAsTA0FPQzEn
  204. # MCUGA1UECxMebkNpcGhlciBEU0UgRVNOOjBERTgtMkRDNS0zQ0E5MSUwIwYDVQQD
  205. # ExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNlMIIBIjANBgkqhkiG9w0BAQEF
  206. # AAOCAQ8AMIIBCgKCAQEAwbjNngkntHCLhf8dWkjRwObnYXD1PapUW8Dd1bLAEOuu
  207. # RJpcoYmpr2HFU/QCbP2/bMvR85KaEqARbYU3PnHd0aDvmiHd2Fsmg5APJn+NHh7j
  208. # 4yQbLTLRtO+3wM0KR9jgTzXHuwQ4RSZrb6jihSazjfT3s7xZ8CIYmP9XNBgbTtG0
  209. # 79juKoht/f4fFV0pgWt2OTDF/30jokR0GLMINMm5yNfNjO9RTeDzD+86tC3SsyX5
  210. # v2STF1Qv78hRY5UlsSyjSHHIZ6pxh9jXr8rnG52gOTLFpm9qG9UYdZSpqnlZrN/b
  211. # jtLKSZx3QarYMDlm5JF41O0n6ZfDfllE+i25anED3QIDAQABo4IBGzCCARcwHQYD
  212. # VR0OBBYEFA7hxUPJJhvcy4e73Exm1wa80cAmMB8GA1UdIwQYMBaAFNVjOlyKMZDz
  213. # Q3t8RhvFM2hahW1VMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9z
  214. # b2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY1RpbVN0YVBDQV8yMDEwLTA3LTAx
  215. # LmNybDBaBggrBgEFBQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cubWlj
  216. # cm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljVGltU3RhUENBXzIwMTAtMDctMDEuY3J0
  217. # MAwGA1UdEwEB/wQCMAAwEwYDVR0lBAwwCgYIKwYBBQUHAwgwDQYJKoZIhvcNAQEL
  218. # BQADggEBAIQgJ6EG6LjW/JI6ykjWncvQlo6zBNrIroRfqzqi9Nq1YlYvCsGyjz63
  219. # HyxgWnUizkeR30F62Z6QNCujWAMNw4bGltW6hdHjY7QZUb1njzZl7NYZJpcHjPpW
  220. # l/7MXBltdwZY6dELrxqrCxT3TwlQwxlrmMwh4yWG1kE362Ut2Wxsj0f/F0+9pVA2
  221. # o6vC3HVw4WFa70EbKgPRBnleyqZDGKtXRJOBwOtCqBMF1Bg4nFsmNtyV6zOltHCa
  222. # /L2db6QHpN8eQqcPO7lBsbZLv4QSRdluz1h8tuNrC64ABtaklrtnES87UOmSbPWa
  223. # WciH5K9kvlUsM3A2H4v06uacAT2kOy+hggN0MIICXAIBATCB4qGBuKSBtTCBsjEL
  224. # MAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v
  225. # bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEMMAoGA1UECxMDQU9D
  226. # MScwJQYDVQQLEx5uQ2lwaGVyIERTRSBFU046MERFOC0yREM1LTNDQTkxJTAjBgNV
  227. # BAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2WiJQoBATAJBgUrDgMCGgUA
  228. # AxUAf6AwbHyj6urygQTTNaLn3OLUhT2ggcEwgb6kgbswgbgxCzAJBgNVBAYTAlVT
  229. # MRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQK
  230. # ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xDDAKBgNVBAsTA0FPQzEnMCUGA1UECxMe
  231. # bkNpcGhlciBOVFMgRVNOOjI2NjUtNEMzRi1DNURFMSswKQYDVQQDEyJNaWNyb3Nv
  232. # ZnQgVGltZSBTb3VyY2UgTWFzdGVyIENsb2NrMA0GCSqGSIb3DQEBBQUAAgUA3Y+K
  233. # WzAiGA8yMDE3MTAxNjE5NDMyM1oYDzIwMTcxMDE3MTk0MzIzWjB0MDoGCisGAQQB
  234. # hFkKBAExLDAqMAoCBQDdj4pbAgEAMAcCAQACAgaxMAcCAQACAhl1MAoCBQDdkNvb
  235. # AgEAMDYGCisGAQQBhFkKBAIxKDAmMAwGCisGAQQBhFkKAwGgCjAIAgEAAgMW42Ch
  236. # CjAIAgEAAgMHoSAwDQYJKoZIhvcNAQEFBQADggEBACmaRE4Zpujg47c6L7bPI4+5
  237. # k/M3LOiQz3uJhwdSUWWgpzlr+Xz8CQm4tyNSJIoiKoqdKskWYA0cdYBHRmGgrUDJ
  238. # drSczFL4dbObCKVhCgD9+gYX5hszZGpfc6MVaKZ1bm3eV/6LvVZAThT+HY5r5yBQ
  239. # lJA44M9XkDY85Mmf6zL8HJvoDkyogKXSL9NcAJP248ONuCMa87jfaHvZMbRuEizd
  240. # x9g7X8P6XuW96ZJCKgWD7l6/QyMaCCCe3iABKot5NAmlp9QvMUVwBeILFcdY/XzT
  241. # GUB3I8xjsZ5H/4OjIti75p58YzHT6de9xDcItksmJoaIZcASijhCA4OZ/d1HBLEx
  242. # ggL1MIIC8QIBATCBkzB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv
  243. # bjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0
  244. # aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMAITMwAA
  245. # AKb9UuCLFic/AAAAAAAApjANBglghkgBZQMEAgEFAKCCATIwGgYJKoZIhvcNAQkD
  246. # MQ0GCyqGSIb3DQEJEAEEMC8GCSqGSIb3DQEJBDEiBCCczm1z9vWYqpvtnd4AD0SG
  247. # PMMhSgbZOEDrv000ksf4lDCB4gYLKoZIhvcNAQkQAgwxgdIwgc8wgcwwgbEEFH+g
  248. # MGx8o+rq8oEE0zWi59zi1IU9MIGYMIGApH4wfDELMAkGA1UEBhMCVVMxEzARBgNV
  249. # BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv
  250. # c29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAg
  251. # UENBIDIwMTACEzMAAACm/VLgixYnPwAAAAAAAKYwFgQUs5LWyUXi2GSuGmUeog8I
  252. # QynnrSswDQYJKoZIhvcNAQELBQAEggEAv+OGbHCsxyU/djVQVR96B8DgtD+Il/Dc
  253. # NJT454Aqe7VliKNz35JvqbcvAXmYfe5/h7rUdJw1C5G1R8FnvozLEJCyD4Mx1RbR
  254. # hvg4cKzvZiaEPG600twxO5K8HGtewug4VpAEwXGrOCvQvYQ1nQnCHqr9giCpqVC7
  255. # ta9w3msriFdyv2+3cNgbDCpf4j2elBO9OlDGZz1Ey81z8n1B4Usxp6aNRjnVybCu
  256. # HO7dgqo2P+uKJLIWV+R7vjWh/KztftHeJVEglvRkRD/3o/y+kObK8EaqOrXxOnhv
  257. # PBYgCHvMriO+FDb4O+meGQZRm16By6Q44LwF8QTWUvHGkEp9ozWabQ==
  258. # SIG # End signature block