diff --git a/.gitignore b/.gitignore
index fb8a287881..fab6d5d7bd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,3 +13,4 @@ vscps-preview.zip
 npm-debug.log
 .vscode-test/
 *.DS_Store
+test-results.xml
diff --git a/.poshchan/settings.json b/.poshchan/settings.json
new file mode 100644
index 0000000000..6e080d35d0
--- /dev/null
+++ b/.poshchan/settings.json
@@ -0,0 +1,41 @@
+{
+    "version": "0.1",
+    "azdevops": {
+        "build_targets": {
+            "ci": "vscode-powershell-ci"
+        },
+        "authorized_users": [
+            "adityapatwardhan",
+            "anmenaga",
+            "daxian-dbw",
+            "JamesWTruher",
+            "PaulHigin",
+            "rjmholt",
+            "rkeithhill",
+            "SeeminglyScience",
+            "SteveL-MSFT",
+            "TravisEz13",
+            "TylerLeonhardt"
+        ]
+    },
+    "failures": {
+        "authorized_users": [
+            "adityapatwardhan",
+            "anmenaga",
+            "bergmeister",
+            "daxian-dbw",
+            "glennsarti",
+            "JamesWTruher",
+            "PaulHigin",
+            "rjmholt",
+            "rkeithhill",
+            "SeeminglyScience",
+            "SteveL-MSFT",
+            "TravisEz13",
+            "TylerLeonhardt"
+        ]
+    },
+    "reminders": {
+        "authorized_users": "*"
+    }
+}
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index a8284f840f..0000000000
--- a/.travis.yml
+++ /dev/null
@@ -1,26 +0,0 @@
-language: cpp
-
-git:
-  depth: 1000
-
-os:
-  - linux
-  - osx
-sudo: required
-dist: trusty
-osx_image: xcode8.3
-
-before_install:
-  - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
-      nvm install v6.0.0;
-      sudo apt-get install libunwind8;
-    fi
-install:
-  - git clone https://github.com/PowerShell/PowerShellEditorServices.git ../PowerShellEditorServices
-  - pushd build
-  - bash <(curl -s https://raw.githubusercontent.com/PowerShell/PowerShell/master/tools/install-powershell.sh)
-  - popd
-
-script:
-  - ulimit -n 4096
-  - pwsh -File build/travis.ps1
diff --git a/.vsts-ci/azure-pipelines-ci.yml b/.vsts-ci/azure-pipelines-ci.yml
new file mode 100644
index 0000000000..7fba9ada74
--- /dev/null
+++ b/.vsts-ci/azure-pipelines-ci.yml
@@ -0,0 +1,52 @@
+name: PR-$(System.PullRequest.PullRequestNumber)-$(Date:yyyyMMdd)$(Rev:.rr)
+
+variables:
+  # Don't download unneeded packages
+  - name: DOTNET_SKIP_FIRST_TIME_EXPERIENCE
+    value: 'true'
+  # Improve performance by not sending telemetry
+  - name: DOTNET_CLI_TELEMETRY_OPTOUT
+    value: 'true'
+
+trigger:
+  batch: true
+  branches:
+    include:
+      - master
+      - legacy/1.x
+  paths:
+    exclude:
+      - /.dependabot/*
+      - /.poshchan/*
+      - /.github/**/*
+      - /.vscode/**/*
+      - /.vsts-ci/misc-analysis.yml
+      - /tools/**/*
+      - .editorconfig
+      - .gitattributes
+      - .gitignore
+      - /docs/**/*
+      - /CHANGELOG.md
+      - /CONTRIBUTING.md
+      - /README.md
+      - /LICENSE
+      - /CODE_OF_CONDUCT.md
+
+jobs:
+- job: Windows
+  pool:
+    vmImage: 'VS2017-Win2016'
+  steps:
+  - template: templates/ci-general.yml
+
+- job: macOS
+  pool:
+    vmImage: 'macOS-10.13'
+  steps:
+  - template: templates/ci-general.yml
+
+- job: Linux
+  pool:
+    vmImage: 'Ubuntu-16.04'
+  steps:
+  - template: templates/ci-general.yml
diff --git a/.vsts-ci/azure-pipelines-release.yml b/.vsts-ci/azure-pipelines-release.yml
new file mode 100644
index 0000000000..31e1b812ef
--- /dev/null
+++ b/.vsts-ci/azure-pipelines-release.yml
@@ -0,0 +1,43 @@
+name: PR-$(System.PullRequest.PullRequestNumber)-$(Date:yyyyMMdd)$(Rev:.rr)
+
+variables:
+  # Don't download unneeded packages
+  - name: DOTNET_SKIP_FIRST_TIME_EXPERIENCE
+    value: 'true'
+  # Improve performance by not sending telemetry
+  - name: DOTNET_CLI_TELEMETRY_OPTOUT
+    value: 'true'
+
+trigger:
+  batch: true
+  branches:
+    include:
+      - master
+      - legacy/1.x
+  paths:
+    exclude:
+      - /.dependabot/*
+      - /.poshchan/*
+      - /.github/**/*
+      - /.vscode/**/*
+      - /.vsts-ci/misc-analysis.yml
+      - /tools/**/*
+      - .editorconfig
+      - .gitattributes
+      - .gitignore
+      - /docs/**/*
+      - /CHANGELOG.md
+      - /CONTRIBUTING.md
+      - /README.md
+      - /LICENSE
+      - /CODE_OF_CONDUCT.md
+
+jobs:
+
+- job: 'ReleaseBuild'
+  displayName: 'Build release'
+  pool:
+    name: 'Package ES CodeHub Lab E'
+    demands: DotNetFramework
+  steps:
+  - template: templates/release-general.yml
diff --git a/.vsts-ci/templates/ci-general.yml b/.vsts-ci/templates/ci-general.yml
new file mode 100644
index 0000000000..d37ef417c5
--- /dev/null
+++ b/.vsts-ci/templates/ci-general.yml
@@ -0,0 +1,31 @@
+steps:
+  # Setup
+  - pwsh: Write-Host "##vso[build.updatebuildnumber]$env:BUILD_SOURCEBRANCHNAME-$env:BUILD_SOURCEVERSION-$((get-date).ToString("yyyyMMddhhmmss"))"
+    displayName: Set Build Name for Non-PR
+    condition: ne(variables['Build.Reason'], 'PullRequest')
+  - pwsh: |
+      git clone https://github.com/PowerShell/PowerShellEditorServices.git ../PowerShellEditorServices
+      Install-Module InvokeBuild -Scope CurrentUser -Force
+      Install-Module PlatyPS -Scope CurrentUser -Force
+  # Build
+  - pwsh: Invoke-Build
+  - task: PublishTestResults@2
+    inputs:
+      testRunner: JUnit
+      testResultsFiles: '**/test-results.xml'
+    condition: succeededOrFailed()
+  - task: PublishBuildArtifacts@1
+    inputs:
+      ArtifactName: vscode-powershell
+      PathtoPublish: '$(Build.ArtifactStagingDirectory)'
+  # Rich Navigation
+  - task: RichCodeNavIndexer@0
+    # Note, for now, this is Windows only.
+    condition: and(succeededOrFailed(), eq(variables['Agent.OS'], 'Windows_NT'))
+    continueOnError: true
+    inputs:
+      serviceConnection: 'rich-nav'
+      nugetServiceConnection: 'rich-nav-nuget'
+      githubServiceConnection: 'PowerShell'
+      languages: 'typescript,csharp'
+      serviceEndpoint: 'https://prod.richnav.vsengsaas.visualstudio.com'
diff --git a/.vsts-ci/templates/release-general.yml b/.vsts-ci/templates/release-general.yml
new file mode 100644
index 0000000000..cc4b802a24
--- /dev/null
+++ b/.vsts-ci/templates/release-general.yml
@@ -0,0 +1,128 @@
+steps:
+- pwsh: Write-Host "##vso[build.updatebuildnumber]$env:BUILD_SOURCEBRANCHNAME-$env:BUILD_SOURCEVERSION-$((get-date).ToString("yyyyMMddhhmmss"))"
+  displayName: Set Build Name for Non-PR
+  condition: ne(variables['Build.Reason'], 'PullRequest')
+
+- pwsh: |
+    Get-ChildItem -Path env:
+  displayName: Capture environment
+  condition: succeededOrFailed()
+
+- task: PkgESSetupBuild@10
+  displayName: 'Package ES - Setup Build'
+  inputs:
+    productName: vscode-powershell
+
+- task: PowerShell@2
+  displayName: 'Set environment variables for VSTS (Phase 1)'
+  inputs:
+    targetType: filePath
+    filePath: ./tools/releaseBuild/setVstsVariables.ps1
+
+- task: PowerShell@2
+  displayName: 'Find PowerShellEditorServices build'
+  env:
+    SYSTEM_ACCESSTOKEN: $(System.AccessToken)
+  inputs:
+    targetType: filePath
+    filePath: ./tools/releaseBuild/findPsesBuild.ps1
+
+- task: DownloadBuildArtifacts@0
+  displayName: 'Download Build Artifacts from PowerShell Editor Services'
+  inputs:
+    buildType: specific
+    project: '8e2735c1-3674-408a-bcab-87f089ea29d5'
+    pipeline: 1056
+    buildVersionToDownload: specific
+    buildId: '$(PSES_BUILDID)'
+    downloadType: single
+    artifactName: 'PowerShellEditorServices'
+    downloadPath: '$(Build.SourcesDirectory)'
+
+- pwsh: |
+    Install-Module InvokeBuild -Force
+    Invoke-Build Release
+
+- task: PublishTestResults@2
+  inputs:
+    testRunner: JUnit
+    testResultsFiles: '**/test-results.xml'
+  condition: succeededOrFailed()
+
+- task: PkgESCodeSign@10
+  displayName: 'CodeSign tools/releaseBuild/signing.xml'
+  env:
+    SYSTEM_ACCESSTOKEN: $(System.AccessToken)
+  inputs:
+    signConfigXml: tools/releaseBuild/signing.xml
+    inPathRoot: '$(Build.ArtifactStagingDirectory)'
+    outPathRoot: '$(Build.ArtifactStagingDirectory)\Signed'
+
+- task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0
+  displayName: 'Component Detection'
+
+- task: AntiMalware@3
+  inputs:
+    InputType: 'Basic'
+    ScanType: 'CustomScan'
+    FileDirPath: '$(Build.ArtifactStagingDirectory)'
+    EnableServices: false
+    SupportLogOnError: false
+    TreatSignatureUpdateFailureAs: 'Warning'
+    SignatureFreshness: 'UpToDate'
+    TreatStaleSignatureAs: 'Error'
+
+- task: PoliCheck@1
+  condition: succeededOrFailed()
+  inputs:
+    targetType: F
+    optionsFC: 0
+    optionsXS: 0
+    optionsPE: '1|2|3|4'
+    optionsHMENABLE: 0
+    optionsFTPATH: '$(Build.SourcesDirectory)\tools\terms\FileTypeSet.xml'
+    # toolVersion: 5.8.2.1
+
+- pwsh: |
+    Get-ChildItem -Exclude node_modules | Get-ChildItem -Recurse | ForEach-Object FullName > "$env:BUILD_SOURCESDIRECTORY/credscan.tsv"
+  displayName: Create credscan.tsv as the list of files to scan
+
+- task: CredScan@2
+  condition: succeededOrFailed()
+  inputs:
+    debugMode: false
+    scanFolder: '$(Build.SourcesDirectory)/credscan.tsv'
+
+# Publish results as artifacts
+- task: PublishSecurityAnalysisLogs@3
+  condition: succeededOrFailed()
+  inputs:
+    ArtifactName: 'CodeAnalysisLogs'
+    ArtifactType: 'Container'
+
+# Publish to TSA server
+- task: TSAUpload@1
+  condition: succeededOrFailed()
+  continueOnError: true
+  inputs:
+    tsaVersion: 'TsaV2'
+    codebase: 'Existing'
+    tsaEnvironment: 'PROD'
+    codeBaseName: 'PowerShell_PowerShellEditorServices_20190917'
+    uploadAPIScan: false
+    uploadBinSkim: false
+    uploadCredScan: true
+    uploadFortifySCA: false
+    uploadFxCop: false
+    uploadModernCop: false
+    uploadPoliCheck: true
+    uploadPREfast: false
+    uploadRoslyn: false
+    uploadTSLint: false
+    uploadAsync: true
+
+- task: PowerShell@1
+  displayName: 'Upload artifacts'
+  inputs:
+    scriptType: inlineScript
+    inlineScript: 'Write-Host "##vso[artifact.upload containerfolder=vscode-powershell;artifactname=vscode-powershell]$(System.ArtifactsDirectory)\Signed"'
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 84580c0b33..5e34252f81 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,282 @@
 # vscode-powershell Release History
 
+## v2020.1.0
+### Wednesday, January 15, 2020
+#### [PowerShellEditorServices](https://github.com/PowerShell/PowerShellEditorServices)
+
+- ๐Ÿ› ๐Ÿ‘ฎโ€ [vscode-PowerShell #2375](https://github.com/PowerShell/PowerShellEditorServices/pull/1142) -
+  Fix wiring of `WhitespaceInsideBrace` and `WhitespaceAroundPipe`. (Thanks @bergmeister!)
+
+## v2019.12.0
+### Thursday, December 12, 2019
+#### [PowerShellEditorServices](https://github.com/PowerShell/PowerShellEditorServices)
+
+- ๐Ÿ› ๐Ÿ‘ฎโ€ [PowerShellEditorServices #1102](https://github.com/PowerShell/PowerShellEditorServices/pull/1102) -
+  Add `PSAvoidAssignmentToAutomaticVariable` to the default set of PSSA rules. (Thanks @bergmeister!)
+- ๐Ÿ› ๐Ÿ‘ฎโ€ [vscode-PowerShell #2214](https://github.com/PowerShell/PowerShellEditorServices/pull/1050) -
+  Fix `PipelineIndentationStyle` configuration issue. (Thanks @bergmeister!)
+
+## v2019.11.0
+### Friday, November 1, 2019
+#### [vscode-PowerShell](https://github.com/PowerShell/vscode-PowerShell)
+
+- ๐Ÿ› [vscode-PowerShell #2252](https://github.com/PowerShell/vscode-PowerShell/pull/2252) -
+  Fix bug finding Windows PowerShell when PowerShell 6+ not installed.
+- ๐Ÿ” [vscode-powershell #2144](https://github.com/PowerShell/vscode-PowerShell/pull/2223) -
+   Fix debugging restart capability by ensuring the session file is not deleted.
+- ๐Ÿ“บ [vscode-PowerShell #2224](https://github.com/PowerShell/vscode-PowerShell/pull/2224) -
+  Provide Run Selection button in Editor Title Menu. (Thanks @jpogran!)
+- ๐Ÿ“บ [vscode-PowerShell #2225](https://github.com/PowerShell/vscode-PowerShell/pull/2225) -
+  Surface Invoke Registered Editor Command. (Thanks @jpogran!)
+
+#### [PowerShellEditorServices](https://github.com/PowerShell/PowerShellEditorServices)
+
+- ๐Ÿ“Ÿ [PowerShellEditorServices #1077](https://github.com/PowerShell/PowerShellEditorServices/pull/1077) -
+  Support new console color configuration in PowerShell 7.
+- ๐Ÿ› [vscode-powershell #2116](https://github.com/PowerShell/PowerShellEditorServices/pull/1044) -
+  Fix UNC intellisense backslash.
+- ๐Ÿ› [vscode-powershell #2214](https://github.com/PowerShell/PowerShellEditorServices/pull/1050) -
+  Fix issue where PipelineIndentationStyle setting is ignored. (Thanks @bergmeister!)
+- โš™๏ธ [PowerShellEditorServices #1052](https://github.com/PowerShell/PowerShellEditorServices/pull/1052) -
+  Update minimum PSSA version to 1.18.3. (Thanks @bergmeister!)
+
+## v2019.9.0
+### Monday, September 23, 2019
+#### [vscode-PowerShell](https://github.com/PowerShell/vscode-PowerShell)
+
+- ๐Ÿ› [vscode-powershell #2141](https://github.com/PowerShell/vscode-powershell/pull/2141) -
+  Null check on activeTerminal to workaround vscode behavior.
+- โœจ [vscode-powershell #2105](https://github.com/PowerShell/vscode-powershell/pull/2105) -
+  Prompt to update PowerShell version.
+- ๐Ÿ”Ž [vscode-powershell #2165](https://github.com/PowerShell/vscode-powershell/pull/2165) -
+  Add powershell.codeFormatting.autoCorrectAliases setting to add support for optionally correcting aliases as well (added in PSSA 1.18.2). Disabled by default.. (Thanks @bergmeister!)
+- โœจ [vscode-powershell #2160](https://github.com/PowerShell/vscode-powershell/pull/2160) -
+  Added functionality to install the User variant of Stable Edition. (Thanks @Lothindir!)
+- โœจ [vscode-powershell #2156](https://github.com/PowerShell/vscode-powershell) -
+  Default to PowerShell Core on Windows if it's installed. (Thanks @SydneyhSmith!)
+- โœจ [vscode-powershell #2084](https://github.com/PowerShell/vscode-powershell/pull/2084) -
+  Implement #1611 - provide dynamic debug config. (Thanks @rkeithhill!)
+- โœจ [vscode-powershell #2024](https://github.com/PowerShell/vscode-powershell/pull/2039) -
+  Add machine scope per VS Code team request.
+- โœจ [vscode-powershell #2081](https://github.com/PowerShell/vscode-powershell/pull/2081) -
+  Add param-block snippet. (Thanks @AspenForester!)
+- โœจ [vscode-powershell #1974](https://github.com/PowerShell/vscode-powershell/pull/1974) -
+  Add #Requires snippets. (Thanks @travis-c-lagrone!)
+- ๐Ÿ‘ท [vscode-powershell #2065](https://github.com/PowerShell/vscode-powershell/pull/2065) -
+  Update '.vscode/settings.json' to identify snippet files as 'JSON with Comments'. (Thanks @travis-c-lagrone!)
+- ๐Ÿ“” [vscode-powershell #2065](https://github.com/PowerShell/vscode-powershell) -
+  Docs updates. (Thanks @SydneyhSmith!)
+- ๐Ÿ‘ท [vscode-powershell #2038](https://github.com/PowerShell/vscode-powershell/pull/2038) -
+  Add ADS insiders gallery file to update script.
+- ๐Ÿ”Ž [vscode-powershell #2037](https://github.com/PowerShell/vscode-powershell/pull/2037) -
+  Update PSScriptAnalyzer docs Url to point to master branch because master is now the default branch. (Thanks @bergmeister!)
+- ๐Ÿ› [vscode-powershell #2035](https://github.com/PowerShell/vscode-powershell/pull/2035) -
+  #1019: Get format settings from document editor instead of global. (Thanks @tillig!)
+- ๐Ÿ‘ท [vscode-powershell #2025](https://github.com/PowerShell/vscode-powershell/pull/2025) -
+  Fix node version detect logic to handle node v10. (Thanks @rkeithhill!)
+- โœจ [vscode-powershell #1946](https://github.com/PowerShell/vscode-powershell/pull/1946) -
+  Add ArgumentCompleter snippets. (Thanks @travis-c-lagrone!)
+- ๐Ÿงน [vscode-powershell #2015](https://github.com/PowerShell/vscode-powershell/pull/2015) -
+  Fix node types version.
+
+## v2019.5.0
+### Friday, May 24, 2019
+#### [vscode-PowerShell](https://github.com/PowerShell/vscode-PowerShell)
+
+- โœจ [vscode-PowerShell #1973](https://github.com/PowerShell/vscode-PowerShell/pull/1973) -
+  Allow passing runspace name.
+- โœจ [vscode-PowerShell #1959](https://github.com/PowerShell/vscode-PowerShell/pull/1959) -
+  Add rich nav.
+- โœจ [vscode-PowerShell #1924](https://github.com/PowerShell/vscode-PowerShell/pull/1924) -
+  Add telemetry for PowerShell Version.
+- ๐Ÿ› [vscode-PowerShell #1940](https://github.com/PowerShell/vscode-PowerShell/pull/1940) -
+  Fix change session by moving to async/await promise.
+- ๐Ÿ› [vscode-PowerShell #1931](https://github.com/PowerShell/vscode-PowerShell/pull/1931) -
+  Fix upload bug report.
+- โœจ [vscode-PowerShell #1938](https://github.com/PowerShell/vscode-PowerShell/pull/1938) -
+  Move to date-based versions.
+- ๐Ÿ› [vscode-PowerShell #1923](https://github.com/PowerShell/vscode-PowerShell/pull/1923) -
+  Fix CustomViews by switching to WebViews.
+- ๐Ÿ› [vscode-PowerShell #1922](https://github.com/PowerShell/vscode-PowerShell/pull/1922) -
+  Fix small typo in Function-Inline description. (Thanks @V-ed!)
+- ๐Ÿ’ป [vscode-PowerShell #1873](https://github.com/PowerShell/vscode-PowerShell/pull/1873) -
+  Switch to Azure DevOps for CI.
+
+#### [PowerShellEditorServices](https://github.com/PowerShell/PowerShellEditorServices)
+
+- โœจ [PowerShellEditorServices #957](https://github.com/PowerShell/PowerShellEditorServices/pull/957) -
+  Allow passing RunspaceName.
+- ๐Ÿ› [PowerShellEditorServices #956](https://github.com/PowerShell/PowerShellEditorServices/pull/956) -
+  Add check for workspace path.
+- ๐Ÿ› [PowerShellEditorServices #947](https://github.com/PowerShell/PowerShellEditorServices/pull/947) -
+  Fix silent failure by using Id for dictionary since multiple pages could have the same title.
+- ๐Ÿ’ป [PowerShellEditorServices #923](https://github.com/PowerShell/PowerShellEditorServices/pull/923) -
+  Moved to Azure DevOps for CI.
+
+## v1.12.1
+### Wednesday, April 10, 2019
+
+#### [vscode-powershell](https://github.com/powershell/vscode-powershell)
+
+- [vscode-PowerShell #1865](https://github.com/PowerShell/vscode-powershell/pull/1867) -
+  Change casing of `powershell.codeformatting` settings for consistency:
+    - `powershell.codeformatting.WhitespaceInsideBrace` is now `powershell.codeformatting.whitespaceInsideBrace`
+    - `powershell.codeformatting.WhitespaceAroundPipe` is now `powershell.codeformatting.whitespaceAroundPipe`
+- [vscode-PowerShell #1852](https://github.com/PowerShell/vscode-PowerShell/pull/1852) -
+  Turn `powershell.codeformatting.useCorrectCasing` setting off by default until PSSA issues are fixed (Thanks @bergmeister!)
+- [vscode-PowerShell #1837](https://github.com/PowerShell/vscode-PowerShell/pull/1837) -
+  Do not use -EncodedCommand on Windows
+
+#### [PowerShellEditorServices](https://github.com/powershell/PowerShellEditorServices)
+
+- [PowerShellEditorServices #906](https://github.com/PowerShell/PowerShellEditorServices/pull/906) -
+  Fix New-EditorFile with no folder or no files open
+- [PowerShellEditorServices #908](https://github.com/PowerShell/PowerShellEditorServices/pull/908) -
+  Fix crash in CodeLens with UNC paths on Windows (Thanks @rkeithhill!)
+- [PowerShellEditorServices #902](https://github.com/PowerShell/PowerShellEditorServices/pull/902) -
+  Improve path auto-completion (Thanks @rkeithhill!)
+- [PowerShellEditorServices #910](https://github.com/PowerShell/PowerShellEditorServices/pull/910) -
+  Fix UseCorrectCasing to be actually configurable via `powershell.codeFormatting.useCorrectCasing` (Thanks @bergmeister!)
+
+## v1.12.0
+### Friday, March 29, 2019
+
+#### [vscode-powershell](https://github.com/powershell/vscode-powershell)
+
+- [vscode-PowerShell #1736](https://github.com/PowerShell/vscode-PowerShell/pull/1736) -
+  Enable attach to process on Linux and macOS
+- [vscode-PowerShell #1729](https://github.com/PowerShell/vscode-PowerShell/pull/1729) -
+  Handle Pester Describe block strings with single quotes inside it (Thanks @bergmeister!)
+- [vscode-PowerShell #1743](https://github.com/PowerShell/vscode-PowerShell/pull/1743) -
+  Fix right-click help lookup not always working (Thanks @corbob!)
+- [vscode-PowerShell #1746](https://github.com/PowerShell/vscode-PowerShell/pull/1746) -
+  Add label property to debug config, change pkg name to lowercase (Thanks @rkeithhill!)
+- [vscode-PowerShell #1747](https://github.com/PowerShell/vscode-PowerShell/pull/1747) -
+  Modify `powerShellDefaultVersion` description to make clearer (Thanks @rkeithhill!)
+- [vscode-PowerShell #1755](https://github.com/PowerShell/vscode-PowerShell/pull/1755) -
+  Speed up Travis builds by skipping the .NET Core initialization  (Thanks @bergmeister!)
+- [vscode-PowerShell #1773](https://github.com/PowerShell/vscode-PowerShell/pull/1773) -
+  Change debugger type field back to `PowerShell` from `powershell` (Thanks @rkeithhill!)
+- [vscode-PowerShell #1757](https://github.com/PowerShell/vscode-PowerShell/pull/1757) -
+  Match Install-VSCode.ps1 script url with the one from master branch (Thanks @rafaltra!)
+- [vscode-PowerShell #1774](https://github.com/PowerShell/vscode-PowerShell/pull/1774) -
+  Switch to `EncodedCommand` for script execution
+- [vscode-PowerShell #1764](https://github.com/PowerShell/vscode-PowerShell/pull/1764) -
+  Added Pester, ShouldProcess and Calculated Property PS Snippets (Thanks @brettmillerb!)
+- [vscode-PowerShell #1776](https://github.com/PowerShell/vscode-PowerShell/pull/1776) -
+  Migrate Pester version detection into an InovkePester stub script (Thanks @rkeithhill!)
+- [vscode-PowerShell #1781](https://github.com/PowerShell/vscode-PowerShell/pull/1781) -
+  Fix initial launch config casing
+- [vscode-PowerShell #1775](https://github.com/PowerShell/vscode-PowerShell/pull/1775) -
+  Support `-CustomPipeName`, allowing configuration of custom namedpipes for LSP transport
+- [vscode-PowerShell #1787](https://github.com/PowerShell/vscode-PowerShell/pull/1787) -
+  Added SQL PowerShell Examples (Thanks @SQLvariant!)
+- [vscode-PowerShell #1782](https://github.com/PowerShell/vscode-PowerShell/pull/1782) -
+  Add Debug Runspace command (Thanks @adamdriscoll!)
+- [vscode-PowerShell #1800](https://github.com/PowerShell/vscode-PowerShell/pull/1800) -
+  Include current runspace and runspace ID 1 in the PSHostProcess picker dialog
+- [vscode-PowerShell #1687](https://github.com/PowerShell/vscode-PowerShell/pull/1687) -
+  Add new `powershell.useCorrectCasingsettings` for new rule in PSSA 1.18: PSUseCorrectCasing (Thanks @bergmeister!)
+- [vscode-PowerShell #1668](https://github.com/PowerShell/vscode-PowerShell/pull/1668) -
+  Add new `powershell.codeFormatting` settings for new options in PSSA 1.18: WhitespaceInsideBrace and WhitespaceAroundPipe (Thanks @bergmeister!)
+- [vscode-PowerShell #1669](https://github.com/PowerShell/vscode-PowerShell/pull/1669) -
+  Add new `powershell.codeFormatting` settings for new options in PSSA 1.18: PipelineIndentationStyle (Thanks @bergmeister!)
+- [vscode-PowerShell #1738](https://github.com/PowerShell/vscode-PowerShell/pull/1738) -
+  Set CommandExplorer exclusion filter to be empty array by default (Thanks @adilio!)
+- [vscode-PowerShell #1686](https://github.com/PowerShell/vscode-PowerShell/pull/1686) -
+  Add an exclusion filter to the Command Explorer (Thanks @corbob!)
+- [vscode-PowerShell #1816](https://github.com/PowerShell/vscode-PowerShell/pull/1816) -
+  Workaround PSSA #1187 by defaulting to NoIndentation
+
+#### [PowerShellEditorServices](https://github.com/powershell/PowerShellEditorServices)
+
+- [PowerShellEditorServices #895](https://github.com/PowerShell/PowerShellEditorServices/pull/895) -
+  Add warning to parameter validation set  (Thanks @Benny1007!)
+- [PowerShellEditorServices #896](https://github.com/PowerShell/PowerShellEditorServices/pull/896) -
+  Clean up and pop dead runspaces when using 'attach' debugging
+- [PowerShellEditorServices #888](https://github.com/PowerShell/PowerShellEditorServices/pull/888) -
+  Add new ParseError level to ScriptFileMarkerLevel and filter out PSSA parse errors
+- [PowerShellEditorServices #866](https://github.com/PowerShell/PowerShellEditorServices/pull/866) -
+  Catch NotSupportedException which can be thrown by FileStream constructor (Thanks @rkeithhill!)
+- [PowerShellEditorServices #868](https://github.com/PowerShell/PowerShellEditorServices/pull/868) -
+  Speed up Travis builds by skipping the .NET Core initialization (Thanks @bergmeister!)
+- [PowerShellEditorServices #869](https://github.com/PowerShell/PowerShellEditorServices/pull/869) -
+  Added `AsNewFile` switch to Out-CurrentFile (Thanks @dfinke!)
+- [PowerShellEditorServices #873](https://github.com/PowerShell/PowerShellEditorServices/pull/873) -
+  Return the start line number for Describe block (Thanks @rkeithhill!)
+- [PowerShellEditorServices #876](https://github.com/PowerShell/PowerShellEditorServices/pull/876) -
+  Temporarily disable deemphasized stack frames to fix VSCode issue 1750 (Thanks @rkeithhill!)
+- [PowerShellEditorServices #871](https://github.com/PowerShell/PowerShellEditorServices/pull/871) -
+  Support -CustomPipeName, allowing configuration of custom namedpipes for LSP transport
+- [PowerShellEditorServices #872](https://github.com/PowerShell/PowerShellEditorServices/pull/872) -
+  Fix unable to open files in problems/peek windows issue (Thanks @rkeithhill!)
+- [PowerShellEditorServices #875](https://github.com/PowerShell/PowerShellEditorServices/pull/875) -
+  Add attach to local runspace. (Thanks @adamdriscoll!)
+- [PowerShellEditorServices #881](https://github.com/PowerShell/PowerShellEditorServices/pull/881) -
+  Use `NamedPipeConnectionInfo` to connect to remote runspaces instead of Enter-PSHostProcess
+- [PowerShellEditorServices #845](https://github.com/PowerShell/PowerShellEditorServices/pull/845) -
+  Enable UseCorrectCasing as a default rule (Thanks @bergmeister!)
+- [PowerShellEditorServices #835](https://github.com/PowerShell/PowerShellEditorServices/pull/835) -
+  Map new `powershell.codeformatting` settings WhitespaceInsideBrace and WhitespaceAroundPipe to PSSA settings hashtable (Thanks @bergmeister!)
+- [PowerShellEditorServices #836](https://github.com/PowerShell/PowerShellEditorServices/pull/836) -
+  Add PipelineIndentationStyle configuration mapping (Thanks @bergmeister!)
+- [PowerShellEditorServices #887](https://github.com/PowerShell/PowerShellEditorServices/pull/887) -
+  Cherry pick PR 1750 merge commit to legacy/v1.x, has additional fixes (Thanks @rkeithhill!)
+- [PowerShellEditorServices #862](https://github.com/PowerShell/PowerShellEditorServices/pull/862) -
+  Handle arbitrary exceptions when recursing workspace
+
+## v1.11.0
+### Wednesday, January 23, 2019
+#### [vscode-powershell](https://github.com/powershell/vscode-powershell)
+
+- [vscode-PowerShell #1714](https://github.com/PowerShell/vscode-PowerShell/pull/1714) -
+  Do not run pester tests when user cancels questions using the x button (Thanks @bergmeister!)
+- [vscode-PowerShell #1701](https://github.com/PowerShell/vscode-PowerShell/pull/1701) -
+  Interpret null Describe TestName to mean value can't be eval'd (Thanks @rkeithhill!)
+- [vscode-PowerShell #1698](https://github.com/PowerShell/vscode-PowerShell/pull/1698) -
+  Add 'Run/Debug Pester tests' command and file tab menu (Thanks @bergmeister!)
+- [vscode-PowerShell #1697](https://github.com/PowerShell/vscode-PowerShell/pull/1697) -
+  Remove Region Block snippet (Thanks @fullenw1!)
+- [vscode-PowerShell #1690](https://github.com/PowerShell/vscode-PowerShell/pull/1690) -
+  Refresh CommandExplorer on visible
+- [vscode-PowerShell #1688](https://github.com/PowerShell/vscode-PowerShell/pull/1688) -
+  Fix spacing of package.json after running Invoke-Build to not end up with local changes (Thanks @bergmeister!)
+- [vscode-PowerShell #1638](https://github.com/PowerShell/vscode-PowerShell/pull/1638) -
+  Add icons and enable setting for Command Explorer (Thanks @corbob!)
+- [vscode-PowerShell #1679](https://github.com/PowerShell/vscode-PowerShell/pull/1679) -
+  Update broken links in README (Thanks @josh-!)
+- [vscode-PowerShell #1670](https://github.com/PowerShell/vscode-PowerShell/pull/1670) -
+  Update recommended NodeJS version to 8.x since 6.x will go out of support in April 2019 (Thanks @bergmeister!)
+
+#### [PowerShellEditorServices](https://github.com/powershell/PowerShellEditorServices)
+
+- [PowerShellEditorServices #851](https://github.com/PowerShell/PowerShellEditorServices/pull/851) -
+  Fix #827 Pester TestName w/expandable str returns nothing (Thanks @rkeithhill!)
+- [PowerShellEditorServices #842](https://github.com/PowerShell/PowerShellEditorServices/pull/842) -
+  Fix typos  (Thanks @alexandair!)
+- [PowerShellEditorServices #838](https://github.com/PowerShell/PowerShellEditorServices/pull/838) -
+  Fix NullRefEx bug when accessing scriptFile.ReferencedFiles (Thanks @rkeithhill!)
+- [PowerShellEditorServices #839](https://github.com/PowerShell/PowerShellEditorServices/pull/839) -
+  Fix FileNotFoundEx crash when Fold happens on untitled: scheme doc (Thanks @rkeithhill!)
+- [PowerShellEditorServices #843](https://github.com/PowerShell/PowerShellEditorServices/pull/843) -
+  Simplify the parameter descriptions and fix typos (Thanks @alexandair!)
+- [PowerShellEditorServices #844](https://github.com/PowerShell/PowerShellEditorServices/pull/844) -
+  Fix an empty verbose message when importing an editor command (Thanks @alexandair!)
+- [PowerShellEditorServices #828](https://github.com/PowerShell/PowerShellEditorServices/pull/828) -
+  Compile against net452 because net451 is not supported any more (Thanks @bergmeister!)
+- [PowerShellEditorServices #848](https://github.com/PowerShell/PowerShellEditorServices/pull/848) -
+  switch an instance of GetFile to TryGetFile to fix #1689
+- [PowerShellEditorServices #846](https://github.com/PowerShell/PowerShellEditorServices/pull/846) -
+  Workaround "attach to process" hang
+- [PowerShellEditorServices #829](https://github.com/PowerShell/PowerShellEditorServices/pull/829) -
+  Update various NuGet packages (Thanks @bergmeister!)
+- [PowerShellEditorServices #825](https://github.com/PowerShell/PowerShellEditorServices/pull/825) -
+  (GH-824)(GH-812) Improve code folding speed (Thanks @glennsarti!)
+- [PowerShellEditorServices #850](https://github.com/PowerShell/PowerShellEditorServices/pull/850) -
+  Fix VSCODE 1683 - HelpCommentReqHdlr crash on GetFile (Thanks @rkeithhill!)
+- [PowerShellEditorServices #837](https://github.com/PowerShell/PowerShellEditorServices/pull/837) -
+  (maint) Add traits for folding tests (Thanks @glennsarti!)
+
 ## v1.10.2
 ### Tuesday, December 18, 2018
 
@@ -1863,3 +2140,4 @@ Initial release with the following features:
 - Find References of cmdlets and variables
 - Document and workspace symbol discovery
 - Local script debugging and basic interactive console support
+
diff --git a/InvokePesterStub.ps1 b/InvokePesterStub.ps1
new file mode 100755
index 0000000000..8b6f204cce
--- /dev/null
+++ b/InvokePesterStub.ps1
@@ -0,0 +1,82 @@
+#!/usr/bin/env pwsh
+
+<#
+.SYNOPSIS
+    Stub around Invoke-Pester command used by VSCode PowerShell extension.
+.DESCRIPTION
+    The stub checks the version of Pester and if >= 4.6.0, invokes Pester
+    using the LineNumber parameter (if specified). Otherwise, it invokes
+    using the TestName parameter (if specified). If the All parameter
+    is specified, then all the tests are invoked in the specifed file.
+    Finally, if none of these three parameters are specified, all tests
+    are invoked and a warning is issued indicating what the user can do
+    to allow invocation of individual Describe blocks.
+.EXAMPLE
+    PS C:\> .\InvokePesterStub.ps1 ~\project\test\foo.tests.ps1 -LineNumber 14
+    Invokes a specific test by line number in the specified file.
+.EXAMPLE
+    PS C:\> .\InvokePesterStub.ps1 ~\project\test\foo.tests.ps1 -TestName 'Foo Tests'
+    Invokes a specific test by test name in the specified file.
+.EXAMPLE
+    PS C:\> .\InvokePesterStub.ps1 ~\project\test\foo.tests.ps1 -All
+    Invokes all tests in the specified file.
+.INPUTS
+    None
+.OUTPUTS
+    None
+#>
+param(
+    # Specifies the path to the test script.
+    [Parameter(Position=0, Mandatory)]
+    [ValidateNotNullOrEmpty()]
+    [string]
+    $ScriptPath,
+
+    # Specifies the name of the test taken from the Describe block's name.
+    [Parameter()]
+    [string]
+    $TestName,
+
+    # Specifies the starting line number of the DescribeBlock.  This feature requires
+    # Pester 4.6.0 or higher.
+    [Parameter()]
+    [ValidatePattern('\d*')]
+    [string]
+    $LineNumber,
+
+    # If specified, executes all the tests in the specified test script.
+    [Parameter()]
+    [switch]
+    $All
+)
+
+$pesterModule = Microsoft.PowerShell.Core\Get-Module Pester
+if (!$pesterModule) {
+    Write-Output "Importing Pester module..."
+    $pesterModule = Microsoft.PowerShell.Core\Import-Module Pester -ErrorAction Ignore -PassThru
+    if (!$pesterModule) {
+        # If we still don't have an imported Pester module, that is (most likely) because Pester is not installed.
+        Write-Warning "Failed to import the Pester module. You must install Pester to run or debug Pester tests."
+        Write-Warning "You can install Pester by executing: Install-Module Pester -Scope CurrentUser -Force"
+        return
+    }
+}
+
+if ($All) {
+    Pester\Invoke-Pester -Script $ScriptPath -PesterOption @{IncludeVSCodeMarker=$true}
+}
+elseif ($TestName) {
+    Pester\Invoke-Pester -Script $ScriptPath -PesterOption @{IncludeVSCodeMarker=$true} -TestName $TestName
+}
+elseif (($LineNumber -match '\d+') -and ($pesterModule.Version -ge '4.6.0')) {
+    Pester\Invoke-Pester -Script $ScriptPath -PesterOption (New-PesterOption -ScriptBlockFilter @{
+        IncludeVSCodeMarker=$true; Line=$LineNumber; Path=$ScriptPath})
+}
+else {
+    # We get here when the TestName expression is of type ExpandableStringExpressionAst.
+    # PSES will not attempt to "evaluate" the expression so it returns null for the TestName.
+    Write-Warning "The Describe block's TestName cannot be evaluated. EXECUTING ALL TESTS instead."
+    Write-Warning "To avoid this, install Pester >= 4.6.0 or remove any expressions in the TestName."
+
+    Pester\Invoke-Pester -Script $ScriptPath -PesterOption @{IncludeVSCodeMarker=$true}
+}
diff --git a/README.md b/README.md
index d26bf7e84f..f1fc64af73 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,10 @@
 # PowerShell Language Support for Visual Studio Code
 
 [![Codacy Badge](https://api.codacy.com/project/badge/Grade/df06b9909e7442cebc1132bda0b8c0e3)](https://app.codacy.com/app/TylerLeonhardt/vscode-powershell?utm_source=github.com&utm_medium=referral&utm_content=PowerShell/vscode-powershell&utm_campaign=Badge_Grade_Dashboard)
-[![Version](https://vsmarketplacebadge.apphb.com/version/ms-vscode.PowerShell.svg)](https://marketplace.visualstudio.com/items?itemName=ms-vscode.PowerShell) [![Installs](https://vsmarketplacebadge.apphb.com/installs-short/ms-vscode.PowerShell.svg)](https://marketplace.visualstudio.com/items?itemName=ms-vscode.PowerShell) [![windows build](https://img.shields.io/appveyor/ci/PowerShell/vscode-powershell/master.svg?label=windows+build)](https://ci.appveyor.com/project/PowerShell/vscode-powershell) [![linux/macos build](https://img.shields.io/travis/PowerShell/vscode-powershell/master.svg?label=linux/macos+build)](https://travis-ci.org/PowerShell/vscode-powershell) [![Join the chat at https://gitter.im/PowerShell/vscode-powershell](https://badges.gitter.im/PowerShell/vscode-powershell.svg)](https://gitter.im/PowerShell/vscode-powershell?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
+[![Build Status](https://powershell.visualstudio.com/vscode-powershell/_apis/build/status/PowerShell.vscode-powershell?branchName=master)](https://powershell.visualstudio.com/vscode-powershell/_build/latest?definitionId=51&branchName=master)
+[![Version](https://vsmarketplacebadge.apphb.com/version/ms-vscode.PowerShell.svg)](https://marketplace.visualstudio.com/items?itemName=ms-vscode.PowerShell)
+[![Installs](https://vsmarketplacebadge.apphb.com/installs-short/ms-vscode.PowerShell.svg)](https://marketplace.visualstudio.com/items?itemName=ms-vscode.PowerShell)
+[![Join the chat at https://gitter.im/PowerShell/vscode-powershell](https://badges.gitter.im/PowerShell/vscode-powershell.svg)](https://gitter.im/PowerShell/vscode-powershell?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
 
 This extension provides rich PowerShell language support for [Visual Studio Code](https://github.com/Microsoft/vscode).
 Now you can write and debug PowerShell scripts using the excellent IDE-like interface
diff --git a/appveyor.yml b/appveyor.yml
deleted file mode 100644
index 8b030e8e86..0000000000
--- a/appveyor.yml
+++ /dev/null
@@ -1,28 +0,0 @@
-version: '1.10.3-insiders-{build}'
-image: Visual Studio 2017
-clone_depth: 10
-skip_tags: true
-
-branches:
-  only:
-  - master
-  - 2.0.0
-
-environment:
-  DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true  # Don't download unneeded packages
-  DOTNET_CLI_TELEMETRY_OPTOUT: true        # Don't send telemetry
-
-install:
-  - git clone https://github.com/PowerShell/PowerShellEditorServices.git ../PowerShellEditorServices
-  - ps: Install-Product node '6.9.2'
-  - ps: |
-      Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force | Out-Null
-      Install-Module InvokeBuild -RequiredVersion 3.2.1 -Scope CurrentUser -Force | Out-Null
-      Install-Module platyPS -RequiredVersion 0.7.6 -Scope CurrentUser -Force | Out-Null
-  - powershell.exe -Command "Install-Module PowerShellGet -Force"
-
-build_script:
-  - powershell.exe -Command "Invoke-Build"
-
-# The build script takes care of the tests
-test: off
diff --git a/build.ps1 b/build.ps1
index 3f8a20d416..fdd5479f4b 100644
--- a/build.ps1
+++ b/build.ps1
@@ -45,12 +45,17 @@ function needsVSCode () {
 
 function needsNodeJS () {
     try {
-        $nodeJSVersion = (node -v)
-
+        $nodeJSVersion = node -v
     } catch {
         return $true
     }
-    return ($nodeJSVersion.Substring(1,1) -lt 6)
+
+    if ($nodeJSVersion -notmatch 'v(\d+\.\d+\.\d+)') {
+        return $true
+    }
+
+    $nodeVer = [System.Version]$matches[1]
+    return ($nodeVer.Major -lt 6)
 }
 
 function needsPowerShellGet () {
diff --git a/build/travis.ps1 b/build/travis.ps1
deleted file mode 100644
index 8aaac921f5..0000000000
--- a/build/travis.ps1
+++ /dev/null
@@ -1,7 +0,0 @@
-# Install InvokeBuild
-Install-Module InvokeBuild -Scope CurrentUser -Force
-Install-Module PlatyPS -Scope CurrentUser -Force
-
-# Build the code and perform tests
-Import-module InvokeBuild
-Invoke-Build
diff --git a/package-lock.json b/package-lock.json
index 104ea3078b..618f8750fa 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,147 +1,157 @@
 {
-  "name": "PowerShell",
-  "version": "1.10.3",
+  "name": "powershell",
+  "version": "2020.1.0",
   "lockfileVersion": 1,
   "requires": true,
   "dependencies": {
-    "@types/mocha": {
-      "version": "2.2.48",
-      "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.48.tgz",
-      "integrity": "sha512-nlK/iyETgafGli8Zh9zJVCTicvU3iajSkRwOh3Hhiva598CMqNJ4NcVCGMTGKpGpTYj/9R8RLzS9NAykSSCqGw==",
-      "dev": true
-    },
-    "@types/node": {
-      "version": "10.12.12",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.12.tgz",
-      "integrity": "sha512-Pr+6JRiKkfsFvmU/LK68oBRCQeEg36TyAbPhc2xpez24OOZZCuoIhWGTd39VZy6nGafSbxzGouFPTFD/rR1A0A==",
-      "dev": true
-    },
-    "ajv": {
-      "version": "6.6.1",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.1.tgz",
-      "integrity": "sha512-ZoJjft5B+EJBjUyu9C9Hc0OZyPZSSlOF+plzouTrg6UlA8f+e/n8NIgBFG/9tppJtpPWfthHakK7juJdNDODww==",
+    "@babel/code-frame": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz",
+      "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
       "dev": true,
       "requires": {
-        "fast-deep-equal": "^2.0.1",
-        "fast-json-stable-stringify": "^2.0.0",
-        "json-schema-traverse": "^0.4.1",
-        "uri-js": "^4.2.2"
+        "@babel/highlight": "^7.0.0"
       }
     },
-    "ansi-cyan": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz",
-      "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=",
+    "@babel/highlight": {
+      "version": "7.5.0",
+      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz",
+      "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==",
       "dev": true,
       "requires": {
-        "ansi-wrap": "0.1.0"
+        "chalk": "^2.0.0",
+        "esutils": "^2.0.2",
+        "js-tokens": "^4.0.0"
+      },
+      "dependencies": {
+        "js-tokens": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+          "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+          "dev": true
+        }
       }
     },
-    "ansi-red": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz",
-      "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=",
+    "@types/mocha": {
+      "version": "5.2.7",
+      "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+      "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==",
+      "dev": true
+    },
+    "@types/node": {
+      "version": "10.11.7",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-10.11.7.tgz",
+      "integrity": "sha512-yOxFfkN9xUFLyvWaeYj90mlqTJ41CsQzWKS3gXdOMOyPVacUsymejKxJ4/pMW7exouubuEeZLJawGgcNGYlTeg==",
+      "dev": true
+    },
+    "@types/node-fetch": {
+      "version": "2.5.4",
+      "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.4.tgz",
+      "integrity": "sha512-Oz6id++2qAOFuOlE1j0ouk1dzl3mmI1+qINPNBhi9nt/gVOz0G+13Ao6qjhdF0Ys+eOkhu6JnFmt38bR3H0POQ==",
       "dev": true,
       "requires": {
-        "ansi-wrap": "0.1.0"
+        "@types/node": "*"
       }
     },
-    "ansi-regex": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
-      "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+    "@types/rewire": {
+      "version": "2.5.28",
+      "resolved": "https://registry.npmjs.org/@types/rewire/-/rewire-2.5.28.tgz",
+      "integrity": "sha512-uD0j/AQOa5le7afuK+u+woi8jNKF1vf3DN0H7LCJhft/lNNibUr7VcAesdgtWfEKveZol3ZG1CJqwx2Bhrnl8w==",
       "dev": true
     },
-    "ansi-styles": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
-      "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+    "@types/semver": {
+      "version": "6.2.0",
+      "resolved": "https://registry.npmjs.org/@types/semver/-/semver-6.2.0.tgz",
+      "integrity": "sha512-1OzrNb4RuAzIT7wHSsgZRlMBlNsJl+do6UblR7JMW4oB7bbR+uBEYtUh7gEc/jM84GGilh68lSOokyM/zNUlBA==",
       "dev": true
     },
-    "ansi-wrap": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz",
-      "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=",
+    "acorn": {
+      "version": "5.7.3",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
+      "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
       "dev": true
     },
-    "append-buffer": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz",
-      "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=",
+    "acorn-jsx": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
+      "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
       "dev": true,
       "requires": {
-        "buffer-equal": "^1.0.0"
+        "acorn": "^3.0.4"
+      },
+      "dependencies": {
+        "acorn": {
+          "version": "3.3.0",
+          "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
+          "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
+          "dev": true
+        }
       }
     },
-    "argparse": {
-      "version": "1.0.10",
-      "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
-      "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+    "agent-base": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz",
+      "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==",
       "dev": true,
       "requires": {
-        "sprintf-js": "~1.0.2"
+        "es6-promisify": "^5.0.0"
       }
     },
-    "arr-diff": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz",
-      "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=",
+    "ajv": {
+      "version": "5.5.2",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
+      "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
       "dev": true,
       "requires": {
-        "arr-flatten": "^1.0.1",
-        "array-slice": "^0.2.3"
+        "co": "^4.6.0",
+        "fast-deep-equal": "^1.0.0",
+        "fast-json-stable-stringify": "^2.0.0",
+        "json-schema-traverse": "^0.3.0"
       }
     },
-    "arr-flatten": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
-      "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+    "ajv-keywords": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz",
+      "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=",
       "dev": true
     },
-    "arr-union": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz",
-      "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=",
+    "ansi-escapes": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
+      "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
       "dev": true
     },
-    "array-differ": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz",
-      "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=",
+    "ansi-regex": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+      "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
       "dev": true
     },
-    "array-slice": {
-      "version": "0.2.3",
-      "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz",
-      "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=",
+    "ansi-styles": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+      "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
       "dev": true
     },
-    "array-union": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
-      "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
-      "dev": true,
+    "applicationinsights": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/applicationinsights/-/applicationinsights-1.4.0.tgz",
+      "integrity": "sha512-TV8MYb0Kw9uE2cdu4V/UvTKdOABkX2+Fga9iDz0zqV7FLrNXfmAugWZmmdTx4JoynYkln3d5CUHY3oVSUEbfFw==",
       "requires": {
-        "array-uniq": "^1.0.1"
+        "cls-hooked": "^4.2.2",
+        "continuation-local-storage": "^3.2.1",
+        "diagnostic-channel": "0.2.0",
+        "diagnostic-channel-publishers": "^0.3.2"
       }
     },
-    "array-uniq": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
-      "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
-      "dev": true
-    },
-    "array-unique": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
-      "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
-      "dev": true
-    },
-    "arrify": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
-      "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
-      "dev": true
+    "argparse": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+      "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+      "dev": true,
+      "requires": {
+        "sprintf-js": "~1.0.2"
+      }
     },
     "asn1": {
       "version": "0.2.4",
@@ -158,6 +168,30 @@
       "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
       "dev": true
     },
+    "async-hook-jl": {
+      "version": "1.7.6",
+      "resolved": "https://registry.npmjs.org/async-hook-jl/-/async-hook-jl-1.7.6.tgz",
+      "integrity": "sha512-gFaHkFfSxTjvoxDMYqDuGHlcRyUuamF8s+ZTtJdDzqjws4mCt7v0vuV79/E2Wr2/riMQgtG4/yUtXWs1gZ7JMg==",
+      "requires": {
+        "stack-chain": "^1.3.7"
+      }
+    },
+    "async-listener": {
+      "version": "0.6.10",
+      "resolved": "https://registry.npmjs.org/async-listener/-/async-listener-0.6.10.tgz",
+      "integrity": "sha512-gpuo6xOyF4D5DE5WvyqZdPA3NGhiT6Qf07l7DCB0wwDEsLvDIbCr6j9S5aj5Ch96dLace5tXVzWBZkxU/c5ohw==",
+      "requires": {
+        "semver": "^5.3.0",
+        "shimmer": "^1.1.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "5.7.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
+          "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA=="
+        }
+      }
+    },
     "asynckit": {
       "version": "0.4.0",
       "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
@@ -176,6 +210,18 @@
       "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==",
       "dev": true
     },
+    "azure-devops-node-api": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-7.2.0.tgz",
+      "integrity": "sha512-pMfGJ6gAQ7LRKTHgiRF+8iaUUeGAI0c8puLaqHLc7B8AR7W6GJLozK9RFeUHFjEGybC9/EB3r67WPd7e46zQ8w==",
+      "dev": true,
+      "requires": {
+        "os": "0.1.1",
+        "tunnel": "0.0.4",
+        "typed-rest-client": "1.2.0",
+        "underscore": "1.8.3"
+      }
+    },
     "babel-code-frame": {
       "version": "6.26.0",
       "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
@@ -187,6 +233,12 @@
         "js-tokens": "^3.0.2"
       },
       "dependencies": {
+        "ansi-regex": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+          "dev": true
+        },
         "chalk": {
           "version": "1.1.3",
           "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
@@ -200,6 +252,15 @@
             "supports-color": "^2.0.0"
           }
         },
+        "strip-ansi": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^2.0.0"
+          }
+        },
         "supports-color": {
           "version": "2.0.0",
           "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
@@ -223,15 +284,6 @@
         "tweetnacl": "^0.14.3"
       }
     },
-    "block-stream": {
-      "version": "0.0.9",
-      "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
-      "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
-      "dev": true,
-      "requires": {
-        "inherits": "~2.0.0"
-      }
-    },
     "boolbase": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
@@ -248,21 +300,10 @@
         "concat-map": "0.0.1"
       }
     },
-    "braces": {
-      "version": "1.8.5",
-      "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
-      "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
-      "dev": true,
-      "requires": {
-        "expand-range": "^1.8.1",
-        "preserve": "^0.2.0",
-        "repeat-element": "^1.1.2"
-      }
-    },
     "browser-stdout": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz",
-      "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=",
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
+      "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
       "dev": true
     },
     "buffer-crc32": {
@@ -271,12 +312,6 @@
       "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
       "dev": true
     },
-    "buffer-equal": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz",
-      "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=",
-      "dev": true
-    },
     "buffer-from": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
@@ -289,6 +324,21 @@
       "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
       "dev": true
     },
+    "caller-path": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
+      "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
+      "dev": true,
+      "requires": {
+        "callsites": "^0.2.0"
+      }
+    },
+    "callsites": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
+      "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
+      "dev": true
+    },
     "caseless": {
       "version": "0.12.0",
       "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
@@ -296,9 +346,9 @@
       "dev": true
     },
     "chalk": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
-      "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+      "version": "2.4.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+      "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
       "dev": true,
       "requires": {
         "ansi-styles": "^3.2.1",
@@ -314,95 +364,107 @@
           "requires": {
             "color-convert": "^1.9.0"
           }
-        },
-        "has-flag": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
-          "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
-          "dev": true
-        },
-        "supports-color": {
-          "version": "5.4.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
-          "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
-          "dev": true,
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
         }
       }
     },
+    "chardet": {
+      "version": "0.4.2",
+      "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
+      "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=",
+      "dev": true
+    },
+    "charenc": {
+      "version": "0.0.2",
+      "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
+      "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=",
+      "dev": true
+    },
     "cheerio": {
-      "version": "1.0.0-rc.2",
-      "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.2.tgz",
-      "integrity": "sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs=",
+      "version": "1.0.0-rc.3",
+      "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz",
+      "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==",
       "dev": true,
       "requires": {
         "css-select": "~1.2.0",
-        "dom-serializer": "~0.1.0",
+        "dom-serializer": "~0.1.1",
         "entities": "~1.1.1",
         "htmlparser2": "^3.9.1",
         "lodash": "^4.15.0",
         "parse5": "^3.0.1"
       }
     },
-    "clone": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
-      "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=",
+    "circular-json": {
+      "version": "0.3.3",
+      "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
+      "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==",
       "dev": true
     },
-    "clone-buffer": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz",
-      "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=",
-      "dev": true
+    "cli-cursor": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+      "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+      "dev": true,
+      "requires": {
+        "restore-cursor": "^2.0.0"
+      }
     },
-    "clone-stats": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
-      "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=",
+    "cli-width": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
+      "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
       "dev": true
     },
-    "cloneable-readable": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz",
-      "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==",
-      "dev": true,
+    "cls-hooked": {
+      "version": "4.2.2",
+      "resolved": "https://registry.npmjs.org/cls-hooked/-/cls-hooked-4.2.2.tgz",
+      "integrity": "sha512-J4Xj5f5wq/4jAvcdgoGsL3G103BtWpZrMo8NEinRltN+xpTZdI+M38pyQqhuFU/P792xkMFvnKSf+Lm81U1bxw==",
       "requires": {
-        "inherits": "^2.0.1",
-        "process-nextick-args": "^2.0.0",
-        "readable-stream": "^2.3.5"
+        "async-hook-jl": "^1.7.6",
+        "emitter-listener": "^1.0.1",
+        "semver": "^5.4.1"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "5.7.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
+          "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA=="
+        }
       }
     },
+    "co": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+      "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+      "dev": true
+    },
     "color-convert": {
-      "version": "1.9.2",
-      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz",
-      "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==",
+      "version": "1.9.3",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
       "dev": true,
       "requires": {
-        "color-name": "1.1.1"
+        "color-name": "1.1.3"
       }
     },
     "color-name": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz",
-      "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=",
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
       "dev": true
     },
     "combined-stream": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
-      "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+      "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
       "dev": true,
       "requires": {
         "delayed-stream": "~1.0.0"
       }
     },
     "commander": {
-      "version": "2.11.0",
-      "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz",
-      "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==",
+      "version": "2.15.1",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
+      "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==",
       "dev": true
     },
     "concat-map": {
@@ -411,13 +473,25 @@
       "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
       "dev": true
     },
-    "convert-source-map": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz",
-      "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==",
+    "concat-stream": {
+      "version": "1.6.2",
+      "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+      "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
       "dev": true,
       "requires": {
-        "safe-buffer": "~5.1.1"
+        "buffer-from": "^1.0.0",
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.2.2",
+        "typedarray": "^0.0.6"
+      }
+    },
+    "continuation-local-storage": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/continuation-local-storage/-/continuation-local-storage-3.2.1.tgz",
+      "integrity": "sha512-jx44cconVqkCEEyLSKWwkvUXwO561jXMa3LPjTPsm5QR22PA0/mhe33FT4Xb5y74JDvt/Cq+5lm8S8rskLv9ZA==",
+      "requires": {
+        "async-listener": "^0.6.0",
+        "emitter-listener": "^1.1.1"
       }
     },
     "core-util-is": {
@@ -426,6 +500,23 @@
       "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
       "dev": true
     },
+    "cross-spawn": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+      "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+      "dev": true,
+      "requires": {
+        "lru-cache": "^4.0.1",
+        "shebang-command": "^1.2.0",
+        "which": "^1.2.9"
+      }
+    },
+    "crypt": {
+      "version": "0.0.2",
+      "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz",
+      "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=",
+      "dev": true
+    },
     "css-select": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
@@ -439,9 +530,9 @@
       }
     },
     "css-what": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz",
-      "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=",
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz",
+      "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==",
       "dev": true
     },
     "dashdash": {
@@ -462,23 +553,11 @@
         "ms": "2.0.0"
       }
     },
-    "deep-assign": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-1.0.0.tgz",
-      "integrity": "sha1-sJJ0O+hCfcYh6gBnzex+cN0Z83s=",
-      "dev": true,
-      "requires": {
-        "is-obj": "^1.0.0"
-      }
-    },
-    "define-properties": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
-      "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
-      "dev": true,
-      "requires": {
-        "object-keys": "^1.0.12"
-      }
+    "deep-is": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+      "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+      "dev": true
     },
     "delayed-stream": {
       "version": "1.0.0",
@@ -492,34 +571,61 @@
       "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=",
       "dev": true
     },
+    "diagnostic-channel": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/diagnostic-channel/-/diagnostic-channel-0.2.0.tgz",
+      "integrity": "sha1-zJmvlhLCP7H/8TYSxy8sv6qNWhc=",
+      "requires": {
+        "semver": "^5.3.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "5.7.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
+          "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA=="
+        }
+      }
+    },
+    "diagnostic-channel-publishers": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/diagnostic-channel-publishers/-/diagnostic-channel-publishers-0.3.2.tgz",
+      "integrity": "sha512-2hBlg1BtBT+nd04MGGGZinDv5gOTRQOCzdgk+KRQZ20XJ/uepC0B0rwWLQtz6Tk6InXymWqsk1sMC975cPEReA=="
+    },
+    "didyoumean": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.1.tgz",
+      "integrity": "sha1-6S7f2tplN9SE1zwBcv0eugxJdv8=",
+      "dev": true
+    },
     "diff": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz",
-      "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==",
+      "version": "3.5.0",
+      "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
+      "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
       "dev": true
     },
+    "doctrine": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+      "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+      "dev": true,
+      "requires": {
+        "esutils": "^2.0.2"
+      }
+    },
     "dom-serializer": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
-      "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz",
+      "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==",
       "dev": true,
       "requires": {
-        "domelementtype": "~1.1.1",
-        "entities": "~1.1.1"
-      },
-      "dependencies": {
-        "domelementtype": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
-          "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=",
-          "dev": true
-        }
+        "domelementtype": "^1.3.0",
+        "entities": "^1.1.1"
       }
     },
     "domelementtype": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz",
-      "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=",
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
+      "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==",
       "dev": true
     },
     "domhandler": {
@@ -541,24 +647,6 @@
         "domelementtype": "1"
       }
     },
-    "duplexer": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
-      "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
-      "dev": true
-    },
-    "duplexify": {
-      "version": "3.6.1",
-      "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.1.tgz",
-      "integrity": "sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA==",
-      "dev": true,
-      "requires": {
-        "end-of-stream": "^1.0.0",
-        "inherits": "^2.0.1",
-        "readable-stream": "^2.0.0",
-        "stream-shift": "^1.0.0"
-      }
-    },
     "ecc-jsbn": {
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
@@ -569,102 +657,172 @@
         "safer-buffer": "^2.1.0"
       }
     },
-    "end-of-stream": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
-      "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
-      "dev": true,
+    "emitter-listener": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/emitter-listener/-/emitter-listener-1.1.2.tgz",
+      "integrity": "sha512-Bt1sBAGFHY9DKY+4/2cV6izcKJUf5T7/gkdmkxzX/qv9CcGH8xSwVRW5mtX03SWJtRTWSOpzCuWN9rBFYZepZQ==",
       "requires": {
-        "once": "^1.4.0"
+        "shimmer": "^1.2.0"
       }
     },
     "entities": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz",
-      "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=",
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
+      "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
+      "dev": true
+    },
+    "es6-promise": {
+      "version": "4.2.8",
+      "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz",
+      "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==",
       "dev": true
     },
+    "es6-promisify": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz",
+      "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=",
+      "dev": true,
+      "requires": {
+        "es6-promise": "^4.0.3"
+      }
+    },
     "escape-string-regexp": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
       "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
       "dev": true
     },
-    "esprima": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
-      "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
-      "dev": true
-    },
-    "esutils": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
-      "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
-      "dev": true
-    },
-    "event-stream": {
-      "version": "3.3.4",
-      "resolved": "http://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz",
-      "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=",
+    "eslint": {
+      "version": "4.19.1",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz",
+      "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==",
       "dev": true,
       "requires": {
-        "duplexer": "~0.1.1",
-        "from": "~0",
-        "map-stream": "~0.1.0",
-        "pause-stream": "0.0.11",
-        "split": "0.3",
-        "stream-combiner": "~0.0.4",
-        "through": "~2.3.1"
+        "ajv": "^5.3.0",
+        "babel-code-frame": "^6.22.0",
+        "chalk": "^2.1.0",
+        "concat-stream": "^1.6.0",
+        "cross-spawn": "^5.1.0",
+        "debug": "^3.1.0",
+        "doctrine": "^2.1.0",
+        "eslint-scope": "^3.7.1",
+        "eslint-visitor-keys": "^1.0.0",
+        "espree": "^3.5.4",
+        "esquery": "^1.0.0",
+        "esutils": "^2.0.2",
+        "file-entry-cache": "^2.0.0",
+        "functional-red-black-tree": "^1.0.1",
+        "glob": "^7.1.2",
+        "globals": "^11.0.1",
+        "ignore": "^3.3.3",
+        "imurmurhash": "^0.1.4",
+        "inquirer": "^3.0.6",
+        "is-resolvable": "^1.0.0",
+        "js-yaml": "^3.9.1",
+        "json-stable-stringify-without-jsonify": "^1.0.1",
+        "levn": "^0.3.0",
+        "lodash": "^4.17.4",
+        "minimatch": "^3.0.2",
+        "mkdirp": "^0.5.1",
+        "natural-compare": "^1.4.0",
+        "optionator": "^0.8.2",
+        "path-is-inside": "^1.0.2",
+        "pluralize": "^7.0.0",
+        "progress": "^2.0.0",
+        "regexpp": "^1.0.1",
+        "require-uncached": "^1.0.3",
+        "semver": "^5.3.0",
+        "strip-ansi": "^4.0.0",
+        "strip-json-comments": "~2.0.1",
+        "table": "4.0.2",
+        "text-table": "~0.2.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "5.7.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
+          "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==",
+          "dev": true
+        }
       }
     },
-    "expand-brackets": {
-      "version": "0.1.5",
-      "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
-      "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
+    "eslint-scope": {
+      "version": "3.7.3",
+      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz",
+      "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==",
       "dev": true,
       "requires": {
-        "is-posix-bracket": "^0.1.0"
+        "esrecurse": "^4.1.0",
+        "estraverse": "^4.1.1"
       }
     },
-    "expand-range": {
-      "version": "1.8.2",
-      "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
-      "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
+    "eslint-visitor-keys": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
+      "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==",
+      "dev": true
+    },
+    "espree": {
+      "version": "3.5.4",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz",
+      "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==",
       "dev": true,
       "requires": {
-        "fill-range": "^2.1.0"
+        "acorn": "^5.5.0",
+        "acorn-jsx": "^3.0.0"
       }
     },
-    "extend": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
-      "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+    "esprima": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+      "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
       "dev": true
     },
-    "extend-shallow": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz",
-      "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=",
+    "esquery": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz",
+      "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==",
       "dev": true,
       "requires": {
-        "kind-of": "^1.1.0"
+        "estraverse": "^4.0.0"
       }
     },
-    "extglob": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
-      "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+    "esrecurse": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
+      "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
       "dev": true,
       "requires": {
-        "is-extglob": "^1.0.0"
-      },
-      "dependencies": {
-        "is-extglob": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
-          "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
-          "dev": true
-        }
+        "estraverse": "^4.1.0"
+      }
+    },
+    "estraverse": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+      "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+      "dev": true
+    },
+    "esutils": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+      "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+      "dev": true
+    },
+    "extend": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+      "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+      "dev": true
+    },
+    "external-editor": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz",
+      "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==",
+      "dev": true,
+      "requires": {
+        "chardet": "^0.4.0",
+        "iconv-lite": "^0.4.17",
+        "tmp": "^0.0.33"
       }
     },
     "extsprintf": {
@@ -674,9 +832,9 @@
       "dev": true
     },
     "fast-deep-equal": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
-      "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
+      "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
       "dev": true
     },
     "fast-json-stable-stringify": {
@@ -685,6 +843,12 @@
       "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
       "dev": true
     },
+    "fast-levenshtein": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+      "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+      "dev": true
+    },
     "fd-slicer": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
@@ -694,54 +858,35 @@
         "pend": "~1.2.0"
       }
     },
-    "filename-regex": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
-      "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
-      "dev": true
-    },
-    "fill-range": {
-      "version": "2.2.4",
-      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz",
-      "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==",
+    "figures": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+      "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
       "dev": true,
       "requires": {
-        "is-number": "^2.1.0",
-        "isobject": "^2.0.0",
-        "randomatic": "^3.0.0",
-        "repeat-element": "^1.1.2",
-        "repeat-string": "^1.5.2"
+        "escape-string-regexp": "^1.0.5"
       }
     },
-    "first-chunk-stream": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz",
-      "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=",
-      "dev": true
-    },
-    "flush-write-stream": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz",
-      "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==",
+    "file-entry-cache": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
+      "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
       "dev": true,
       "requires": {
-        "inherits": "^2.0.1",
-        "readable-stream": "^2.0.4"
+        "flat-cache": "^1.2.1",
+        "object-assign": "^4.0.1"
       }
     },
-    "for-in": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
-      "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
-      "dev": true
-    },
-    "for-own": {
-      "version": "0.1.5",
-      "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
-      "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
+    "flat-cache": {
+      "version": "1.3.4",
+      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz",
+      "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==",
       "dev": true,
       "requires": {
-        "for-in": "^1.0.1"
+        "circular-json": "^0.3.1",
+        "graceful-fs": "^4.1.2",
+        "rimraf": "~2.6.2",
+        "write": "^0.2.1"
       }
     },
     "forever-agent": {
@@ -761,44 +906,16 @@
         "mime-types": "^2.1.12"
       }
     },
-    "from": {
-      "version": "0.1.7",
-      "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz",
-      "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=",
-      "dev": true
-    },
-    "fs-mkdirp-stream": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz",
-      "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=",
-      "dev": true,
-      "requires": {
-        "graceful-fs": "^4.1.11",
-        "through2": "^2.0.3"
-      }
-    },
     "fs.realpath": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
       "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
       "dev": true
     },
-    "fstream": {
-      "version": "1.0.11",
-      "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
-      "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
-      "dev": true,
-      "requires": {
-        "graceful-fs": "^4.1.2",
-        "inherits": "~2.0.0",
-        "mkdirp": ">=0.5 0",
-        "rimraf": "2"
-      }
-    },
-    "function-bind": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
-      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+    "functional-red-black-tree": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+      "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
       "dev": true
     },
     "getpass": {
@@ -824,446 +941,24 @@
         "path-is-absolute": "^1.0.0"
       }
     },
-    "glob-base": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
-      "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
-      "dev": true,
-      "requires": {
-        "glob-parent": "^2.0.0",
-        "is-glob": "^2.0.0"
-      },
-      "dependencies": {
-        "glob-parent": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
-          "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
-          "dev": true,
-          "requires": {
-            "is-glob": "^2.0.0"
-          }
-        },
-        "is-extglob": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
-          "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
-          "dev": true
-        },
-        "is-glob": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
-          "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
-          "dev": true,
-          "requires": {
-            "is-extglob": "^1.0.0"
-          }
-        }
-      }
-    },
-    "glob-parent": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
-      "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
-      "dev": true,
-      "requires": {
-        "is-glob": "^3.1.0",
-        "path-dirname": "^1.0.0"
-      }
-    },
-    "glob-stream": {
-      "version": "5.3.5",
-      "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz",
-      "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=",
-      "dev": true,
-      "requires": {
-        "extend": "^3.0.0",
-        "glob": "^5.0.3",
-        "glob-parent": "^3.0.0",
-        "micromatch": "^2.3.7",
-        "ordered-read-streams": "^0.3.0",
-        "through2": "^0.6.0",
-        "to-absolute-glob": "^0.1.1",
-        "unique-stream": "^2.0.2"
-      },
-      "dependencies": {
-        "glob": {
-          "version": "5.0.15",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
-          "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
-          "dev": true,
-          "requires": {
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "2 || 3",
-            "once": "^1.3.0",
-            "path-is-absolute": "^1.0.0"
-          }
-        },
-        "isarray": {
-          "version": "0.0.1",
-          "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
-          "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
-          "dev": true
-        },
-        "readable-stream": {
-          "version": "1.0.34",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
-          "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
-          "dev": true,
-          "requires": {
-            "core-util-is": "~1.0.0",
-            "inherits": "~2.0.1",
-            "isarray": "0.0.1",
-            "string_decoder": "~0.10.x"
-          }
-        },
-        "string_decoder": {
-          "version": "0.10.31",
-          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
-          "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
-          "dev": true
-        },
-        "through2": {
-          "version": "0.6.5",
-          "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
-          "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
-          "dev": true,
-          "requires": {
-            "readable-stream": ">=1.0.33-1 <1.1.0-0",
-            "xtend": ">=4.0.0 <4.1.0-0"
-          }
-        }
-      }
+    "globals": {
+      "version": "11.12.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+      "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+      "dev": true
     },
     "graceful-fs": {
-      "version": "4.1.15",
-      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
-      "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz",
+      "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==",
       "dev": true
     },
     "growl": {
-      "version": "1.10.3",
-      "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz",
-      "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==",
+      "version": "1.10.5",
+      "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
+      "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
       "dev": true
     },
-    "gulp-chmod": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/gulp-chmod/-/gulp-chmod-2.0.0.tgz",
-      "integrity": "sha1-AMOQuSigeZslGsz2MaoJ4BzGKZw=",
-      "dev": true,
-      "requires": {
-        "deep-assign": "^1.0.0",
-        "stat-mode": "^0.2.0",
-        "through2": "^2.0.0"
-      }
-    },
-    "gulp-filter": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/gulp-filter/-/gulp-filter-5.1.0.tgz",
-      "integrity": "sha1-oF4Rr/sHz33PQafeHLe2OsN4PnM=",
-      "dev": true,
-      "requires": {
-        "multimatch": "^2.0.0",
-        "plugin-error": "^0.1.2",
-        "streamfilter": "^1.0.5"
-      }
-    },
-    "gulp-gunzip": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/gulp-gunzip/-/gulp-gunzip-1.0.0.tgz",
-      "integrity": "sha1-FbdBFF6Dqcb1CIYkG1fMWHHxUak=",
-      "dev": true,
-      "requires": {
-        "through2": "~0.6.5",
-        "vinyl": "~0.4.6"
-      },
-      "dependencies": {
-        "isarray": {
-          "version": "0.0.1",
-          "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
-          "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
-          "dev": true
-        },
-        "readable-stream": {
-          "version": "1.0.34",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
-          "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
-          "dev": true,
-          "requires": {
-            "core-util-is": "~1.0.0",
-            "inherits": "~2.0.1",
-            "isarray": "0.0.1",
-            "string_decoder": "~0.10.x"
-          }
-        },
-        "string_decoder": {
-          "version": "0.10.31",
-          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
-          "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
-          "dev": true
-        },
-        "through2": {
-          "version": "0.6.5",
-          "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
-          "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
-          "dev": true,
-          "requires": {
-            "readable-stream": ">=1.0.33-1 <1.1.0-0",
-            "xtend": ">=4.0.0 <4.1.0-0"
-          }
-        }
-      }
-    },
-    "gulp-remote-src-vscode": {
-      "version": "0.5.1",
-      "resolved": "https://registry.npmjs.org/gulp-remote-src-vscode/-/gulp-remote-src-vscode-0.5.1.tgz",
-      "integrity": "sha512-mw4OGjtC/jlCWJFhbcAlel4YPvccChlpsl3JceNiB/DLJi24/UPxXt53/N26lgI3dknEqd4ErfdHrO8sJ5bATQ==",
-      "dev": true,
-      "requires": {
-        "event-stream": "3.3.4",
-        "node.extend": "^1.1.2",
-        "request": "^2.79.0",
-        "through2": "^2.0.3",
-        "vinyl": "^2.0.1"
-      },
-      "dependencies": {
-        "clone": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
-          "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
-          "dev": true
-        },
-        "clone-stats": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
-          "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=",
-          "dev": true
-        },
-        "vinyl": {
-          "version": "2.2.0",
-          "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz",
-          "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==",
-          "dev": true,
-          "requires": {
-            "clone": "^2.1.1",
-            "clone-buffer": "^1.0.0",
-            "clone-stats": "^1.0.0",
-            "cloneable-readable": "^1.0.0",
-            "remove-trailing-separator": "^1.0.1",
-            "replace-ext": "^1.0.0"
-          }
-        }
-      }
-    },
-    "gulp-sourcemaps": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz",
-      "integrity": "sha1-uG/zSdgBzrVuHZ59x7vLS33uYAw=",
-      "dev": true,
-      "requires": {
-        "convert-source-map": "^1.1.1",
-        "graceful-fs": "^4.1.2",
-        "strip-bom": "^2.0.0",
-        "through2": "^2.0.0",
-        "vinyl": "^1.0.0"
-      },
-      "dependencies": {
-        "clone": {
-          "version": "1.0.4",
-          "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
-          "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
-          "dev": true
-        },
-        "replace-ext": {
-          "version": "0.0.1",
-          "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz",
-          "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=",
-          "dev": true
-        },
-        "vinyl": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz",
-          "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=",
-          "dev": true,
-          "requires": {
-            "clone": "^1.0.0",
-            "clone-stats": "^0.0.1",
-            "replace-ext": "0.0.1"
-          }
-        }
-      }
-    },
-    "gulp-symdest": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/gulp-symdest/-/gulp-symdest-1.1.1.tgz",
-      "integrity": "sha512-UHd3MokfIN7SrFdsbV5uZTwzBpL0ZSTu7iq98fuDqBGZ0dlHxgbQBJwfd6qjCW83snkQ3Hz9IY4sMRMz2iTq7w==",
-      "dev": true,
-      "requires": {
-        "event-stream": "3.3.4",
-        "mkdirp": "^0.5.1",
-        "queue": "^3.1.0",
-        "vinyl-fs": "^2.4.3"
-      }
-    },
-    "gulp-untar": {
-      "version": "0.0.7",
-      "resolved": "https://registry.npmjs.org/gulp-untar/-/gulp-untar-0.0.7.tgz",
-      "integrity": "sha512-0QfbCH2a1k2qkTLWPqTX+QO4qNsHn3kC546YhAP3/n0h+nvtyGITDuDrYBMDZeW4WnFijmkOvBWa5HshTic1tw==",
-      "dev": true,
-      "requires": {
-        "event-stream": "~3.3.4",
-        "streamifier": "~0.1.1",
-        "tar": "^2.2.1",
-        "through2": "~2.0.3",
-        "vinyl": "^1.2.0"
-      },
-      "dependencies": {
-        "clone": {
-          "version": "1.0.4",
-          "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
-          "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
-          "dev": true
-        },
-        "replace-ext": {
-          "version": "0.0.1",
-          "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz",
-          "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=",
-          "dev": true
-        },
-        "vinyl": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz",
-          "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=",
-          "dev": true,
-          "requires": {
-            "clone": "^1.0.0",
-            "clone-stats": "^0.0.1",
-            "replace-ext": "0.0.1"
-          }
-        }
-      }
-    },
-    "gulp-vinyl-zip": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/gulp-vinyl-zip/-/gulp-vinyl-zip-2.1.2.tgz",
-      "integrity": "sha512-wJn09jsb8PyvUeyFF7y7ImEJqJwYy40BqL9GKfJs6UGpaGW9A+N68Q+ajsIpb9AeR6lAdjMbIdDPclIGo1/b7Q==",
-      "dev": true,
-      "requires": {
-        "event-stream": "3.3.4",
-        "queue": "^4.2.1",
-        "through2": "^2.0.3",
-        "vinyl": "^2.0.2",
-        "vinyl-fs": "^3.0.3",
-        "yauzl": "^2.2.1",
-        "yazl": "^2.2.1"
-      },
-      "dependencies": {
-        "clone": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
-          "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
-          "dev": true
-        },
-        "clone-stats": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
-          "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=",
-          "dev": true
-        },
-        "glob-stream": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz",
-          "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=",
-          "dev": true,
-          "requires": {
-            "extend": "^3.0.0",
-            "glob": "^7.1.1",
-            "glob-parent": "^3.1.0",
-            "is-negated-glob": "^1.0.0",
-            "ordered-read-streams": "^1.0.0",
-            "pumpify": "^1.3.5",
-            "readable-stream": "^2.1.5",
-            "remove-trailing-separator": "^1.0.1",
-            "to-absolute-glob": "^2.0.0",
-            "unique-stream": "^2.0.2"
-          }
-        },
-        "is-valid-glob": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz",
-          "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=",
-          "dev": true
-        },
-        "ordered-read-streams": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz",
-          "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=",
-          "dev": true,
-          "requires": {
-            "readable-stream": "^2.0.1"
-          }
-        },
-        "queue": {
-          "version": "4.5.1",
-          "resolved": "https://registry.npmjs.org/queue/-/queue-4.5.1.tgz",
-          "integrity": "sha512-AMD7w5hRXcFSb8s9u38acBZ+309u6GsiibP4/0YacJeaurRshogB7v/ZcVPxP5gD5+zIw6ixRHdutiYUJfwKHw==",
-          "dev": true,
-          "requires": {
-            "inherits": "~2.0.0"
-          }
-        },
-        "to-absolute-glob": {
-          "version": "2.0.2",
-          "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz",
-          "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=",
-          "dev": true,
-          "requires": {
-            "is-absolute": "^1.0.0",
-            "is-negated-glob": "^1.0.0"
-          }
-        },
-        "vinyl": {
-          "version": "2.2.0",
-          "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz",
-          "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==",
-          "dev": true,
-          "requires": {
-            "clone": "^2.1.1",
-            "clone-buffer": "^1.0.0",
-            "clone-stats": "^1.0.0",
-            "cloneable-readable": "^1.0.0",
-            "remove-trailing-separator": "^1.0.1",
-            "replace-ext": "^1.0.0"
-          }
-        },
-        "vinyl-fs": {
-          "version": "3.0.3",
-          "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz",
-          "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==",
-          "dev": true,
-          "requires": {
-            "fs-mkdirp-stream": "^1.0.0",
-            "glob-stream": "^6.1.0",
-            "graceful-fs": "^4.0.0",
-            "is-valid-glob": "^1.0.0",
-            "lazystream": "^1.0.0",
-            "lead": "^1.0.0",
-            "object.assign": "^4.0.4",
-            "pumpify": "^1.3.5",
-            "readable-stream": "^2.3.3",
-            "remove-bom-buffer": "^3.0.0",
-            "remove-bom-stream": "^1.2.0",
-            "resolve-options": "^1.1.0",
-            "through2": "^2.0.0",
-            "to-through": "^2.0.0",
-            "value-or-function": "^3.0.0",
-            "vinyl": "^2.0.0",
-            "vinyl-sourcemap": "^1.1.0"
-          }
-        }
-      }
-    },
     "har-schema": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
@@ -1278,15 +973,32 @@
       "requires": {
         "ajv": "^6.5.5",
         "har-schema": "^2.0.0"
-      }
-    },
-    "has": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-      "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-      "dev": true,
-      "requires": {
-        "function-bind": "^1.1.1"
+      },
+      "dependencies": {
+        "ajv": {
+          "version": "6.10.2",
+          "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
+          "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
+          "dev": true,
+          "requires": {
+            "fast-deep-equal": "^2.0.1",
+            "fast-json-stable-stringify": "^2.0.0",
+            "json-schema-traverse": "^0.4.1",
+            "uri-js": "^4.2.2"
+          }
+        },
+        "fast-deep-equal": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+          "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
+          "dev": true
+        },
+        "json-schema-traverse": {
+          "version": "0.4.1",
+          "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+          "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+          "dev": true
+        }
       }
     },
     "has-ansi": {
@@ -1296,18 +1008,20 @@
       "dev": true,
       "requires": {
         "ansi-regex": "^2.0.0"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+          "dev": true
+        }
       }
     },
     "has-flag": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
-      "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
-      "dev": true
-    },
-    "has-symbols": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
-      "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=",
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
       "dev": true
     },
     "he": {
@@ -1317,17 +1031,40 @@
       "dev": true
     },
     "htmlparser2": {
-      "version": "3.9.2",
-      "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz",
-      "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=",
+      "version": "3.10.1",
+      "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
+      "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
       "dev": true,
       "requires": {
-        "domelementtype": "^1.3.0",
+        "domelementtype": "^1.3.1",
         "domhandler": "^2.3.0",
         "domutils": "^1.5.1",
         "entities": "^1.1.1",
         "inherits": "^2.0.1",
-        "readable-stream": "^2.0.2"
+        "readable-stream": "^3.1.1"
+      },
+      "dependencies": {
+        "readable-stream": {
+          "version": "3.4.0",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
+          "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
+          "dev": true,
+          "requires": {
+            "inherits": "^2.0.3",
+            "string_decoder": "^1.1.1",
+            "util-deprecate": "^1.0.1"
+          }
+        }
+      }
+    },
+    "http-proxy-agent": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz",
+      "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==",
+      "dev": true,
+      "requires": {
+        "agent-base": "4",
+        "debug": "3.1.0"
       }
     },
     "http-signature": {
@@ -1341,137 +1078,97 @@
         "sshpk": "^1.7.0"
       }
     },
-    "inflight": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
-      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
-      "dev": true,
-      "requires": {
-        "once": "^1.3.0",
-        "wrappy": "1"
-      }
-    },
-    "inherits": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-      "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
-      "dev": true
-    },
-    "is": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/is/-/is-3.2.1.tgz",
-      "integrity": "sha1-0Kwq1V63sL7JJqUmb2xmKqqD3KU=",
-      "dev": true
-    },
-    "is-absolute": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
-      "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
+    "https-proxy-agent": {
+      "version": "2.2.4",
+      "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz",
+      "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==",
       "dev": true,
       "requires": {
-        "is-relative": "^1.0.0",
-        "is-windows": "^1.0.1"
+        "agent-base": "^4.3.0",
+        "debug": "^3.1.0"
       }
     },
-    "is-buffer": {
-      "version": "1.1.6",
-      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
-      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
-      "dev": true
-    },
-    "is-dotfile": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
-      "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
-      "dev": true
-    },
-    "is-equal-shallow": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
-      "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
+    "iconv-lite": {
+      "version": "0.4.24",
+      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+      "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
       "dev": true,
       "requires": {
-        "is-primitive": "^2.0.0"
+        "safer-buffer": ">= 2.1.2 < 3"
       }
     },
-    "is-extendable": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
-      "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+    "ignore": {
+      "version": "3.3.10",
+      "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
+      "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==",
       "dev": true
     },
-    "is-extglob": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
-      "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+    "imurmurhash": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+      "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
       "dev": true
     },
-    "is-glob": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
-      "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+    "inflight": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
       "dev": true,
       "requires": {
-        "is-extglob": "^2.1.0"
+        "once": "^1.3.0",
+        "wrappy": "1"
       }
     },
-    "is-negated-glob": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz",
-      "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=",
+    "inherits": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
       "dev": true
     },
-    "is-number": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
-      "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
+    "inquirer": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz",
+      "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==",
       "dev": true,
       "requires": {
-        "kind-of": "^3.0.2"
-      },
-      "dependencies": {
-        "kind-of": {
-          "version": "3.2.2",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-          "dev": true,
-          "requires": {
-            "is-buffer": "^1.1.5"
-          }
-        }
+        "ansi-escapes": "^3.0.0",
+        "chalk": "^2.0.0",
+        "cli-cursor": "^2.1.0",
+        "cli-width": "^2.0.0",
+        "external-editor": "^2.0.4",
+        "figures": "^2.0.0",
+        "lodash": "^4.3.0",
+        "mute-stream": "0.0.7",
+        "run-async": "^2.2.0",
+        "rx-lite": "^4.0.8",
+        "rx-lite-aggregates": "^4.0.8",
+        "string-width": "^2.1.0",
+        "strip-ansi": "^4.0.0",
+        "through": "^2.3.6"
       }
     },
-    "is-obj": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
-      "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
-      "dev": true
-    },
-    "is-posix-bracket": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
-      "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
+    "is-buffer": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
       "dev": true
     },
-    "is-primitive": {
+    "is-fullwidth-code-point": {
       "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
-      "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
+      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+      "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
       "dev": true
     },
-    "is-relative": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
-      "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
-      "dev": true,
-      "requires": {
-        "is-unc-path": "^1.0.0"
-      }
+    "is-promise": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
+      "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
+      "dev": true
     },
-    "is-stream": {
+    "is-resolvable": {
       "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
-      "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+      "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
+      "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
       "dev": true
     },
     "is-typedarray": {
@@ -1480,47 +1177,17 @@
       "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
       "dev": true
     },
-    "is-unc-path": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
-      "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
-      "dev": true,
-      "requires": {
-        "unc-path-regex": "^0.1.2"
-      }
-    },
-    "is-utf8": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
-      "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
-      "dev": true
-    },
-    "is-valid-glob": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz",
-      "integrity": "sha1-1LVcafUYhvm2XHDWwmItN+KfSP4=",
-      "dev": true
-    },
-    "is-windows": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
-      "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
-      "dev": true
-    },
     "isarray": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
       "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
       "dev": true
     },
-    "isobject": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
-      "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
-      "dev": true,
-      "requires": {
-        "isarray": "1.0.0"
-      }
+    "isexe": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+      "dev": true
     },
     "isstream": {
       "version": "0.1.2",
@@ -1535,9 +1202,9 @@
       "dev": true
     },
     "js-yaml": {
-      "version": "3.12.0",
-      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz",
-      "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==",
+      "version": "3.13.1",
+      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
+      "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
       "dev": true,
       "requires": {
         "argparse": "^1.0.7",
@@ -1557,19 +1224,16 @@
       "dev": true
     },
     "json-schema-traverse": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+      "version": "0.3.1",
+      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
+      "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
       "dev": true
     },
-    "json-stable-stringify": {
+    "json-stable-stringify-without-jsonify": {
       "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
-      "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
-      "dev": true,
-      "requires": {
-        "jsonify": "~0.0.0"
-      }
+      "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+      "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+      "dev": true
     },
     "json-stringify-safe": {
       "version": "5.0.1",
@@ -1577,12 +1241,6 @@
       "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
       "dev": true
     },
-    "jsonify": {
-      "version": "0.0.0",
-      "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
-      "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
-      "dev": true
-    },
     "jsprim": {
       "version": "1.4.1",
       "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
@@ -1595,56 +1253,40 @@
         "verror": "1.10.0"
       }
     },
-    "kind-of": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz",
-      "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=",
-      "dev": true
-    },
-    "lazystream": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz",
-      "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=",
-      "dev": true,
-      "requires": {
-        "readable-stream": "^2.0.5"
-      }
-    },
-    "lead": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz",
-      "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=",
+    "levn": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+      "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
       "dev": true,
       "requires": {
-        "flush-write-stream": "^1.0.2"
+        "prelude-ls": "~1.1.2",
+        "type-check": "~0.3.2"
       }
     },
     "linkify-it": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.0.3.tgz",
-      "integrity": "sha1-2UpGSPmxwXnWT6lykSaL22zpQ08=",
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz",
+      "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==",
       "dev": true,
       "requires": {
         "uc.micro": "^1.0.1"
       }
     },
     "lodash": {
-      "version": "4.17.10",
-      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
-      "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+      "version": "4.17.14",
+      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.14.tgz",
+      "integrity": "sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw==",
       "dev": true
     },
-    "lodash.isequal": {
-      "version": "4.5.0",
-      "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
-      "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=",
-      "dev": true
-    },
-    "map-stream": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz",
-      "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=",
-      "dev": true
+    "lru-cache": {
+      "version": "4.1.5",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+      "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+      "dev": true,
+      "requires": {
+        "pseudomap": "^1.0.2",
+        "yallist": "^2.1.2"
+      }
     },
     "markdown-it": {
       "version": "8.4.2",
@@ -1659,11 +1301,16 @@
         "uc.micro": "^1.0.5"
       }
     },
-    "math-random": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz",
-      "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=",
-      "dev": true
+    "md5": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz",
+      "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=",
+      "dev": true,
+      "requires": {
+        "charenc": "~0.0.1",
+        "crypt": "~0.0.1",
+        "is-buffer": "~1.1.1"
+      }
     },
     "mdurl": {
       "version": "1.0.1",
@@ -1671,71 +1318,6 @@
       "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=",
       "dev": true
     },
-    "merge-stream": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz",
-      "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=",
-      "dev": true,
-      "requires": {
-        "readable-stream": "^2.0.1"
-      }
-    },
-    "micromatch": {
-      "version": "2.3.11",
-      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
-      "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
-      "dev": true,
-      "requires": {
-        "arr-diff": "^2.0.0",
-        "array-unique": "^0.2.1",
-        "braces": "^1.8.2",
-        "expand-brackets": "^0.1.4",
-        "extglob": "^0.3.1",
-        "filename-regex": "^2.0.0",
-        "is-extglob": "^1.0.0",
-        "is-glob": "^2.0.1",
-        "kind-of": "^3.0.2",
-        "normalize-path": "^2.0.1",
-        "object.omit": "^2.0.0",
-        "parse-glob": "^3.0.4",
-        "regex-cache": "^0.4.2"
-      },
-      "dependencies": {
-        "arr-diff": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
-          "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
-          "dev": true,
-          "requires": {
-            "arr-flatten": "^1.0.1"
-          }
-        },
-        "is-extglob": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
-          "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
-          "dev": true
-        },
-        "is-glob": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
-          "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
-          "dev": true,
-          "requires": {
-            "is-extglob": "^1.0.0"
-          }
-        },
-        "kind-of": {
-          "version": "3.2.2",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-          "dev": true,
-          "requires": {
-            "is-buffer": "^1.1.5"
-          }
-        }
-      }
-    },
     "mime": {
       "version": "1.6.0",
       "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
@@ -1743,20 +1325,26 @@
       "dev": true
     },
     "mime-db": {
-      "version": "1.37.0",
-      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz",
-      "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==",
+      "version": "1.40.0",
+      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
+      "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==",
       "dev": true
     },
     "mime-types": {
-      "version": "2.1.21",
-      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz",
-      "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==",
+      "version": "2.1.24",
+      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
+      "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
       "dev": true,
       "requires": {
-        "mime-db": "~1.37.0"
+        "mime-db": "1.40.0"
       }
     },
+    "mimic-fn": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+      "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
+      "dev": true
+    },
     "minimatch": {
       "version": "3.0.4",
       "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
@@ -1782,21 +1370,56 @@
       }
     },
     "mocha": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-4.0.1.tgz",
-      "integrity": "sha512-evDmhkoA+cBNiQQQdSKZa2b9+W2mpLoj50367lhy+Klnx9OV8XlCIhigUnn1gaTFLQCa0kdNhEGDr0hCXOQFDw==",
+      "version": "5.2.0",
+      "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz",
+      "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==",
       "dev": true,
       "requires": {
-        "browser-stdout": "1.3.0",
-        "commander": "2.11.0",
+        "browser-stdout": "1.3.1",
+        "commander": "2.15.1",
         "debug": "3.1.0",
-        "diff": "3.3.1",
+        "diff": "3.5.0",
         "escape-string-regexp": "1.0.5",
         "glob": "7.1.2",
-        "growl": "1.10.3",
+        "growl": "1.10.5",
         "he": "1.1.1",
+        "minimatch": "3.0.4",
         "mkdirp": "0.5.1",
-        "supports-color": "4.4.0"
+        "supports-color": "5.4.0"
+      }
+    },
+    "mocha-junit-reporter": {
+      "version": "1.23.2",
+      "resolved": "https://registry.npmjs.org/mocha-junit-reporter/-/mocha-junit-reporter-1.23.2.tgz",
+      "integrity": "sha512-ro39KUheimNkqdtjk1qXNw4B8b/REkCjlNYAsZ5Eso7tsVIX5BoQzA24vWSnWBdP/KNEKDoMoldzYyCwHuHZlw==",
+      "dev": true,
+      "requires": {
+        "debug": "^2.2.0",
+        "md5": "^2.1.0",
+        "mkdirp": "~0.5.1",
+        "strip-ansi": "^4.0.0",
+        "xml": "^1.0.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        }
+      }
+    },
+    "mocha-multi-reporters": {
+      "version": "1.1.7",
+      "resolved": "https://registry.npmjs.org/mocha-multi-reporters/-/mocha-multi-reporters-1.1.7.tgz",
+      "integrity": "sha1-zH8/TTL0eFIJQdhSq7ZNmYhYfYI=",
+      "dev": true,
+      "requires": {
+        "debug": "^3.1.0",
+        "lodash": "^4.16.4"
       }
     },
     "ms": {
@@ -1805,56 +1428,27 @@
       "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
       "dev": true
     },
-    "multimatch": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz",
-      "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=",
-      "dev": true,
-      "requires": {
-        "array-differ": "^1.0.0",
-        "array-union": "^1.0.1",
-        "arrify": "^1.0.0",
-        "minimatch": "^3.0.0"
-      }
-    },
     "mute-stream": {
       "version": "0.0.7",
       "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
       "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
       "dev": true
     },
-    "node.extend": {
-      "version": "1.1.8",
-      "resolved": "https://registry.npmjs.org/node.extend/-/node.extend-1.1.8.tgz",
-      "integrity": "sha512-L/dvEBwyg3UowwqOUTyDsGBU6kjBQOpOhshio9V3i3BMPv5YUb9+mWNN8MK0IbWqT0AqaTSONZf0aTuMMahWgA==",
-      "dev": true,
-      "requires": {
-        "has": "^1.0.3",
-        "is": "^3.2.1"
-      }
-    },
-    "normalize-path": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
-      "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
-      "dev": true,
-      "requires": {
-        "remove-trailing-separator": "^1.0.1"
-      }
+    "natural-compare": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+      "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+      "dev": true
     },
-    "now-and-later": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.0.tgz",
-      "integrity": "sha1-vGHLtFbXnLMiB85HygUTb/Ln1u4=",
-      "dev": true,
-      "requires": {
-        "once": "^1.3.2"
-      }
+    "node-fetch": {
+      "version": "2.6.0",
+      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz",
+      "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA=="
     },
     "nth-check": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz",
-      "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=",
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
+      "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==",
       "dev": true,
       "requires": {
         "boolbase": "~1.0.0"
@@ -1872,52 +1466,43 @@
       "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
       "dev": true
     },
-    "object-keys": {
-      "version": "1.0.12",
-      "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz",
-      "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==",
-      "dev": true
-    },
-    "object.assign": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
-      "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
+    "once": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
       "dev": true,
       "requires": {
-        "define-properties": "^1.1.2",
-        "function-bind": "^1.1.1",
-        "has-symbols": "^1.0.0",
-        "object-keys": "^1.0.11"
+        "wrappy": "1"
       }
     },
-    "object.omit": {
+    "onetime": {
       "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
-      "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
+      "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+      "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
       "dev": true,
       "requires": {
-        "for-own": "^0.1.4",
-        "is-extendable": "^0.1.1"
+        "mimic-fn": "^1.0.0"
       }
     },
-    "once": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+    "optionator": {
+      "version": "0.8.2",
+      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+      "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
       "dev": true,
       "requires": {
-        "wrappy": "1"
+        "deep-is": "~0.1.3",
+        "fast-levenshtein": "~2.0.4",
+        "levn": "~0.3.0",
+        "prelude-ls": "~1.1.2",
+        "type-check": "~0.3.2",
+        "wordwrap": "~1.0.0"
       }
     },
-    "ordered-read-streams": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz",
-      "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=",
-      "dev": true,
-      "requires": {
-        "is-stream": "^1.0.1",
-        "readable-stream": "^2.0.1"
-      }
+    "os": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/os/-/os-0.1.1.tgz",
+      "integrity": "sha1-IIhF6J4ZOtTZcUdLk5R3NqVtE/M=",
+      "dev": true
     },
     "os-homedir": {
       "version": "1.0.2",
@@ -1941,35 +1526,6 @@
         "os-tmpdir": "^1.0.0"
       }
     },
-    "parse-glob": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
-      "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
-      "dev": true,
-      "requires": {
-        "glob-base": "^0.3.0",
-        "is-dotfile": "^1.0.0",
-        "is-extglob": "^1.0.0",
-        "is-glob": "^2.0.0"
-      },
-      "dependencies": {
-        "is-extglob": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
-          "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
-          "dev": true
-        },
-        "is-glob": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
-          "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
-          "dev": true,
-          "requires": {
-            "is-extglob": "^1.0.0"
-          }
-        }
-      }
-    },
     "parse-semver": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz",
@@ -1977,6 +1533,14 @@
       "dev": true,
       "requires": {
         "semver": "^5.1.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "5.7.1",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+          "dev": true
+        }
       }
     },
     "parse5": {
@@ -1988,32 +1552,23 @@
         "@types/node": "*"
       }
     },
-    "path-dirname": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
-      "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
-      "dev": true
-    },
     "path-is-absolute": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
       "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
       "dev": true
     },
-    "path-parse": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
-      "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+    "path-is-inside": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+      "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
       "dev": true
     },
-    "pause-stream": {
-      "version": "0.0.11",
-      "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz",
-      "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=",
-      "dev": true,
-      "requires": {
-        "through": "~2.3"
-      }
+    "path-parse": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+      "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
+      "dev": true
     },
     "pend": {
       "version": "1.2.0",
@@ -2027,57 +1582,41 @@
       "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
       "dev": true
     },
-    "plugin-error": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz",
-      "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=",
-      "dev": true,
-      "requires": {
-        "ansi-cyan": "^0.1.1",
-        "ansi-red": "^0.1.1",
-        "arr-diff": "^1.0.1",
-        "arr-union": "^2.0.1",
-        "extend-shallow": "^1.1.2"
-      }
+    "pluralize": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",
+      "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==",
+      "dev": true
     },
-    "preserve": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
-      "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
+    "prelude-ls": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+      "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
       "dev": true
     },
     "process-nextick-args": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
-      "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+      "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
       "dev": true
     },
-    "psl": {
-      "version": "1.1.29",
-      "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz",
-      "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==",
+    "progress": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+      "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
       "dev": true
     },
-    "pump": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
-      "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
-      "dev": true,
-      "requires": {
-        "end-of-stream": "^1.1.0",
-        "once": "^1.3.1"
-      }
+    "pseudomap": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+      "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+      "dev": true
     },
-    "pumpify": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
-      "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
-      "dev": true,
-      "requires": {
-        "duplexify": "^3.6.0",
-        "inherits": "^2.0.3",
-        "pump": "^2.0.0"
-      }
+    "psl": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/psl/-/psl-1.3.0.tgz",
+      "integrity": "sha512-avHdspHO+9rQTLbv1RO+MPYeP/SzsCoxofjVnHanETfQhTJrmB0HlDoW+EiN/R+C0BZ+gERab9NY0lPN2TxNag==",
+      "dev": true
     },
     "punycode": {
       "version": "2.1.1",
@@ -2085,57 +1624,17 @@
       "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
       "dev": true
     },
-    "q": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
-      "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
-      "dev": true
-    },
     "qs": {
       "version": "6.5.2",
       "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
       "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
-      "dev": true
-    },
-    "querystringify": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.0.tgz",
-      "integrity": "sha512-sluvZZ1YiTLD5jsqZcDmFyV2EwToyXZBfpoVOmktMmW+VEnhgakFHnasVph65fOjGPTWN0Nw3+XQaSeMayr0kg==",
-      "dev": true
-    },
-    "queue": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/queue/-/queue-3.1.0.tgz",
-      "integrity": "sha1-bEnQHwCeIlZ4h4nyv/rGuLmZBYU=",
-      "dev": true,
-      "requires": {
-        "inherits": "~2.0.0"
-      }
-    },
-    "randomatic": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz",
-      "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==",
-      "dev": true,
-      "requires": {
-        "is-number": "^4.0.0",
-        "kind-of": "^6.0.0",
-        "math-random": "^1.0.1"
-      },
-      "dependencies": {
-        "is-number": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
-          "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
-          "dev": true
-        },
-        "kind-of": {
-          "version": "6.0.2",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
-          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
-          "dev": true
-        }
-      }
+      "dev": true
+    },
+    "querystringify": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz",
+      "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==",
+      "dev": true
     },
     "read": {
       "version": "1.0.7",
@@ -2161,58 +1660,10 @@
         "util-deprecate": "~1.0.1"
       }
     },
-    "regex-cache": {
-      "version": "0.4.4",
-      "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
-      "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
-      "dev": true,
-      "requires": {
-        "is-equal-shallow": "^0.1.3"
-      }
-    },
-    "remove-bom-buffer": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz",
-      "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==",
-      "dev": true,
-      "requires": {
-        "is-buffer": "^1.1.5",
-        "is-utf8": "^0.2.1"
-      }
-    },
-    "remove-bom-stream": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz",
-      "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=",
-      "dev": true,
-      "requires": {
-        "remove-bom-buffer": "^3.0.0",
-        "safe-buffer": "^5.1.0",
-        "through2": "^2.0.3"
-      }
-    },
-    "remove-trailing-separator": {
+    "regexpp": {
       "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
-      "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
-      "dev": true
-    },
-    "repeat-element": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
-      "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
-      "dev": true
-    },
-    "repeat-string": {
-      "version": "1.6.1",
-      "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
-      "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
-      "dev": true
-    },
-    "replace-ext": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
-      "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=",
+      "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz",
+      "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==",
       "dev": true
     },
     "request": {
@@ -2243,6 +1694,16 @@
         "uuid": "^3.3.2"
       }
     },
+    "require-uncached": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
+      "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
+      "dev": true,
+      "requires": {
+        "caller-path": "^0.1.0",
+        "resolve-from": "^1.0.0"
+      }
+    },
     "requires-port": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
@@ -2250,30 +1711,86 @@
       "dev": true
     },
     "resolve": {
-      "version": "1.8.1",
-      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz",
-      "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==",
+      "version": "1.12.0",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz",
+      "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==",
       "dev": true,
       "requires": {
-        "path-parse": "^1.0.5"
+        "path-parse": "^1.0.6"
       }
     },
-    "resolve-options": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz",
-      "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=",
+    "resolve-from": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
+      "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
+      "dev": true
+    },
+    "restore-cursor": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+      "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+      "dev": true,
+      "requires": {
+        "onetime": "^2.0.0",
+        "signal-exit": "^3.0.2"
+      }
+    },
+    "rewire": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/rewire/-/rewire-4.0.1.tgz",
+      "integrity": "sha512-+7RQ/BYwTieHVXetpKhT11UbfF6v1kGhKFrtZN7UDL2PybMsSt/rpLWeEUGF5Ndsl1D5BxiCB14VDJyoX+noYw==",
       "dev": true,
       "requires": {
-        "value-or-function": "^3.0.0"
+        "eslint": "^4.19.1"
       }
     },
     "rimraf": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
-      "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+      "version": "2.6.3",
+      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+      "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+      "dev": true,
+      "requires": {
+        "glob": "^7.1.3"
+      },
+      "dependencies": {
+        "glob": {
+          "version": "7.1.4",
+          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
+          "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
+          "dev": true,
+          "requires": {
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
+          }
+        }
+      }
+    },
+    "run-async": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
+      "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
+      "dev": true,
+      "requires": {
+        "is-promise": "^2.1.0"
+      }
+    },
+    "rx-lite": {
+      "version": "4.0.8",
+      "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
+      "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=",
+      "dev": true
+    },
+    "rx-lite-aggregates": {
+      "version": "4.0.8",
+      "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz",
+      "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=",
       "dev": true,
       "requires": {
-        "glob": "^7.0.5"
+        "rx-lite": "*"
       }
     },
     "safe-buffer": {
@@ -2289,9 +1806,44 @@
       "dev": true
     },
     "semver": {
-      "version": "5.5.0",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
-      "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA=="
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.1.1.tgz",
+      "integrity": "sha512-WfuG+fl6eh3eZ2qAf6goB7nhiCd7NPXhmyFxigB/TOkQyeLP8w8GsVehvtGNtnNmyboz4TgeK40B1Kbql/8c5A=="
+    },
+    "shebang-command": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+      "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+      "dev": true,
+      "requires": {
+        "shebang-regex": "^1.0.0"
+      }
+    },
+    "shebang-regex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+      "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+      "dev": true
+    },
+    "shimmer": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz",
+      "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw=="
+    },
+    "signal-exit": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+      "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+      "dev": true
+    },
+    "slice-ansi": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz",
+      "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==",
+      "dev": true,
+      "requires": {
+        "is-fullwidth-code-point": "^2.0.0"
+      }
     },
     "source-map": {
       "version": "0.6.1",
@@ -2300,24 +1852,15 @@
       "dev": true
     },
     "source-map-support": {
-      "version": "0.5.9",
-      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz",
-      "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==",
+      "version": "0.5.13",
+      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
+      "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
       "dev": true,
       "requires": {
         "buffer-from": "^1.0.0",
         "source-map": "^0.6.0"
       }
     },
-    "split": {
-      "version": "0.3.3",
-      "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz",
-      "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=",
-      "dev": true,
-      "requires": {
-        "through": "2"
-      }
-    },
     "sprintf-js": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
@@ -2325,9 +1868,9 @@
       "dev": true
     },
     "sshpk": {
-      "version": "1.15.2",
-      "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.2.tgz",
-      "integrity": "sha512-Ra/OXQtuh0/enyl4ETZAfTaeksa6BXks5ZcjpSUNrjBr0DvrJKX+1fsKDPpT9TBXgHAFsa4510aNVgI8g/+SzA==",
+      "version": "1.16.1",
+      "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
+      "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
       "dev": true,
       "requires": {
         "asn1": "~0.2.3",
@@ -2341,42 +1884,21 @@
         "tweetnacl": "~0.14.0"
       }
     },
-    "stat-mode": {
-      "version": "0.2.2",
-      "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-0.2.2.tgz",
-      "integrity": "sha1-5sgLYjEj19gM8TLOU480YokHJQI=",
-      "dev": true
-    },
-    "stream-combiner": {
-      "version": "0.0.4",
-      "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz",
-      "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=",
-      "dev": true,
-      "requires": {
-        "duplexer": "~0.1.1"
-      }
-    },
-    "stream-shift": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
-      "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=",
-      "dev": true
+    "stack-chain": {
+      "version": "1.3.7",
+      "resolved": "https://registry.npmjs.org/stack-chain/-/stack-chain-1.3.7.tgz",
+      "integrity": "sha1-0ZLJ/06moiyUxN1FkXHj8AzqEoU="
     },
-    "streamfilter": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/streamfilter/-/streamfilter-1.0.7.tgz",
-      "integrity": "sha512-Gk6KZM+yNA1JpW0KzlZIhjo3EaBJDkYfXtYSbOwNIQ7Zd6006E6+sCFlW1NDvFG/vnXhKmw6TJJgiEQg/8lXfQ==",
+    "string-width": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+      "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
       "dev": true,
       "requires": {
-        "readable-stream": "^2.0.2"
+        "is-fullwidth-code-point": "^2.0.0",
+        "strip-ansi": "^4.0.0"
       }
     },
-    "streamifier": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/streamifier/-/streamifier-0.1.1.tgz",
-      "integrity": "sha1-l+mNj6TRBdYqJpHR3AfoINuN/E8=",
-      "dev": true
-    },
     "string_decoder": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
@@ -2387,115 +1909,62 @@
       }
     },
     "strip-ansi": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
-      "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
-      "dev": true,
-      "requires": {
-        "ansi-regex": "^2.0.0"
-      }
-    },
-    "strip-bom": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
-      "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+      "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
       "dev": true,
       "requires": {
-        "is-utf8": "^0.2.0"
+        "ansi-regex": "^3.0.0"
       }
     },
-    "strip-bom-stream": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz",
-      "integrity": "sha1-5xRDmFd9Uaa+0PoZlPoF9D/ZiO4=",
-      "dev": true,
-      "requires": {
-        "first-chunk-stream": "^1.0.0",
-        "strip-bom": "^2.0.0"
-      }
+    "strip-json-comments": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+      "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+      "dev": true
     },
     "supports-color": {
-      "version": "4.4.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz",
-      "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==",
+      "version": "5.4.0",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
+      "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
       "dev": true,
       "requires": {
-        "has-flag": "^2.0.0"
+        "has-flag": "^3.0.0"
       }
     },
-    "tar": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
-      "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=",
+    "table": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz",
+      "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==",
       "dev": true,
       "requires": {
-        "block-stream": "*",
-        "fstream": "^1.0.2",
-        "inherits": "2"
+        "ajv": "^5.2.3",
+        "ajv-keywords": "^2.1.0",
+        "chalk": "^2.1.0",
+        "lodash": "^4.17.4",
+        "slice-ansi": "1.0.0",
+        "string-width": "^2.1.1"
       }
     },
+    "text-table": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+      "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+      "dev": true
+    },
     "through": {
       "version": "2.3.8",
       "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
       "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
       "dev": true
     },
-    "through2": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
-      "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
-      "dev": true,
-      "requires": {
-        "readable-stream": "~2.3.6",
-        "xtend": "~4.0.1"
-      }
-    },
-    "through2-filter": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz",
-      "integrity": "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=",
-      "dev": true,
-      "requires": {
-        "through2": "~2.0.0",
-        "xtend": "~4.0.0"
-      }
-    },
     "tmp": {
-      "version": "0.0.29",
-      "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.29.tgz",
-      "integrity": "sha1-8lEl/w3Z2jzLDC3Tce4SiLuRKMA=",
-      "dev": true,
-      "requires": {
-        "os-tmpdir": "~1.0.1"
-      }
-    },
-    "to-absolute-glob": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz",
-      "integrity": "sha1-HN+kcqnvUMI57maZm2YsoOs5k38=",
-      "dev": true,
-      "requires": {
-        "extend-shallow": "^2.0.1"
-      },
-      "dependencies": {
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-          "dev": true,
-          "requires": {
-            "is-extendable": "^0.1.0"
-          }
-        }
-      }
-    },
-    "to-through": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz",
-      "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=",
+      "version": "0.0.33",
+      "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+      "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
       "dev": true,
       "requires": {
-        "through2": "^2.0.3"
+        "os-tmpdir": "~1.0.2"
       }
     },
     "tough-cookie": {
@@ -2517,35 +1986,42 @@
       }
     },
     "tslib": {
-      "version": "1.9.3",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz",
-      "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==",
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz",
+      "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==",
       "dev": true
     },
     "tslint": {
-      "version": "5.11.0",
-      "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.11.0.tgz",
-      "integrity": "sha1-mPMMAurjzecAYgHkwzywi0hYHu0=",
+      "version": "5.20.1",
+      "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.1.tgz",
+      "integrity": "sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==",
       "dev": true,
       "requires": {
-        "babel-code-frame": "^6.22.0",
+        "@babel/code-frame": "^7.0.0",
         "builtin-modules": "^1.1.1",
         "chalk": "^2.3.0",
         "commander": "^2.12.1",
-        "diff": "^3.2.0",
+        "diff": "^4.0.1",
         "glob": "^7.1.1",
-        "js-yaml": "^3.7.0",
+        "js-yaml": "^3.13.1",
         "minimatch": "^3.0.4",
+        "mkdirp": "^0.5.1",
         "resolve": "^1.3.2",
         "semver": "^5.3.0",
         "tslib": "^1.8.0",
-        "tsutils": "^2.27.2"
+        "tsutils": "^2.29.0"
       },
       "dependencies": {
-        "commander": {
-          "version": "2.16.0",
-          "resolved": "https://registry.npmjs.org/commander/-/commander-2.16.0.tgz",
-          "integrity": "sha512-sVXqklSaotK9at437sFlFpyOcJonxe0yST/AG9DkQKUdIE6IqGIMv4SfAQSKaJbSdVEJYItASCrBiVQHq1HQew==",
+        "diff": {
+          "version": "4.0.1",
+          "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz",
+          "integrity": "sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q==",
+          "dev": true
+        },
+        "semver": {
+          "version": "5.7.1",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
           "dev": true
         }
       }
@@ -2580,58 +2056,49 @@
       "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
       "dev": true
     },
+    "type-check": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+      "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+      "dev": true,
+      "requires": {
+        "prelude-ls": "~1.1.2"
+      }
+    },
     "typed-rest-client": {
-      "version": "0.9.0",
-      "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-0.9.0.tgz",
-      "integrity": "sha1-92jMDcP06VDwbgSCXDaz54NKofI=",
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.2.0.tgz",
+      "integrity": "sha512-FrUshzZ1yxH8YwGR29PWWnfksLEILbWJydU7zfIRkyH7kAEzB62uMAl2WY6EyolWpLpVHeJGgQm45/MaruaHpw==",
       "dev": true,
       "requires": {
         "tunnel": "0.0.4",
         "underscore": "1.8.3"
-      },
-      "dependencies": {
-        "underscore": {
-          "version": "1.8.3",
-          "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
-          "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=",
-          "dev": true
-        }
       }
     },
-    "typescript": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.1.tgz",
-      "integrity": "sha512-jw7P2z/h6aPT4AENXDGjcfHTu5CSqzsbZc6YlUIebTyBAq8XaKp78x7VcSh30xwSCcsu5irZkYZUSFP1MrAMbg==",
+    "typedarray": {
+      "version": "0.0.6",
+      "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+      "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
       "dev": true
     },
-    "uc.micro": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.5.tgz",
-      "integrity": "sha512-JoLI4g5zv5qNyT09f4YAvEZIIV1oOjqnewYg5D38dkQljIzpPT296dbIGvKro3digYI1bkb7W6EP1y4uDlmzLg==",
+    "typescript": {
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz",
+      "integrity": "sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g==",
       "dev": true
     },
-    "unc-path-regex": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
-      "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=",
+    "uc.micro": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
+      "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==",
       "dev": true
     },
     "underscore": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz",
-      "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==",
+      "version": "1.8.3",
+      "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
+      "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=",
       "dev": true
     },
-    "unique-stream": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz",
-      "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=",
-      "dev": true,
-      "requires": {
-        "json-stable-stringify": "^1.0.0",
-        "through2-filter": "^2.0.0"
-      }
-    },
     "uri-js": {
       "version": "4.2.2",
       "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
@@ -2648,12 +2115,12 @@
       "dev": true
     },
     "url-parse": {
-      "version": "1.4.4",
-      "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.4.tgz",
-      "integrity": "sha512-/92DTTorg4JjktLNLe6GPS2/RvAd/RGr6LuktmWSMLEOa6rjnlrFXNgSbSmkNvCoL2T028A0a1JaJLzRMlFoHg==",
+      "version": "1.4.7",
+      "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz",
+      "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==",
       "dev": true,
       "requires": {
-        "querystringify": "^2.0.0",
+        "querystringify": "^2.1.1",
         "requires-port": "^1.0.0"
       }
     },
@@ -2669,18 +2136,6 @@
       "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
       "dev": true
     },
-    "vali-date": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz",
-      "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=",
-      "dev": true
-    },
-    "value-or-function": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz",
-      "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=",
-      "dev": true
-    },
     "verror": {
       "version": "1.10.0",
       "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
@@ -2692,128 +2147,18 @@
         "extsprintf": "^1.2.0"
       }
     },
-    "vinyl": {
-      "version": "0.4.6",
-      "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz",
-      "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=",
-      "dev": true,
-      "requires": {
-        "clone": "^0.2.0",
-        "clone-stats": "^0.0.1"
-      }
-    },
-    "vinyl-fs": {
-      "version": "2.4.4",
-      "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz",
-      "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=",
-      "dev": true,
-      "requires": {
-        "duplexify": "^3.2.0",
-        "glob-stream": "^5.3.2",
-        "graceful-fs": "^4.0.0",
-        "gulp-sourcemaps": "1.6.0",
-        "is-valid-glob": "^0.3.0",
-        "lazystream": "^1.0.0",
-        "lodash.isequal": "^4.0.0",
-        "merge-stream": "^1.0.0",
-        "mkdirp": "^0.5.0",
-        "object-assign": "^4.0.0",
-        "readable-stream": "^2.0.4",
-        "strip-bom": "^2.0.0",
-        "strip-bom-stream": "^1.0.0",
-        "through2": "^2.0.0",
-        "through2-filter": "^2.0.0",
-        "vali-date": "^1.0.0",
-        "vinyl": "^1.0.0"
-      },
-      "dependencies": {
-        "clone": {
-          "version": "1.0.4",
-          "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
-          "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
-          "dev": true
-        },
-        "replace-ext": {
-          "version": "0.0.1",
-          "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz",
-          "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=",
-          "dev": true
-        },
-        "vinyl": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz",
-          "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=",
-          "dev": true,
-          "requires": {
-            "clone": "^1.0.0",
-            "clone-stats": "^0.0.1",
-            "replace-ext": "0.0.1"
-          }
-        }
-      }
-    },
-    "vinyl-source-stream": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/vinyl-source-stream/-/vinyl-source-stream-1.1.2.tgz",
-      "integrity": "sha1-YrU6E1YQqJbpjKlr7jqH8Aio54A=",
-      "dev": true,
-      "requires": {
-        "through2": "^2.0.3",
-        "vinyl": "^0.4.3"
-      }
-    },
-    "vinyl-sourcemap": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz",
-      "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=",
-      "dev": true,
-      "requires": {
-        "append-buffer": "^1.0.2",
-        "convert-source-map": "^1.5.0",
-        "graceful-fs": "^4.1.6",
-        "normalize-path": "^2.1.1",
-        "now-and-later": "^2.0.0",
-        "remove-bom-buffer": "^3.0.0",
-        "vinyl": "^2.0.0"
-      },
-      "dependencies": {
-        "clone": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
-          "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
-          "dev": true
-        },
-        "clone-stats": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
-          "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=",
-          "dev": true
-        },
-        "vinyl": {
-          "version": "2.2.0",
-          "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz",
-          "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==",
-          "dev": true,
-          "requires": {
-            "clone": "^2.1.1",
-            "clone-buffer": "^1.0.0",
-            "clone-stats": "^1.0.0",
-            "cloneable-readable": "^1.0.0",
-            "remove-trailing-separator": "^1.0.1",
-            "replace-ext": "^1.0.0"
-          }
-        }
-      }
-    },
     "vsce": {
-      "version": "1.46.0",
-      "resolved": "https://registry.npmjs.org/vsce/-/vsce-1.46.0.tgz",
-      "integrity": "sha512-cNQru5mXBPUtMDgwRNoespaR0gjdL09hV1KWktT5wkmTZfv0dSaAqqGAfr+2UI0aJTGttCcO3xKFQqtIcJpczA==",
+      "version": "1.64.0",
+      "resolved": "https://registry.npmjs.org/vsce/-/vsce-1.64.0.tgz",
+      "integrity": "sha512-t3R7QTe2nAXQZs2kD+nA8GjdlX8pAQlnzxaNTG2976i5cyQ8r+ZsMNa/f9PDt7bhjcQM+u/fL+LkNuw+hwoy2A==",
       "dev": true,
       "requires": {
+        "azure-devops-node-api": "^7.2.0",
+        "chalk": "^2.4.2",
         "cheerio": "^1.0.0-rc.1",
         "commander": "^2.8.1",
         "denodeify": "^1.2.1",
+        "didyoumean": "^1.2.1",
         "glob": "^7.0.6",
         "lodash": "^4.17.10",
         "markdown-it": "^8.3.1",
@@ -2824,32 +2169,58 @@
         "read": "^1.0.7",
         "semver": "^5.1.0",
         "tmp": "0.0.29",
+        "typed-rest-client": "1.2.0",
         "url-join": "^1.1.0",
-        "vso-node-api": "6.1.2-preview",
         "yauzl": "^2.3.1",
         "yazl": "^2.2.2"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "5.7.1",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+          "dev": true
+        },
+        "tmp": {
+          "version": "0.0.29",
+          "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.29.tgz",
+          "integrity": "sha1-8lEl/w3Z2jzLDC3Tce4SiLuRKMA=",
+          "dev": true,
+          "requires": {
+            "os-tmpdir": "~1.0.1"
+          }
+        }
       }
     },
     "vscode": {
-      "version": "1.1.22",
-      "resolved": "https://registry.npmjs.org/vscode/-/vscode-1.1.22.tgz",
-      "integrity": "sha512-G/zu7PRAN1yF80wg+l6ebIexDflU3uXXeabacJuLearTIfObKw4JaI8aeHwDEmpnCkc3MkIr3Bclkju2gtEz6A==",
+      "version": "1.1.36",
+      "resolved": "https://registry.npmjs.org/vscode/-/vscode-1.1.36.tgz",
+      "integrity": "sha512-cGFh9jmGLcTapCpPCKvn8aG/j9zVQ+0x5hzYJq5h5YyUXVGa1iamOaB2M2PZXoumQPES4qeAP1FwkI0b6tL4bQ==",
       "dev": true,
       "requires": {
         "glob": "^7.1.2",
-        "gulp-chmod": "^2.0.0",
-        "gulp-filter": "^5.0.1",
-        "gulp-gunzip": "1.0.0",
-        "gulp-remote-src-vscode": "^0.5.1",
-        "gulp-symdest": "^1.1.1",
-        "gulp-untar": "^0.0.7",
-        "gulp-vinyl-zip": "^2.1.2",
-        "mocha": "^4.0.1",
-        "request": "^2.83.0",
+        "mocha": "^5.2.0",
+        "request": "^2.88.0",
         "semver": "^5.4.1",
         "source-map-support": "^0.5.0",
-        "url-parse": "^1.4.3",
-        "vinyl-source-stream": "^1.1.0"
+        "url-parse": "^1.4.4",
+        "vscode-test": "^0.4.1"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "5.7.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
+          "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==",
+          "dev": true
+        }
+      }
+    },
+    "vscode-extension-telemetry": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/vscode-extension-telemetry/-/vscode-extension-telemetry-0.1.2.tgz",
+      "integrity": "sha512-FSbaZKlIH3VKvBJsKw7v5bESWHXzltji2rtjaJeJglpQH4tfClzwHMzlMXUZGiblV++djEzb1gW8mb5E+wxFsg==",
+      "requires": {
+        "applicationinsights": "1.4.0"
       }
     },
     "vscode-jsonrpc": {
@@ -2858,50 +2229,85 @@
       "integrity": "sha512-perEnXQdQOJMTDFNv+UF3h1Y0z4iSiaN9jIlb0OqIYgosPCZGYh/MCUlkFtV2668PL69lRDO32hmvL2yiidUYg=="
     },
     "vscode-languageclient": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-5.1.1.tgz",
-      "integrity": "sha512-jMxshi+BPRQFNG8GB00dJv7ldqMda0be26laYYll/udtJuHbog6RqK10GSxHWDN0PgY0b0m5fePyTk3bq8a0TA==",
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-5.2.1.tgz",
+      "integrity": "sha512-7jrS/9WnV0ruqPamN1nE7qCxn0phkH5LjSgSp9h6qoJGoeAKzwKz/PF6M+iGA/aklx4GLZg1prddhEPQtuXI1Q==",
       "requires": {
         "semver": "^5.5.0",
-        "vscode-languageserver-protocol": "3.13.0"
+        "vscode-languageserver-protocol": "3.14.1"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "5.7.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
+          "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA=="
+        }
       }
     },
     "vscode-languageserver-protocol": {
-      "version": "3.13.0",
-      "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.13.0.tgz",
-      "integrity": "sha512-2ZGKwI+P2ovQll2PGAp+2UfJH+FK9eait86VBUdkPd9HRlm8e58aYT9pV/NYanHOcp3pL6x2yTLVCFMcTer0mg==",
+      "version": "3.14.1",
+      "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.14.1.tgz",
+      "integrity": "sha512-IL66BLb2g20uIKog5Y2dQ0IiigW0XKrvmWiOvc0yXw80z3tMEzEnHjaGAb3ENuU7MnQqgnYJ1Cl2l9RvNgDi4g==",
       "requires": {
         "vscode-jsonrpc": "^4.0.0",
-        "vscode-languageserver-types": "3.13.0"
+        "vscode-languageserver-types": "3.14.0"
       }
     },
     "vscode-languageserver-types": {
-      "version": "3.13.0",
-      "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.13.0.tgz",
-      "integrity": "sha512-BnJIxS+5+8UWiNKCP7W3g9FlE7fErFw0ofP5BXJe7c2tl0VeWh+nNHFbwAS2vmVC4a5kYxHBjRy0UeOtziemVA=="
+      "version": "3.14.0",
+      "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.14.0.tgz",
+      "integrity": "sha512-lTmS6AlAlMHOvPQemVwo3CezxBp0sNB95KNPkqp3Nxd5VFEnuG1ByM0zlRWos0zjO3ZWtkvhal0COgiV1xIA4A=="
     },
-    "vso-node-api": {
-      "version": "6.1.2-preview",
-      "resolved": "https://registry.npmjs.org/vso-node-api/-/vso-node-api-6.1.2-preview.tgz",
-      "integrity": "sha1-qrNUbfJFHs2JTgcbuZtd8Zxfp48=",
+    "vscode-test": {
+      "version": "0.4.3",
+      "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-0.4.3.tgz",
+      "integrity": "sha512-EkMGqBSefZH2MgW65nY05rdRSko15uvzq4VAPM5jVmwYuFQKE7eikKXNJDRxL+OITXHB6pI+a3XqqD32Y3KC5w==",
       "dev": true,
       "requires": {
-        "q": "^1.0.1",
-        "tunnel": "0.0.4",
-        "typed-rest-client": "^0.9.0",
-        "underscore": "^1.8.3"
+        "http-proxy-agent": "^2.1.0",
+        "https-proxy-agent": "^2.2.1"
+      }
+    },
+    "which": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+      "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+      "dev": true,
+      "requires": {
+        "isexe": "^2.0.0"
       }
     },
+    "wordwrap": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+      "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+      "dev": true
+    },
     "wrappy": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
       "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
       "dev": true
     },
-    "xtend": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
-      "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+    "write": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",
+      "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
+      "dev": true,
+      "requires": {
+        "mkdirp": "^0.5.1"
+      }
+    },
+    "xml": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz",
+      "integrity": "sha1-eLpyAgApxbyHuKgaPPzXS0ovweU=",
+      "dev": true
+    },
+    "yallist": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+      "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
       "dev": true
     },
     "yauzl": {
@@ -2915,9 +2321,9 @@
       }
     },
     "yazl": {
-      "version": "2.4.3",
-      "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.4.3.tgz",
-      "integrity": "sha1-7CblzIfVYBud+EMtvdPNLlFzoHE=",
+      "version": "2.5.1",
+      "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz",
+      "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==",
       "dev": true,
       "requires": {
         "buffer-crc32": "~0.2.3"
diff --git a/package.json b/package.json
index 94099f6893..fc20ca41c5 100644
--- a/package.json
+++ b/package.json
@@ -1,11 +1,12 @@
 {
-  "name": "PowerShell",
+  "name": "powershell",
   "displayName": "PowerShell",
-  "version": "1.10.3",
+  "version": "2020.1.0",
+  "preview": false,
   "publisher": "ms-vscode",
   "description": "Develop PowerShell scripts in Visual Studio Code!",
   "engines": {
-    "vscode": "^1.25.0"
+    "vscode": "^1.34.0"
   },
   "license": "SEE LICENSE IN LICENSE.txt",
   "homepage": "https://github.com/PowerShell/vscode-powershell/blob/master/README.md",
@@ -26,11 +27,13 @@
   },
   "main": "./out/src/main",
   "activationEvents": [
+    "onDebugInitialConfigurations",
     "onDebugResolve:powershell",
     "onLanguage:powershell",
     "onCommand:PowerShell.NewProjectFromTemplate",
     "onCommand:PowerShell.OpenExamplesFolder",
     "onCommand:PowerShell.PickPSHostProcess",
+    "onCommand:PowerShell.PickRunspace",
     "onCommand:PowerShell.SpecifyScriptArgs",
     "onCommand:PowerShell.ShowSessionConsole",
     "onCommand:PowerShell.ShowSessionMenu",
@@ -38,16 +41,25 @@
     "onView:PowerShellCommands"
   ],
   "dependencies": {
-    "vscode-languageclient": "~5.1.1"
+    "node-fetch": "^2.6.0",
+    "semver": "^7.1.1",
+    "vscode-extension-telemetry": "~0.1.2",
+    "vscode-languageclient": "~5.2.1"
   },
   "devDependencies": {
-    "@types/mocha": "~2.2.32",
-    "@types/node": "~10.12.12",
-    "mocha": "~4.0.1",
-    "tslint": "~5.11.0",
-    "typescript": "~3.2.1",
-    "vsce": "~1.46.0",
-    "vscode": "~1.1.22"
+    "@types/mocha": "~5.2.7",
+    "@types/node": "~10.11.0",
+    "@types/node-fetch": "^2.5.4",
+    "@types/rewire": "^2.5.28",
+    "@types/semver": "^6.2.0",
+    "mocha": "~5.2.0",
+    "mocha-junit-reporter": "~1.23.2",
+    "mocha-multi-reporters": "~1.1.7",
+    "rewire": "~4.0.1",
+    "tslint": "~5.20.1",
+    "typescript": "~3.5.3",
+    "vsce": "~1.64.0",
+    "vscode": "~1.1.36"
   },
   "extensionDependencies": [
     "vscode.powershell"
@@ -59,6 +71,11 @@
     "test": "node ./node_modules/vscode/bin/test"
   },
   "contributes": {
+    "breakpoints": [
+      {
+        "language": "powershell"
+      }
+    ],
     "viewsContainers": {
       "activitybar": [
         {
@@ -144,10 +161,23 @@
         },
         "category": "PowerShell"
       },
+      {
+        "command": "workbench.action.debug.start",
+        "title": "Run",
+        "category": "PowerShell",
+        "icon": {
+          "light": "resources/light/run.svg",
+          "dark": "resources/dark/run.svg"
+        }
+      },
       {
         "command": "PowerShell.RunSelection",
         "title": "Run Selection",
-        "category": "PowerShell"
+        "category": "PowerShell",
+        "icon": {
+          "light": "resources/light/play.svg",
+          "dark": "resources/dark/play.svg"
+        }
       },
       {
         "command": "PowerShell.RestartSession",
@@ -218,6 +248,11 @@
         "command": "PowerShell.OpenExamplesFolder",
         "title": "Open Examples Folder",
         "category": "PowerShell"
+      },
+      {
+        "command": "PowerShell.InvokeRegisteredEditorCommand",
+        "title": "Invoke Registered Editor Command",
+        "category": "PowerShell"
       }
     ],
     "menus": {
@@ -229,6 +264,10 @@
         {
           "command": "PowerShell.RefreshCommandsExplorer",
           "when": "config.powershell.sideBar.CommandExplorerVisibility"
+        },
+        {
+          "command": "PowerShell.InvokeRegisteredEditorCommand",
+          "when": "false"
         }
       ],
       "editor/context": [
@@ -243,6 +282,18 @@
           "group": "2_powershell"
         }
       ],
+      "editor/title": [
+        {
+          "when": "resourceLangId == powershell",
+          "command": "workbench.action.debug.start",
+          "group": "navigation@100"
+        },
+        {
+          "when": "resourceLangId == powershell",
+          "command": "PowerShell.RunSelection",
+          "group": "navigation@101"
+        }
+      ],
       "editor/title/context": [
         {
           "when": "resourceFilename =~ /\\.tests\\.ps1$/i",
@@ -303,15 +354,12 @@
     "debuggers": [
       {
         "type": "PowerShell",
-        "enableBreakpointsFor": {
-          "languageIds": [
-            "powershell"
-          ]
-        },
+        "label": "PowerShell",
         "program": "./out/src/debugAdapter.js",
         "runtime": "node",
         "variables": {
           "PickPSHostProcess": "PowerShell.PickPSHostProcess",
+          "PickRunspace": "PowerShell.PickRunspace",
           "SpecifyScriptArgs": "PowerShell.SpecifyScriptArgs"
         },
         "languages": [
@@ -320,86 +368,54 @@
         "configurationSnippets": [
           {
             "label": "PowerShell: Launch Current File",
-            "description": "Launch current file (in active editor window) under debugger",
+            "description": "Launch and debug the file in the currently active editor window",
             "body": {
-              "type": "PowerShell",
-              "request": "launch",
               "name": "PowerShell Launch Current File",
-              "script": "^\"\\${file}\"",
-              "args": [],
-              "cwd": "^\"\\${file}\""
-            }
-          },
-          {
-            "label": "PowerShell: Launch Current File in Temporary Console",
-            "description": "Launch current file (in active editor window) under debugger in a temporary Integrated Console.",
-            "body": {
-              "type": "PowerShell",
-              "request": "launch",
-              "name": "PowerShell Launch Current File in Temporary Console",
-              "script": "^\"\\${file}\"",
-              "args": [],
-              "cwd": "^\"\\${file}\"",
-              "createTemporaryIntegratedConsole": true
-            }
-          },
-          {
-            "label": "PowerShell: Launch Current File w/Args Prompt",
-            "description": "Launch current file (in active editor window) under debugger, prompting first for script arguments",
-            "body": {
               "type": "PowerShell",
               "request": "launch",
-              "name": "PowerShell Launch Current File w/Args Prompt",
               "script": "^\"\\${file}\"",
-              "args": [
-                "^\"\\${command:SpecifyScriptArgs}\""
-              ],
               "cwd": "^\"\\${file}\""
             }
           },
           {
             "label": "PowerShell: Launch Script",
-            "description": "Launch specified script or path to script under debugger",
+            "description": "Launch and debug the specified file or command",
             "body": {
+              "name": "PowerShell Launch Script",
               "type": "PowerShell",
               "request": "launch",
-              "name": "PowerShell Launch ${Script}",
-              "script": "^\"\\${workspaceFolder}/${Script}\"",
-              "args": [],
+              "script": "^\"enter path or command to execute e.g.: \\${workspaceFolder}/src/foo.ps1 or Invoke-Pester\"",
               "cwd": "^\"\\${workspaceFolder}\""
             }
           },
           {
-            "label": "PowerShell: Pester Tests",
-            "description": "Invokes Pester tests under debugger",
+            "label": "PowerShell: Interactive Session",
+            "description": "Debug commands executed from the Integrated Console",
             "body": {
+              "name": "PowerShell Interactive Session",
               "type": "PowerShell",
               "request": "launch",
-              "name": "PowerShell Pester Tests",
-              "script": "Invoke-Pester",
-              "args": [],
-              "cwd": "^\"\\${workspaceFolder}\""
+              "cwd": ""
             }
           },
           {
             "label": "PowerShell: Attach to PowerShell Host Process",
-            "description": "Open host process picker to select process to attach debugger to",
+            "description": "Attach the debugger to a running PowerShell Host Process",
             "body": {
+              "name": "PowerShell Attach to Host Process",
               "type": "PowerShell",
               "request": "attach",
-              "name": "PowerShell Attach to Host Process",
-              "processId": "^\"\\${command:PickPSHostProcess}\"",
               "runspaceId": 1
             }
           },
           {
-            "label": "PowerShell: Interactive Session",
-            "description": "Start interactive session (Debug Console) under debugger",
+            "label": "PowerShell: Attach Interactive Session Runspace",
+            "description": "Open runspace picker to select runspace to attach debugger to",
             "body": {
+              "name": "PowerShell Attach Interactive Session Runspace",
               "type": "PowerShell",
-              "request": "launch",
-              "name": "PowerShell Interactive Session",
-              "cwd": ""
+              "request": "attach",
+              "processId": "current"
             }
           }
         ],
@@ -412,7 +428,7 @@
               },
               "args": {
                 "type": "array",
-                "description": "Command line arguments to pass to the PowerShell script.",
+                "description": "Command line arguments to pass to the PowerShell script. Specify \"${command:SpecifyScriptArgs}\" if you want to be prompted for the args.",
                 "items": {
                   "type": "string"
                 },
@@ -439,58 +455,30 @@
               "processId": {
                 "type": "string",
                 "description": "The process id of the PowerShell host process to attach to.  Works only on PowerShell 5 and above.",
-                "default": "${command:PickPSHostProcess}"
+                "default": null
               },
               "runspaceId": {
-                "type": "number",
+                "type": [
+                  "string",
+                  "number"
+                ],
                 "description": "Optional: The ID of the runspace to debug in the attached process.  Defaults to 1.  Works only on PowerShell 5 and above.",
-                "default": 1
+                "default": null
+              },
+              "runspaceName": {
+                "type": "string",
+                "description": "Optional: The Name of the runspace to debug in the attached process.  Works only on PowerShell 5 and above.",
+                "default": null
+              },
+              "customPipeName": {
+                "type": "string",
+                "description": "The custom pipe name of the PowerShell host process to attach to.  Works only on PowerShell 6.2 and above.",
+                "default": null
               }
             }
           }
         },
-        "initialConfigurations": [
-          {
-            "type": "PowerShell",
-            "request": "launch",
-            "name": "PowerShell Launch Current File",
-            "script": "${file}",
-            "args": [],
-            "cwd": "${file}"
-          },
-          {
-            "type": "PowerShell",
-            "request": "launch",
-            "name": "PowerShell Launch Current File in Temporary Console",
-            "script": "${file}",
-            "args": [],
-            "cwd": "${file}",
-            "createTemporaryIntegratedConsole": true
-          },
-          {
-            "type": "PowerShell",
-            "request": "launch",
-            "name": "PowerShell Launch Current File w/Args Prompt",
-            "script": "${file}",
-            "args": [
-              "${command:SpecifyScriptArgs}"
-            ],
-            "cwd": "${file}"
-          },
-          {
-            "type": "PowerShell",
-            "request": "attach",
-            "name": "PowerShell Attach to Host Process",
-            "processId": "${command:PickPSHostProcess}",
-            "runspaceId": 1
-          },
-          {
-            "type": "PowerShell",
-            "request": "launch",
-            "name": "PowerShell Interactive Session",
-            "cwd": ""
-          }
-        ]
+        "initialConfigurations": []
       }
     ],
     "configuration": {
@@ -502,16 +490,21 @@
           "default": true,
           "description": "Specifies the visibility of the Command Explorer in the PowerShell Side Bar."
         },
+        "powershell.sideBar.CommandExplorerExcludeFilter": {
+          "type": "array",
+          "default": [],
+          "description": "Specify array of Modules to exclude from Command Explorer listing."
+        },
         "powershell.powerShellExePath": {
           "type": "string",
           "default": "",
-          "isExecutable": true,
+          "scope": "machine",
           "description": "Specifies the full path to a PowerShell executable. Changes the installation of PowerShell used for language and debugging services."
         },
         "powershell.powerShellAdditionalExePaths": {
           "type": "array",
           "description": "Specifies an array of versionName / exePath pairs where exePath points to a non-standard install location for PowerShell and versionName can be used to reference this path with the powershell.powerShellDefaultVersion setting.",
-          "isExecutable": true,
+          "scope": "machine",
           "uniqueItems": true,
           "items": {
             "type": "object",
@@ -533,7 +526,12 @@
         },
         "powershell.powerShellDefaultVersion": {
           "type": "string",
-          "description": "Specifies the name of the PowerShell version used in the startup session when the extension loads e.g \"Windows PowerShell (x86)\" or \"PowerShell Core 6.0.2 (x64)\"."
+          "description": "Specifies the PowerShell version name, as displayed by the 'PowerShell: Show Session Menu' command, used when the extension loads e.g \"Windows PowerShell (x86)\" or \"PowerShell Core 6 (x64)\"."
+        },
+        "powershell.promptToUpdatePowerShell": {
+          "type": "boolean",
+          "description": "Specifies whether you should be prompted to update your version of PowerShell.",
+          "default": true
         },
         "powershell.startAutomatically": {
           "type": "boolean",
@@ -585,6 +583,11 @@
           "default": true,
           "description": "Shows the last line of a folded section similar to the default VSCode folding style. When disabled, the entire folded region is hidden."
         },
+        "powershell.codeFormatting.autoCorrectAliases": {
+          "type": "boolean",
+          "default": false,
+          "description": "Replaces aliases with their aliased name."
+        },
         "powershell.codeFormatting.preset": {
           "type": "string",
           "enum": [
@@ -611,6 +614,16 @@
           "default": true,
           "description": "Adds a newline (line break) after a closing brace."
         },
+        "powershell.codeFormatting.pipelineIndentationStyle": {
+          "type": "string",
+          "enum": [
+            "IncreaseIndentationForFirstPipeline",
+            "IncreaseIndentationAfterEveryPipeline",
+            "NoIndentation"
+          ],
+          "default": "NoIndentation",
+          "description": "Multi-line pipeline style settings."
+        },
         "powershell.codeFormatting.whitespaceBeforeOpenBrace": {
           "type": "boolean",
           "default": true,
@@ -631,6 +644,16 @@
           "default": true,
           "description": "Adds a space after a separator (',' and ';')."
         },
+        "powershell.codeFormatting.WhitespaceInsideBrace": {
+          "type": "boolean",
+          "default": true,
+          "description": "Adds a space after an opening brace ('{') and before a closing brace ('}')."
+        },
+        "powershell.codeFormatting.WhitespaceAroundPipe": {
+          "type": "boolean",
+          "default": true,
+          "description": "Adds a space before and after the pipeline operator ('|')."
+        },
         "powershell.codeFormatting.ignoreOneLineBlock": {
           "type": "boolean",
           "default": true,
@@ -641,6 +664,11 @@
           "default": true,
           "description": "Align assignment statements in a hashtable or a DSC Configuration."
         },
+        "powershell.codeFormatting.useCorrectCasing": {
+          "type": "boolean",
+          "default": false,
+          "description": "Use correct casing for cmdlets."
+        },
         "powershell.integratedConsole.showOnStartup": {
           "type": "boolean",
           "default": true,
@@ -686,12 +714,6 @@
           "type": "boolean",
           "default": false,
           "description": "Indicates that the powerShellExePath points to a developer build of Windows PowerShell and configures it for development."
-        },
-        "powershell.developer.powerShellExePath": {
-          "type": "string",
-          "default": "",
-          "isExecutable": true,
-          "description": "Deprecated. Please use the 'powershell.powerShellExePath' setting instead"
         }
       }
     },
diff --git a/resources/dark/play.svg b/resources/dark/play.svg
new file mode 100644
index 0000000000..464ef5147e
--- /dev/null
+++ b/resources/dark/play.svg
@@ -0,0 +1,5 @@
+<svg width="16" height="19" viewBox="0 0 16 19" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M7 6V18.4805L15.9146 12.2402L7 6ZM14.1809 12.2402L7.995 16.5684V7.91209L14.1809 12.2402Z" fill="#C5C5C5"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M0 1L1 0H7L7.70711 0.292893L10.7071 3.29289L11 4V8.80841V10L8 7.5V14H1L0 13L0 1ZM1 1V13H8V7.5L10 9.30203V8.10005V4L7 1H1Z" fill="#C5C5C5"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M6 1H7V4H10.5V5H6V1Z" fill="#C5C5C5"/>
+</svg>
diff --git a/resources/dark/run.svg b/resources/dark/run.svg
new file mode 100644
index 0000000000..8b0a58eca9
--- /dev/null
+++ b/resources/dark/run.svg
@@ -0,0 +1,3 @@
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M4 2V14.4805L12.9146 8.24024L4 2ZM11.1809 8.24024L4.995 12.5684V3.91209L11.1809 8.24024Z" fill="#C5C5C5"/>
+</svg>
diff --git a/resources/light/play.svg b/resources/light/play.svg
new file mode 100644
index 0000000000..6f479653b5
--- /dev/null
+++ b/resources/light/play.svg
@@ -0,0 +1,5 @@
+<svg width="16" height="19" viewBox="0 0 16 19" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M7 6V18.4805L15.9146 12.2402L7 6ZM14.1809 12.2402L7.995 16.5684V7.91209L14.1809 12.2402Z" fill="#424242"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M0 1L1 0H7L7.70711 0.292893L10.7071 3.29289L11 4V8.80841V10L8 7.5V14H1L0 13L0 1ZM1 1V13H8V7.5L10 9.30203V8.10005V4L7 1H1Z" fill="#424242"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M6 1H7V4H10.5V5H6V1Z" fill="#424242"/>
+</svg>
diff --git a/resources/light/run.svg b/resources/light/run.svg
new file mode 100644
index 0000000000..2563bfa114
--- /dev/null
+++ b/resources/light/run.svg
@@ -0,0 +1,3 @@
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M4 2V14.4805L12.9146 8.24024L4 2ZM11.1809 8.24024L4.995 12.5684V3.91209L11.1809 8.24024Z" fill="#424242"/>
+</svg>
diff --git a/snippets/PowerShell.json b/snippets/PowerShell.json
index 787d47801d..02ac2849f0 100644
--- a/snippets/PowerShell.json
+++ b/snippets/PowerShell.json
@@ -1,3 +1,4 @@
+// The "Requires *" snippets should be removed if-and-when intellisense is implemented for the script requirement directive syntax.
 {
     "ModuleManifest": {
         "prefix": "manifest",
@@ -466,7 +467,7 @@
         "prefix": "class",
         "body": [
             "class ${1:ClassName} {",
-            "\t$0",
+            "\t${0:$TM_SELECTED_TEXT}",
             "}"
         ],
         "description": "Class definition snippet"
@@ -475,7 +476,7 @@
         "prefix": "ctor",
         "body": [
             "${1:ClassName}(${2:OptionalParameters}) {",
-            "\t$0",
+            "\t${0:$TM_SELECTED_TEXT}",
             "}"
         ],
         "description": "Class constructor definition snippet"
@@ -498,7 +499,7 @@
         "prefix": "method",
         "body": [
             "[${1:void}] ${2:MethodName}($${3:OptionalParameters}) {",
-            "\t$0",
+            "\t${0:$TM_SELECTED_TEXT}",
             "}"
         ],
         "description": "Class method definition snippet"
@@ -507,7 +508,7 @@
         "prefix": "enum",
         "body": [
             "enum ${1:EnumName} {",
-            "\t$0",
+            "\t${0:$TM_SELECTED_TEXT}",
             "}"
         ],
         "description": "Enum definition snippet"
@@ -522,12 +523,15 @@
             "\t)",
             "\t",
             "\tbegin {",
+            "\t\t",
             "\t}",
             "\t",
             "\tprocess {",
+            "\t\t$TM_SELECTED_TEXT",
             "\t}",
             "\t",
             "\tend {",
+            "\t\t",
             "\t}",
             "}"
         ],
@@ -543,12 +547,15 @@
             "\t)",
             "\t",
             "\tbegin {",
+            "\t\t",
             "\t}",
             "\t",
             "\tprocess {",
+            "\t\t$TM_SELECTED_TEXT",
             "\t}",
             "\t",
             "\tend {",
+            "\t\t",
             "\t}",
             "}"
         ],
@@ -585,6 +592,17 @@
         ],
         "description": "Parameter declaration snippet"
     },
+    "Parameter_Block" : {
+        "prefix": "param-block",
+        "body": ["[CmdletBinding()]",
+            "param (",
+            "    [Parameter()]",
+            "    [${1:TypeName}]",
+            "    $${2:ParameterName}$0",
+            ")"
+	],
+        "description": "A Parameter block to get you started."
+    },
     "Parameter-Path": {
         "prefix": "parameter-path",
         "body": [
@@ -658,7 +676,7 @@
             "\t",
             "\t# Gets the resource's current state.",
             "\t[${ResourceName:NameOfResource}] Get() {",
-            "\t\t$0",
+            "\t\t${0:$TM_SELECTED_TEXT}",
             "\t\treturn \\$this",
             "\t}",
             "\t",
@@ -682,7 +700,7 @@
             "\tparam (",
             "\t)",
             "\t",
-            "\t$0",
+            "\t${0:$TM_SELECTED_TEXT}",
             "}",
             "function Set-TargetResource {",
             "\tparam (",
@@ -701,7 +719,7 @@
         "prefix": "comment",
         "body": [
             "<#",
-            " # $0",
+            " # ${0:$TM_SELECTED_TEXT}",
             " #>"
         ],
         "description": "Comment block snippet"
@@ -710,7 +728,7 @@
         "prefix": "do-until",
         "body": [
             "do {",
-            "\t$0",
+            "\t${0:$TM_SELECTED_TEXT}",
             "} until (${1:condition})"
         ],
         "description": "do-until loop snippet"
@@ -719,7 +737,7 @@
         "prefix": "do-while",
         "body": [
             "do {",
-            "\t$0",
+            "\t${0:$TM_SELECTED_TEXT}",
             "} while (${1:condition})"
         ],
         "description": "do-while loop snippet"
@@ -728,7 +746,7 @@
         "prefix": "while",
         "body": [
             "while (${1:condition}) {",
-            "\t$0",
+            "\t${0:$TM_SELECTED_TEXT}",
             "}"
         ],
         "description": "while loop snippet"
@@ -737,7 +755,7 @@
         "prefix": "for",
         "body": [
             "for ($${1:i} = 0; $${1:i} -lt $${2:array}.Count; $${1:i}++) {",
-            "\t$0",
+            "\t${0:$TM_SELECTED_TEXT}",
             "}"
         ],
         "description": "for loop snippet"
@@ -746,7 +764,7 @@
         "prefix": "forr",
         "body": [
             "for ($${1:i} = $${2:array}.Count - 1; $${1:i} -ge 0 ; $${1:i}--) {",
-            "\t$0",
+            "\t${0:$TM_SELECTED_TEXT}",
             "}"
         ],
         "description": "reversed for loop snippet"
@@ -755,7 +773,7 @@
         "prefix": "foreach",
         "body": [
             "foreach ($${1:item} in $${2:collection}) {",
-            "\t$0",
+            "\t${0:$TM_SELECTED_TEXT}",
             "}"
         ],
         "description": "foreach loop snippet"
@@ -767,7 +785,7 @@
             "\tparam (",
             "\t\t${2:OptionalParameters}",
             "\t)",
-            "\t$0",
+            "\t${0:$TM_SELECTED_TEXT}",
             "}"
         ],
         "description": "Function definition snippet that contains a param block"
@@ -776,16 +794,16 @@
         "prefix": "Function-Inline",
         "body": [
             "function ${1:FunctionName} (${2:OptionalParameters}) {",
-            "\t$0",
+            "\t${0:$TM_SELECTED_TEXT}",
             "}"
         ],
-        "description": "Function definition snippet that does not contain a param block, but defines parameters inline. This syntax is commonly used in other lanaguages"
+        "description": "Function definition snippet that does not contain a param block, but defines parameters inline. This syntax is commonly used in other languages"
     },
     "if": {
         "prefix": "if",
         "body": [
             "if (${1:condition}) {",
-            "\t$0",
+            "\t${0:$TM_SELECTED_TEXT}",
             "}"
         ],
         "description": "if statement snippet"
@@ -794,7 +812,7 @@
         "prefix": "elseif",
         "body": [
             "elseif (${1:condition}) {",
-            "\t$0",
+            "\t${0:$TM_SELECTED_TEXT}",
             "}"
         ],
         "description": "elseif statement snippet"
@@ -803,7 +821,7 @@
         "prefix": "else",
         "body": [
             "else {",
-            "\t$0",
+            "\t${0:$TM_SELECTED_TEXT}",
             "}"
         ],
         "description": "else statement snippet"
@@ -812,7 +830,7 @@
         "prefix": "switch",
         "body": [
             "switch (${1:\\$x}) {",
-            "\t${2:condition} { $0 }",
+            "\t${2:condition} { ${0:$TM_SELECTED_TEXT} }",
             "\tDefault {}",
             "}"
         ],
@@ -822,7 +840,7 @@
         "prefix": "try",
         "body": [
             "try {",
-            "\t$0",
+            "\t${0:$TM_SELECTED_TEXT}",
             "}",
             "catch {",
             "\t",
@@ -834,7 +852,7 @@
         "prefix": "trycf",
         "body": [
             "try {",
-            "\t$0",
+            "\t${0:$TM_SELECTED_TEXT}",
             "}",
             "catch {",
             "\t",
@@ -849,7 +867,7 @@
         "prefix": "tryf",
         "body": [
             "try {",
-            "\t$0",
+            "\t${0:$TM_SELECTED_TEXT}",
             "}",
             "finally {",
             "\t",
@@ -864,7 +882,7 @@
             "\tparam (",
             "\t)",
             "",
-            "\t$0",
+            "\t${0:$TM_SELECTED_TEXT}",
             "}"
         ],
         "description": "workflow snippet"
@@ -873,7 +891,7 @@
         "prefix": "workflow foreach-parallel",
         "body": [
             "foreach -parallel ($${variable:item} in $${collection:collection}) {",
-            "\t$0",
+            "\t${0:$TM_SELECTED_TEXT}",
             "}"
         ],
         "description": "foreach-parallel snippet (for use inside a workflow)"
@@ -882,7 +900,7 @@
         "prefix": "workflow inlinescript",
         "body": [
             "inlineScript {",
-            "\t$0",
+            "\t${0:$TM_SELECTED_TEXT}",
             "}"
         ],
         "description": "inlinescript snippet (for use inside a workflow)"
@@ -891,7 +909,7 @@
         "prefix": "workflow parallel",
         "body": [
             "parallel {",
-            "\t$0",
+            "\t${0:$TM_SELECTED_TEXT}",
             "}"
         ],
         "description": "parallel snippet (for use inside a workflow)"
@@ -900,7 +918,7 @@
         "prefix": "workflow sequence",
         "body": [
             "sequence {",
-            "\t$0",
+            "\t${0:$TM_SELECTED_TEXT}",
             "}"
         ],
         "description": "sequence snippet (for use inside a workflow)"
@@ -948,9 +966,193 @@
         "prefix": "#region",
         "body": [
             "#region ${1}",
-            "$0",
+            "${0:$TM_SELECTED_TEXT}",
             "#endregion"
         ],
         "description": "Region Block for organizing and folding of your code"
+    },
+    "IfShouldProcess": {
+        "prefix": "IfShouldProcess",
+        "body": [
+            "if (\\$PSCmdlet.ShouldProcess(\"${1:Target}\", \"${2:Operation}\")) {",
+                "\t${0:$TM_SELECTED_TEXT}",
+            "}"
+        ],
+        "description": "Creates ShouldProcess block"
+    },
+    "CalculatedProperty": {
+        "prefix": "Calculated-Property",
+        "body": [
+            "@{name='${1:PropertyName}';expression={${2:${TM_SELECTED_TEXT:\\$_.PropertyValue}}}}$0"
+        ],
+        "description": "Creates a Calculated Property typically used with Select-Object."
+    },
+    "PesterDescribeContextIt": {
+        "prefix": "Describe-Context-It-Pester",
+        "body": [
+            "Describe \"${1:DescribeName}\" {",
+                "\tContext \"${2:ContextName}\" {",
+                    "\t\tIt \"${3:ItName}\" {",
+                        "\t\t\t${4:${TM_SELECTED_TEXT:Assertion}}",
+                    "\t\t}$0",
+                "\t}",
+            "}"
+        ],
+        "description": "Pester Describe block with nested Context & It blocks"
+    },
+    "PesterDescribeBlock": {
+        "prefix": "Describe-Pester",
+        "body": [
+            "Describe \"${1:DescribeName}\" {",
+                "\t${0:TM_SELECTED_TEXT}",
+            "}"
+        ],
+        "description": "Pester Describe block"
+    },
+    "PesterContextIt": {
+        "prefix": "Context-It-Pester",
+        "body": [
+            "Context \"${1:ContextName}\" {",
+                "\tIt \"${2:ItName}\" {",
+                    "\t\t${3:${TM_SELECTED_TEXT:Assertion}}",
+                "\t}$0",
+            "}"
+        ],
+        "description": "Pester - Context block with nested It block"
+    },
+    "PesterContext": {
+        "prefix": "Context-Pester",
+        "body": [
+            "Context \"${1:ContextName}\" {",
+                "\t${0:$TM_SELECTED_TEXT}",
+            "}"
+        ],
+        "description": "Pester - Context block"
+    },
+    "PesterIt": {
+        "prefix": "It-Pester",
+        "body": [
+            "It \"${1:ItName}\" {",
+                "\t${2:${TM_SELECTED_TEXT:Assertion}}",
+            "}$0"
+        ],
+        "description": "Pester - It block"
+    },
+    "ArgumentCompleterAttribute with ScriptBlock": {
+        "prefix": "completer-attribute",
+        "body": [
+            "[ArgumentCompleter({",
+            "\t[OutputType([System.Management.Automation.CompletionResult])]  # zero to many",
+            "\tparam(",
+            "\t\t[string] \\$CommandName,",
+            "\t\t[string] \\$ParameterName,",
+            "\t\t[string] \\$WordToComplete,",
+            "\t\t[System.Management.Automation.Language.CommandAst] \\$CommandAst,",
+            "\t\t[System.Collections.IDictionary] \\$FakeBoundParameters",
+            "\t)",
+            "\t",
+            "\t${0:$TM_SELECTED_TEXT}",
+            "})]"
+        ],
+        "description": "ArgumentCompleter parameter attribute with script block definition"
+    },
+    "ArgumentCompleterAttribute ScriptBlock": {
+        "prefix": "completer-scriptblock",
+        "body": [
+            "{",
+            "\t[OutputType([System.Management.Automation.CompletionResult])]  # zero to many",
+            "\tparam(",
+            "\t\t[string] \\$CommandName,",
+            "\t\t[string] \\$ParameterName,",
+            "\t\t[string] \\$WordToComplete,",
+            "\t\t[System.Management.Automation.Language.CommandAst] \\$CommandAst,",
+            "\t\t[System.Collections.IDictionary] \\$FakeBoundParameters",
+            "\t)",
+            "\t",
+            "\t${0:$TM_SELECTED_TEXT}",
+            "}"
+        ],
+        "description": "ArgumentCompleter parameter attribute script block definition"
+    },
+    "IArgumentCompleter Class": {
+        "prefix": "completer-class",
+        "body": [
+            "class ${1:ArgumentCompleter} : System.Management.Automation.IArgumentCompleter {",
+            "\t[System.Collections.Generic.IEnumerable[System.Management.Automation.CompletionResult]] CompleteArgument(",
+            "\t\t[string] \\$CommandName,",
+            "\t\t[string] \\$ParameterName,",
+            "\t\t[string] \\$WordToComplete,",
+            "\t\t[System.Management.Automation.Language.CommandAst] \\$CommandAst,",
+            "\t\t[System.Collections.IDictionary] \\$FakeBoundParameters",
+            "\t) {",
+            "\t\t\\$CompletionResults = [System.Collections.Generic.List[System.Management.Automation.CompletionResult]]::new()",
+            "\t\t",
+            "\t\t${0:$TM_SELECTED_TEXT}",
+            "\t\t",
+            "\t\treturn \\$CompletionResults",
+            "\t}",
+            "}"
+        ],
+        "description": "IArgumentCompleter implementation class definition"
+    },
+    "Requires Assembly": {
+        "prefix": "requires-assembly",
+        "body": "#Requires -Assembly '${1:${TM_SELECTED_TEXT:fully-qualified-name}}'",
+        "description": "Requires an assembly (by name) in order to execute the containing script file."
+    },
+    "Requires Assembly Path": {
+        "prefix": "requires-assembly-path",
+        "body": "#Requires -Assembly ${0:${TM_SELECTED_TEXT:path/to/assembly.dll}}",
+        "description": "Requires an assembly (by relative or absolute path) in order to execute the containing script file."
+    },
+    "Requires Assembly Version": {
+        "prefix": "requires-assembly-version",
+        "body": "#Requires -Assembly '${1:${TM_SELECTED_TEXT:fully-qualified-name}}, Version=${2:1.0.0.0}'",
+        "description": "Requires an assembly (by name and minimum version) in order to execute the containing script file."
+    },
+    "Requires Module": {
+        "prefix": "requires-module",
+        "body": "#Requires -Module ${0:${TM_SELECTED_TEXT:fully-qualified-name}}",
+        "description": "Requires a module (by name) in order to execute the containing script file."
+    },
+    "Requires Module RequiredVersion": {
+        "prefix": "requires-module-required-version",
+        "body": "#Requires -Module @{ ModuleName = '${1:${TM_SELECTED_TEXT:fully-qualified-name}}'; RequiredVersion = '${2:exact-required-version}' }",
+        "description": "Requires a module (by name and exact version) in order to execute the containing script file."
+    },
+    "Requires Module Version": {
+        "prefix": "requires-module-version",
+        "body": "#Requires -Module @{ ModuleName = '${1:${TM_SELECTED_TEXT:fully-qualified-name}}'; ModuleVersion = '${2:minimum-acceptable-version}' }",
+        "description": "Requires a module (by name and minimum version) in order to execute the containing script file."
+    },
+    "Requires PSEdition": {
+        "prefix": "requires-ps-edition",
+        "body": "#Requires -PSEdition ${1|Core,Desktop|}",
+        "description": "Requires a specific edition of PowerShell in order to execute the containing script file."
+    },
+    "Requires PSSnapin": {
+        "prefix": "requires-ps-snapin",
+        "body": "#Requires -PSSnapin ${0:${TM_SELECTED_TEXT:fully-qualified-name}}",
+        "description": "Requires a PowerShell snap-in (by name) in order to execute the containing script file."
+    },
+    "Requires PSSnapin Version": {
+        "prefix": "requires-ps-snapin-version",
+        "body": "#Requires -PSSnapin ${1:${TM_SELECTED_TEXT:fully-qualified-name}} -Version ${2:minimum-acceptable-version}",
+        "description": "Requires a PowerShell snap-in (by name and minimum version) in order to execute the containing script file."
+    },
+    "Requires RunAsAdministrator": {
+        "prefix": "requires-run-as-administrator",
+        "body": "#Requires -RunAsAdministrator",
+        "description": "Requires elevated user rights in order to execute the containing script file. Ignored on non-Windows systems. On Windows systems, it requires that the PowerShell session in which the containing script file is run must have been started with elevated user rights (\"Run as Administrator\")."
+    },
+    "Requires ShellId": {
+        "prefix": "requires-shell-id",
+        "body": "#Requires -ShellId ${0:${TM_SELECTED_TEXT:shell-id}}",
+        "description": "Requires a specific shell id in order to execute the containing script file. The current shell id may be determined by querying the $ShellId automatic variable."
+    },
+    "Requires Version": {
+        "prefix": "requires-version",
+        "body": "#Requires -Version ${0:${TM_SELECTED_TEXT:minimum-acceptable-version}}",
+        "description": "Requires a minimum version of PowerShell in order to execute the containing script file."
     }
 }
diff --git a/src/debugAdapter.ts b/src/debugAdapter.ts
index 5fca22b01a..1e7d0e6a41 100644
--- a/src/debugAdapter.ts
+++ b/src/debugAdapter.ts
@@ -35,9 +35,9 @@ function startDebugging() {
     // the connection details for the debug service
     const sessionDetails = utils.readSessionFile(debugSessionFilePath);
 
-    // Delete the session file after it has been read so that
-    // it isn't used mistakenly by another debug session
-    utils.deleteSessionFile(debugSessionFilePath);
+    // TODO: store session details into an in-memory store that can be shared between
+    // the debug adapter and client extension
+    // and then clean up the session details file.
 
     // Establish connection before setting up the session
     debugAdapterLogWriter.write("Connecting to pipe: " + sessionDetails.debugServicePipeName + "\r\n");
diff --git a/src/features/CodeActions.ts b/src/features/CodeActions.ts
index 53f18fd1db..d830bba195 100644
--- a/src/features/CodeActions.ts
+++ b/src/features/CodeActions.ts
@@ -42,7 +42,7 @@ export class CodeActionsFeature implements IFeature {
     }
 
     public showRuleDocumentation(ruleId: string) {
-        const pssaDocBaseURL = "https://github.com/PowerShell/PSScriptAnalyzer/blob/development/RuleDocumentation";
+        const pssaDocBaseURL = "https://github.com/PowerShell/PSScriptAnalyzer/blob/master/RuleDocumentation";
 
         if (!ruleId) {
             this.log.writeWarning("Cannot show documentation for code action, no ruleName was supplied.");
diff --git a/src/features/Console.ts b/src/features/Console.ts
index 70ae72a7a8..cd06a4e9ea 100644
--- a/src/features/Console.ts
+++ b/src/features/Console.ts
@@ -7,6 +7,7 @@ import { LanguageClient, NotificationType, RequestType } from "vscode-languagecl
 import { ICheckboxQuickPickItem, showCheckboxQuickPick } from "../controls/checkboxQuickPick";
 import { IFeature } from "../feature";
 import { Logger } from "../logging";
+import Settings = require("../settings");
 
 export const EvaluateRequestType = new RequestType<IEvaluateRequestArguments, void, void, void>("evaluate");
 export const OutputNotificationType = new NotificationType<IOutputNotificationBody, void>("output");
@@ -210,6 +211,20 @@ export class ConsoleFeature implements IFeature {
                     return;
                 }
 
+                if (vscode.window.activeTerminal &&
+                    vscode.window.activeTerminal.name !== "PowerShell Integrated Console") {
+                    this.log.write("PSIC is not active terminal. Running in active terminal using 'runSelectedText'");
+                    await vscode.commands.executeCommand("workbench.action.terminal.runSelectedText");
+
+                    // We need to honor the focusConsoleOnExecute setting here too. However, the boolean that `show`
+                    // takes is called `preserveFocus` which when `true` the terminal will not take focus.
+                    // This is the inverse of focusConsoleOnExecute so we have to inverse the boolean.
+                    vscode.window.activeTerminal.show(!Settings.load().integratedConsole.focusConsoleOnExecute);
+                    await vscode.commands.executeCommand("workbench.action.terminal.scrollToBottom");
+
+                    return;
+                }
+
                 const editor = vscode.window.activeTextEditor;
                 let selectionRange: vscode.Range;
 
diff --git a/src/features/CustomViews.ts b/src/features/CustomViews.ts
index 336d097ead..f5999877a7 100644
--- a/src/features/CustomViews.ts
+++ b/src/features/CustomViews.ts
@@ -2,8 +2,9 @@
  * Copyright (C) Microsoft Corporation. All rights reserved.
  *--------------------------------------------------------*/
 
-import vscode = require("vscode");
-import { LanguageClient, NotificationType, RequestType } from "vscode-languageclient";
+import * as path from "path";
+import * as vscode from "vscode";
+import { LanguageClient, RequestType } from "vscode-languageclient";
 import { IFeature } from "../feature";
 
 export class CustomViewsFeature implements IFeature {
@@ -94,13 +95,7 @@ class PowerShellContentProvider implements vscode.TextDocumentContentProvider {
 
     public showView(id: string, viewColumn: vscode.ViewColumn) {
         const uriString = this.getUri(id);
-        const view: CustomView = this.viewIndex[uriString];
-
-        vscode.commands.executeCommand(
-            "vscode.previewHtml",
-            uriString,
-            viewColumn,
-            view.title);
+        (this.viewIndex[uriString] as HtmlContentView).showContent(viewColumn);
     }
 
     public closeView(id: string) {
@@ -164,6 +159,8 @@ class HtmlContentView extends CustomView {
         styleSheetPaths: [],
     };
 
+    private webviewPanel: vscode.WebviewPanel;
+
     constructor(
         id: string,
         title: string) {
@@ -179,42 +176,63 @@ class HtmlContentView extends CustomView {
     }
 
     public getContent(): string {
-        let styleSrc = "none";
         let styleTags = "";
-
-        function getNonce(): number {
-            return Math.floor(Math.random() * 100000) + 100000;
-        }
-
         if (this.htmlContent.styleSheetPaths &&
             this.htmlContent.styleSheetPaths.length > 0) {
-            styleSrc = "";
             this.htmlContent.styleSheetPaths.forEach(
-                (p) => {
-                    const nonce = getNonce();
-                    styleSrc += `'nonce-${nonce}' `;
-                    styleTags += `<link nonce="${nonce}" href="${p}" rel="stylesheet" type="text/css" />\n`;
+                (styleSheetPath) => {
+                    styleTags += `<link rel="stylesheet" href="${
+                        styleSheetPath.toString().replace("file://", "vscode-resource://")
+                    }">\n`;
                 });
         }
 
-        let scriptSrc = "none";
         let scriptTags = "";
-
         if (this.htmlContent.javaScriptPaths &&
             this.htmlContent.javaScriptPaths.length > 0) {
-            scriptSrc = "";
             this.htmlContent.javaScriptPaths.forEach(
-                (p) => {
-                    const nonce = getNonce();
-                    scriptSrc += `'nonce-${nonce}' `;
-                    scriptTags += `<script nonce="${nonce}" src="${p}"></script>\n`;
+                (javaScriptPath) => {
+                    scriptTags += `<script src="${
+                        javaScriptPath.toString().replace("file://", "vscode-resource://")
+                    }"></script>\n`;
                 });
         }
 
         // Return an HTML page with the specified content
-        return `<html><head><meta http-equiv="Content-Security-Policy" ` +
-               `content="default-src 'none'; img-src *; style-src ${styleSrc}; script-src ${scriptSrc};">` +
-               `${styleTags}</head><body>\n${this.htmlContent.bodyContent}\n${scriptTags}</body></html>`;
+        return `<html><head>${styleTags}</head><body>\n${this.htmlContent.bodyContent}\n${scriptTags}</body></html>`;
+    }
+
+    public showContent(viewColumn: vscode.ViewColumn): void {
+        if (this.webviewPanel) {
+            this.webviewPanel.dispose();
+        }
+
+        let localResourceRoots: vscode.Uri[] = [];
+        if (this.htmlContent.javaScriptPaths) {
+            localResourceRoots = localResourceRoots.concat(this.htmlContent.javaScriptPaths.map((p) => {
+                return vscode.Uri.parse(path.dirname(p));
+            }));
+        }
+
+        if (this.htmlContent.styleSheetPaths) {
+            localResourceRoots = localResourceRoots.concat(this.htmlContent.styleSheetPaths.map((p) => {
+                return vscode.Uri.parse(path.dirname(p));
+            }));
+        }
+
+        this.webviewPanel = vscode.window.createWebviewPanel(
+            this.id,
+            this.title,
+            viewColumn,
+            {
+                enableScripts: true,
+                enableFindWidget: true,
+                enableCommandUris: true,
+                retainContextWhenHidden: true,
+                localResourceRoots,
+            });
+        this.webviewPanel.webview.html = this.getContent();
+        this.webviewPanel.reveal(viewColumn);
     }
 }
 
diff --git a/src/features/DebugSession.ts b/src/features/DebugSession.ts
index 6917fffa05..4c092f2f6e 100644
--- a/src/features/DebugSession.ts
+++ b/src/features/DebugSession.ts
@@ -4,7 +4,7 @@
 
 import vscode = require("vscode");
 import { CancellationToken, DebugConfiguration, DebugConfigurationProvider,
-    ExtensionContext, ProviderResult, WorkspaceFolder } from "vscode";
+    ExtensionContext, WorkspaceFolder } from "vscode";
 import { LanguageClient, NotificationType, RequestType } from "vscode-languageclient";
 import { IFeature } from "../feature";
 import { getPlatformDetails, OperatingSystem } from "../platform";
@@ -42,11 +42,94 @@ export class DebugSessionFeature implements IFeature, DebugConfigurationProvider
         }));
     }
 
+    public async provideDebugConfigurations(
+        folder: WorkspaceFolder | undefined,
+        token?: CancellationToken): Promise<DebugConfiguration[]> {
+
+        const launchCurrentFileId  = 0;
+        const launchScriptId       = 1;
+        const interactiveSessionId = 2;
+        const attachHostProcessId  = 3;
+
+        const debugConfigPickItems = [
+            {
+                id: launchCurrentFileId,
+                label: "Launch Current File",
+                description: "Launch and debug the file in the currently active editor window",
+            },
+            {
+                id: launchScriptId,
+                label: "Launch Script",
+                description: "Launch and debug the specified file or command",
+            },
+            {
+                id: interactiveSessionId,
+                label: "Interactive Session",
+                description: "Debug commands executed from the Integrated Console",
+            },
+            {
+                id: attachHostProcessId,
+                label: "Attach",
+                description: "Attach the debugger to a running PowerShell Host Process",
+            },
+        ];
+
+        const launchSelection =
+            await vscode.window.showQuickPick(
+                debugConfigPickItems,
+                { placeHolder: "Select a PowerShell debug configuration" });
+
+        if (launchSelection.id === launchCurrentFileId) {
+            return [
+                {
+                    name: "PowerShell: Launch Current File",
+                    type: "PowerShell",
+                    request: "launch",
+                    script: "${file}",
+                    cwd: "${file}",
+                },
+            ];
+        }
+
+        if (launchSelection.id === launchScriptId) {
+            return [
+                {
+                    name: "PowerShell: Launch Script",
+                    type: "PowerShell",
+                    request: "launch",
+                    script: "enter path or command to execute e.g.: ${workspaceFolder}/src/foo.ps1 or Invoke-Pester",
+                    cwd: "${workspaceFolder}",
+                },
+            ];
+        }
+
+        if (launchSelection.id === interactiveSessionId) {
+            return [
+                {
+                    name: "PowerShell: Interactive Session",
+                    type: "PowerShell",
+                    request: "launch",
+                    cwd: "",
+                },
+            ];
+        }
+
+        // Last remaining possibility is attach to host process
+        return [
+            {
+                name: "PowerShell: Attach to PowerShell Host Process",
+                type: "PowerShell",
+                request: "attach",
+                runspaceId: 1,
+            },
+        ];
+    }
+
     // DebugConfigurationProvider method
-    public resolveDebugConfiguration(
+    public async resolveDebugConfiguration(
         folder: WorkspaceFolder | undefined,
         config: DebugConfiguration,
-        token?: CancellationToken): ProviderResult<DebugConfiguration> {
+        token?: CancellationToken): Promise<DebugConfiguration> {
 
         // Make sure there is a session running before attempting to debug/run a program
         if (this.sessionManager.getSessionStatus() !== SessionStatus.Running) {
@@ -68,12 +151,33 @@ export class DebugSessionFeature implements IFeature, DebugConfigurationProvider
             const platformDetails = getPlatformDetails();
             const versionDetails = this.sessionManager.getPowerShellVersionDetails();
 
-            if (platformDetails.operatingSystem !== OperatingSystem.Windows) {
-                const msg = "Attaching to a PowerShell Host Process is supported only on Windows.";
+            // Cross-platform attach to process was added in 6.2.0-preview.4
+            if (versionDetails.version < "6.2.0" && platformDetails.operatingSystem !== OperatingSystem.Windows) {
+                const msg = `Attaching to a PowerShell Host Process on ${
+                    OperatingSystem[platformDetails.operatingSystem] } requires PowerShell 6.2 or higher.`;
                 return vscode.window.showErrorMessage(msg).then((_) => {
                     return undefined;
                 });
             }
+
+            // if nothing is set, prompt for the processId
+            if (!config.customPipeName && !config.processId) {
+                config.processId = await vscode.commands.executeCommand("PowerShell.PickPSHostProcess");
+
+                // No process selected. Cancel attach.
+                if (!config.processId) {
+                    return null;
+                }
+            }
+
+            if (!config.runspaceId && !config.runspaceName) {
+                config.runspaceId = await vscode.commands.executeCommand("PowerShell.PickRunspace", config.processId);
+
+                // No runspace selected. Cancel attach.
+                if (!config.runspaceId) {
+                    return null;
+                }
+            }
         }
 
         if (generateLaunchConfig) {
@@ -140,13 +244,13 @@ export class DebugSessionFeature implements IFeature, DebugConfigurationProvider
                     }
 
                     if ((currentDocument.languageId !== "powershell") || !isValidExtension) {
-                        let path = currentDocument.fileName;
+                        let docPath = currentDocument.fileName;
                         const workspaceRootPath = vscode.workspace.rootPath;
                         if (currentDocument.fileName.startsWith(workspaceRootPath)) {
-                            path = currentDocument.fileName.substring(vscode.workspace.rootPath.length + 1);
+                            docPath = currentDocument.fileName.substring(vscode.workspace.rootPath.length + 1);
                         }
 
-                        const msg = "PowerShell does not support debugging this file type: '" + path + "'.";
+                        const msg = "PowerShell does not support debugging this file type: '" + docPath + "'.";
                         vscode.window.showErrorMessage(msg);
                         return;
                     }
@@ -337,7 +441,12 @@ export class PickPSHostProcessFeature implements IFeature {
 
     private pickPSHostProcess(): Thenable<string> {
         return this.languageClient.sendRequest(GetPSHostProcessesRequestType, null).then((hostProcesses) => {
-            const items: IProcessItem[] = [];
+            // Start with the current PowerShell process in the list.
+            const items: IProcessItem[] = [{
+                label: "Current",
+                description: "The current PowerShell Integrated Console process.",
+                pid: "current",
+            }];
 
             for (const p in hostProcesses) {
                 if (hostProcesses.hasOwnProperty(p)) {
@@ -379,3 +488,123 @@ export class PickPSHostProcessFeature implements IFeature {
         }
     }
 }
+
+interface IRunspaceItem extends vscode.QuickPickItem {
+    id: string;	// payload for the QuickPick UI
+}
+
+interface IRunspace {
+    id: number;
+    name: string;
+    availability: string;
+}
+
+export const GetRunspaceRequestType =
+    new RequestType<any, IRunspace[], string, void>("powerShell/getRunspace");
+
+export class PickRunspaceFeature implements IFeature {
+
+    private command: vscode.Disposable;
+    private languageClient: LanguageClient;
+    private waitingForClientToken: vscode.CancellationTokenSource;
+    private getLanguageClientResolve: (value?: LanguageClient | Thenable<LanguageClient>) => void;
+
+    constructor() {
+        this.command =
+            vscode.commands.registerCommand("PowerShell.PickRunspace", (processId) => {
+                return this.getLanguageClient()
+                           .then((_) => this.pickRunspace(processId), (_) => undefined);
+            }, this);
+    }
+
+    public setLanguageClient(languageClient: LanguageClient) {
+        this.languageClient = languageClient;
+
+        if (this.waitingForClientToken) {
+            this.getLanguageClientResolve(this.languageClient);
+            this.clearWaitingToken();
+        }
+    }
+
+    public dispose() {
+        this.command.dispose();
+    }
+
+    private getLanguageClient(): Thenable<LanguageClient> {
+        if (this.languageClient) {
+            return Promise.resolve(this.languageClient);
+        } else {
+            // If PowerShell isn't finished loading yet, show a loading message
+            // until the LanguageClient is passed on to us
+            this.waitingForClientToken = new vscode.CancellationTokenSource();
+
+            return new Promise<LanguageClient>(
+                (resolve, reject) => {
+                    this.getLanguageClientResolve = resolve;
+
+                    vscode.window
+                        .showQuickPick(
+                            ["Cancel"],
+                            { placeHolder: "Attach to PowerShell host process: Please wait, starting PowerShell..." },
+                            this.waitingForClientToken.token)
+                        .then((response) => {
+                            if (response === "Cancel") {
+                                this.clearWaitingToken();
+                                reject();
+                            }
+                        });
+
+                    // Cancel the loading prompt after 60 seconds
+                    setTimeout(() => {
+                        if (this.waitingForClientToken) {
+                            this.clearWaitingToken();
+                            reject();
+
+                            vscode.window.showErrorMessage(
+                                "Attach to PowerShell host process: PowerShell session took too long to start.");
+                        }
+                    }, 60000);
+                },
+            );
+        }
+    }
+
+    private pickRunspace(processId): Thenable<string> {
+        return this.languageClient.sendRequest(GetRunspaceRequestType, processId).then((response) => {
+            const items: IRunspaceItem[] = [];
+
+            for (const runspace of response) {
+                // Skip default runspace
+                if ((runspace.id === 1 || runspace.name === "PSAttachRunspace")
+                    && processId === "current") {
+                    continue;
+                }
+
+                items.push({
+                    label: runspace.name,
+                    description: `ID: ${runspace.id} - ${runspace.availability}`,
+                    id: runspace.id.toString(),
+                });
+            }
+
+            const options: vscode.QuickPickOptions = {
+                placeHolder: "Select PowerShell runspace to debug",
+                matchOnDescription: true,
+                matchOnDetail: true,
+            };
+
+            return vscode.window.showQuickPick(items, options).then((item) => {
+                // Return undefined when user presses Esc.
+                // This prevents VSCode from opening launch.json in this case which happens if we return "".
+                return item ? `${item.id}` : undefined;
+            });
+        });
+    }
+
+    private clearWaitingToken() {
+        if (this.waitingForClientToken) {
+            this.waitingForClientToken.dispose();
+            this.waitingForClientToken = undefined;
+        }
+    }
+}
diff --git a/src/features/DocumentFormatter.ts b/src/features/DocumentFormatter.ts
index 11dac853c2..cb801fa5dd 100644
--- a/src/features/DocumentFormatter.ts
+++ b/src/features/DocumentFormatter.ts
@@ -246,7 +246,7 @@ class PSDocumentFormattingEditProvider implements
         const requestParams: DocumentRangeFormattingParams = {
             textDocument: TextDocumentIdentifier.create(document.uri.toString()),
             range: rangeParam,
-            options: this.getEditorSettings(),
+            options: this.getEditorSettings(editor),
         };
 
         const formattingStartTime = new Date().valueOf();
@@ -309,11 +309,12 @@ class PSDocumentFormattingEditProvider implements
         PSDocumentFormattingEditProvider.documentLocker.lock(document, unlockWhenDone);
     }
 
-    private getEditorSettings(): { insertSpaces: boolean, tabSize: number } {
-        const editorConfiguration = vscode.workspace.getConfiguration("editor");
+    private getEditorSettings(editor: TextEditor): { insertSpaces: boolean, tabSize: number } {
+        // Writing the editor options allows string or strong types going in, but always
+        // resolves to an appropriate value on read.
         return {
-            insertSpaces: editorConfiguration.get<boolean>("insertSpaces"),
-            tabSize: editorConfiguration.get<number>("tabSize"),
+            insertSpaces: editor.options.insertSpaces as boolean,
+            tabSize: editor.options.tabSize as number,
         };
     }
 }
diff --git a/src/features/ExtensionCommands.ts b/src/features/ExtensionCommands.ts
index 430ff9a2d1..23c3159b68 100644
--- a/src/features/ExtensionCommands.ts
+++ b/src/features/ExtensionCommands.ts
@@ -20,7 +20,7 @@ export interface IExtensionCommandQuickPickItem extends vscode.QuickPickItem {
 }
 
 export const InvokeExtensionCommandRequestType =
-    new RequestType<InvokeExtensionCommandRequestArguments, void, void, void>(
+    new RequestType<IInvokeExtensionCommandRequestArguments, void, void, void>(
         "powerShell/invokeExtensionCommand");
 
 export interface IEditorContext {
@@ -31,7 +31,7 @@ export interface IEditorContext {
     selectionRange: Range;
 }
 
-export interface InvokeExtensionCommandRequestArguments {
+export interface IInvokeExtensionCommandRequestArguments {
     name: string;
     context: IEditorContext;
 }
@@ -285,7 +285,7 @@ export class ExtensionCommandsFeature implements IFeature {
                 a.name.localeCompare(b.name));
     }
 
-    private showExtensionCommands(client: LanguageClient): Thenable<InvokeExtensionCommandRequestArguments> {
+    private showExtensionCommands(client: LanguageClient): Thenable<IInvokeExtensionCommandRequestArguments> {
 
         // If no extension commands are available, show a message
         if (this.extensionCommands.length === 0) {
diff --git a/src/features/GenerateBugReport.ts b/src/features/GenerateBugReport.ts
index 38d52bc2fd..cbbf462105 100644
--- a/src/features/GenerateBugReport.ts
+++ b/src/features/GenerateBugReport.ts
@@ -21,7 +21,7 @@ const extensions =
     vscode.extensions.all.filter((element) => element.packageJSON.isBuiltin === false)
         .sort((leftside, rightside): number => {
             if (leftside.packageJSON.name.toLowerCase() < rightside.packageJSON.name.toLowerCase()) {
-                 return -1;
+                return -1;
             }
             if (leftside.packageJSON.name.toLowerCase() > rightside.packageJSON.name.toLowerCase()) {
                 return 1;
@@ -37,18 +37,22 @@ export class GenerateBugReportFeature implements IFeature {
     constructor(private sessionManager: SessionManager) {
         this.command = vscode.commands.registerCommand("PowerShell.GenerateBugReport", () => {
 
-            const body = encodeURIComponent(`## Issue Description ##
+            const body = `Issue Description
+=====
 
 I am experiencing a problem with...
 
-## Attached Logs ##
+Attached Logs
+=====
 
 Follow the instructions in the [README](https://github.com/PowerShell/vscode-powershell#reporting-problems) about
 capturing and sending logs.
 
-## Environment Information ##
+Environment Information
+=====
 
-### Visual Studio Code ###
+Visual Studio Code
+-----
 
 | Name | Version |
 | --- | --- |
@@ -56,18 +60,20 @@ capturing and sending logs.
 | VSCode | ${vscode.version}|
 | PowerShell Extension Version | ${extensionVersion} |
 
-### PowerShell Information ###
+PowerShell Information
+-----
 
 ${this.getRuntimeInfo()}
 
-### Visual Studio Code Extensions ###
+Visual Studio Code Extensions
+-----
 
 <details><summary>Visual Studio Code Extensions(Click to Expand)</summary>
 
 ${this.generateExtensionTable(extensions)}
 </details>
 
-`);
+`;
 
             const encodedBody = encodeURIComponent(body);
             const fullUrl = `${issuesUrl}${queryStringPrefix}body=${encodedBody}`;
@@ -80,7 +86,7 @@ ${this.generateExtensionTable(extensions)}
     }
 
     public setLanguageClient(languageclient: LanguageClient) {
-        // Elimiinate tslint warning.
+        // Eliminate tslint warning.
     }
 
     private generateExtensionTable(installedExtensions): string {
diff --git a/src/features/GetCommands.ts b/src/features/GetCommands.ts
index 0a269f3d3a..b109c74e73 100644
--- a/src/features/GetCommands.ts
+++ b/src/features/GetCommands.ts
@@ -64,6 +64,9 @@ export class GetCommandsFeature implements IFeature {
             return;
         }
         this.languageClient.sendRequest(GetCommandRequestType, "").then((result) => {
+            const SidebarConfig = vscode.workspace.getConfiguration("powershell.sideBar");
+            const excludeFilter = (SidebarConfig.CommandExplorerExcludeFilter).map((filter) => filter.toLowerCase());
+            result = result.filter((command) => (excludeFilter.indexOf(command.moduleName.toLowerCase()) === -1));
             this.commandsExplorerProvider.powerShellCommands = result.map(toCommand);
             this.commandsExplorerProvider.refresh();
         });
diff --git a/src/features/PesterTests.ts b/src/features/PesterTests.ts
index 75bb17698b..ea2c5fea9f 100644
--- a/src/features/PesterTests.ts
+++ b/src/features/PesterTests.ts
@@ -18,8 +18,11 @@ export class PesterTestsFeature implements IFeature {
 
     private command: vscode.Disposable;
     private languageClient: LanguageClient;
+    private invokePesterStubScriptPath: string;
 
     constructor(private sessionManager: SessionManager) {
+        this.invokePesterStubScriptPath = path.resolve(__dirname, "../../../InvokePesterStub.ps1");
+
         // File context-menu command - Run Pester Tests
         this.command = vscode.commands.registerCommand(
             "PowerShell.RunPesterTestsFromFile",
@@ -35,8 +38,8 @@ export class PesterTestsFeature implements IFeature {
         // This command is provided for usage by PowerShellEditorServices (PSES) only
         this.command = vscode.commands.registerCommand(
             "PowerShell.RunPesterTests",
-            (uriString, runInDebugger, describeBlockName?) => {
-                this.launchTests(uriString, runInDebugger, describeBlockName);
+            (uriString, runInDebugger, describeBlockName?, describeBlockLineNumber?) => {
+                this.launchTests(uriString, runInDebugger, describeBlockName, describeBlockLineNumber);
             });
     }
 
@@ -51,34 +54,22 @@ export class PesterTestsFeature implements IFeature {
     private launchAllTestsInActiveEditor(launchType: LaunchType) {
         const uriString = vscode.window.activeTextEditor.document.uri.toString();
         const launchConfig = this.createLaunchConfig(uriString, launchType);
+        launchConfig.args.push("-All");
         this.launch(launchConfig);
     }
 
-    private async launchTests(uriString: string, runInDebugger: boolean, describeBlockName?: string) {
-        // PSES passes null for the describeBlockName to signal that it can't evaluate the TestName.
-        if (!describeBlockName) {
-            const answer = await vscode.window.showErrorMessage(
-                "This Describe block's TestName parameter cannot be evaluated. " +
-                `Would you like to ${runInDebugger ? "debug" : "run"} all the tests in this file?`,
-                "Yes", "No");
-
-            if (answer === "No") {
-                return;
-            }
-        }
+    private async launchTests(
+        uriString: string,
+        runInDebugger: boolean,
+        describeBlockName?: string,
+        describeBlockLineNumber?: number) {
 
         const launchType = runInDebugger ? LaunchType.Debug : LaunchType.Run;
-        const launchConfig = this.createLaunchConfig(uriString, launchType);
-
-        if (describeBlockName) {
-            launchConfig.args.push("-TestName");
-            launchConfig.args.push(`'${describeBlockName}'`);
-        }
-
+        const launchConfig = this.createLaunchConfig(uriString, launchType, describeBlockName, describeBlockLineNumber);
         this.launch(launchConfig);
     }
 
-    private createLaunchConfig(uriString: string, launchType: LaunchType) {
+    private createLaunchConfig(uriString: string, launchType: LaunchType, testName?: string, lineNum?: number) {
         const uri = vscode.Uri.parse(uriString);
         const currentDocument = vscode.window.activeTextEditor.document;
         const settings = Settings.load();
@@ -91,12 +82,10 @@ export class PesterTestsFeature implements IFeature {
             request: "launch",
             type: "PowerShell",
             name: "PowerShell Launch Pester Tests",
-            script: "Invoke-Pester",
+            script: this.invokePesterStubScriptPath,
             args: [
-                "-Script",
+                "-ScriptPath",
                 `'${scriptPath}'`,
-                "-PesterOption",
-                "@{IncludeVSCodeMarker=$true}",
             ],
             internalConsoleOptions: "neverOpen",
             noDebug: (launchType === LaunchType.Run),
@@ -107,6 +96,19 @@ export class PesterTestsFeature implements IFeature {
                     : path.dirname(currentDocument.fileName),
         };
 
+        if (lineNum) {
+            launchConfig.args.push("-LineNumber", `${lineNum}`);
+        }
+
+        if (testName) {
+            // Escape single quotes inside double quotes by doubling them up
+            if (testName.includes("'")) {
+                testName = testName.replace(/'/g, "''");
+            }
+
+            launchConfig.args.push("-TestName", `'${testName}'`);
+        }
+
         return launchConfig;
     }
 
diff --git a/src/features/ShowHelp.ts b/src/features/ShowHelp.ts
index e61f74d0a5..1c7b340d5c 100644
--- a/src/features/ShowHelp.ts
+++ b/src/features/ShowHelp.ts
@@ -22,7 +22,7 @@ export class ShowHelpFeature implements IFeature {
                     "Unable to instantiate; language client undefined.");
                 return;
             }
-            if (item === undefined) {
+            if (!item || !item.Name) {
 
                 const editor = vscode.window.activeTextEditor;
 
diff --git a/src/features/UpdatePowerShell.ts b/src/features/UpdatePowerShell.ts
new file mode 100644
index 0000000000..ab7caf5a40
--- /dev/null
+++ b/src/features/UpdatePowerShell.ts
@@ -0,0 +1,146 @@
+/*---------------------------------------------------------
+ * Copyright (C) Microsoft Corporation. All rights reserved.
+ *--------------------------------------------------------*/
+
+import fetch from "node-fetch";
+import * as semver from "semver";
+import { MessageItem, window } from "vscode";
+import { LanguageClient } from "vscode-languageclient";
+import * as Settings from "../settings";
+import { EvaluateRequestType } from "./Console";
+
+const PowerShellGitHubReleasesUrl =
+        "https://api.github.com/repos/PowerShell/PowerShell/releases/latest";
+const PowerShellGitHubPrereleasesUrl =
+    "https://api.github.com/repos/PowerShell/PowerShell/releases";
+
+export class GitHubReleaseInformation {
+    public static async FetchLatestRelease(preview: boolean): Promise<GitHubReleaseInformation> {
+        // Fetch the latest PowerShell releases from GitHub.
+        let releaseJson: any;
+        if (preview) {
+            // This gets all releases and the first one is the latest prerelease if
+            // there is a prerelease version.
+            releaseJson = (await fetch(PowerShellGitHubPrereleasesUrl)
+                .then((res) => res.json())).find((release: any) => release.prerelease);
+        } else {
+            releaseJson = await fetch(PowerShellGitHubReleasesUrl)
+                .then((res) => res.json());
+        }
+
+        return new GitHubReleaseInformation(
+            releaseJson.tag_name, releaseJson.assets);
+    }
+
+    public version: semver.SemVer;
+    public isPreview: boolean = false;
+    public assets: any[];
+
+    public constructor(version: string | semver.SemVer, assets: any[] = []) {
+        this.version = semver.parse(version);
+
+        if (semver.prerelease(this.version)) {
+            this.isPreview = true;
+        }
+
+        this.assets = assets;
+    }
+}
+
+interface IUpdateMessageItem extends MessageItem {
+    id: number;
+}
+
+export async function InvokePowerShellUpdateCheck(
+    languageServerClient: LanguageClient,
+    localVersion: semver.SemVer,
+    arch: string,
+    release: GitHubReleaseInformation) {
+    const options: IUpdateMessageItem[] = [
+        {
+            id: 0,
+            title: "Yes",
+        },
+        {
+            id: 1,
+            title: "Not now",
+        },
+        {
+            id: 2,
+            title: "Do not show this notification again",
+        },
+    ];
+
+    // If our local version is up-to-date, we can return early.
+    if (semver.compare(localVersion, release.version) >= 0) {
+        return;
+    }
+
+    const commonText: string = `You have an old version of PowerShell (${
+        localVersion.raw
+    }). The current latest release is ${
+        release.version.raw
+    }.`;
+
+    if (process.platform === "linux") {
+        await window.showInformationMessage(
+            `${commonText} We recommend updating to the latest version.`);
+        return;
+    }
+
+    const isMacOS: boolean = process.platform === "darwin";
+    const result = await window.showInformationMessage(
+        `${commonText} Would you like to update the version? ${
+            isMacOS ? "(Homebrew is required on macOS)" : ""
+        }`, ...options);
+
+    // If the user cancels the notification.
+    if (!result) { return; }
+
+    // Yes choice.
+    switch (result.id) {
+        // Yes choice.
+        case 0:
+            let script: string;
+            if (process.platform === "win32") {
+                const msiMatcher = arch === "x86" ?
+                    "win-x86.msi" : "win-x64.msi";
+
+                const assetUrl = release.assets.filter((asset: any) =>
+                    asset.name.indexOf(msiMatcher) >= 0)[0].browser_download_url;
+
+                // Grab MSI and run it.
+                // tslint:disable-next-line: max-line-length
+                script = `
+$randomFileName = [System.IO.Path]::GetRandomFileName()
+$tmpMsiPath = Microsoft.PowerShell.Management\\Join-Path ([System.IO.Path]::GetTempPath()) "$randomFileName.msi"
+Microsoft.PowerShell.Utility\\Invoke-RestMethod -Uri ${assetUrl} -OutFile $tmpMsiPath
+try
+{
+    Microsoft.PowerShell.Management\\Start-Process -Wait -Path $tmpMsiPath
+}
+finally
+{
+    Microsoft.PowerShell.Management\\Remove-Item $tmpMsiPath
+}`;
+
+            } else if (isMacOS) {
+                script = "brew cask upgrade powershell";
+                if (release.isPreview) {
+                    script = "brew cask upgrade powershell-preview";
+                }
+            }
+
+            await languageServerClient.sendRequest(EvaluateRequestType, {
+                expression: script,
+            });
+            break;
+
+        // Never choice.
+        case 2:
+            await Settings.change("promptToUpdatePowerShell", false, true);
+            break;
+        default:
+            break;
+    }
+}
diff --git a/src/main.ts b/src/main.ts
index 91273319f6..2718f3b54b 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -6,6 +6,7 @@
 
 import path = require("path");
 import vscode = require("vscode");
+import TelemetryReporter from "vscode-extension-telemetry";
 import { DocumentSelector } from "vscode-languageclient";
 import { IFeature } from "./feature";
 import { CodeActionsFeature } from "./features/CodeActions";
@@ -13,6 +14,7 @@ import { ConsoleFeature } from "./features/Console";
 import { CustomViewsFeature } from "./features/CustomViews";
 import { DebugSessionFeature } from "./features/DebugSession";
 import { PickPSHostProcessFeature } from "./features/DebugSession";
+import { PickRunspaceFeature } from "./features/DebugSession";
 import { SpecifyScriptArgsFeature } from "./features/DebugSession";
 import { DocumentFormatterFeature } from "./features/DocumentFormatter";
 import { ExamplesFeature } from "./features/Examples";
@@ -34,13 +36,21 @@ import Settings = require("./settings");
 import { PowerShellLanguageId } from "./utils";
 import utils = require("./utils");
 
+// The most reliable way to get the name and version of the current extension.
+// tslint:disable-next-line: no-var-requires
+const PackageJSON: any = require("../../package.json");
+
 // NOTE: We will need to find a better way to deal with the required
 //       PS Editor Services version...
-const requiredEditorServicesVersion = "1.10.3";
+const requiredEditorServicesVersion = "1.12.1";
+
+// the application insights key (also known as instrumentation key) used for telemetry.
+const AI_KEY: string = "AIF-d9b70cd4-b9f9-4d70-929b-a071c400b217";
 
 let logger: Logger;
 let sessionManager: SessionManager;
 let extensionFeatures: IFeature[] = [];
+let telemetryReporter: TelemetryReporter;
 
 const documentSelector: DocumentSelector = [
     { language: "powershell", scheme: "file" },
@@ -48,9 +58,11 @@ const documentSelector: DocumentSelector = [
 ];
 
 export function activate(context: vscode.ExtensionContext): void {
-
     checkForUpdatedVersion(context);
 
+    // create telemetry reporter on extension activation
+    telemetryReporter = new TelemetryReporter(PackageJSON.name, PackageJSON.version, AI_KEY);
+
     vscode.languages.setLanguageConfiguration(
         PowerShellLanguageId,
         {
@@ -114,7 +126,9 @@ export function activate(context: vscode.ExtensionContext): void {
     sessionManager =
         new SessionManager(
             requiredEditorServicesVersion,
-            logger, documentSelector);
+            logger,
+            documentSelector,
+            telemetryReporter);
 
     // Create features
     extensionFeatures = [
@@ -138,6 +152,7 @@ export function activate(context: vscode.ExtensionContext): void {
         new SpecifyScriptArgsFeature(context),
         new HelpCompletionFeature(logger),
         new CustomViewsFeature(),
+        new PickRunspaceFeature(),
     ];
 
     sessionManager.setExtensionFeatures(extensionFeatures);
@@ -151,23 +166,15 @@ function checkForUpdatedVersion(context: vscode.ExtensionContext) {
 
     const showReleaseNotes = "Show Release Notes";
     const powerShellExtensionVersionKey = "powerShellExtensionVersion";
-
-    const extensionVersion: string =
-        vscode
-            .extensions
-            .getExtension("ms-vscode.PowerShell")
-            .packageJSON
-            .version;
-
     const storedVersion = context.globalState.get(powerShellExtensionVersionKey);
 
     if (!storedVersion) {
         // TODO: Prompt to show User Guide for first-time install
-    } else if (extensionVersion !== storedVersion) {
+    } else if (PackageJSON.version !== storedVersion) {
         vscode
             .window
             .showInformationMessage(
-                `The PowerShell extension has been updated to version ${extensionVersion}!`,
+                `The PowerShell extension has been updated to version ${PackageJSON.version}!`,
                 showReleaseNotes)
             .then((choice) => {
                 if (choice === showReleaseNotes) {
@@ -180,7 +187,7 @@ function checkForUpdatedVersion(context: vscode.ExtensionContext) {
 
     context.globalState.update(
         powerShellExtensionVersionKey,
-        extensionVersion);
+        PackageJSON.version);
 }
 
 export function deactivate(): void {
@@ -194,4 +201,7 @@ export function deactivate(): void {
 
     // Dispose of the logger
     logger.dispose();
+
+    // Dispose of telemetry reporter
+    telemetryReporter.dispose();
 }
diff --git a/src/platform.ts b/src/platform.ts
index eb6146fb9a..34271fa398 100644
--- a/src/platform.ts
+++ b/src/platform.ts
@@ -66,22 +66,50 @@ export function getDefaultPowerShellPath(
     use32Bit: boolean = false): string | null {
 
     let powerShellExePath;
+    let psCoreInstallPath;
 
-    // Find the path to powershell.exe based on the current platform
+     // Find the path to the powershell executable based on the current platform
     // and the user's desire to run the x86 version of PowerShell
     if (platformDetails.operatingSystem === OperatingSystem.Windows) {
         if (use32Bit) {
-            powerShellExePath =
-                platformDetails.isOS64Bit && platformDetails.isProcess64Bit
-                    ? SysWow64PowerShellPath
-                    : System32PowerShellPath;
+            psCoreInstallPath =
+                (platformDetails.isProcess64Bit ? process.env["ProgramFiles(x86)"] : process.env.ProgramFiles)
+            + "\\PowerShell";
         } else {
-            powerShellExePath =
-                !platformDetails.isOS64Bit || platformDetails.isProcess64Bit
-                    ? System32PowerShellPath
-                    : SysnativePowerShellPath;
+            psCoreInstallPath =
+                (platformDetails.isProcess64Bit ? process.env.ProgramFiles : process.env.ProgramW6432) + "\\PowerShell";
         }
-    } else if (platformDetails.operatingSystem === OperatingSystem.MacOS) {
+
+        if (fs.existsSync(psCoreInstallPath)) {
+            const arch = platformDetails.isProcess64Bit ? "(x64)" : "(x86)";
+            const psCorePaths =
+                fs.readdirSync(psCoreInstallPath)
+                .map((item) => path.join(psCoreInstallPath, item))
+                .filter((item) => {
+                    const exePath = path.join(item, "pwsh.exe");
+                    return fs.lstatSync(item).isDirectory() && fs.existsSync(exePath);
+                })
+                .map((item) => ({
+                    versionName: `PowerShell ${path.parse(item).base} ${arch}`,
+                    exePath: path.join(item, "pwsh.exe"),
+                }));
+
+            if (psCorePaths && psCorePaths.length > 0) {
+                return powerShellExePath = psCorePaths[0].exePath;
+            }
+        }
+
+        // No PowerShell 6+ detected so use Windows PowerShell.
+        if (use32Bit) {
+                return platformDetails.isOS64Bit && platformDetails.isProcess64Bit
+                        ? SysWow64PowerShellPath
+                        : System32PowerShellPath;
+        }
+        return !platformDetails.isOS64Bit || platformDetails.isProcess64Bit
+                 ? System32PowerShellPath
+                 : SysnativePowerShellPath;
+    }
+    if (platformDetails.operatingSystem === OperatingSystem.MacOS) {
         // Always default to the stable version of PowerShell (if installed) but handle case of only Preview installed
         powerShellExePath = macOSExePath;
         if (!fs.existsSync(macOSExePath) && fs.existsSync(macOSPreviewExePath)) {
@@ -179,7 +207,7 @@ export function getAvailablePowerShellExes(
                     return fs.lstatSync(item).isDirectory() && fs.existsSync(exePath);
                 })
                 .map((item) => ({
-                    versionName: `PowerShell Core ${path.parse(item).base} ${arch}`,
+                    versionName: `PowerShell ${path.parse(item).base} ${arch}`,
                     exePath: path.join(item, "pwsh.exe"),
                 }));
 
@@ -200,7 +228,7 @@ export function getAvailablePowerShellExes(
         exePaths.forEach((exePath) => {
             if (fs.existsSync(exePath)) {
                 paths.push({
-                    versionName: "PowerShell Core" + (/-preview/.test(exePath) ? " Preview" : ""),
+                    versionName: "PowerShell" + (/-preview/.test(exePath) ? " Preview" : ""),
                     exePath,
                 });
             }
diff --git a/src/process.ts b/src/process.ts
index ba0e64c6c9..ec1b73b1b0 100644
--- a/src/process.ts
+++ b/src/process.ts
@@ -69,9 +69,20 @@ export class PowerShellProcess {
                         powerShellArgs.push("-ExecutionPolicy", "Bypass");
                     }
 
-                    powerShellArgs.push(
-                        "-Command",
-                        "& '" + PowerShellProcess.escapeSingleQuotes(startScriptPath) + "' " + this.startArgs);
+                    const startEditorServices = "& '" +
+                        PowerShellProcess.escapeSingleQuotes(startScriptPath) +
+                        "' " + this.startArgs;
+
+                    if (utils.isWindowsOS()) {
+                        powerShellArgs.push(
+                            "-Command",
+                            startEditorServices);
+                    } else {
+                        // Use -EncodedCommand for better quote support on non-Windows
+                        powerShellArgs.push(
+                            "-EncodedCommand",
+                            Buffer.from(startEditorServices, "utf16le").toString("base64"));
+                    }
 
                     let powerShellExePath = this.exePath;
 
diff --git a/src/session.ts b/src/session.ts
index daf47bdb20..ebcd9b2710 100644
--- a/src/session.ts
+++ b/src/session.ts
@@ -3,13 +3,13 @@
  *--------------------------------------------------------*/
 
 import cp = require("child_process");
-import crypto = require("crypto");
 import fs = require("fs");
 import net = require("net");
 import os = require("os");
 import path = require("path");
-import { StringDecoder } from "string_decoder";
+import * as semver from "semver";
 import vscode = require("vscode");
+import TelemetryReporter from "vscode-extension-telemetry";
 import { Message } from "vscode-jsonrpc";
 import { IFeature } from "./feature";
 import { Logger } from "./logging";
@@ -22,6 +22,7 @@ import {
     Middleware, NotificationType, RequestType, RequestType0,
     ResolveCodeLensSignature, RevealOutputChannelOn, StreamInfo } from "vscode-languageclient";
 
+import { GitHubReleaseInformation, InvokePowerShellUpdateCheck } from "./features/UpdatePowerShell";
 import {
     fixWindowsPowerShellPath, getAvailablePowerShellExes, getDefaultPowerShellPath,
     getPlatformDetails, IPlatformDetails, OperatingSystem } from "./platform";
@@ -36,7 +37,6 @@ export enum SessionStatus {
 }
 
 export class SessionManager implements Middleware {
-
     private ShowSessionMenuCommandName = "PowerShell.ShowSessionMenu";
 
     private hostVersion: string;
@@ -56,6 +56,7 @@ export class SessionManager implements Middleware {
     private sessionSettings: Settings.ISettings = undefined;
     private sessionDetails: utils.IEditorServicesSessionDetails;
     private bundledModulesPath: string;
+    private telemetryReporter: TelemetryReporter;
 
     // When in development mode, VS Code's session ID is a fake
     // value of "someValue.machineId".  Use that to detect dev
@@ -66,9 +67,11 @@ export class SessionManager implements Middleware {
     constructor(
         private requiredEditorServicesVersion: string,
         private log: Logger,
-        private documentSelector: DocumentSelector) {
+        private documentSelector: DocumentSelector,
+        private reporter: TelemetryReporter) {
 
         this.platformDetails = getPlatformDetails();
+        this.telemetryReporter = reporter;
 
         // Get the current version of this extension
         this.hostVersion =
@@ -116,34 +119,6 @@ export class SessionManager implements Middleware {
 
         this.powerShellExePath = this.getPowerShellExePath();
 
-        // Check for OpenSSL dependency on macOS when running PowerShell Core alpha. Look for the default
-        // Homebrew installation path and if that fails check the system-wide library path.
-        if (os.platform() === "darwin" && this.getPowerShellVersionLabel() === "alpha") {
-            if (!(utils.checkIfFileExists("/usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib") &&
-                    utils.checkIfFileExists("/usr/local/opt/openssl/lib/libssl.1.0.0.dylib")) &&
-                !(utils.checkIfFileExists("/usr/local/lib/libcrypto.1.0.0.dylib") &&
-                    utils.checkIfFileExists("/usr/local/lib/libssl.1.0.0.dylib"))) {
-                    const thenable =
-                        vscode.window.showWarningMessage(
-                            "The PowerShell extension will not work without OpenSSL on macOS and OS X when using " +
-                            "PowerShell Core alpha",
-                            "Show Documentation");
-
-                    thenable.then(
-                        (s) => {
-                            if (s === "Show Documentation") {
-                                cp.exec("open https://github.com/PowerShell/vscode-powershell/blob/master/docs/" +
-                                    "troubleshooting.md#1-powershell-intellisense-does-not-work-cant-debug-scripts");
-                            }
-                        });
-
-                    // Don't continue initializing since Editor Services will not load successfully
-                    this.setSessionFailure(
-                        "Cannot start PowerShell Editor Services due to missing OpenSSL dependency.");
-                    return;
-            }
-        }
-
         this.suppressRestartPrompt = false;
 
         if (this.powerShellExePath) {
@@ -418,8 +393,9 @@ export class SessionManager implements Middleware {
         if (!this.suppressRestartPrompt &&
             (settings.useX86Host !== this.sessionSettings.useX86Host ||
              settings.powerShellExePath.toLowerCase() !== this.sessionSettings.powerShellExePath.toLowerCase() ||
-             settings.developer.powerShellExePath.toLowerCase() !==
-                this.sessionSettings.developer.powerShellExePath.toLowerCase() ||
+             (settings.developer.powerShellExePath ? settings.developer.powerShellExePath.toLowerCase() : null) !==
+                (this.sessionSettings.developer.powerShellExePath
+                    ? this.sessionSettings.developer.powerShellExePath.toLowerCase() : null) ||
              settings.developer.editorServicesLogLevel.toLowerCase() !==
                 this.sessionSettings.developer.editorServicesLogLevel.toLowerCase() ||
              settings.developer.bundledModulesPath.toLowerCase() !==
@@ -588,13 +564,43 @@ export class SessionManager implements Middleware {
                     this.languageServerClient
                         .sendRequest(PowerShellVersionRequestType)
                         .then(
-                            (versionDetails) => {
+                            async (versionDetails) => {
                                 this.versionDetails = versionDetails;
+
+                                if (!this.inDevelopmentMode) {
+                                    this.telemetryReporter.sendTelemetryEvent("powershellVersionCheck",
+                                        { powershellVersion: versionDetails.version });
+                                }
+
                                 this.setSessionStatus(
                                     this.versionDetails.architecture === "x86"
                                         ? `${this.versionDetails.displayVersion} (${this.versionDetails.architecture})`
                                         : this.versionDetails.displayVersion,
                                     SessionStatus.Running);
+
+                                // If the user opted to not check for updates, then don't.
+                                if (!this.sessionSettings.promptToUpdatePowerShell) { return; }
+
+                                try {
+                                    const localVersion = semver.parse(this.versionDetails.version);
+                                    if (semver.lt(localVersion, "6.0.0")) {
+                                        // Skip prompting when using Windows PowerShell for now.
+                                        return;
+                                    }
+
+                                    // Fetch the latest PowerShell releases from GitHub.
+                                    const isPreRelease = !!semver.prerelease(localVersion);
+                                    const release: GitHubReleaseInformation =
+                                        await GitHubReleaseInformation.FetchLatestRelease(isPreRelease);
+
+                                    await InvokePowerShellUpdateCheck(
+                                        this.languageServerClient,
+                                        localVersion,
+                                        this.versionDetails.architecture,
+                                        release);
+                                } catch {
+                                    // best effort. This probably failed to fetch the data from GitHub.
+                                }
                             });
 
                     // Send the new LanguageClient to extension features
@@ -768,7 +774,7 @@ export class SessionManager implements Middleware {
                 .filter((item) => item.exePath.toLowerCase() !== currentExePath)
                 .map((item) => {
                     return new SessionMenuItem(
-                        `Switch to ${item.versionName}`,
+                        `Switch to: ${item.versionName}`,
                         () => { this.changePowerShellExePath(item.exePath); });
                 });
 
diff --git a/src/settings.ts b/src/settings.ts
index c7a87ffef7..274a9ce840 100644
--- a/src/settings.ts
+++ b/src/settings.ts
@@ -14,6 +14,12 @@ enum CodeFormattingPreset {
     Stroustrup,
 }
 
+enum PipelineIndentationStyle {
+    IncreaseIndentationForFirstPipeline,
+    IncreaseIndentationAfterEveryPipeline,
+    NoIndentation,
+}
+
 export enum HelpCompletion {
     Disabled = "Disabled",
     BlockComment = "BlockComment",
@@ -35,16 +41,21 @@ export interface ICodeFoldingSettings {
 }
 
 export interface ICodeFormattingSettings {
+    autoCorrectAliases: boolean;
     preset: CodeFormattingPreset;
     openBraceOnSameLine: boolean;
     newLineAfterOpenBrace: boolean;
     newLineAfterCloseBrace: boolean;
+    pipelineIndentationStyle: PipelineIndentationStyle;
     whitespaceBeforeOpenBrace: boolean;
     whitespaceBeforeOpenParen: boolean;
     whitespaceAroundOperator: boolean;
     whitespaceAfterSeparator: boolean;
+    WhitespaceInsideBrace: true;
+    WhitespaceAroundPipe: true;
     ignoreOneLineBlock: boolean;
     alignPropertyValuePairs: boolean;
+    useCorrectCasing: boolean;
 }
 
 export interface IScriptAnalysisSettings {
@@ -69,6 +80,7 @@ export interface ISettings {
     powerShellAdditionalExePaths?: IPowerShellAdditionalExePathSettings[];
     powerShellDefaultVersion?: string;
     powerShellExePath?: string;
+    promptToUpdatePowerShell?: boolean;
     bundledModulesPath?: string;
     startAutomatically?: boolean;
     useX86Host?: boolean;
@@ -121,16 +133,21 @@ export function load(): ISettings {
     };
 
     const defaultCodeFormattingSettings: ICodeFormattingSettings = {
+        autoCorrectAliases: false,
         preset: CodeFormattingPreset.Custom,
         openBraceOnSameLine: true,
         newLineAfterOpenBrace: true,
         newLineAfterCloseBrace: true,
+        pipelineIndentationStyle: PipelineIndentationStyle.NoIndentation,
         whitespaceBeforeOpenBrace: true,
         whitespaceBeforeOpenParen: true,
         whitespaceAroundOperator: true,
         whitespaceAfterSeparator: true,
+        WhitespaceInsideBrace: true,
+        WhitespaceAroundPipe: true,
         ignoreOneLineBlock: true,
         alignPropertyValuePairs: true,
+        useCorrectCasing: false,
     };
 
     const defaultIntegratedConsoleSettings: IIntegratedConsoleSettings = {
@@ -147,6 +164,8 @@ export function load(): ISettings {
             configuration.get<string>("powerShellDefaultVersion", undefined),
         powerShellExePath:
             configuration.get<string>("powerShellExePath", undefined),
+        promptToUpdatePowerShell:
+            configuration.get<boolean>("promptToUpdatePowerShell", true),
         bundledModulesPath:
             "../../modules",
         useX86Host:
@@ -172,12 +191,12 @@ export function load(): ISettings {
     };
 }
 
-export function change(settingName: string, newValue: any, global: boolean = false): Thenable<void> {
+export async function change(settingName: string, newValue: any, global: boolean = false): Promise<void> {
     const configuration: vscode.WorkspaceConfiguration =
         vscode.workspace.getConfiguration(
             utils.PowerShellLanguageId);
 
-    return configuration.update(settingName, newValue, global);
+    await configuration.update(settingName, newValue, global);
 }
 
 function getWorkspaceSettingsWithDefaults<TSettings>(
diff --git a/test/features/CustomViews.test.ts b/test/features/CustomViews.test.ts
new file mode 100644
index 0000000000..c9eed44e11
--- /dev/null
+++ b/test/features/CustomViews.test.ts
@@ -0,0 +1,140 @@
+/*---------------------------------------------------------
+ * Copyright (C) Microsoft Corporation. All rights reserved.
+ *--------------------------------------------------------*/
+
+import * as assert from "assert";
+import fs = require("fs");
+import path = require("path");
+import rewire = require("rewire");
+import vscode = require("vscode");
+
+// Setup types that are not exported.
+const customViews = rewire("../../src/features/CustomViews");
+const htmlContentViewClass = customViews.__get__("HtmlContentView");
+const HtmlContentView: typeof htmlContentViewClass = htmlContentViewClass;
+
+// interfaces for tests
+interface ITestFile {
+    fileName: string;
+    content: string;
+}
+
+interface IHtmlContentViewTestCase {
+    name: string;
+    htmlContent: string;
+    javaScriptFiles: ITestFile[];
+    cssFiles: ITestFile[];
+    expectedHtmlString: string;
+}
+
+function convertToVSCodeResourceScheme(filePath: string): string {
+    return vscode.Uri.file(filePath).toString().replace("file://", "vscode-resource://");
+}
+
+suite("CustomViews tests", () => {
+    const testCases: IHtmlContentViewTestCase[] = [
+        // Basic test that has no js or css.
+        {
+            name: "Basic",
+            htmlContent: "hello",
+            javaScriptFiles: [],
+            cssFiles: [],
+            expectedHtmlString: `<html><head></head><body>
+hello
+</body></html>`,
+        },
+
+        // A test that adds a js file.
+        {
+            name: "With JavaScript file",
+            htmlContent: "hello",
+            javaScriptFiles: [
+                {
+                    fileName: "testCustomViews.js",
+                    content: "console.log('asdf');",
+                },
+            ],
+            cssFiles: [],
+            expectedHtmlString: `<html><head></head><body>
+hello
+<script src="${convertToVSCodeResourceScheme(path.join(__dirname, "testCustomViews.js"))}"></script>
+</body></html>`,
+        },
+
+        // A test that adds a js file in the current directory, and the parent directory.
+        {
+            name: "With 2 JavaScript files in two different locations",
+            htmlContent: "hello",
+            javaScriptFiles: [
+                {
+                    fileName: "testCustomViews.js",
+                    content: "console.log('asdf');",
+                },
+                {
+                    fileName: "../testCustomViews.js",
+                    content: "console.log('asdf');",
+                },
+            ],
+            cssFiles: [],
+            expectedHtmlString: `<html><head></head><body>
+hello
+<script src="${convertToVSCodeResourceScheme(path.join(__dirname, "testCustomViews.js"))}"></script>
+<script src="${convertToVSCodeResourceScheme(path.join(__dirname, "../testCustomViews.js"))}"></script>
+</body></html>`,
+        },
+
+        // A test that adds a js file and a css file.
+        {
+            name: "With JavaScript and CSS file",
+            htmlContent: "hello",
+            javaScriptFiles: [
+                {
+                    fileName: "testCustomViews.js",
+                    content: "console.log('asdf');",
+                },
+            ],
+            cssFiles: [
+                {
+                    fileName: "testCustomViews.css",
+                    content: "body: { background-color: green; }",
+                },
+            ],
+            expectedHtmlString: `<html><head><link rel="stylesheet" href="${
+                convertToVSCodeResourceScheme(path.join(__dirname, "testCustomViews.css"))}">
+</head><body>
+hello
+<script src="${convertToVSCodeResourceScheme(path.join(__dirname, "testCustomViews.js"))}"></script>
+</body></html>`,
+        },
+    ];
+
+    for (const testCase of testCases) {
+        test(`Can create an HtmlContentView and get its content - ${testCase.name}`, () => {
+            const htmlContentView = new HtmlContentView();
+
+            const jsPaths = testCase.javaScriptFiles.map((jsFile) => {
+                const jsPath: string = path.join(__dirname, jsFile.fileName);
+                fs.writeFileSync(jsPath, jsFile.content);
+                return vscode.Uri.file(jsPath).toString();
+            });
+
+            const cssPaths = testCase.cssFiles.map((cssFile) => {
+                const cssPath: string = path.join(__dirname, cssFile.fileName);
+                fs.writeFileSync(cssPath, cssFile.content);
+                return vscode.Uri.file(cssPath).toString();
+            });
+
+            htmlContentView.htmlContent = {
+                bodyContent: testCase.htmlContent,
+                javaScriptPaths: jsPaths,
+                styleSheetPaths: cssPaths,
+            };
+            try {
+                assert.equal(htmlContentView.getContent(), testCase.expectedHtmlString);
+            } finally {
+                jsPaths.forEach((jsPath) => fs.unlinkSync(vscode.Uri.parse(jsPath).fsPath));
+                cssPaths.forEach((cssPath) => fs.unlinkSync(vscode.Uri.parse(cssPath).fsPath));
+            }
+        });
+    }
+});
diff --git a/test/features/UpdatePowerShell.test.ts b/test/features/UpdatePowerShell.test.ts
new file mode 100644
index 0000000000..20b02b501f
--- /dev/null
+++ b/test/features/UpdatePowerShell.test.ts
@@ -0,0 +1,22 @@
+/*---------------------------------------------------------
+ * Copyright (C) Microsoft Corporation. All rights reserved.
+ *--------------------------------------------------------*/
+
+import * as assert from "assert";
+import { GitHubReleaseInformation } from "../../src/features/UpdatePowerShell";
+
+suite("UpdatePowerShell tests", () => {
+    test("Can get the latest version", async () => {
+        const release: GitHubReleaseInformation = await GitHubReleaseInformation.FetchLatestRelease(false);
+        assert.strictEqual(release.isPreview, false, "expected to not be preview.");
+        assert.strictEqual(release.version.prerelease.length === 0, true, "expected to not have preview in version.");
+        assert.strictEqual(release.assets.length > 0, true, "expected to have assets.");
+    });
+
+    test("Can get the latest preview version", async () => {
+        const release: GitHubReleaseInformation = await GitHubReleaseInformation.FetchLatestRelease(true);
+        assert.strictEqual(release.isPreview, true, "expected to be preview.");
+        assert.strictEqual(release.version.prerelease.length > 0, true, "expected to have preview in version.");
+        assert.strictEqual(release.assets.length > 0, true, "expected to have assets.");
+    });
+});
diff --git a/test/index.ts b/test/index.ts
index 4d7efea806..a42d35d3bb 100644
--- a/test/index.ts
+++ b/test/index.ts
@@ -2,13 +2,20 @@
 * Copyright (C) Microsoft Corporation. All rights reserved.
 *--------------------------------------------------------*/
 // tslint:disable no-var-requires
-
-let testRunner = require("vscode/lib/testrunner");
+import * as path from "path";
+import testRunner = require("vscode/lib/testrunner");
 
 // See https://github.com/mochajs/mocha/wiki/Using-mocha-programmatically#set-options for options
 testRunner.configure({
     ui: "tdd", 		// the TDD UI is being used in extension.test.ts (suite, test, etc.)
     useColors: true, // colored output from test results
+    reporter: "mocha-multi-reporters",
+    reporterOptions: {
+        reporterEnabled: "spec, mocha-junit-reporter",
+        mochaJunitReporterReporterOptions: {
+            mochaFile: path.join(__dirname, "..", "..", "test-results.xml"),
+        },
+    },
 });
 
 module.exports = testRunner;
diff --git a/test/platform.test.ts b/test/platform.test.ts
index b13cb303ae..a2b486a8c5 100644
--- a/test/platform.test.ts
+++ b/test/platform.test.ts
@@ -77,7 +77,7 @@ suite("Platform module", () => {
 
         checkDefaultPowerShellPath(
             platformDetails,
-            platform.SysnativePowerShellPath);
+            "C:\\Program Files\\PowerShell\\6\\pwsh.exe");
 
         checkAvailableWindowsPowerShellPaths(
             platformDetails,
@@ -107,7 +107,7 @@ suite("Platform module", () => {
 
         checkDefaultPowerShellPath(
             platformDetails,
-            platform.System32PowerShellPath);
+            "C:\\Program Files\\PowerShell\\6\\pwsh.exe");
 
         checkAvailableWindowsPowerShellPaths(
             platformDetails,
@@ -118,4 +118,86 @@ suite("Platform module", () => {
                 },
             ]);
     });
+    if (process.platform === "win32") {
+        suite("64-bit Windows, 64-bit VS Code", () => {
+            const platformDetails: platform.IPlatformDetails = {
+                operatingSystem: platform.OperatingSystem.Windows,
+                isOS64Bit: true,
+                isProcess64Bit: true,
+            };
+
+            checkDefaultPowerShellPath(
+                platformDetails,
+                platform.System32PowerShellPath);
+
+            checkAvailableWindowsPowerShellPaths(
+                platformDetails,
+                [
+                    {
+                        versionName: platform.WindowsPowerShell64BitLabel,
+                        exePath: platform.System32PowerShellPath,
+                    },
+                    {
+                        versionName: platform.WindowsPowerShell32BitLabel,
+                        exePath: platform.SysWow64PowerShellPath,
+                    },
+                ]);
+
+            checkFixedWindowsPowerShellpath(
+                platformDetails,
+                platform.SysnativePowerShellPath,
+                platform.System32PowerShellPath);
+        });
+
+        suite("64-bit Windows, 32-bit VS Code", () => {
+            const platformDetails: platform.IPlatformDetails = {
+                operatingSystem: platform.OperatingSystem.Windows,
+                isOS64Bit: true,
+                isProcess64Bit: false,
+            };
+
+            checkDefaultPowerShellPath(
+                platformDetails,
+                "C:\\Program Files\\PowerShell\\6\\pwsh.exe");
+
+            checkAvailableWindowsPowerShellPaths(
+                platformDetails,
+                [
+                    {
+                        versionName: platform.WindowsPowerShell64BitLabel,
+                        exePath: platform.SysnativePowerShellPath,
+                    },
+                    {
+                        versionName: platform.WindowsPowerShell32BitLabel,
+                        exePath: platform.System32PowerShellPath,
+                    },
+                ]);
+
+            checkFixedWindowsPowerShellpath(
+                platformDetails,
+                platform.SysWow64PowerShellPath,
+                platform.System32PowerShellPath);
+        });
+
+        suite("32-bit Windows, 32-bit VS Code", () => {
+            const platformDetails: platform.IPlatformDetails = {
+                operatingSystem: platform.OperatingSystem.Windows,
+                isOS64Bit: false,
+                isProcess64Bit: false,
+            };
+
+            checkDefaultPowerShellPath(
+                platformDetails,
+                "C:\\Program Files\\PowerShell\\6\\pwsh.exe");
+
+            checkAvailableWindowsPowerShellPaths(
+                platformDetails,
+                [
+                    {
+                        versionName: platform.WindowsPowerShell32BitLabel,
+                        exePath: platform.System32PowerShellPath,
+                    },
+                ]);
+        });
+    }
 });
diff --git a/test/settings.test.ts b/test/settings.test.ts
new file mode 100644
index 0000000000..6117d170f2
--- /dev/null
+++ b/test/settings.test.ts
@@ -0,0 +1,31 @@
+/*---------------------------------------------------------
+ * Copyright (C) Microsoft Corporation. All rights reserved.
+ *--------------------------------------------------------*/
+
+import * as assert from "assert";
+import Settings = require("../src/settings");
+
+suite("Settings module", () => {
+    test("Settings load without error", () => {
+        assert.doesNotThrow(Settings.load);
+    });
+
+    test("Settings update correctly", async () => {
+        // then syntax
+        Settings.change("helpCompletion", "BlockComment", false).then(() =>
+            assert.strictEqual(Settings.load().helpCompletion, "BlockComment"));
+
+        // async/await syntax
+        await Settings.change("helpCompletion", "LineComment", false);
+        assert.strictEqual(Settings.load().helpCompletion, "LineComment");
+    });
+
+    test("Settings that can only be user settings update correctly", async () => {
+        // set to false means it's set as a workspace-level setting so this should throw.
+        assert.rejects(async () => await Settings.change("powerShellExePath", "dummyPath", false));
+
+        // set to true means it's a user-level setting so this should not throw.
+        await Settings.change("powerShellExePath", "dummyPath", true);
+        assert.strictEqual(Settings.load().powerShellExePath, "dummyPath");
+    });
+});
diff --git a/tools/releaseBuild/Image/DockerFile b/tools/releaseBuild/Image/DockerFile
deleted file mode 100644
index 596b61bcd0..0000000000
--- a/tools/releaseBuild/Image/DockerFile
+++ /dev/null
@@ -1,34 +0,0 @@
-# escape=`
-#0.3.6 (no powershell 6)
-FROM microsoft/dotnet-framework:4.7.1
-LABEL maintainer='PowerShell Team <powershellteam@hotmail.com>'
-LABEL description="Build's PowerShell Editor Services"
-
-SHELL ["C:\\windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe", "-command"]
-
-COPY dockerInstall.psm1 containerFiles/dockerInstall.psm1
-
-RUN Import-Module PackageManagement; `
-    Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force; `
-    Set-PSRepository -Name PSGallery -InstallationPolicy Trusted | Out-Null; `
-    Install-Module InvokeBuild -MaximumVersion 5.1.0 -Scope CurrentUser -Force; `
-    Install-Module platyPS -RequiredVersion 0.9.0 -Scope CurrentUser -Force;
-
-# Install Nodejs
-RUN Import-Module ./containerFiles/dockerInstall.psm1; `
-    Install-ChocolateyPackage -PackageName nodejs-lts -Executable node.exe;
-
-# Copy build script over
-COPY build.ps1 containerFiles/build.ps1
-
-# Add an environment variable for build versioning
-ENV VSTS_BUILD=1
-ENV VSTS_BUILD_VERSION=1.10.3
-
-# Uncomment to debug locally
-# RUN Import-Module ./containerFiles/dockerInstall.psm1; `
-#     Install-ChocolateyPackage -PackageName git -Executable git.exe; `
-#     git clone https://github.com/PowerShell/PowerShellEditorServices;
-
-ENTRYPOINT ["C:\\windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe", "-command"]
-
diff --git a/tools/releaseBuild/Image/build.ps1 b/tools/releaseBuild/Image/build.ps1
deleted file mode 100644
index eb778b1ebf..0000000000
--- a/tools/releaseBuild/Image/build.ps1
+++ /dev/null
@@ -1,13 +0,0 @@
-param ( [string]$target )
-if ( ! (test-path ${target} ) ) {
-    new-item -type directory ${target}
-}
-else {
-    if ( test-path -pathtype leaf ${target} ) {
-        remove-item -force ${target}
-        new-item -type directory ${target}
-    }
-}
-push-location C:/vscode-powershell
-Invoke-Build GetExtensionVersion,Clean,Build,Test,Package
-Copy-Item -Verbose -Recurse "C:/vscode-powershell/PowerShell-insiders.vsix" "${target}/PowerShell-insiders.vsix"
diff --git a/tools/releaseBuild/Image/dockerInstall.psm1 b/tools/releaseBuild/Image/dockerInstall.psm1
deleted file mode 100644
index 143334e273..0000000000
--- a/tools/releaseBuild/Image/dockerInstall.psm1
+++ /dev/null
@@ -1,114 +0,0 @@
-function Install-ChocolateyPackage
-{
-    param(
-        [Parameter(Mandatory=$true)]
-        [string]
-        $PackageName,
-
-        [Parameter(Mandatory=$false)]
-        [string]
-        $Executable,
-
-        [string[]]
-        $ArgumentList,
-
-        [switch]
-        $Cleanup,
-
-        [int]
-        $ExecutionTimeout = 2700,
-
-        [string]
-        $Version
-    )
-
-    if(-not(Get-Command -name Choco -ErrorAction SilentlyContinue))
-    {
-        Write-Verbose "Installing Chocolatey provider..." -Verbose
-        Invoke-WebRequest https://chocolatey.org/install.ps1 -UseBasicParsing | Invoke-Expression
-    }
-
-    Write-Verbose "Installing $PackageName..." -Verbose
-    $extraCommand = @()
-    if($Version)
-    {
-        $extraCommand += '--version', $version
-    }
-    choco install -y $PackageName --no-progress --execution-timeout=$ExecutionTimeout $ArgumentList $extraCommands
-
-    if($executable)
-    {
-        Write-Verbose "Verifing $Executable is in path..." -Verbose
-        $exeSource = $null
-        $exeSource = Get-ChildItem -path "$env:ProgramFiles\$Executable" -Recurse -ErrorAction SilentlyContinue | Select-Object -First 1 -ExpandProperty FullName
-        if(!$exeSource)
-        {
-            Write-Verbose "Falling back to x86 program files..." -Verbose
-            $exeSource = Get-ChildItem -path "${env:ProgramFiles(x86)}\$Executable" -Recurse -ErrorAction SilentlyContinue | Select-Object -First 1 -ExpandProperty FullName
-        }
-
-        # Don't search the chocolatey program data until more official locations have been searched
-        if(!$exeSource)
-        {
-            Write-Verbose "Falling back to chocolatey..." -Verbose
-            $exeSource = Get-ChildItem -path "$env:ProgramData\chocolatey\$Executable" -Recurse -ErrorAction SilentlyContinue | Select-Object -First 1 -ExpandProperty FullName
-        }
-
-        # all obvious locations are exhausted, use brute force and search from the root of the filesystem
-        if(!$exeSource)
-        {
-            Write-Verbose "Falling back to the root of the drive..." -Verbose
-            $exeSource = Get-ChildItem -path "/$Executable" -Recurse -ErrorAction SilentlyContinue | Select-Object -First 1 -ExpandProperty FullName
-        }
-
-        if(!$exeSource)
-        {
-            throw "$Executable not found"
-        }
-
-        $exePath = Split-Path -Path $exeSource
-        Add-Path -path $exePath
-    }
-
-    if($Cleanup.IsPresent)
-    {
-        Remove-Folder -Folder "$env:temp\chocolatey"
-    }
-}
-
-function Add-Path
-{
-    param
-    (
-        $path
-    )
-    $machinePathString = [System.Environment]::GetEnvironmentVariable('path',[System.EnvironmentVariableTarget]::Machine)
-    $machinePath = $machinePathString -split ';'
-
-    if($machinePath -inotcontains $path)
-    {
-        $newPath = "$machinePathString;$path"
-        Write-Verbose "Adding $path to path..." -Verbose
-        [System.Environment]::SetEnvironmentVariable('path',$newPath,[System.EnvironmentVariableTarget]::Machine)
-        Write-Verbose "Added $path to path." -Verbose
-        $env:Path += ";$newPath"
-    }
-    else
-    {
-        Write-Verbose "$path already in path." -Verbose
-    }
-}
-
-function Remove-Folder
-{
-    param(
-        [string]
-        $Folder
-    )
-
-    Write-Verbose "Cleaning up $Folder..." -Verbose
-    $filter = Join-Path -Path $Folder -ChildPath *
-    [int]$measuredCleanupMB = (Get-ChildItem $filter -Recurse | Measure-Object -Property Length -Sum).Sum / 1MB
-    Remove-Item -recurse -force $filter -ErrorAction SilentlyContinue
-    Write-Verbose "Cleaned up $measuredCleanupMB MB from $Folder" -Verbose
-}
diff --git a/tools/releaseBuild/build.json b/tools/releaseBuild/build.json
deleted file mode 100644
index 2115a64f63..0000000000
--- a/tools/releaseBuild/build.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
-  "Windows": {
-        "Name": "win7-x64",
-        "RepoDestinationPath": "C:\\vscode-powershell",
-        "BuildCommand": "C:\\containerFiles\\build.ps1 -target _DockerVolume_",
-        "DockerFile": ".\\tools\\releaseBuild\\Image\\DockerFile",
-        "DockerImageName": "vscodepowershell",
-        "BinaryBucket": "release",
-        "PublishAsFolder": true,
-        "AdditionalContextFiles" : [
-            ".\\tools\\releaseBuild\\Image\\build.ps1",
-            ".\\tools\\releaseBuild\\Image\\dockerInstall.psm1"
-        ]
-    }
-}
diff --git a/tools/releaseBuild/findPsesBuild.ps1 b/tools/releaseBuild/findPsesBuild.ps1
index 01df27b3e3..bc575b7feb 100644
--- a/tools/releaseBuild/findPsesBuild.ps1
+++ b/tools/releaseBuild/findPsesBuild.ps1
@@ -1,9 +1,21 @@
 $branch = [uri]::EscapeDataString($env:PSES_BRANCH)
-$buildsUrl = $env:VSTS_PSES_URL_TEMPLATE -f $branch
 $headers = @{Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"}
-$builds = Invoke-RestMethod -ContentType application/json -Uri $buildsUrl -Headers $headers
-Write-Host "Got PSES_BRANCH: ${env:PSES_BRANCH}"
+
+$buildsUrl = $env:VSTS_PSES_URL_TEMPLATE -f $branch, "succeeded"
+$succeededBuilds = Invoke-RestMethod -ContentType application/json -Uri $buildsUrl -Headers $headers
+Write-Host "Requested URL: $buildsUrl"
+Write-Host "Got response:`n$(ConvertTo-Json $succeededBuilds)"
+
+$buildsUrl = $env:VSTS_PSES_URL_TEMPLATE -f $branch, "partiallySucceeded"
+$partiallySucceededBuilds = Invoke-RestMethod -ContentType application/json -Uri $buildsUrl -Headers $headers
 Write-Host "Requested URL: $buildsUrl"
-Write-Host "Got response:`n$(ConvertTo-Json $builds)"
-Write-Host "setting PSES_BUILDID to $($builds.value[0].Id)"
-Write-Host "##vso[task.setvariable variable=PSES_BUILDID]$($builds.value[0].Id)"
\ No newline at end of file
+Write-Host "Got response:`n$(ConvertTo-Json $partiallySucceededBuilds)"
+
+$builds = @(
+    $succeededBuilds.value
+    $partiallySucceededBuilds.value
+    ) | Sort-Object finishTime -Descending
+
+Write-Host "Got PSES_BRANCH: ${env:PSES_BRANCH}"
+Write-Host "setting PSES_BUILDID to $($builds[0].Id)"
+Write-Host "##vso[task.setvariable variable=PSES_BUILDID]$($builds[0].Id)"
diff --git a/tools/releaseBuild/setVstsVariables.ps1 b/tools/releaseBuild/setVstsVariables.ps1
index afaa5e570a..4ed6f74bb4 100644
--- a/tools/releaseBuild/setVstsVariables.ps1
+++ b/tools/releaseBuild/setVstsVariables.ps1
@@ -1,10 +1,15 @@
 $vstsVariables = @{
-    PSES_BRANCH = 'master'
+    PSES_BRANCH = 'legacy/1.x'
 }
 
 # Use VSTS's API to set an env vars
 foreach ($var in $vstsVariables.Keys)
 {
+    if (Get-Item "env:$var" -ErrorAction Ignore)
+    {
+        continue
+    }
+
     $val = $vstsVariables[$var]
     Write-Host "Setting var '$var' to value '$val'"
     Write-Host "##vso[task.setvariable variable=$var]$val"
diff --git a/tools/releaseBuild/signing.xml b/tools/releaseBuild/signing.xml
index ae9af1aa5a..89bd6d853f 100644
--- a/tools/releaseBuild/signing.xml
+++ b/tools/releaseBuild/signing.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" ?>
 <SignConfigXML>
   <job platform="" configuration="" dest="__OUTPATHROOT__\signed" jobname="vscode powershell" approvers="vigarg;gstolt">
-    <file src="__INPATHROOT__\release\out\PowerShell-insiders.vsix" signType="Vsix"
+    <file src="__INPATHROOT__\PowerShell-insiders.vsix" signType="100040160"
       dest="__OUTPATHROOT__\PowerShell-insiders.vsix" />
   </job>
 </SignConfigXML>
diff --git a/tools/releaseBuild/vstsbuild.ps1 b/tools/releaseBuild/vstsbuild.ps1
deleted file mode 100644
index 1d78994f7b..0000000000
--- a/tools/releaseBuild/vstsbuild.ps1
+++ /dev/null
@@ -1,79 +0,0 @@
-[cmdletbinding()]
-param()
-
-Begin
-{
-    $ErrorActionPreference = 'Stop'
-
-    $gitBinFullPath = (Get-Command -Name git -CommandType Application).Path | Select-Object -First 1
-    if ( ! $gitBinFullPath )
-    {
-        throw "Git is missing! Install from 'https://git-scm.com/download/win'"
-    }
-
-    # clone the release tools
-    $releaseToolsDirName = "PSRelease"
-    $releaseToolsLocation = Join-Path -Path $PSScriptRoot -ChildPath PSRelease
-    if ( Test-Path $releaseToolsLocation )
-    {
-        Remove-Item -Force -Recurse -Path $releaseToolsLocation
-    }
-    & $gitBinFullPath clone -b master --quiet https://github.com/PowerShell/${releaseToolsDirName}.git $releaseToolsLocation
-    Import-Module "$releaseToolsLocation/vstsBuild" -Force
-    Import-Module "$releaseToolsLocation/dockerBasedBuild" -Force -Prefix DockerBased
-
-    # Get the update signing script and update the signing XML file
-    $updateSigningPath = Join-Path $releaseToolsLocation 'updateSigning.ps1'
-    Invoke-WebRequest -Uri 'https://raw.githubusercontent.com/PowerShell/PowerShell/master/tools/releaseBuild/updateSigning.ps1' -OutFile $updateSigningPath
-    & $updateSigningPath -SigningXmlPath (Join-Path $PSScriptRoot 'signing.xml')
-}
-
-End {
-
-    $AdditionalFiles = .{
-        Join-Path $PSScriptRoot -child "Image/build.ps1"
-        Join-Path $PSScriptRoot -child "Image/dockerInstall.psm1"
-        "$env:BUILD_ARTIFACTSTAGINGDIRECTORY\PowerShellEditorServices"
-        }
-    $buildPackageName = $null
-
-    # defined if building in VSTS
-    if($env:BUILD_STAGINGDIRECTORY)
-    {
-        # Use artifact staging if running in VSTS
-        $destFolder = $env:BUILD_STAGINGDIRECTORY
-    }
-    else
-    {
-        # Use temp as destination if not running in VSTS
-        $destFolder = $env:temp
-    }
-
-    $resolvedRepoRoot = (Resolve-Path (Join-Path -Path $PSScriptRoot -ChildPath "../../")).Path
-
-    try
-    {
-        Write-Verbose "Starting build at $resolvedRepoRoot  ..." -Verbose
-        Clear-VstsTaskState
-
-        $buildParameters = @{
-            ReleaseTag = $ReleaseTag
-        }
-        $buildArgs = @{
-            RepoPath = $resolvedRepoRoot
-            BuildJsonPath = './tools/releaseBuild/build.json'
-            Parameters = $buildParameters
-            AdditionalFiles = $AdditionalFiles
-            Name = "win7-x64"
-        }
-        Invoke-DockerBasedBuild @buildArgs
-    }
-    catch
-    {
-        Write-VstsError -Error $_
-    }
-    finally{
-        Write-VstsTaskState
-        exit 0
-    }
-}
diff --git a/tools/terms/FileTypeSet.xml b/tools/terms/FileTypeSet.xml
new file mode 100644
index 0000000000..82f9f4d09e
--- /dev/null
+++ b/tools/terms/FileTypeSet.xml
@@ -0,0 +1,379 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xmldata>
+    <PckFileTypes TotalTypes="35" TotalExts="198" UnsupportedFilesOnly="False">
+        <Type ID="0" Check="1">
+            <Name>Pure Text Files</Name>
+            <Extensions>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.txt</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.des</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.pwd</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.asm</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.cmd</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.ini</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.poc</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.pwt</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.hpj</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.sql</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.inf</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.log</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.def</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.url</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.bat</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.aspx</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.idl</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.sys</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.resources</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.strings</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.md</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.yml</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.yaml</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.spelling</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.gitignore</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.gitattributes</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.gitmodules</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.csv</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.tsv</Ext>
+            </Extensions>
+        </Type>
+        <Type ID="1" Check="1">
+            <Name>CodeFiles</Name>
+            <Extensions>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.frm</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.inc</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.cpp</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.cls</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.c</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.hpp</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.vbs</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.java</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.cs</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.cxx</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.h</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.jav</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.bas</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.hxx</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.js</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.pl</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.rc</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.vb</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.json</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.resjson</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.fs</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.fsi</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.fsx</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.m</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.psm1</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.config</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.ps1</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.psd1</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.cmake</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.sh</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.cshtml</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.plist</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.mof</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.mc</Ext>
+            </Extensions>
+        </Type>
+        <Type ID="2" Check="1">
+            <Name>XML Files</Name>
+            <Extensions>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.xml</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.hxa</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.hxk</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.hxl</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.xsl</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.hxc</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.hxt</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.hxm</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.resx</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.hxe</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.hxf</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.hxv</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.acctb</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.accfl</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.xaml</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.ttml</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.ddue</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.sln</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.props</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.ps1xml</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.csproj</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.xsd</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.svg</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.clixml</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.nuspec</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.cdxml</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.manifest</Ext>
+            </Extensions>
+        </Type>
+        <Type ID="3" Check="1">
+            <Name>Microsoft Word Documents</Name>
+            <Extensions>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.doc</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.dot</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.wiz</Ext>
+            </Extensions>
+        </Type>
+        <Type ID="4" Check="1">
+            <Name>Microsoft Access Database Compatible</Name>
+            <Extensions>
+                <Ext Check="0" UseCustomParser="0" DllPath="" ClassName="">.mdb</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.mda</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.mde</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.mpd</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.mdt</Ext>
+            </Extensions>
+        </Type>
+        <Type ID="5" Check="1">
+            <Name>Microsoft PowerPoint Presentation</Name>
+            <Extensions>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.ppt</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.pot</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.pps</Ext>
+            </Extensions>
+        </Type>
+        <Type ID="6" Check="1">
+            <Name>Microsoft Publisher Files</Name>
+            <Extensions>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.pub</Ext>
+            </Extensions>
+        </Type>
+        <Type ID="7" Check="1">
+            <Name>Microsoft Excel Workbooks</Name>
+            <Extensions>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.xls</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.xlt</Ext>
+            </Extensions>
+        </Type>
+        <Type ID="8" Check="1">
+            <Name>Pure Binary Files</Name>
+            <Extensions>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.com</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.bin</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.tlb</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.drv</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.fon</Ext>
+                <Ext Check="0" UseCustomParser="0" DllPath="" ClassName="">.blg</Ext>
+                <Ext Check="0" UseCustomParser="0" DllPath="" ClassName="">.gif</Ext>
+                <Ext Check="0" UseCustomParser="0" DllPath="" ClassName="">.png</Ext>
+                <Ext Check="0" UseCustomParser="0" DllPath="" ClassName="">.icns</Ext>
+                <Ext Check="0" UseCustomParser="0" DllPath="" ClassName="">.ico</Ext>
+                <Ext Check="0" UseCustomParser="0" DllPath="" ClassName="">.bmp</Ext>
+                <Ext Check="0" UseCustomParser="0" DllPath="" ClassName="">.pfx</Ext>
+            </Extensions>
+        </Type>
+        <Type ID="9" Check="1">
+            <Name>Localization resource databases</Name>
+            <Extensions>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.edb</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.lcl</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.xlf</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.xliff</Ext>
+            </Extensions>
+        </Type>
+        <Type ID="10" Check="1">
+            <Name>Microsoft Project Files</Name>
+            <Extensions>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.mpp</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.mpt</Ext>
+            </Extensions>
+        </Type>
+        <Type ID="11" Check="1">
+            <Name>Microsoft Visio Files</Name>
+            <Extensions>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.vsd</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.vdx</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.vss</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.vst</Ext>
+            </Extensions>
+        </Type>
+        <Type ID="12" Check="1">
+            <Name>Windows Installer databases</Name>
+            <Extensions>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.msi</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.msm</Ext>
+            </Extensions>
+        </Type>
+        <Type ID="13" Check="1">
+            <Name>Zip Files</Name>
+            <Extensions>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.zip</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.accdt</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.axtr</Ext>
+            </Extensions>
+        </Type>
+        <Type ID="14" Check="1">
+            <Name>Cabinet / MS Compression Files</Name>
+            <Extensions>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.cab</Ext>
+            </Extensions>
+        </Type>
+        <Type ID="15" Check="1">
+            <Name>Table driven IME lexicons</Name>
+            <Extensions>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.mb</Ext>
+            </Extensions>
+        </Type>
+        <Type ID="16" Check="1">
+            <Name>IME ( IMD ) Files</Name>
+            <Extensions>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.imd</Ext>
+            </Extensions>
+        </Type>
+        <Type ID="17" Check="1">
+            <Name>TrueType Font Files</Name>
+            <Extensions>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.ttf</Ext>
+            </Extensions>
+        </Type>
+        <Type ID="18" Check="1">
+            <Name>Microsoft Outlook Mail Files</Name>
+            <Extensions>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.msg</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.oft</Ext>
+            </Extensions>
+        </Type>
+        <Type ID="19" Check="1">
+            <Name>HTML Help 2.0 Files / InfoTech5.x Storage System Files</Name>
+            <Extensions>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.its</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.hxh</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.hxr</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.hxw</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.hxi</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.hxs</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.hxq</Ext>
+            </Extensions>
+        </Type>
+        <Type ID="20" Check="1">
+            <Name>Adobe Acrobat PDF Files</Name>
+            <Extensions>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.pdf</Ext>
+            </Extensions>
+        </Type>
+        <Type ID="21" Check="1">
+            <Name>HTML Files / Web Page</Name>
+            <Extensions>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.htm</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.dtd</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.hhk</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.htw</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.asp</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.htc</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.htx</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.html</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.hhc</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.css</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.stm</Ext>
+            </Extensions>
+        </Type>
+        <Type ID="22" Check="1">
+            <Name>Rich Text Files</Name>
+            <Extensions>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.rtf</Ext>
+            </Extensions>
+        </Type>
+        <Type ID="23" Check="1">
+            <Name>Windows 3.x Write Files</Name>
+            <Extensions>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.wri</Ext>
+            </Extensions>
+        </Type>
+        <Type ID="24" Check="1">
+            <Name>MHTML Files</Name>
+            <Extensions>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.eml</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.nws</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.mht</Ext>
+            </Extensions>
+        </Type>
+        <Type ID="25" Check="1">
+            <Name>Word 2007 Files</Name>
+            <Extensions>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.docx</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.docm</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.dotx</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.dotm</Ext>
+            </Extensions>
+        </Type>
+        <Type ID="26" Check="1">
+            <Name>Excel 2007 Files</Name>
+            <Extensions>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.xlsx</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.xlsm</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.xltx</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.xltm</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.xlsb</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.xlam</Ext>
+            </Extensions>
+        </Type>
+        <Type ID="27" Check="1">
+            <Name>Power Point 2007 Files</Name>
+            <Extensions>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.pptx</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.pptm</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.potx</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.potm</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.ppsx</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.ppsm</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.ppam</Ext>
+            </Extensions>
+        </Type>
+        <Type ID="28" Check="1">
+            <Name>Access 2007 Files</Name>
+            <Extensions>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.accdb</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.accde</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.accdr</Ext>
+            </Extensions>
+        </Type>
+        <Type ID="29" Check="1">
+            <Name>Win32/64-based executable (image) Files</Name>
+            <Extensions>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.exe</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.dll</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.ocx</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.scr</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.acm</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.rll</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.cpl</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.mui</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.ax</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.ime</Ext>
+            </Extensions>
+        </Type>
+        <Type ID="30" Check="1">
+            <Name>HTML Help 1.0 Files</Name>
+            <Extensions>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.chm</Ext>
+            </Extensions>
+        </Type>
+        <Type ID="31" Check="1">
+            <Name>LocStudio lsg</Name>
+            <Extensions>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.lsg</Ext>
+            </Extensions>
+        </Type>
+        <Type ID="32" Check="1">
+            <Name>Microsoft Office OneNote Files</Name>
+            <Extensions>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.one</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.onepkg</Ext>
+            </Extensions>
+        </Type>
+        <Type ID="33" Check="1">
+            <Name>Custom Parsers</Name>
+            <Extensions>
+            </Extensions>
+        </Type>
+        <Type ID="34" Check="1">
+            <Name>Visio 2011 Files</Name>
+            <Extensions>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.vstx</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.vsdx</Ext>
+                <Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.vssx</Ext>
+            </Extensions>
+        </Type>
+
+    </PckFileTypes>
+</xmldata>
diff --git a/tsconfig.json b/tsconfig.json
index bc0dac725d..eeb3c3222e 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,5 +1,6 @@
 {
     "compilerOptions": {
+        "rootDir": ".",
         "module": "commonjs",
         "target": "es6",
         "outDir": "out",
@@ -9,4 +10,4 @@
     "exclude": [
         "node_modules"
     ]
-}
\ No newline at end of file
+}
diff --git a/vscode-powershell.build.ps1 b/vscode-powershell.build.ps1
index 39f20450bd..704c281f2d 100644
--- a/vscode-powershell.build.ps1
+++ b/vscode-powershell.build.ps1
@@ -9,34 +9,13 @@ param(
 
 #Requires -Modules @{ModuleName="InvokeBuild";ModuleVersion="3.0.0"}
 
-$script:IsPullRequestBuild =
-    $env:APPVEYOR_PULL_REQUEST_NUMBER -and
-    $env:APPVEYOR_REPO_BRANCH -eq "develop"
+# Grab package.json data which is used throughout the build.
+$script:PackageJson = Get-Content -Raw $PSScriptRoot/package.json | ConvertFrom-Json
+$script:IsPreviewExtension = $script:PackageJson.name -like "*preview*" -or $script:PackageJson.displayName -like "*preview*"
+Write-Host "`n### Extension Version: $($script:PackageJson.version) Extension Name: $($script:PackageJson.name)`n" -ForegroundColor Green
 
-task GetExtensionVersion -Before Package {
-
-    $updateVersion = $false
-    $script:ExtensionVersion = `
-        if ($env:AppVeyor) {
-            $updateVersion = $true
-            $env:APPVEYOR_BUILD_VERSION
-        }
-        elseif ($env:VSTS_BUILD) {
-            $updateVersion = $true
-            $env:VSTS_BUILD_VERSION
-        }
-        else {
-            exec { & npm version | ConvertFrom-Json | ForEach-Object { $_.PowerShell } }
-        }
-
-    Write-Host "`n### Extension Version: $script:ExtensionVersion`n" -ForegroundColor Green
-
-    if ($updateVersion) {
-        exec { & npm version $script:ExtensionVersion --no-git-tag-version --allow-same-version }
-    }
-}
-
-task ResolveEditorServicesPath -Before CleanEditorServices, BuildEditorServices {
+#region Utility tasks
+task ResolveEditorServicesPath -Before CleanEditorServices, TestEditorServices, BuildEditorServices {
 
     $script:psesRepoPath = `
         if ($EditorServicesRepoPath) {
@@ -48,7 +27,7 @@ task ResolveEditorServicesPath -Before CleanEditorServices, BuildEditorServices
 
     if (!(Test-Path $script:psesRepoPath)) {
         # Clear the path so that it won't be used
-        Write-Host "`n### WARNING: The PowerShellEditorServices repo cannot be found at path $script:psesRepoPath`n" -ForegroundColor Yellow
+        Write-Warning "`nThe PowerShellEditorServices repo cannot be found at path $script:psesRepoPath`n"
         $script:psesRepoPath = $null
     }
     else {
@@ -57,22 +36,37 @@ task ResolveEditorServicesPath -Before CleanEditorServices, BuildEditorServices
     }
 }
 
-task Restore RestoreNodeModules -Before Build
+task UploadArtifacts {
+    if ($env:TF_BUILD) {
+        # SYSTEM_PHASENAME is the Job name.
+        Copy-Item -Path PowerShell-insiders.vsix `
+            -Destination "$env:BUILD_ARTIFACTSTAGINGDIRECTORY/$($script:PackageJson.name)-$($script:PackageJson.version)-$env:SYSTEM_PHASENAME.vsix"
+    }
+}
+
+#endregion
+#region Restore tasks
 
-task RestoreNodeModules -If { -not (Test-Path "$PSScriptRoot/node_modules") } {
+task Restore RestoreNodeModules -If { -not (Test-Path "$PSScriptRoot/node_modules") }
+
+task RestoreNodeModules {
 
     Write-Host "`n### Restoring vscode-powershell dependencies`n" -ForegroundColor Green
 
     # When in a CI build use the --loglevel=error parameter so that
     # package install warnings don't cause PowerShell to throw up
-    $logLevelParam = if ($env:AppVeyor -or $env:VSTS_BUILD) { "--loglevel=error" } else { "" }
+    $logLevelParam = if ($env:TF_BUILD) { "--loglevel=error" } else { "" }
     exec { & npm install $logLevelParam }
 }
 
+#endregion
+#region Clean tasks
+
 task Clean {
     Write-Host "`n### Cleaning vscode-powershell`n" -ForegroundColor Green
     Remove-Item .\modules\* -Exclude "README.md" -Recurse -Force -ErrorAction Ignore
     Remove-Item .\out -Recurse -Force -ErrorAction Ignore
+    Remove-Item -Force -Recurse node_modules -ErrorAction Ignore
 }
 
 task CleanEditorServices {
@@ -84,7 +78,10 @@ task CleanEditorServices {
 
 task CleanAll CleanEditorServices, Clean
 
-task Build {
+#endregion
+#region Build tasks
+
+task Build Restore, {
     Write-Host "`n### Building vscode-powershell" -ForegroundColor Green
     exec { & npm run compile }
 }
@@ -99,17 +96,81 @@ task BuildEditorServices {
 
 task BuildAll BuildEditorServices, Build
 
+#endregion
+#region Test tasks
+
 task Test Build, {
     if (!$global:IsLinux -and !$global:IsMacOS) {
         Write-Host "`n### Running extension tests" -ForegroundColor Green
         exec { & npm run test }
     }
     else {
-        Write-Host "`n### Skipping extension tests on non-Windows platform" -ForegroundColor Yellow
+        Write-Warning "Skipping extension tests on Linux and macOS platform for legacy branch."
     }
 }
 
-task Package {
+task TestEditorServices {
+    if ($script:psesBuildScriptPath) {
+        Write-Host "`n### Testing PowerShellEditorServices`n" -ForegroundColor Green
+        Invoke-Build Test $script:psesBuildScriptPath
+    }
+}
+
+task TestAll TestEditorServices, Test
+
+#endregion
+#region Package tasks
+
+task UpdateReadme -If { $script:IsPreviewExtension } {
+    # Add the preview text
+    $newReadmeTop = '# PowerShell Language Support for Visual Studio Code
+> ## ATTENTION: This is the PREVIEW version of the PowerShell extension for VSCode which contains features that are being evaluated for stable. It works with PowerShell 5.1 and up.
+> ### If you are looking for the stable version, please [go here](https://marketplace.visualstudio.com/items?itemName=ms-vscode.PowerShell) or install the extension called "PowerShell" (not "PowerShell Preview")
+> ## NOTE: If you have both stable (aka "PowerShell") and preview (aka "PowerShell Preview") installed, you MUST [DISABLE](https://code.visualstudio.com/docs/editor/extension-gallery#_disable-an-extension) one of them for the best performance. Docs on how to disable an extension can be found [here](https://code.visualstudio.com/docs/editor/extension-gallery#_disable-an-extension)'
+    $readmePath = (Join-Path $PSScriptRoot README.md)
+    $readmeContent = Get-Content -Path $readmePath
+    if (!($readmeContent -match "This is the PREVIEW version of the PowerShell extension")) {
+        $readmeContent[0] = $newReadmeTop
+        $readmeContent | Set-Content $readmePath -Encoding utf8
+    }
+}
+
+task UpdatePackageJson {
+    if ($script:IsPreviewExtension) {
+        $script:PackageJson.name = "powershell-preview"
+        $script:PackageJson.displayName = "PowerShell Preview"
+        $script:PackageJson.description = "(Preview) Develop PowerShell scripts in Visual Studio Code!"
+        $script:PackageJson.preview = $true
+    } else {
+        $script:PackageJson.name = "powershell"
+        $script:PackageJson.displayName = "PowerShell"
+        $script:PackageJson.description = "Develop PowerShell scripts in Visual Studio Code!"
+        $script:PackageJson.preview = $false
+    }
+
+    $currentVersion = [version](($script:PackageJson.version -split "-")[0])
+    $currentDate = Get-Date
+
+    $revision = if ($currentDate.Month -eq $currentVersion.Minor) {
+        $currentVersion.Build + 1
+    } else {
+        0
+    }
+
+    $script:PackageJson.version = "$($currentDate.ToString('yyyy.M')).$revision"
+
+    if ($env:TF_BUILD) {
+        $script:PackageJson.version += "-CI.$env:BUILD_BUILDID"
+    }
+
+    $Utf8NoBomEncoding = [System.Text.UTF8Encoding]::new($false)
+    [System.IO.File]::WriteAllLines(
+        (Resolve-Path "$PSScriptRoot/package.json").Path,
+        ($script:PackageJson | ConvertTo-Json -Depth 100),
+        $Utf8NoBomEncoding)
+}
+
+task Package UpdateReadme, {
 
     if ($script:psesBuildScriptPath) {
         Write-Host "`n### Copying PowerShellEditorServices module files" -ForegroundColor Green
@@ -126,12 +187,16 @@ task Package {
     exec { & node ./node_modules/vsce/out/vsce package }
 
     # Change the package to have a static name for automation purposes
-    Move-Item -Force .\PowerShell-$($script:ExtensionVersion).vsix .\PowerShell-insiders.vsix
-}
+    Move-Item -Force .\$($script:PackageJson.name)-$($script:PackageJson.version).vsix .\PowerShell-insiders.vsix
 
-task UploadArtifacts -If { $env:AppVeyor } {
-    Push-AppveyorArtifact .\PowerShell-insiders.vsix
+    if ($env:TF_BUILD) {
+        Copy-Item -Path PowerShell-insiders.vsix -Destination $env:BUILD_ARTIFACTSTAGINGDIRECTORY
+    }
 }
 
+#endregion
+
+# The set of tasks for a release
+task Release Clean, Build, Package
 # The default task is to run the entire CI build
-task . GetExtensionVersion, CleanAll, BuildAll, Test, Package, UploadArtifacts
+task . Clean, BuildAll, Test, UpdatePackageJson, Package, UploadArtifacts