説明なし
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

install.ps1 15KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  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. $roslynSubFolder = 'roslyn'
  5. if ($project -eq $null) {
  6. $project = Get-Project
  7. }
  8. $libDirectory = Join-Path $installPath 'lib\net45'
  9. $projectRoot = $project.Properties.Item('FullPath').Value
  10. $projectTargetFramework = $project.Properties.Item('TargetFrameworkMoniker').Value
  11. $shouldUseRoslyn45 = $projectTargetFramework -match '4.5'
  12. $binDirectory = Join-Path $projectRoot 'bin'
  13. # We need to copy the provider assembly into the bin\ folder, otherwise
  14. # Microsoft.VisualStudio.Web.Host.exe cannot find the assembly.
  15. # However, users will see the error after they clean solutions.
  16. New-Item $binDirectory -type directory -force | Out-Null
  17. Copy-Item $libDirectory\* $binDirectory -force | Out-Null
  18. # For Web Site, we need to copy the Roslyn toolset into
  19. # the applicaiton's bin folder.
  20. # For Web Applicaiton project, this is done in csproj.
  21. if ($project.Type -eq 'Web Site') {
  22. $packageDirectory = Split-Path $installPath
  23. if($package.Versions -eq $null)
  24. {
  25. $compilerVersion = $package.Version
  26. }
  27. else
  28. {
  29. $compilerVersion = @($package.Versions)[0]
  30. }
  31. $compilerPackageFolderName = $package.Id + "." + $compilerVersion
  32. $compilerPackageDirectory = Join-Path $packageDirectory $compilerPackageFolderName
  33. if ((Get-Item $compilerPackageDirectory) -isnot [System.IO.DirectoryInfo])
  34. {
  35. Write-Host "The install.ps1 cannot find the installation location of package $compilerPackageName, or the pakcage is not installed correctly."
  36. Write-Host 'The install.ps1 did not complete.'
  37. break
  38. }
  39. if($shouldUseRoslyn45)
  40. {
  41. $compilerPackageToolsDirectory = Join-Path $compilerPackageDirectory 'tools\roslyn45'
  42. }
  43. else
  44. {
  45. $compilerPackageToolsDirectory = Join-Path $compilerPackageDirectory 'tools\roslynlatest'
  46. }
  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. # MIIkLwYJKoZIhvcNAQcCoIIkIDCCJBwCAQExDzANBglghkgBZQMEAgEFADB5Bgor
  67. # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
  68. # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDtvxPzgXqotl1m
  69. # H/XfQZLEW25b0XwuOnAj3if78cNKFaCCDYEwggX/MIID56ADAgECAhMzAAABA14l
  70. # HJkfox64AAAAAAEDMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD
  71. # VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
  72. # b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p
  73. # bmcgUENBIDIwMTEwHhcNMTgwNzEyMjAwODQ4WhcNMTkwNzI2MjAwODQ4WjB0MQsw
  74. # CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u
  75. # ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy
  76. # b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
  77. # AQDRlHY25oarNv5p+UZ8i4hQy5Bwf7BVqSQdfjnnBZ8PrHuXss5zCvvUmyRcFrU5
  78. # 3Rt+M2wR/Dsm85iqXVNrqsPsE7jS789Xf8xly69NLjKxVitONAeJ/mkhvT5E+94S
  79. # nYW/fHaGfXKxdpth5opkTEbOttU6jHeTd2chnLZaBl5HhvU80QnKDT3NsumhUHjR
  80. # hIjiATwi/K+WCMxdmcDt66VamJL1yEBOanOv3uN0etNfRpe84mcod5mswQ4xFo8A
  81. # DwH+S15UD8rEZT8K46NG2/YsAzoZvmgFFpzmfzS/p4eNZTkmyWPU78XdvSX+/Sj0
  82. # NIZ5rCrVXzCRO+QUauuxygQjAgMBAAGjggF+MIIBejAfBgNVHSUEGDAWBgorBgEE
  83. # AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQUR77Ay+GmP/1l1jjyA123r3f3QP8w
  84. # UAYDVR0RBEkwR6RFMEMxKTAnBgNVBAsTIE1pY3Jvc29mdCBPcGVyYXRpb25zIFB1
  85. # ZXJ0byBSaWNvMRYwFAYDVQQFEw0yMzAwMTIrNDM3OTY1MB8GA1UdIwQYMBaAFEhu
  86. # ZOVQBdOCqhc3NyK1bajKdQKVMFQGA1UdHwRNMEswSaBHoEWGQ2h0dHA6Ly93d3cu
  87. # bWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY0NvZFNpZ1BDQTIwMTFfMjAxMS0w
  88. # Ny0wOC5jcmwwYQYIKwYBBQUHAQEEVTBTMFEGCCsGAQUFBzAChkVodHRwOi8vd3d3
  89. # Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY0NvZFNpZ1BDQTIwMTFfMjAx
  90. # MS0wNy0wOC5jcnQwDAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQsFAAOCAgEAn/XJ
  91. # Uw0/DSbsokTYDdGfY5YGSz8eXMUzo6TDbK8fwAG662XsnjMQD6esW9S9kGEX5zHn
  92. # wya0rPUn00iThoj+EjWRZCLRay07qCwVlCnSN5bmNf8MzsgGFhaeJLHiOfluDnjY
  93. # DBu2KWAndjQkm925l3XLATutghIWIoCJFYS7mFAgsBcmhkmvzn1FFUM0ls+BXBgs
  94. # 1JPyZ6vic8g9o838Mh5gHOmwGzD7LLsHLpaEk0UoVFzNlv2g24HYtjDKQ7HzSMCy
  95. # RhxdXnYqWJ/U7vL0+khMtWGLsIxB6aq4nZD0/2pCD7k+6Q7slPyNgLt44yOneFuy
  96. # bR/5WcF9ttE5yXnggxxgCto9sNHtNr9FB+kbNm7lPTsFA6fUpyUSj+Z2oxOzRVpD
  97. # MYLa2ISuubAfdfX2HX1RETcn6LU1hHH3V6qu+olxyZjSnlpkdr6Mw30VapHxFPTy
  98. # 2TUxuNty+rR1yIibar+YRcdmstf/zpKQdeTr5obSyBvbJ8BblW9Jb1hdaSreU0v4
  99. # 6Mp79mwV+QMZDxGFqk+av6pX3WDG9XEg9FGomsrp0es0Rz11+iLsVT9qGTlrEOla
  100. # P470I3gwsvKmOMs1jaqYWSRAuDpnpAdfoP7YO0kT+wzh7Qttg1DO8H8+4NkI6Iwh
  101. # SkHC3uuOW+4Dwx1ubuZUNWZncnwa6lL2IsRyP64wggd6MIIFYqADAgECAgphDpDS
  102. # AAAAAAADMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMK
  103. # V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0
  104. # IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0
  105. # ZSBBdXRob3JpdHkgMjAxMTAeFw0xMTA3MDgyMDU5MDlaFw0yNjA3MDgyMTA5MDla
  106. # MH4xCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS
  107. # ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMT
  108. # H01pY3Jvc29mdCBDb2RlIFNpZ25pbmcgUENBIDIwMTEwggIiMA0GCSqGSIb3DQEB
  109. # AQUAA4ICDwAwggIKAoICAQCr8PpyEBwurdhuqoIQTTS68rZYIZ9CGypr6VpQqrgG
  110. # OBoESbp/wwwe3TdrxhLYC/A4wpkGsMg51QEUMULTiQ15ZId+lGAkbK+eSZzpaF7S
  111. # 35tTsgosw6/ZqSuuegmv15ZZymAaBelmdugyUiYSL+erCFDPs0S3XdjELgN1q2jz
  112. # y23zOlyhFvRGuuA4ZKxuZDV4pqBjDy3TQJP4494HDdVceaVJKecNvqATd76UPe/7
  113. # 4ytaEB9NViiienLgEjq3SV7Y7e1DkYPZe7J7hhvZPrGMXeiJT4Qa8qEvWeSQOy2u
  114. # M1jFtz7+MtOzAz2xsq+SOH7SnYAs9U5WkSE1JcM5bmR/U7qcD60ZI4TL9LoDho33
  115. # X/DQUr+MlIe8wCF0JV8YKLbMJyg4JZg5SjbPfLGSrhwjp6lm7GEfauEoSZ1fiOIl
  116. # XdMhSz5SxLVXPyQD8NF6Wy/VI+NwXQ9RRnez+ADhvKwCgl/bwBWzvRvUVUvnOaEP
  117. # 6SNJvBi4RHxF5MHDcnrgcuck379GmcXvwhxX24ON7E1JMKerjt/sW5+v/N2wZuLB
  118. # l4F77dbtS+dJKacTKKanfWeA5opieF+yL4TXV5xcv3coKPHtbcMojyyPQDdPweGF
  119. # RInECUzF1KVDL3SV9274eCBYLBNdYJWaPk8zhNqwiBfenk70lrC8RqBsmNLg1oiM
  120. # CwIDAQABo4IB7TCCAekwEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFEhuZOVQ
  121. # BdOCqhc3NyK1bajKdQKVMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1Ud
  122. # DwQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFHItOgIxkEO5FAVO
  123. # 4eqnxzHRI4k0MFoGA1UdHwRTMFEwT6BNoEuGSWh0dHA6Ly9jcmwubWljcm9zb2Z0
  124. # LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0NlckF1dDIwMTFfMjAxMV8wM18y
  125. # Mi5jcmwwXgYIKwYBBQUHAQEEUjBQME4GCCsGAQUFBzAChkJodHRwOi8vd3d3Lm1p
  126. # Y3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Jvb0NlckF1dDIwMTFfMjAxMV8wM18y
  127. # Mi5jcnQwgZ8GA1UdIASBlzCBlDCBkQYJKwYBBAGCNy4DMIGDMD8GCCsGAQUFBwIB
  128. # FjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2RvY3MvcHJpbWFyeWNw
  129. # cy5odG0wQAYIKwYBBQUHAgIwNB4yIB0ATABlAGcAYQBsAF8AcABvAGwAaQBjAHkA
  130. # XwBzAHQAYQB0AGUAbQBlAG4AdAAuIB0wDQYJKoZIhvcNAQELBQADggIBAGfyhqWY
  131. # 4FR5Gi7T2HRnIpsLlhHhY5KZQpZ90nkMkMFlXy4sPvjDctFtg/6+P+gKyju/R6mj
  132. # 82nbY78iNaWXXWWEkH2LRlBV2AySfNIaSxzzPEKLUtCw/WvjPgcuKZvmPRul1LUd
  133. # d5Q54ulkyUQ9eHoj8xN9ppB0g430yyYCRirCihC7pKkFDJvtaPpoLpWgKj8qa1hJ
  134. # Yx8JaW5amJbkg/TAj/NGK978O9C9Ne9uJa7lryft0N3zDq+ZKJeYTQ49C/IIidYf
  135. # wzIY4vDFLc5bnrRJOQrGCsLGra7lstnbFYhRRVg4MnEnGn+x9Cf43iw6IGmYslmJ
  136. # aG5vp7d0w0AFBqYBKig+gj8TTWYLwLNN9eGPfxxvFX1Fp3blQCplo8NdUmKGwx1j
  137. # NpeG39rz+PIWoZon4c2ll9DuXWNB41sHnIc+BncG0QaxdR8UvmFhtfDcxhsEvt9B
  138. # xw4o7t5lL+yX9qFcltgA1qFGvVnzl6UJS0gQmYAf0AApxbGbpT9Fdx41xtKiop96
  139. # eiL6SJUfq/tHI4D1nvi/a7dLl+LrdXga7Oo3mXkYS//WsyNodeav+vyL6wuA6mk7
  140. # r/ww7QRMjt/fdW1jkT3RnVZOT7+AVyKheBEyIXrvQQqxP/uozKRdwaGIm1dxVk5I
  141. # RcBCyZt2WwqASGv9eZ/BvW1taslScxMNelDNMYIWBDCCFgACAQEwgZUwfjELMAkG
  142. # A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx
  143. # HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEoMCYGA1UEAxMfTWljcm9z
  144. # b2Z0IENvZGUgU2lnbmluZyBQQ0EgMjAxMQITMwAAAQNeJRyZH6MeuAAAAAABAzAN
  145. # BglghkgBZQMEAgEFAKCBrjAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgor
  146. # BgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkqhkiG9w0BCQQxIgQgi7bO6A6z
  147. # CQJspqqWO/JGqjnCYiKRI956GjGUwTMjatQwQgYKKwYBBAGCNwIBDDE0MDKgFIAS
  148. # AE0AaQBjAHIAbwBzAG8AZgB0oRqAGGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbTAN
  149. # BgkqhkiG9w0BAQEFAASCAQBsCCeVeH8EV29UM7BGORLYvTpeX8At3x+JRaqvdP/q
  150. # ai8/+SX+sm2QMRsyK4AfT8qZSAbx83LrIpXKASXnwUxXF5AfNdbZ1LspcTUAA/Jd
  151. # V1a2PeHmfodolsTOFJ+dMLE74UcSoZqJ1v6LZWVSEXWNiZvvzLRK2ToqBQqHQMC+
  152. # QPdVZ/Ur1VyLnbA3T8U2E0MCPQYpwfbtFyRDoSnTAB19hkS29oO5eMDGNm510dGJ
  153. # QK0n2alKXKtdjG81kb4bYR6jTjZyN8aJBL+9HF71RLFP9WaWwsDpTBjkU5jc5YCq
  154. # PYCc2S0RtiX+ykahbmbmEF4E02/oMB9nR4vI53wvCEDioYITjjCCE4oGCisGAQQB
  155. # gjcDAwExghN6MIITdgYJKoZIhvcNAQcCoIITZzCCE2MCAQMxDzANBglghkgBZQME
  156. # AgEFADCCAVQGCyqGSIb3DQEJEAEEoIIBQwSCAT8wggE7AgEBBgorBgEEAYRZCgMB
  157. # MDEwDQYJYIZIAWUDBAIBBQAEIEZu4RRK7ls8JqWXRefn3V+2IT7wlfo1SlHmWWyc
  158. # r/xTAgZbgCh32kMYEzIwMTgwOTA1MTYxMzEwLjA1NFowBwIBAYACAfSggdCkgc0w
  159. # gcoxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS
  160. # ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJTAjBgNVBAsT
  161. # HE1pY3Jvc29mdCBBbWVyaWNhIE9wZXJhdGlvbnMxJjAkBgNVBAsTHVRoYWxlcyBU
  162. # U1MgRVNOOkY2RkYtMkRBNy1CQjc1MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1T
  163. # dGFtcCBTZXJ2aWNloIIO+jCCBnEwggRZoAMCAQICCmEJgSoAAAAAAAIwDQYJKoZI
  164. # hvcNAQELBQAwgYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAw
  165. # DgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
  166. # MjAwBgNVBAMTKU1pY3Jvc29mdCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAy
  167. # MDEwMB4XDTEwMDcwMTIxMzY1NVoXDTI1MDcwMTIxNDY1NVowfDELMAkGA1UEBhMC
  168. # VVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNV
  169. # BAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRp
  170. # bWUtU3RhbXAgUENBIDIwMTAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
  171. # AQCpHQ28dxGKOiDs/BOX9fp/aZRrdFQQ1aUKAIKF++18aEssX8XD5WHCdrc+Zitb
  172. # 8BVTJwQxH0EbGpUdzgkTjnxhMFmxMEQP8WCIhFRDDNdNuDgIs0Ldk6zWczBXJoKj
  173. # RQ3Q6vVHgc2/JGAyWGBG8lhHhjKEHnRhZ5FfgVSxz5NMksHEpl3RYRNuKMYa+YaA
  174. # u99h/EbBJx0kZxJyGiGKr0tkiVBisV39dx898Fd1rL2KQk1AUdEPnAY+Z3/1ZsAD
  175. # lkR+79BL/W7lmsqxqPJ6Kgox8NpOBpG2iAg16HgcsOmZzTznL0S6p/TcZL2kAcEg
  176. # CZN4zfy8wMlEXV4WnAEFTyJNAgMBAAGjggHmMIIB4jAQBgkrBgEEAYI3FQEEAwIB
  177. # ADAdBgNVHQ4EFgQU1WM6XIoxkPNDe3xGG8UzaFqFbVUwGQYJKwYBBAGCNxQCBAwe
  178. # CgBTAHUAYgBDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j
  179. # BBgwFoAU1fZWy4/oolxiaNE9lJBb186aGMQwVgYDVR0fBE8wTTBLoEmgR4ZFaHR0
  180. # cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvTWljUm9vQ2Vy
  181. # QXV0XzIwMTAtMDYtMjMuY3JsMFoGCCsGAQUFBwEBBE4wTDBKBggrBgEFBQcwAoY+
  182. # aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNSb29DZXJBdXRf
  183. # MjAxMC0wNi0yMy5jcnQwgaAGA1UdIAEB/wSBlTCBkjCBjwYJKwYBBAGCNy4DMIGB
  184. # MD0GCCsGAQUFBwIBFjFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vUEtJL2RvY3Mv
  185. # Q1BTL2RlZmF1bHQuaHRtMEAGCCsGAQUFBwICMDQeMiAdAEwAZQBnAGEAbABfAFAA
  186. # bwBsAGkAYwB5AF8AUwB0AGEAdABlAG0AZQBuAHQALiAdMA0GCSqGSIb3DQEBCwUA
  187. # A4ICAQAH5ohRDeLG4Jg/gXEDPZ2joSFvs+umzPUxvs8F4qn++ldtGTCzwsVmyWrf
  188. # 9efweL3HqJ4l4/m87WtUVwgrUYJEEvu5U4zM9GASinbMQEBBm9xcF/9c+V4XNZgk
  189. # Vkt070IQyK+/f8Z/8jd9Wj8c8pl5SpFSAK84Dxf1L3mBZdmptWvkx872ynoAb0sw
  190. # RCQiPM/tA6WWj1kpvLb9BOFwnzJKJ/1Vry/+tuWOM7tiX5rbV0Dp8c6ZZpCM/2pi
  191. # f93FSguRJuI57BlKcWOdeyFtw5yjojz6f32WapB4pm3S4Zz5Hfw42JT0xqUKloak
  192. # vZ4argRCg7i1gJsiOCC1JeVk7Pf0v35jWSUPei45V3aicaoGig+JFrphpxHLmtgO
  193. # R5qAxdDNp9DvfYPw4TtxCd9ddJgiCGHasFAeb73x4QDf5zEHpJM692VHeOj4qEir
  194. # 995yfmFrb3epgcunCaw5u+zGy9iCtHLNHfS4hQEegPsbiSpUObJb2sgNVZl6h3M7
  195. # COaYLeqN4DMuEin1wC9UJyH3yKxO2ii4sanblrKnQqLJzxlBTeCG+SqaoxFmMNO7
  196. # dDJL32N79ZmKLxvHIa9Zta7cRDyXUHHXodLFVeNp3lfB0d4wwP3M5k37Db9dT+md
  197. # Hhk4L7zPWAUu7w2gUDXa7wknHNWzfjUeCLraNtvTX4/edIhJEjCCBPEwggPZoAMC
  198. # AQICEzMAAADjQzOasDnF+NcAAAAAAOMwDQYJKoZIhvcNAQELBQAwfDELMAkGA1UE
  199. # BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc
  200. # BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0
  201. # IFRpbWUtU3RhbXAgUENBIDIwMTAwHhcNMTgwODIzMjAyNzA4WhcNMTkxMTIzMjAy
  202. # NzA4WjCByjELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV
  203. # BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjElMCMG
  204. # A1UECxMcTWljcm9zb2Z0IEFtZXJpY2EgT3BlcmF0aW9uczEmMCQGA1UECxMdVGhh
  205. # bGVzIFRTUyBFU046RjZGRi0yREE3LUJCNzUxJTAjBgNVBAMTHE1pY3Jvc29mdCBU
  206. # aW1lLVN0YW1wIFNlcnZpY2UwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
  207. # AQCMVKN7mywnXLpudmjHHv3u8hnBJNGs7/VSXzymapRuYaj4XI/jW/PIAqW4FooI
  208. # KMJsQq491pX4JDRylu+G296QuKba9VXgVqy1piGpzy6rYwRGj772+bcJm6Z1YzKC
  209. # PCOXmLB5ZmcmF6sivhBuYmOI1WEqy7DzI2SQH0Bqbhi5b1qMvUqeZgv+O8oaKkR6
  210. # GzWbvysxxiRmceDWiOeUZb0zv3w1KVl8L6EtP+1wql/LDsPi6fCSB2Zf1oJ/aFVo
  211. # jhAofMjw4CdLmVko1v/G5yxaNJvimtfTkzFyl7L27GRALKqf5QzNPg85d+ghfORY
  212. # bkBZ+NtZpPcF98tplZRAGnOrAgMBAAGjggEbMIIBFzAdBgNVHQ4EFgQUIJsKyTkL
  213. # Pl29jzBkOFdmEXbCEtIwHwYDVR0jBBgwFoAU1WM6XIoxkPNDe3xGG8UzaFqFbVUw
  214. # VgYDVR0fBE8wTTBLoEmgR4ZFaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9j
  215. # cmwvcHJvZHVjdHMvTWljVGltU3RhUENBXzIwMTAtMDctMDEuY3JsMFoGCCsGAQUF
  216. # BwEBBE4wTDBKBggrBgEFBQcwAoY+aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3Br
  217. # aS9jZXJ0cy9NaWNUaW1TdGFQQ0FfMjAxMC0wNy0wMS5jcnQwDAYDVR0TAQH/BAIw
  218. # ADATBgNVHSUEDDAKBggrBgEFBQcDCDANBgkqhkiG9w0BAQsFAAOCAQEATpFDPPA5
  219. # 66vP+E519ww+Wrk2LqlGZy05fJ59ulfLqxk++txnOLLh4EH/Fzcnuku5zx0L3yc2
  220. # Z8/2CHKObGJnnS8axKq5oUbqWFhbL+pigRtsXbOH8M4C5U/LhZ0gq/oib/UFlxzi
  221. # +X6qiZ9/U2DmsZXEd+prT53YM/BNlyDyDiscZ7tGXn8KCBDHY5vJLK6P+D3bF4es
  222. # KlmKPduH4+g0mb+UKUdhCThgCx8qFEhPUz9IxcfuIpSmmkrNhNaPQDtGZjgjiOI0
  223. # 9mv5jLmlqJgoXhIhjlcZsjfSSV+iEsaBK9aNwWz2c8QMlyrEIyb+McNMU9OqEJv1
  224. # JEUqR4wB51JoYKGCA4wwggJ0AgEBMIH6oYHQpIHNMIHKMQswCQYDVQQGEwJVUzET
  225. # MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMV
  226. # TWljcm9zb2Z0IENvcnBvcmF0aW9uMSUwIwYDVQQLExxNaWNyb3NvZnQgQW1lcmlj
  227. # YSBPcGVyYXRpb25zMSYwJAYDVQQLEx1UaGFsZXMgVFNTIEVTTjpGNkZGLTJEQTct
  228. # QkI3NTElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaIlCgEB
  229. # MAkGBSsOAwIaBQADFQDJNCPnAVzvieV+y9SvHPpIV2ri+6CBwTCBvqSBuzCBuDEL
  230. # MAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v
  231. # bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEMMAoGA1UECxMDQU9D
  232. # MScwJQYDVQQLEx5uQ2lwaGVyIE5UUyBFU046MjY2NS00QzNGLUM1REUxKzApBgNV
  233. # BAMTIk1pY3Jvc29mdCBUaW1lIFNvdXJjZSBNYXN0ZXIgQ2xvY2swDQYJKoZIhvcN
  234. # AQEFBQACBQDfOXhXMCIYDzIwMTgwOTA0MjEzMjA3WhgPMjAxODA5MDUyMTMyMDda
  235. # MHQwOgYKKwYBBAGEWQoEATEsMCowCgIFAN85eFcCAQAwBwIBAAICAJgwBwIBAAIC
  236. # GNswCgIFAN86ydcCAQAwNgYKKwYBBAGEWQoEAjEoMCYwDAYKKwYBBAGEWQoDAaAK
  237. # MAgCAQACAxbjYKEKMAgCAQACAwehIDANBgkqhkiG9w0BAQUFAAOCAQEAKyzWbRkG
  238. # 3V2g3er6lIw4LXl6IhiifGZnFkfGs7+YP41jHE/FKVrfRhg2GPgUhLkZnJhkvDX+
  239. # 5yl1/G4oB+6I1Fsvn/+BjMG3zk+fYnQ6JybRGBBuSl1Hd4P7Urd6ZITQw8dHDuuz
  240. # SPxJb5ZpRx5Kmg/ZN1Mo7OFuIyq8Vxwxrd8c0mxT1McjraEGI3cj4a6wiQZBAfVn
  241. # 5VDfhQMTjAjeRk59sbDhM8Gfl8zbV1Y+g5bkHNHj9vX1jNSo7POFMmWcmKlXkFjX
  242. # jaXVxCo/Wp4BqVpXdT9I1yn0ojomdeJB64C5CGfgB2dAuKcOQq/L84fDyYC72+y4
  243. # JuJTreQ4Rqss5DGCAvUwggLxAgEBMIGTMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQI
  244. # EwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv
  245. # ZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBD
  246. # QSAyMDEwAhMzAAAA40MzmrA5xfjXAAAAAADjMA0GCWCGSAFlAwQCAQUAoIIBMjAa
  247. # BgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwLwYJKoZIhvcNAQkEMSIEIFYGRA4J
  248. # 9eJ3jrSboY9eylE1mUtSD/y5AP+In52yBONzMIHiBgsqhkiG9w0BCRACDDGB0jCB
  249. # zzCBzDCBsQQUyTQj5wFc74nlfsvUrxz6SFdq4vswgZgwgYCkfjB8MQswCQYDVQQG
  250. # EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG
  251. # A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQg
  252. # VGltZS1TdGFtcCBQQ0EgMjAxMAITMwAAAONDM5qwOcX41wAAAAAA4zAWBBQEBbRJ
  253. # TGs2o+sGfeBJUfhgsOiTqjANBgkqhkiG9w0BAQsFAASCAQBoJnCwtghdUuY/4Nbf
  254. # IRn+fl7j2nKNj4+N9ib9R7j7xMI+orExw1S1KTabvU1fZ1kZML0m7OeJZrIBGTU7
  255. # K0iZUfDnFO0zvmVx8a89qYjlA2hM/3mdVQSfOn7sKBW/iNHBzaX6zTBzKiLgUCiX
  256. # MONdgtwVAtcV2VadL1PbrpJKngQnNxe5nOc63xnlYQ1EN6h8GLhbh7G4e3jiPhSV
  257. # BYrv5g5s2FaxepzyeFxxbPwakGryAhIMpiLdXRnQEtFFiv9pgJSkt73x7gPw4vM6
  258. # lLjkpJz5voZBYg/S4YI4akUNaLJ0K9CCHrlhFwVJakVgSSXbZ+VnW2pLZXQZrACw
  259. # a0wr
  260. # SIG # End signature block