]> git.openstreetmap.org Git - rails.git/commitdiff
Merge remote-tracking branch 'upstream/pull/2667'
authorTom Hughes <tom@compton.nu>
Wed, 5 Aug 2020 20:50:08 +0000 (21:50 +0100)
committerTom Hughes <tom@compton.nu>
Wed, 5 Aug 2020 20:50:08 +0000 (21:50 +0100)
13 files changed:
1  2 
Gemfile
Gemfile.lock
app/assets/javascripts/application.js
app/assets/javascripts/leaflet.layers.js
app/assets/stylesheets/common.scss
app/views/browse/changeset.html.erb
app/views/browse/new_note.html.erb
app/views/browse/note.html.erb
app/views/site/export.html.erb
app/views/users/confirm.html.erb
config/locales/en.yml
package.json
yarn.lock

diff --combined Gemfile
index 540f616343d91a6eced60d9dc5e7d00dcae80571,9df88f8fa22376279c35f53246a89e57a9194ce3..cfe734b946caf620778c4ced24519b69922e37e8
+++ b/Gemfile
@@@ -1,7 -1,7 +1,7 @@@
  source "https://rubygems.org"
  
  # Require rails
 -gem "rails", "6.0.3.1"
 +gem "rails", "6.0.3.2"
  
  # Require things which have moved to gems in ruby 1.9
  gem "bigdecimal", "~> 1.1.0", :platforms => :ruby_19
@@@ -43,18 -43,19 +43,19 @@@ gem "image_optim_rails
  gem "actionpack-page_caching", ">= 1.2.0"
  gem "active_record_union"
  gem "activerecord-import"
 -gem "bootstrap", "~> 4.3.1"
 +gem "bootstrap", "~> 4.5.0"
+ gem "bootstrap_form", "~> 4.0"
  gem "cancancan"
  gem "composite_primary_keys", "~> 12.0.0"
  gem "config"
  gem "delayed_job_active_record"
  gem "dynamic_form"
 -gem "http_accept_language", "~> 2.0.0"
 +gem "http_accept_language", "~> 2.1.1"
  gem "i18n-js", ">= 3.0.0"
  gem "oauth-plugin", ">= 0.5.1"
  gem "openstreetmap-deadlock_retry", ">= 1.3.0", :require => "deadlock_retry"
  gem "rack-cors"
 -gem "rails-i18n", "~> 4.0.0"
 +gem "rails-i18n", "~> 6.0.0"
  gem "rinku", ">= 2.0.6", :require => "rails_rinku"
  gem "strong_migrations"
  gem "validates_email_format_of", ">= 1.5.1"
@@@ -138,13 -139,12 +139,13 @@@ en
  
  # Gems needed for running tests
  group :test do
 +  gem "brakeman"
    gem "capybara", ">= 2.15"
    gem "coveralls", :require => false
    gem "erb_lint", :require => false
    gem "factory_bot_rails"
    gem "minitest", "~> 5.1"
 -  gem "puma", "~> 3.11"
 +  gem "puma", "~> 4.3"
    gem "rails-controller-testing"
    gem "rubocop"
    gem "rubocop-minitest"
diff --combined Gemfile.lock
index 379bab30716313d8ab1e81162f18ea5e63135b16,0aa9545a293453a970a838914f7e062f1335920b..3b3ffaf060bc9b19e20a7cc569e543b9159b8482
@@@ -2,64 -2,64 +2,64 @@@ GE
    remote: https://rubygems.org/
    specs:
      SystemTimer (1.2.3)
 -    aasm (5.0.8)
 +    aasm (5.1.0)
        concurrent-ruby (~> 1.0)
 -    actioncable (6.0.3.1)
 -      actionpack (= 6.0.3.1)
 +    actioncable (6.0.3.2)
 +      actionpack (= 6.0.3.2)
        nio4r (~> 2.0)
        websocket-driver (>= 0.6.1)
 -    actionmailbox (6.0.3.1)
 -      actionpack (= 6.0.3.1)
 -      activejob (= 6.0.3.1)
 -      activerecord (= 6.0.3.1)
 -      activestorage (= 6.0.3.1)
 -      activesupport (= 6.0.3.1)
 +    actionmailbox (6.0.3.2)
 +      actionpack (= 6.0.3.2)
 +      activejob (= 6.0.3.2)
 +      activerecord (= 6.0.3.2)
 +      activestorage (= 6.0.3.2)
 +      activesupport (= 6.0.3.2)
        mail (>= 2.7.1)
 -    actionmailer (6.0.3.1)
 -      actionpack (= 6.0.3.1)
 -      actionview (= 6.0.3.1)
 -      activejob (= 6.0.3.1)
 +    actionmailer (6.0.3.2)
 +      actionpack (= 6.0.3.2)
 +      actionview (= 6.0.3.2)
 +      activejob (= 6.0.3.2)
        mail (~> 2.5, >= 2.5.4)
        rails-dom-testing (~> 2.0)
 -    actionpack (6.0.3.1)
 -      actionview (= 6.0.3.1)
 -      activesupport (= 6.0.3.1)
 +    actionpack (6.0.3.2)
 +      actionview (= 6.0.3.2)
 +      activesupport (= 6.0.3.2)
        rack (~> 2.0, >= 2.0.8)
        rack-test (>= 0.6.3)
        rails-dom-testing (~> 2.0)
        rails-html-sanitizer (~> 1.0, >= 1.2.0)
 -    actionpack-page_caching (1.2.2)
 +    actionpack-page_caching (1.2.3)
        actionpack (>= 5.0.0)
 -    actiontext (6.0.3.1)
 -      actionpack (= 6.0.3.1)
 -      activerecord (= 6.0.3.1)
 -      activestorage (= 6.0.3.1)
 -      activesupport (= 6.0.3.1)
 +    actiontext (6.0.3.2)
 +      actionpack (= 6.0.3.2)
 +      activerecord (= 6.0.3.2)
 +      activestorage (= 6.0.3.2)
 +      activesupport (= 6.0.3.2)
        nokogiri (>= 1.8.5)
 -    actionview (6.0.3.1)
 -      activesupport (= 6.0.3.1)
 +    actionview (6.0.3.2)
 +      activesupport (= 6.0.3.2)
        builder (~> 3.1)
        erubi (~> 1.4)
        rails-dom-testing (~> 2.0)
        rails-html-sanitizer (~> 1.1, >= 1.2.0)
      active_record_union (1.3.0)
        activerecord (>= 4.0)
 -    activejob (6.0.3.1)
 -      activesupport (= 6.0.3.1)
 +    activejob (6.0.3.2)
 +      activesupport (= 6.0.3.2)
        globalid (>= 0.3.6)
 -    activemodel (6.0.3.1)
 -      activesupport (= 6.0.3.1)
 -    activerecord (6.0.3.1)
 -      activemodel (= 6.0.3.1)
 -      activesupport (= 6.0.3.1)
 -    activerecord-import (1.0.5)
 +    activemodel (6.0.3.2)
 +      activesupport (= 6.0.3.2)
 +    activerecord (6.0.3.2)
 +      activemodel (= 6.0.3.2)
 +      activesupport (= 6.0.3.2)
 +    activerecord-import (1.0.6)
        activerecord (>= 3.2)
 -    activestorage (6.0.3.1)
 -      actionpack (= 6.0.3.1)
 -      activejob (= 6.0.3.1)
 -      activerecord (= 6.0.3.1)
 +    activestorage (6.0.3.2)
 +      actionpack (= 6.0.3.2)
 +      activejob (= 6.0.3.2)
 +      activerecord (= 6.0.3.2)
        marcel (~> 0.3.1)
 -    activesupport (6.0.3.1)
 +    activesupport (6.0.3.2)
        concurrent-ruby (~> 1.0, >= 1.0.2)
        i18n (>= 0.7, < 2)
        minitest (~> 5.1)
      annotate (3.1.1)
        activerecord (>= 3.2, < 7.0)
        rake (>= 10.4, < 14.0)
 -    ast (2.4.0)
 -    autoprefixer-rails (9.7.6)
 +    ast (2.4.1)
 +    autoprefixer-rails (9.8.6.1)
        execjs
      aws-eventstream (1.1.0)
 -    aws-partitions (1.326.0)
 -    aws-sdk-core (3.98.0)
 +    aws-partitions (1.343.0)
 +    aws-sdk-core (3.104.1)
        aws-eventstream (~> 1, >= 1.0.2)
        aws-partitions (~> 1, >= 1.239.0)
        aws-sigv4 (~> 1.1)
        jmespath (~> 1.0)
 -    aws-sdk-kms (1.33.0)
 -      aws-sdk-core (~> 3, >= 3.71.0)
 +    aws-sdk-kms (1.36.0)
 +      aws-sdk-core (~> 3, >= 3.99.0)
        aws-sigv4 (~> 1.1)
 -    aws-sdk-s3 (1.67.1)
 -      aws-sdk-core (~> 3, >= 3.96.1)
 +    aws-sdk-s3 (1.75.0)
 +      aws-sdk-core (~> 3, >= 3.104.1)
        aws-sdk-kms (~> 1)
        aws-sigv4 (~> 1.1)
 -    aws-sigv4 (1.1.4)
 -      aws-eventstream (~> 1.0, >= 1.0.2)
 +    aws-sigv4 (1.2.1)
 +      aws-eventstream (~> 1, >= 1.0.2)
      better_errors (2.7.1)
        coderay (>= 1.0.0)
        erubi (>= 1.0.0)
      bigdecimal (1.1.0)
      binding_of_caller (0.8.0)
        debug_inspector (>= 0.0.1)
 -    bootsnap (1.4.6)
 +    bootsnap (1.4.7)
        msgpack (~> 1.0)
 -    bootstrap (4.3.1)
 +    bootstrap (4.5.0)
        autoprefixer-rails (>= 9.1.0)
        popper_js (>= 1.14.3, < 2)
        sassc-rails (>= 2.0.0)
+     bootstrap_form (4.5.0)
+       actionpack (>= 5.2)
+       activemodel (>= 5.2)
 +    brakeman (4.9.0)
      browser (4.2.0)
      builder (3.2.4)
      bzip2-ffi (1.0.0)
      cancancan (3.1.0)
      canonical-rails (0.2.8)
        rails (>= 4.1, < 6.1)
 -    capybara (3.32.2)
 +    capybara (3.33.0)
        addressable
        mini_mime (>= 0.1.3)
        nokogiri (~> 1.8)
        activerecord (>= 3.0, < 6.1)
        delayed_job (>= 3.0, < 5)
      docile (1.3.2)
 -    dry-configurable (0.11.5)
 +    dry-configurable (0.11.6)
        concurrent-ruby (~> 1.0)
        dry-core (~> 0.4, >= 0.4.7)
        dry-equalizer (~> 0.2)
        concurrent-ruby (~> 1.0)
        dry-core (~> 0.2)
        dry-equalizer (~> 0.2)
 -    dry-schema (1.5.1)
 +    dry-schema (1.5.2)
        concurrent-ruby (~> 1.0)
        dry-configurable (~> 0.8, >= 0.8.3)
        dry-core (~> 0.4)
        dry-equalizer (~> 0.3)
        dry-inflector (~> 0.1, >= 0.1.2)
        dry-logic (~> 1.0, >= 1.0.2)
 -    dry-validation (1.5.0)
 +    dry-validation (1.5.1)
        concurrent-ruby (~> 1.0)
        dry-container (~> 0.7, >= 0.7.1)
        dry-core (~> 0.4)
        dry-initializer (~> 3.0)
        dry-schema (~> 1.5)
      dynamic_form (1.1.4)
 -    erb_lint (0.0.33)
 +    erb_lint (0.0.34)
        activesupport
        better_html (~> 1.0.7)
        html_tokenizer
      erubi (1.9.0)
      execjs (2.7.0)
      exifr (1.3.6)
 -    factory_bot (5.2.0)
 -      activesupport (>= 4.2.0)
 -    factory_bot_rails (5.2.0)
 -      factory_bot (~> 5.2.0)
 -      railties (>= 4.2.0)
 +    factory_bot (6.1.0)
 +      activesupport (>= 5.0.0)
 +    factory_bot_rails (6.1.0)
 +      factory_bot (~> 6.1.0)
 +      railties (>= 5.0.0)
      faraday (1.0.1)
        multipart-post (>= 1.2, < 3)
 -    ffi (1.13.0)
 -    ffi-libarchive (1.0.0)
 +    ffi (1.13.1)
 +    ffi-libarchive (1.0.3)
        ffi (~> 1.0)
      fspath (3.1.2)
      gd2-ffij (0.4.0)
      hashie (4.1.0)
      html_tokenizer (0.0.7)
      htmlentities (4.3.4)
 -    http_accept_language (2.0.5)
 -    i18n (0.9.5)
 +    http_accept_language (2.1.1)
 +    i18n (1.8.5)
        concurrent-ruby (~> 1.0)
 -    i18n-js (3.7.0)
 +    i18n-js (3.7.1)
        i18n (>= 0.6.6)
      image_optim (0.26.5)
        exifr (~> 1.2, >= 1.2.2)
        rails-dom-testing (>= 1, < 3)
        railties (>= 4.2.0)
        thor (>= 0.14, < 2.0)
 -    json (2.3.0)
 +    json (2.3.1)
      jwt (2.2.1)
      kgio (2.11.3)
 -    kramdown (2.2.1)
 +    kramdown (2.3.0)
        rexml
      libxml-ruby (3.2.0)
      listen (3.2.1)
        activesupport (>= 4.0)
        logstash-event (~> 1.2.0)
        request_store
 -    loofah (2.5.0)
 +    loofah (2.6.0)
        crass (~> 1.0.2)
        nokogiri (>= 1.5.9)
      mail (2.7.1)
      multi_xml (0.6.0)
      multipart-post (2.1.1)
      nio4r (2.5.2)
 -    nokogiri (1.10.9)
 +    nokogiri (1.10.10)
        mini_portile2 (~> 2.4.0)
      nokogumbo (2.0.2)
        nokogiri (~> 1.8, >= 1.8.4)
        multi_json (~> 1.12)
        omniauth-oauth2 (~> 1.4)
      openstreetmap-deadlock_retry (1.3.0)
 -    parallel (1.19.1)
 -    parser (2.7.1.3)
 -      ast (~> 2.4.0)
 +    parallel (1.19.2)
 +    parser (2.7.1.4)
 +      ast (~> 2.4.1)
      pg (1.2.3)
      popper_js (1.16.0)
      progress (3.5.2)
      psych (3.1.0)
      public_suffix (4.0.5)
 -    puma (3.12.6)
 +    puma (4.3.5)
 +      nio4r (~> 2.0)
      quad_tile (1.0.1)
      r2 (0.2.7)
 -    rack (2.2.2)
 +    rack (2.2.3)
      rack-cors (1.1.1)
        rack (>= 2.0.0)
      rack-openid (1.3.1)
      rack-test (1.1.0)
        rack (>= 1.0, < 3)
      rack-uri_sanitizer (0.0.2)
 -    rails (6.0.3.1)
 -      actioncable (= 6.0.3.1)
 -      actionmailbox (= 6.0.3.1)
 -      actionmailer (= 6.0.3.1)
 -      actionpack (= 6.0.3.1)
 -      actiontext (= 6.0.3.1)
 -      actionview (= 6.0.3.1)
 -      activejob (= 6.0.3.1)
 -      activemodel (= 6.0.3.1)
 -      activerecord (= 6.0.3.1)
 -      activestorage (= 6.0.3.1)
 -      activesupport (= 6.0.3.1)
 +    rails (6.0.3.2)
 +      actioncable (= 6.0.3.2)
 +      actionmailbox (= 6.0.3.2)
 +      actionmailer (= 6.0.3.2)
 +      actionpack (= 6.0.3.2)
 +      actiontext (= 6.0.3.2)
 +      actionview (= 6.0.3.2)
 +      activejob (= 6.0.3.2)
 +      activemodel (= 6.0.3.2)
 +      activerecord (= 6.0.3.2)
 +      activestorage (= 6.0.3.2)
 +      activesupport (= 6.0.3.2)
        bundler (>= 1.3.0)
 -      railties (= 6.0.3.1)
 +      railties (= 6.0.3.2)
        sprockets-rails (>= 2.0.0)
 -    rails-controller-testing (1.0.4)
 -      actionpack (>= 5.0.1.x)
 -      actionview (>= 5.0.1.x)
 -      activesupport (>= 5.0.1.x)
 +    rails-controller-testing (1.0.5)
 +      actionpack (>= 5.0.1.rc1)
 +      actionview (>= 5.0.1.rc1)
 +      activesupport (>= 5.0.1.rc1)
      rails-dom-testing (2.0.3)
        activesupport (>= 4.2.0)
        nokogiri (>= 1.6)
      rails-html-sanitizer (1.3.0)
        loofah (~> 2.3)
 -    rails-i18n (4.0.2)
 -      i18n (~> 0.6)
 -      rails (>= 4.0)
 -    railties (6.0.3.1)
 -      actionpack (= 6.0.3.1)
 -      activesupport (= 6.0.3.1)
 +    rails-i18n (6.0.0)
 +      i18n (>= 0.7, < 2)
 +      railties (>= 6.0.0, < 7)
 +    railties (6.0.3.2)
 +      actionpack (= 6.0.3.2)
 +      activesupport (= 6.0.3.2)
        method_source
        rake (>= 0.8.7)
        thor (>= 0.20.3, < 2.0)
        rack (>= 1.4)
      rexml (3.2.4)
      rinku (2.0.6)
 -    rotp (6.0.0)
 -      addressable (~> 2.7)
 -    rubocop (0.85.1)
 +    rotp (6.1.0)
 +    rubocop (0.86.0)
        parallel (~> 1.10)
        parser (>= 2.7.0.1)
        rainbow (>= 2.2.2, < 4.0)
        regexp_parser (>= 1.7)
        rexml
 -      rubocop-ast (>= 0.0.3)
 +      rubocop-ast (>= 0.0.3, < 1.0)
        ruby-progressbar (~> 1.7)
        unicode-display_width (>= 1.4.0, < 2.0)
 -    rubocop-ast (0.0.3)
 +    rubocop-ast (0.2.0)
        parser (>= 2.7.0.1)
      rubocop-minitest (0.9.0)
        rubocop (>= 0.74)
 -    rubocop-performance (1.6.1)
 -      rubocop (>= 0.71.0)
 -    rubocop-rails (2.5.2)
 -      activesupport
 +    rubocop-performance (1.7.1)
 +      rubocop (>= 0.82.0)
 +    rubocop-rails (2.6.0)
 +      activesupport (>= 4.2.0)
        rack (>= 1.1)
 -      rubocop (>= 0.72.0)
 +      rubocop (>= 0.82.0)
      ruby-openid (2.9.2)
      ruby-progressbar (1.10.1)
      rubyzip (2.3.0)
      safe_yaml (1.0.5)
 -    sanitize (5.2.0)
 +    sanitize (5.2.1)
        crass (~> 1.0.2)
        nokogiri (>= 1.8.0)
        nokogumbo (~> 2.0)
        sprockets (> 3.0)
        sprockets-rails
        tilt
 -    secure_headers (6.3.0)
 +    secure_headers (6.3.1)
      selenium-webdriver (3.142.7)
        childprocess (>= 0.5, < 4.0)
        rubyzip (>= 1.2.2)
        actionpack (>= 4.0)
        activesupport (>= 4.0)
        sprockets (>= 3.0.0)
 -    strong_migrations (0.6.8)
 +    strong_migrations (0.7.1)
        activerecord (>= 5)
      sync (0.5.0)
      term-ansicolor (1.7.1)
      websocket-extensions (0.1.5)
      xpath (3.2.0)
        nokogiri (~> 1.8)
 -    zeitwerk (2.3.0)
 +    zeitwerk (2.4.0)
  
  PLATFORMS
    ruby
@@@ -483,8 -485,8 +486,9 @@@ DEPENDENCIE
    bigdecimal (~> 1.1.0)
    binding_of_caller
    bootsnap (>= 1.4.2)
 -  bootstrap (~> 4.3.1)
 +  bootstrap (~> 4.5.0)
+   bootstrap_form (~> 4.0)
 +  brakeman
    browser
    bzip2-ffi
    cancancan
    ffi-libarchive
    gd2-ffij (>= 0.4.0)
    htmlentities
 -  http_accept_language (~> 2.0.0)
 +  http_accept_language (~> 2.1.1)
    i18n-js (>= 3.0.0)
    image_optim_rails
    jbuilder (~> 2.7)
    openstreetmap-deadlock_retry (>= 1.3.0)
    pg
    psych
 -  puma (~> 3.11)
 +  puma (~> 4.3)
    quad_tile (~> 1.0.1)
    r2 (~> 0.2.7)
    rack-cors
    rack-uri_sanitizer
 -  rails (= 6.0.3.1)
 +  rails (= 6.0.3.2)
    rails-controller-testing
 -  rails-i18n (~> 4.0.0)
 +  rails-i18n (~> 6.0.0)
    rinku (>= 2.0.6)
    rotp
    rubocop
    webmock
  
  BUNDLED WITH
 -   1.17.2
 +   2.1.4
index 36b560fde68c4f0132e49a213a3264f76232f5b4,d861cbb3374cdf92f3fab27c15220df66171c70e..205ad8161ebe263299dbad26336ac9461af07947
@@@ -16,6 -16,8 +16,8 @@@
  //= require piwik
  //= require richtext
  //= require querystring
+ //= require bs-custom-file-input
+ //= require bs-custom-file-input-init
  
  /*
   * Called as the user scrolls/zooms around to manipulate hrefs of the
@@@ -81,11 -83,11 +83,11 @@@ $(document).ready(function () 
      var windowWidth = $(window).width();
  
      if (windowWidth < compactWidth) {
 -      $("body").removeClass("compact").addClass("small");
 +      $("body").removeClass("compact-nav").addClass("small-nav");
      } else if (windowWidth < headerWidth) {
 -      $("body").addClass("compact").removeClass("small");
 +      $("body").addClass("compact-nav").removeClass("small-nav");
      } else {
 -      $("body").removeClass("compact").removeClass("small");
 +      $("body").removeClass("compact-nav").removeClass("small-nav");
      }
    }
  
        headerWidth = headerWidth + $(e).outerWidth();
      });
  
 -    $("body").addClass("compact");
 +    $("body").addClass("compact-nav");
  
      $("header").children(":visible").each(function (i, e) {
        compactWidth = compactWidth + $(e).outerWidth();
      });
  
 -    $("body").removeClass("compact");
 +    $("body").removeClass("compact-nav");
  
      updateHeader();
  
index ddcce195daba2d5f7724d2b81ab876d51d6efeeb,102b024607920d03b2457d52d94e43fe4e2c0f3d..f375dc08ffc031adb4721477d00aa4606ecac327
@@@ -116,10 -116,10 +116,10 @@@ L.OSM.layers = function (options) 
  
        $("<p>")
          .text(I18n.t("javascripts.map.layers.overlays"))
 -        .attr("class", "deemphasize")
 +        .attr("class", "text-muted")
          .appendTo(overlaySection);
  
-       var overlays = $("<ul class='list-unstyled'>")
+       var overlays = $("<ul class='list-unstyled standard-form'>")
          .appendTo(overlaySection);
  
        var addOverlay = function (layer, name, maxArea) {
index 50bcf9be7b13124c05e9519154e974abf52db565,6de8fee64f7539af7331e4e5d76e5e1fac8e36b1..95e0c292ac4cc9c7abe91791fa55dc4fe0c2931e
@@@ -1,5 -1,6 +1,6 @@@
  @import "parameters";
  @import "bootstrap";
+ @import "rails_bootstrap_forms";
  
  /* Styles common to large and small screens */
  
@@@ -30,11 -31,20 +31,11 @@@ small, aside 
  
  #container { position: relative; }
  
 -.column-1 {
 -  width: 50%;
 -  margin: 0 0 $lineheight/2 0;
 -}
 -
  .small_icon {
    vertical-align: middle;
    margin-right: $lineheight/4;
  }
  
 -.red { color: $red; }
 -
 -.piwik { border: 0; }
 -
  [dir=rtl] { /* no-r2 */ text-align: right; }
  
  [dir=ltr] { /* no-r2 */ text-align: left; }
@@@ -76,6 -86,7 +77,6 @@@
  a {
    color: #24d;
    text-decoration: none;
 -  -webkit-appearance: none;
    outline: 0;
    &:hover {
      text-decoration: underline;
    }
  }
  
 +.text-muted a {
 +  color: $blue;
 +}
 +
  /* Rules for the header */
  
  #menu-icon {
@@@ -266,7 -273,7 +267,7 @@@ nav.primary, nav.secondary 
    display: none;
  }
  
 -body.compact {
 +body.compact-nav {
    #compact-secondary-nav {
      display: inline-block;
    }
  }
  
  #browse_status {
 -  p {
 -    padding: $lineheight;
 -  }
 -
    input {
      display: block;
      margin-left: auto;
    }
  }
  
+ /* Temporary label size override until we remove site-wide font customisation */
+ form {
+   label {
+     font-size: 16px;
+   }
+ }
  /* Rules for the search and direction forms */
  
  header .search_forms,
    display: none;
  }
  
- .search_form,
- .directions_form {
-   position: relative;
-   padding: $lineheight/2;
-   background-color: $lightgrey;
-   .query_wrapper {
-     position: relative;
-     overflow: hidden;
-     border-radius: 2px 0 0 2px;
-   }
-   input[type=text] {
-     width: 100%;
-     height: 30px;
-     transition: 300ms linear;
-   }
-   input[type=text].overflow {
-     border-right: none;
-     border-radius: 3px 0px 0px 3px;
-   }
-   input:focus {
-     outline: none;
-     box-shadow: 0px 0px 7px $vibrant-green;
-   }
-   input[type=submit].float {
-     float: right;
-     width: auto;
-     min-width: 0;
-     border-radius: 0 2px 2px 0;
-   }
-   input.error {
-     background-color: rgba($red, 0.4);
-   }
-   select {
-     /* this next line is to polyfill the vertical alignment of text within a select element,
-      * which is different between firefox and chrome. */
-     padding: 0.3em 0;
-   }
-   .query_options {
-     text-align: right;
-     font-size: 10px;
-     color: $blue;
-   }
-   .describe_location {
-     position: absolute;
-     top: 6px;
-     right: 6px;
-     font-size: 10px;
-     color: $blue;
-   }
-   .switch_link {
-     float: right;
-     width: auto;
-     min-width: 0;
-     margin-left: 6px;
-   }
-   img.button {
-     display: block;
-     width: 20px;
-     height: 20px;
-   }
-   span.force_width {
-     width: 100%;
-     padding-right: 25px;
-     display: block;
-   }
-   select.routing_engines {
-     min-height: 30px;
-     margin: 0px 0px 5px 25px;
-   }
-   input.routing_go {
-     min-width: 100px;
-     float: right;
-   }
-   div.header {
-     width: 100%;
-     height: 30px;
-   }
-   div.line {
-     width: 100%;
-     margin: 0px 0px 5px 0px;
-   }
-   div.loader_copy {
-     display: none;
-     img {
-       vertical-align: middle;
-     }
-   }
-   a.reverse_directions {
-     cursor: pointer;
-     margin: 0px 0px 5px 25px;
-   }
- }
  /* Rules for the map key which appears in the popout sidebar */
  
  #mapkey {
@@@ -1035,6 -942,11 +932,6 @@@ tr.turn:hover 
      }
    }
  
 -  .warning {
 -    margin: 0 0 $lineheight/2 0;
 -    padding: 0 $lineheight/2;
 -  }
 -
    .note-comments li, .changeset-comments li {
      margin: $lineheight/2 0;
  
    background: $lightgrey;
  }
  
 -.content-body {
 -  h1, h2, h3, p, ul, ol {
 -    margin-bottom: $lineheight;
 -  }
 -
 -  h1, h2, h3 {
 -    margin-top: $lineheight/2;
 -  }
 -}
 -
  .content-inner {
    position: relative;
    max-width: 900px;
  /* Rules for small maps in content areas */
  
  .content_map {
 -  position: relative;
 -  width: 45%;
 -  height: 400px;
 +  height: 200px;
    border: 1px solid $grey;
    margin-bottom: $lineheight;
 -  float: right;
 +}
 +
 +@include media-breakpoint-up(md) {
 +  .content_map {
 +    height: 400px;
 +  }
  }
  
- /* Rules for the new trace form */
- #new_trace {
-   input[type=text] {
-     width: 50%;
-     width: calc(100% - 150px);
-     max-width: 500px;
-   }
- }
- /* Rules for the edit trace form */
- .edit_trace {
-   .standard-form-row p {
-     margin-bottom: 0px;
-   }
-   input[type=text] {
-     width: 50%;
-     width: calc(100% - 150px);
-     max-width: 500px;
-   }
- }
  /* Rules for the user profile page */
  
  #userinformation {
 -
    min-height: 100px;
    .userinformation-inner {
      float: left;
    }
 -  h2 {
 -    margin-top: 0;
 -  }
    .user-description {
      width: 100%;
      clear: both;
    }
 -  .deemphasize {
 -    margin: 0;
 -  }
  }
  
  .admin-user-info small {
    margin-right: $lineheight;
  }
  
 -.activity-block {
 -  clear: left;
 -  border-bottom: 1px solid $grey;
 -  padding-bottom: $lineheight;
 -  float: left;
 -  h3 {
 -    margin-bottom: $lineheight/2;
 -  }
 -}
 -
  .contact-activity {
    margin-top: $lineheight;
    width: 100%;
      margin-top: $lineheight/2;
    }
  
 -  &.deemphasize {
 +  &.deleted {
      background-color: #fee;
    }
  
        padding-top: $lineheight;
        border-top: 1px solid $grey;
      }
 -    &.deemphasize {
 +    &.deleted {
        background-color: #fee;
      }
      p {
  
  /* Rules for the account settings page */
  
 -#accountForm .user_map {
 -  position: relative;
 -  width: 500px;
 -  height: 400px;
 -  border: 1px solid $grey;
 -}
 -
  #accountForm .user_image {
    margin-bottom: 0;
  }
    display: inline !important;
  }
  
 -.content_map.settings_map {
 -  width: 50%;
 -  float: none;
 -}
 -
  /* Rules for the oauth settings page */
  
  .oauth_clients .buttons .oauth-edit {
    display: none;
  }
  
 -.messages-show .message-buttons {
 -  margin-top: $lineheight;
 -  margin-bottom: $lineheight * 1.5;
 -  padding-top: $lineheight;
 -  border-top: 1px solid $lightgrey;
 -}
 -
 -.messages-show .buttons .mark-unread-button {
 -  border-radius: 0;
 -}
 -
  /* Rules for "flash" notice boxes shown at the top of the content area */
  
  .flash {
      float: left;
      margin-top: 5px;
    }
- }
  
- #remember_me_openid {
-   display: block;
- }
  #remember_me_openid {
+     display: block;
  }
  
- select {
-   padding: 2px;
- }
  select {
+     padding: 2px;
  }
  
- input[type="checkbox"],
- input[type="radio"] {
-     margin-right: 5px;
- }
  input[type="checkbox"],
  input[type="radio"] {
+       margin-right: 5px;
  }
  
- input[type="text"],
- input[type="email"],
- input[type="url"],
- input[type="password"],
- textarea {
-   color: #222;
-   background-color: #fff;
-   border: 1px solid $grey;
-   border-radius: 3px;
-   padding: 2px 5px;
-   margin: 0;
-   width: 200px;
  input[type="text"],
  input[type="email"],
  input[type="url"],
  input[type="password"],
  textarea {
+     color: #222;
+     background-color: #fff;
+     border: 1px solid $grey;
+     border-radius: 3px;
+     padding: 2px 5px;
+     margin: 0;
+     width: 200px;
  
-   &.field_with_errors {
-     border: 2px solid #ff7070;
+     &.field_with_errors {
+       border: 2px solid #ff7070;
+     }
    }
- }
  
- textarea {
-   padding: 5px;
-   width: 100%;
-   min-height: 50px;
-   resize: vertical;
+   textarea {
+     padding: 5px;
+     width: 100%;
+     min-height: 50px;
+     resize: vertical;
+   }
+   /* Utility for general button styles */
+   input[type="button"],
+   input[type="submit"],
+   input[type="reset"],
+   a.button {
+     cursor: pointer;
+     border: 0;
+     display: inline-block;
+     padding: $lineheight/4 $lineheight/2;
+     min-height: 20px + $lineheight/2;
+     min-width: 120px;
+     margin: 0 0 $lineheight/2 0;
+     color: white;
+     background: $blue;
+     text-align: center;
+     border-radius: 2px;
+     &:hover {
+       background: darken($blue, $hovercolor);
+       text-decoration: none;
+     }
+     &.deemphasize {
+       background: $lightblue;
+       &:hover {
+         background: darken($lightblue, $hovercolor);
+       }
+     }
+     &:disabled {
+       background: $lightgrey;
+       &:hover {
+         background: $lightgrey;
+       }
+     }
+     &:last-child {
+       margin-bottom: 0;
+     }
+   }
+   input[type="button"],
+   input[type="submit"],
+   input[type="reset"] {
+     line-height: normal;
+   }
+   a.button {
+     line-height: 20px;
+   }
+   .search_form,
+   .directions_form {
+     position: relative;
+     padding: $lineheight/2;
+     background-color: $lightgrey;
+     .query_wrapper {
+       position: relative;
+       overflow: hidden;
+       border-radius: 2px 0 0 2px;
+     }
+     input[type=text] {
+       width: 100%;
+       height: 30px;
+       transition: 300ms linear;
+     }
+     input[type=text].overflow {
+       border-right: none;
+       border-radius: 3px 0px 0px 3px;
+     }
+     input:focus {
+       outline: none;
+       box-shadow: 0px 0px 7px $vibrant-green;
+     }
+     input[type=submit].float {
+       float: right;
+       width: auto;
+       min-width: 0;
+       border-radius: 0 2px 2px 0;
+     }
+     input.error {
+       background-color: rgba($red, 0.4);
+     }
+     select {
+       /* this next line is to polyfill the vertical alignment of text within a select element,
+        * which is different between firefox and chrome. */
+       padding: 0.3em 0;
+     }
+     .query_options {
+       text-align: right;
+       font-size: 10px;
+       color: $blue;
+     }
+     .describe_location {
+       position: absolute;
+       top: 6px;
+       right: 6px;
+       font-size: 10px;
+       color: $blue;
+     }
+     .switch_link {
+       float: right;
+       width: auto;
+       min-width: 0;
+       margin-left: 6px;
+     }
+     img.button {
+       display: block;
+       width: 20px;
+       height: 20px;
+     }
+     span.force_width {
+       width: 100%;
+       padding-right: 25px;
+       display: block;
+     }
+     select.routing_engines {
+       min-height: 30px;
+       margin: 0px 0px 5px 25px;
+     }
+     input.routing_go {
+       min-width: 100px;
+       float: right;
+     }
+     div.header {
+       width: 100%;
+       height: 30px;
+     }
+     div.line {
+       width: 100%;
+       margin: 0px 0px 5px 0px;
+     }
+     div.loader_copy {
+       display: none;
+       img {
+         vertical-align: middle;
+       }
+     }
+     a.reverse_directions {
+       cursor: pointer;
+       margin: 0px 0px 5px 25px;
+     }
+   }
  }
  
  /* Rules for user images */
@@@ -1829,54 -1925,6 +1863,6 @@@ div.secondary-actions 
  
  .inner02 { padding: 0 $lineheight;}
  
- /* Utility for general button styles */
- input[type="button"],
- input[type="submit"],
- input[type="reset"],
- a.button {
-   cursor: pointer;
-   border: 0;
-   display: inline-block;
-   padding: $lineheight/4 $lineheight/2;
-   min-height: 20px + $lineheight/2;
-   min-width: 120px;
-   margin: 0 0 $lineheight/2 0;
-   color: white;
-   background: $blue;
-   text-align: center;
-   border-radius: 2px;
-   &:hover {
-     background: darken($blue, $hovercolor);
-     text-decoration: none;
-   }
-   &.deemphasize {
-     background: $lightblue;
-     &:hover {
-       background: darken($lightblue, $hovercolor);
-     }
-   }
-   &:disabled {
-     background: $lightgrey;
-     &:hover {
-       background: $lightgrey;
-     }
-   }
-   &:last-child {
-     margin-bottom: 0;
-   }
- }
- input[type="button"],
- input[type="submit"],
- input[type="reset"] {
-   line-height: normal;
- }
- a.button {
-   line-height: 20px;
- }
  .buttons {
    min-width: 200px;
    input[type="submit"],
@@@ -2197,18 -2245,12 +2183,18 @@@ input.richtext_title[type="text"] 
        display: block;
        color: white;
        font-weight: 300;
 -      font-size: 34px;
 +      font-size: 28px;
        span {
          color: $vibrant-green;
        }
      }
  
 +    @include media-breakpoint-up(sm) {
 +      h1 {
 +        font-size: 34px;
 +      }
 +    }
 +
      .user-image {
        position: absolute;
        top: 0px;
      display: none;
    }
  }
 -
 -.read-reports {
 -  background: $lightgrey;
 -  opacity: 0.7;
 -}
index 5a50aa91f5a789d4c6581e6ebd4d32381b86d445,89ecdd50e0253013cd61a3dd8ffea1df1c7868b5..c15e1f8c61b932735f51a3288016e4af6e8ba334
@@@ -15,7 -15,7 +15,7 @@@
  
    <% if current_user %>
      <div class="buttons clearfix subscribe-buttons">
-       <form action="#">
+       <form action="#" class="standard-form">
          <% if @changeset.subscribers.exists?(current_user.id) %>
            <input class="action-button" type="submit" name="unsubscribe" value="<%= t("javascripts.changesets.show.unsubscribe") %>" data-method="POST" data-url="<%= changeset_unsubscribe_url(@changeset) %>" />
          <% else %>
  
    <% if @comments.length > 0 %>
      <div class='changeset-comments'>
-       <form action="#">
+       <form action="#" class="standard-form">
          <ul class="list-unstyled">
            <% @comments.each do |comment| %>
              <% if comment.visible %>
                <li id="c<%= comment.id %>">
 -                <small class='deemphasize'>
 +                <small class='text-muted'>
                    <%= t(".commented_by",
                          :when => friendly_date_ago(comment.created_at),
                          :exact_time => l(comment.created_at),
@@@ -47,7 -47,7 +47,7 @@@
                </li>
              <% elsif current_user and current_user.moderator? %>
                <li id="c<%= comment.id %>">
 -                <small class='deemphasize'>
 +                <small class='text-muted'>
                    <%= t(".hidden_commented_by",
                          :when => friendly_date_ago(comment.created_at),
                          :exact_time => l(comment.created_at),
@@@ -71,7 -71,7 +71,7 @@@
  
    <% if current_user %>
      <% unless @changeset.is_open? %>
-       <form action="#">
+       <form action="#" class="standard-form">
          <textarea class="comment" name="text" cols="40" rows="5"></textarea>
          <div class="buttons clearfix">
            <input type="submit" name="comment" value="<%= t("javascripts.changesets.show.comment") %>" data-changeset-id="<%= @changeset.id %>" data-method="POST" data-url="<%= changeset_comment_url(@changeset) %>" disabled="1" />
        &middot;
      <% end %>
      <%= user = (@prev_by_user || @next_by_user).user.display_name
 -        link_to content_tag(:bdi, user), :controller => "changesets", :action => "index", :display_name => user %>
 +        link_to tag.bdi(user), :controller => "changesets", :action => "index", :display_name => user %>
      <% if @next_by_user %>
        &middot;
        <%= link_to "#{@next_by_user.id} >>", :id => @next_by_user.id %>
index 51633ffca5b6a24e183d6ea7b65fb83f1396d11a,fbc2da3cd7d06fa27e9cbe4883fa4d392d52c358..4e4f571cc2b8ea3441d0cc5ab5c1171884d36904
@@@ -6,8 -6,8 +6,8 @@@
  </h2>
  
  <div class="note browse-section">
 -  <p class="warning"><%= t("javascripts.notes.new.intro") %></p>
 +  <p class="alert alert-info"><%= t("javascripts.notes.new.intro") %></p>
-   <form action="#">
+   <form action="#" class="standard-form">
      <input type="hidden" name="lon">
      <input type="hidden" name="lat">
      <textarea class="comment" name="text" cols="40" rows="10" maxlength="2000" placeholder="<%= t("javascripts.notes.new.advice") %>"></textarea>
index eefd62b0ae7cb43615771182678259f3a73e74dd,ce8c19c89ab8305756535b628c9d330fe7b2e0b6..1be7d904170cc1f09edb124345892ff520cc9c7d
    </div>
  
    <div class="details" data-coordinates="<%= @note.lat %>,<%= @note.lon %>" data-status="<%= @note.status %>">
 -    <%= note_event("opened", @note.created_at, @note.author) %>
 -    <% if @note.status == "closed" %>
 -      <br />
 -      <%= note_event(@note.status, @note.closed_at, @note.all_comments.last.author) %>
 -    <% end %>
 +    <ul class="list-unstyled">
 +      <li><%= note_event("opened", @note.created_at, @note.author) %></li>
 +      <% if @note.status == "closed" %>
 +        <li><%= note_event(@note.status, @note.closed_at, @note.all_comments.last.author) %></li>
 +      <% end %>
 +      <li>
 +        <%= t "browse.location" %>
 +        <%= link_to(tag.span(number_with_delimiter(@note.lat), :class => "latitude") + ", " + tag.span(number_with_delimiter(@note.lon), :class => "longitude"), root_path(:anchor => "map=18/#{@note.lat}/#{@note.lon}")) %>
 +      </li>
 +    </ul>
    </div>
  
    <% if @note_comments.find { |comment| comment.author.nil? } -%>
 -    <p class='warning'><%= t "javascripts.notes.show.anonymous_warning" %></p>
 +    <p class='alert alert-warning'><%= t "javascripts.notes.show.anonymous_warning" %></p>
    <% end -%>
  
    <% if current_user && current_user != @note.author %>
 -    <p class="deemphasize"><%= report_link(t(".report"), @note) %></p>
 +    <p class="text-muted"><%= report_link(t(".report"), @note) %></p>
    <% end %>
  
    <% if @note_comments.length > 1 %>
      <div class='note-comments'>
        <ul class="list-unstyled">
 -        <% @note_comments[1..-1].each do |comment| %>
 +        <% @note_comments[1..].each do |comment| %>
            <li id="c<%= comment.id %>">
 -            <small class='deemphasize'><%= note_event(comment.event, comment.created_at, comment.author) %></small>
 +            <small class='text-muted'><%= note_event(comment.event, comment.created_at, comment.author) %></small>
              <%= comment.body.to_html %>
            </li>
          <% end %>
@@@ -47,7 -42,7 +47,7 @@@
  
    <% if @note.status == "open" %>
      <% if current_user -%>
-       <form action="#">
+       <form action="#" class="standard-form">
          <textarea class="comment" name="text" cols="40" rows="5" maxlength="2000"></textarea>
          <div class="buttons clearfix">
            <% if current_user.moderator? -%>
@@@ -59,7 -54,7 +59,7 @@@
        </form>
      <% end -%>
    <% else %>
-     <form action="#">
+     <form action="#" class="standard-form">
        <input type="hidden" name="text" value="">
        <div class="buttons clearfix">
          <% if current_user and current_user.moderator? -%>
index 2eb23f755102ed463c7517f2c4081841c8c37a64,817992fa5cb9a0eb5ce33e0652d740eeed79460a..b6d91ca3194bc12a609ad4002d9c4b758372f67d
@@@ -5,7 -5,7 +5,7 @@@
    <%= t ".title" %>
  </h2>
  
- <%= form_tag({ :controller => "export", :action => "finish" }, { :class => "export_form" }) do %>
+ <%= form_tag({ :controller => "export", :action => "finish" }, { :class => "export_form standard-form" }) do %>
    <%= hidden_field_tag "format", "osm" %>
  
    <div class='export_area_inputs'>
@@@ -24,7 -24,7 +24,7 @@@
    <p><%= t ".export_details_html" %></p>
  
    <div id="export_osm_too_large">
 -    <p class="warning">
 +    <p class="alert alert-warning">
        <%= t ".too_large.body" %>
      </p>
    </div>
index a3902c0a920a0b07ae746b7da70c0c305501228f,cae713888bc8fecc1f1c070357a876e36569c190..4ea5ac5c58d67c9d12340bdf2e21f13c9ca769dc
@@@ -12,7 -12,7 +12,7 @@@
  
    <p><%= t ".press confirm button" %></p>
  
-   <%= form_tag({}, { :id => "confirm" }) do %>
+   <%= form_tag({}, { :id => "confirm", :class => "standard-form" }) do %>
      <input type="display_name" name="confirm_string" value="<%= params[:display_name] %>">
      <input type="hidden" name="confirm_string" value="<%= params[:confirm_string] %>">
      <input type="submit" name="confirm_action" value="<%= t ".button" %>">
  <% else %>
    <h1>
      <%= t ".introduction_1" %>
 -    <span class="deemphasize">
 +    <span class="text-muted">
        <%= t ".introduction_2" %>
      </span>
    </h1>
  
 -  <p class='deemphasize'><%= t ".reconfirm_html",
 -                               :reconfirm => url_for(:action => "confirm_resend") %></p>
 +  <p class='text-muted'><%= t ".reconfirm_html",
 +                              :reconfirm => url_for(:action => "confirm_resend") %></p>
  <% end %>
diff --combined config/locales/en.yml
index 30e8f6e98fc1cc8cfb7283ae129bf1e5f5b57d65,8c4dd25d83f4d325fda5fa50d00f0e0d7febb96b..185129e83f58fb4a977df653e3033f216b44e423
@@@ -6,6 -6,8 +6,8 @@@ en
        friendly: "%e %B %Y at %H:%M"
        blog: "%e %B %Y"
    helpers:
+     file:
+       prompt: Choose file
      submit:
        diary_comment:
          create: Save
          longitude: "Longitude"
          public: "Public"
          description: "Description"
+         name: Filename
+         gpx_file: Upload GPX File
+         visibility: Visibility
+         tagstring: Tags
        message:
          sender: "Sender"
          title: "Subject"
          description: "Description"
          languages: "Languages"
          pass_crypt: "Password"
+     help:
+       trace:
+         tagstring: comma delimited
    datetime:
      distance_in_words_ago:
        about_x_hours:
      diary_entry:
        posted_by_html: "Posted by %{link_user} on %{created} in %{language_link}"
        comment_link: Comment on this entry
 -      reply_link: Reply to this entry
 +      reply_link: Send a message to the author
        comment_count:
          zero: No comments
          one: "%{count} comment"
        subject: "[OpenStreetMap] %{user} commented on a diary entry"
        hi: "Hi %{to_user},"
        header: "%{from_user} has commented on the OpenStreetMap diary entry with the subject %{subject}:"
 -      footer: "You can also read the comment at %{readurl} and you can comment at %{commenturl} or reply at %{replyurl}"
 +      footer: "You can also read the comment at %{readurl} and you can comment at %{commenturl} or send a message to the author at %{replyurl}"
      message_notification:
        subject_header: "[OpenStreetMap] %{subject}"
        hi: "Hi %{to_user},"
        header: "%{from_user} has sent you a message through OpenStreetMap with the subject %{subject}:"
 -      footer_html: "You can also read the message at %{readurl} and you can reply at %{replyurl}"
 +      footer_html: "You can also read the message at %{readurl} and you can send a message to the author at %{replyurl}"
      friendship_notification:
        hi: "Hi %{to_user},"
        subject: "[OpenStreetMap] %{user} added you as a friend"
      about:
        next: Next
        copyright_html: <span>&copy;</span>OpenStreetMap<br>contributors
 -      used_by_html: "%{name} powers map data on thousands of web sites, mobile apps, and hardware devices"
 +      used_by_html: "%{name} provides map data for thousands of web sites, mobile apps, and hardware devices"
        lede_text: |
          OpenStreetMap is built by a community of mappers that contribute and maintain data
          about roads, trails, cafés, railway stations, and much more, all over the world.
            may distribute the result only under the same licence. The
            full <a href="https://opendatacommons.org/licenses/odbl/1.0/">legal
            code</a> explains your rights and responsibilities.
 -        intro_3_html: |
 -          The cartography in our map tiles, and our documentation, are
 -          licensed under the <a href="https://creativecommons.org/licenses/by-sa/2.0/">Creative
 -          Commons Attribution-ShareAlike 2.0</a> license (CC BY-SA).
 +        intro_3_1_html: |
 +          Our documentation is licensed under the 
 +          <a href="https://creativecommons.org/licenses/by-sa/2.0/">Creative
 +          Commons Attribution-ShareAlike 2.0</a> license (CC BY-SA 2.0).
          credit_title_html: How to credit OpenStreetMap
          credit_1_html: |
            We require that you use the credit &ldquo;&copy; OpenStreetMap
            contributors&rdquo;.
 -        credit_2_html: |
 +        credit_2_1_html: |
            You must also make it clear that the data is available under the Open
 -          Database License, and if using our map tiles, that the cartography is
 -          licensed as CC BY-SA. You may do this by linking to
 +          Database License. You may do this by linking to
            <a href="https://www.openstreetmap.org/copyright">this copyright page</a>.
            Alternatively, and as a requirement if you are distributing OSM in a
            data form, you can name and link directly to the license(s). In media
            where links are not possible (e.g. printed works), we suggest you
            direct your readers to openstreetmap.org (perhaps by expanding
 -          'OpenStreetMap' to this full address), to opendatacommons.org, and
 -          if relevant, to creativecommons.org.
 -        credit_3_html: |
 +          'OpenStreetMap' to this full address) and to opendatacommons.org.
 +        credit_3_1_html: |
 +          The map tiles in the &ldquo;standard style&rdquo; at www.openstreetmap.org are a 
 +          Produced Work by the OpenStreetMap Foundation using OpenStreetMap data 
 +          under the Open Database License. If you are using these tiles please use 
 +          the following attribution: 
 +          &ldquo;Base map and data from OpenStreetMap and OpenStreetMap Foundation&rdquo;. 
 +        credit_4_html: |
            For a browsable electronic map, the credit should appear in the corner of the map.
            For example:
          attribution_example:
        identifiable: "Identifiable (shown in trace list and as identifiable, ordered points with timestamps)"
      new:
        upload_trace: "Upload GPS Trace"
-       upload_gpx: "Upload GPX File:"
-       description: "Description:"
-       tags: "Tags:"
-       tags_help: "comma delimited"
-       visibility: "Visibility:"
        visibility_help: "what does this mean?"
        visibility_help_url: "https://wiki.openstreetmap.org/wiki/Visibility_of_GPS_traces"
        help: "Help"
          one: "You have %{count} trace waiting for upload. Please consider waiting for these to finish before uploading any more, so as not to block the queue for other users."
          other: "You have %{count} traces waiting for upload. Please consider waiting for these to finish before uploading any more, so as not to block the queue for other users."
      edit:
+       cancel: Cancel
        title: "Editing trace %{name}"
        heading: "Editing trace %{name}"
-       filename: "Filename:"
-       download: "download"
-       uploaded_at: "Uploaded:"
-       points: "Points:"
-       start_coord: "Start coordinate:"
-       map: "map"
-       edit: "edit"
-       owner: "Owner:"
-       description: "Description:"
-       tags: "Tags:"
-       tags_help: "comma delimited"
-       visibility: "Visibility:"
        visibility_help: "what does this mean?"
        visibility_help_url: "https://wiki.openstreetmap.org/wiki/Visibility_of_GPS_traces"
      update:
        next: "Next Â»"
        previous: "« Previous"
    notes:
 -    mine:
 +    index:
        title: "Notes submitted or commented on by %{user}"
        heading: "%{user}'s notes"
        subheading_html: "Notes submitted or commented on by %{user}"
          cycle_map: Cycle Map
          transport_map: Transport Map
          hot: Humanitarian
 +        opnvkarte: Ã–PNVKarte
        layers:
          header: Map Layers
          notes: Map Notes
        donate_link_text: "<a class='donate-attr' href='%{donate_url}'>Make a Donation</a>"
        terms: "<a href='%{terms_url}' target='_blank'>Website and API terms</a>"
        thunderforest: "Tiles courtesy of <a href='%{thunderforest_url}' target='_blank'>Andy Allan</a>"
 +      opnvkarte: "Tiles courtesy of <a href='%{memomaps_url}' target='_blank'>MeMoMaps</a>"
        hotosm: "Tiles style by <a href='%{hotosm_url}' target='_blank'>Humanitarian OpenStreetMap Team</a> hosted by <a href='%{osmfrance_url}' target='_blank'>OpenStreetMap France</a>"
      site:
        edit_tooltip: Edit the map
diff --combined package.json
index 82bc5ead5d176bad74adc27f6708b06e1f9dd803,5757fdb220a4a4cbb32d4ef52055bdaf89a3875e..b1bf411d9926ccf229830c11a2c7082d0ac8a4cb
@@@ -1,8 -1,10 +1,10 @@@
  {
    "name": "openstreetmap",
    "private": true,
-   "dependencies": {},
+   "dependencies": {
+     "bs-custom-file-input": "^1.3.4"
+   },
    "devDependencies": {
 -    "eslint": "^6.8.0"
 +    "eslint": "^7.3.1"
    }
  }
diff --combined yarn.lock
index 86db5ca5b9892b815e196eee8b4b5cacb73c7c0d,552a1a8d98cbab17c62bb5aa3cccf6e47f17dcdf..337eef0ec5c67704c845adcff1facd516699bf9f
+++ b/yarn.lock
@@@ -28,10 -28,10 +28,10 @@@ acorn-jsx@^5.2.0
    resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe"
    integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==
  
 -acorn@^7.1.1:
 -  version "7.1.1"
 -  resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf"
 -  integrity sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==
 +acorn@^7.3.1:
 +  version "7.3.1"
 +  resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.3.1.tgz#85010754db53c3fbaf3b9ea3e083aa5c5d147ffd"
 +  integrity sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA==
  
  ajv@^6.10.0, ajv@^6.10.2:
    version "6.12.0"
      json-schema-traverse "^0.4.1"
      uri-js "^4.2.2"
  
 -ansi-escapes@^4.2.1:
 -  version "4.3.1"
 -  resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61"
 -  integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==
 -  dependencies:
 -    type-fest "^0.11.0"
 +ansi-colors@^3.2.1:
 +  version "3.2.4"
 +  resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf"
 +  integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==
  
  ansi-regex@^4.1.0:
    version "4.1.0"
@@@ -98,12 -100,17 +98,17 @@@ brace-expansion@^1.1.7
      balanced-match "^1.0.0"
      concat-map "0.0.1"
  
+ bs-custom-file-input@^1.3.4:
+   version "1.3.4"
+   resolved "https://registry.yarnpkg.com/bs-custom-file-input/-/bs-custom-file-input-1.3.4.tgz#c275cb8d4f1c02ba026324292509fa9a747dbda8"
+   integrity sha512-NBsQzTnef3OW1MvdKBbMHAYHssCd613MSeJV7z2McXznWtVMnJCy7Ckyc+PwxV6Pk16cu6YBcYWh/ZE0XWNKCA==
  callsites@^3.0.0:
    version "3.1.0"
    resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
    integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
  
 -chalk@^2.0.0, chalk@^2.1.0:
 +chalk@^2.0.0:
    version "2.4.2"
    resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
    integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
      escape-string-regexp "^1.0.5"
      supports-color "^5.3.0"
  
 -chalk@^3.0.0:
 -  version "3.0.0"
 -  resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4"
 -  integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==
 +chalk@^4.0.0:
 +  version "4.1.0"
 +  resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a"
 +  integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==
    dependencies:
      ansi-styles "^4.1.0"
      supports-color "^7.1.0"
  
 -chardet@^0.7.0:
 -  version "0.7.0"
 -  resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
 -  integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
 -
 -cli-cursor@^3.1.0:
 -  version "3.1.0"
 -  resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
 -  integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==
 -  dependencies:
 -    restore-cursor "^3.1.0"
 -
 -cli-width@^2.0.0:
 -  version "2.2.0"
 -  resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
 -  integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=
 -
  color-convert@^1.9.0:
    version "1.9.3"
    resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
@@@ -149,14 -173,16 +154,14 @@@ concat-map@0.0.1
    resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
    integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
  
 -cross-spawn@^6.0.5:
 -  version "6.0.5"
 -  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
 -  integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
 +cross-spawn@^7.0.2:
 +  version "7.0.3"
 +  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
 +  integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
    dependencies:
 -    nice-try "^1.0.4"
 -    path-key "^2.0.1"
 -    semver "^5.5.0"
 -    shebang-command "^1.2.0"
 -    which "^1.2.9"
 +    path-key "^3.1.0"
 +    shebang-command "^2.0.0"
 +    which "^2.0.1"
  
  debug@^4.0.1:
    version "4.1.1"
    dependencies:
      ms "^2.1.1"
  
 -deep-is@~0.1.3:
 +deep-is@^0.1.3:
    version "0.1.3"
    resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
    integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
@@@ -182,55 -208,52 +187,55 @@@ emoji-regex@^7.0.1
    resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
    integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
  
 -emoji-regex@^8.0.0:
 -  version "8.0.0"
 -  resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
 -  integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
 +enquirer@^2.3.5:
 +  version "2.3.5"
 +  resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.5.tgz#3ab2b838df0a9d8ab9e7dff235b0e8712ef92381"
 +  integrity sha512-BNT1C08P9XD0vNg3J475yIUG+mVdp9T6towYFHUv897X0KoHBjB1shyrNmhmtHWKP17iSWgo7Gqh7BBuzLZMSA==
 +  dependencies:
 +    ansi-colors "^3.2.1"
  
  escape-string-regexp@^1.0.5:
    version "1.0.5"
    resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
    integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
  
 -eslint-scope@^5.0.0:
 -  version "5.0.0"
 -  resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9"
 -  integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==
 +eslint-scope@^5.1.0:
 +  version "5.1.0"
 +  resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.0.tgz#d0f971dfe59c69e0cada684b23d49dbf82600ce5"
 +  integrity sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==
    dependencies:
      esrecurse "^4.1.0"
      estraverse "^4.1.1"
  
 -eslint-utils@^1.4.3:
 -  version "1.4.3"
 -  resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f"
 -  integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==
 +eslint-utils@^2.1.0:
 +  version "2.1.0"
 +  resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27"
 +  integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==
    dependencies:
      eslint-visitor-keys "^1.1.0"
  
 -eslint-visitor-keys@^1.1.0:
 -  version "1.1.0"
 -  resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2"
 -  integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==
 +eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0:
 +  version "1.3.0"
 +  resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"
 +  integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
  
 -eslint@^6.8.0:
 -  version "6.8.0"
 -  resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb"
 -  integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==
 +eslint@^7.3.1:
 +  version "7.6.0"
 +  resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.6.0.tgz#522d67cfaea09724d96949c70e7a0550614d64d6"
 +  integrity sha512-QlAManNtqr7sozWm5TF4wIH9gmUm2hE3vNRUvyoYAa4y1l5/jxD/PQStEjBMQtCqZmSep8UxrcecI60hOpe61w==
    dependencies:
      "@babel/code-frame" "^7.0.0"
      ajv "^6.10.0"
 -    chalk "^2.1.0"
 -    cross-spawn "^6.0.5"
 +    chalk "^4.0.0"
 +    cross-spawn "^7.0.2"
      debug "^4.0.1"
      doctrine "^3.0.0"
 -    eslint-scope "^5.0.0"
 -    eslint-utils "^1.4.3"
 -    eslint-visitor-keys "^1.1.0"
 -    espree "^6.1.2"
 -    esquery "^1.0.1"
 +    enquirer "^2.3.5"
 +    eslint-scope "^5.1.0"
 +    eslint-utils "^2.1.0"
 +    eslint-visitor-keys "^1.3.0"
 +    espree "^7.2.0"
 +    esquery "^1.2.0"
      esutils "^2.0.2"
      file-entry-cache "^5.0.1"
      functional-red-black-tree "^1.0.1"
      ignore "^4.0.6"
      import-fresh "^3.0.0"
      imurmurhash "^0.1.4"
 -    inquirer "^7.0.0"
      is-glob "^4.0.0"
      js-yaml "^3.13.1"
      json-stable-stringify-without-jsonify "^1.0.1"
 -    levn "^0.3.0"
 -    lodash "^4.17.14"
 +    levn "^0.4.1"
 +    lodash "^4.17.19"
      minimatch "^3.0.4"
 -    mkdirp "^0.5.1"
      natural-compare "^1.4.0"
 -    optionator "^0.8.3"
 +    optionator "^0.9.1"
      progress "^2.0.0"
 -    regexpp "^2.0.1"
 -    semver "^6.1.2"
 -    strip-ansi "^5.2.0"
 -    strip-json-comments "^3.0.1"
 +    regexpp "^3.1.0"
 +    semver "^7.2.1"
 +    strip-ansi "^6.0.0"
 +    strip-json-comments "^3.1.0"
      table "^5.2.3"
      text-table "^0.2.0"
      v8-compile-cache "^2.0.3"
  
 -espree@^6.1.2:
 -  version "6.2.1"
 -  resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a"
 -  integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==
 +espree@^7.2.0:
 +  version "7.2.0"
 +  resolved "https://registry.yarnpkg.com/espree/-/espree-7.2.0.tgz#1c263d5b513dbad0ac30c4991b93ac354e948d69"
 +  integrity sha512-H+cQ3+3JYRMEIOl87e7QdHX70ocly5iW4+dttuR8iYSPr/hXKFb+7dBsZ7+u1adC4VrnPlTkv0+OwuPnDop19g==
    dependencies:
 -    acorn "^7.1.1"
 +    acorn "^7.3.1"
      acorn-jsx "^5.2.0"
 -    eslint-visitor-keys "^1.1.0"
 +    eslint-visitor-keys "^1.3.0"
  
  esprima@^4.0.0:
    version "4.0.1"
    resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
    integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
  
 -esquery@^1.0.1:
 -  version "1.1.0"
 -  resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.1.0.tgz#c5c0b66f383e7656404f86b31334d72524eddb48"
 -  integrity sha512-MxYW9xKmROWF672KqjO75sszsA8Mxhw06YFeS5VHlB98KDHbOSurm3ArsjO60Eaf3QmGMCP1yn+0JQkNLo/97Q==
 +esquery@^1.2.0:
 +  version "1.3.1"
 +  resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57"
 +  integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==
    dependencies:
 -    estraverse "^4.0.0"
 +    estraverse "^5.1.0"
  
  esrecurse@^4.1.0:
    version "4.2.1"
    dependencies:
      estraverse "^4.1.0"
  
 -estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1:
 +estraverse@^4.1.0, estraverse@^4.1.1:
    version "4.3.0"
    resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
    integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
  
 +estraverse@^5.1.0:
 +  version "5.1.0"
 +  resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642"
 +  integrity sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==
 +
  esutils@^2.0.2:
    version "2.0.3"
    resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
    integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
  
 -external-editor@^3.0.3:
 -  version "3.1.0"
 -  resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495"
 -  integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==
 -  dependencies:
 -    chardet "^0.7.0"
 -    iconv-lite "^0.4.24"
 -    tmp "^0.0.33"
 -
  fast-deep-equal@^3.1.1:
    version "3.1.1"
    resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4"
@@@ -309,11 -338,18 +314,11 @@@ fast-json-stable-stringify@^2.0.0
    resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
    integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
  
 -fast-levenshtein@~2.0.6:
 +fast-levenshtein@^2.0.6:
    version "2.0.6"
    resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
    integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
  
 -figures@^3.0.0:
 -  version "3.2.0"
 -  resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af"
 -  integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==
 -  dependencies:
 -    escape-string-regexp "^1.0.5"
 -
  file-entry-cache@^5.0.1:
    version "5.0.1"
    resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c"
@@@ -381,6 -417,13 +386,6 @@@ has-flag@^4.0.0
    resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
    integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
  
 -iconv-lite@^0.4.24:
 -  version "0.4.24"
 -  resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
 -  integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
 -  dependencies:
 -    safer-buffer ">= 2.1.2 < 3"
 -
  ignore@^4.0.6:
    version "4.0.6"
    resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
@@@ -412,6 -455,25 +417,6 @@@ inherits@2
    resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
    integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
  
 -inquirer@^7.0.0:
 -  version "7.1.0"
 -  resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.1.0.tgz#1298a01859883e17c7264b82870ae1034f92dd29"
 -  integrity sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==
 -  dependencies:
 -    ansi-escapes "^4.2.1"
 -    chalk "^3.0.0"
 -    cli-cursor "^3.1.0"
 -    cli-width "^2.0.0"
 -    external-editor "^3.0.3"
 -    figures "^3.0.0"
 -    lodash "^4.17.15"
 -    mute-stream "0.0.8"
 -    run-async "^2.4.0"
 -    rxjs "^6.5.3"
 -    string-width "^4.1.0"
 -    strip-ansi "^6.0.0"
 -    through "^2.3.6"
 -
  is-extglob@^2.1.1:
    version "2.1.1"
    resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
@@@ -422,6 -484,11 +427,6 @@@ is-fullwidth-code-point@^2.0.0
    resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
    integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
  
 -is-fullwidth-code-point@^3.0.0:
 -  version "3.0.0"
 -  resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
 -  integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
 -
  is-glob@^4.0.0, is-glob@^4.0.1:
    version "4.0.1"
    resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
    dependencies:
      is-extglob "^2.1.1"
  
 -is-promise@^2.1.0:
 -  version "2.1.0"
 -  resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
 -  integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=
 -
  isexe@^2.0.0:
    version "2.0.0"
    resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
@@@ -457,18 -529,23 +462,18 @@@ json-stable-stringify-without-jsonify@^
    resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
    integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
  
 -levn@^0.3.0, levn@~0.3.0:
 -  version "0.3.0"
 -  resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
 -  integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
 +levn@^0.4.1:
 +  version "0.4.1"
 +  resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
 +  integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
    dependencies:
 -    prelude-ls "~1.1.2"
 -    type-check "~0.3.2"
 +    prelude-ls "^1.2.1"
 +    type-check "~0.4.0"
  
 -lodash@^4.17.14, lodash@^4.17.15:
 -  version "4.17.15"
 -  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
 -  integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
 -
 -mimic-fn@^2.1.0:
 -  version "2.1.0"
 -  resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
 -  integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
 +lodash@^4.17.14, lodash@^4.17.19:
 +  version "4.17.19"
 +  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b"
 +  integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==
  
  minimatch@^3.0.4:
    version "3.0.4"
@@@ -494,11 -571,21 +499,11 @@@ ms@^2.1.1
    resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
    integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
  
 -mute-stream@0.0.8:
 -  version "0.0.8"
 -  resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
 -  integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
 -
  natural-compare@^1.4.0:
    version "1.4.0"
    resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
    integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
  
 -nice-try@^1.0.4:
 -  version "1.0.5"
 -  resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
 -  integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
 -
  once@^1.3.0:
    version "1.4.0"
    resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
    dependencies:
      wrappy "1"
  
 -onetime@^5.1.0:
 -  version "5.1.0"
 -  resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5"
 -  integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==
 -  dependencies:
 -    mimic-fn "^2.1.0"
 -
 -optionator@^0.8.3:
 -  version "0.8.3"
 -  resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
 -  integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==
 +optionator@^0.9.1:
 +  version "0.9.1"
 +  resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499"
 +  integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==
    dependencies:
 -    deep-is "~0.1.3"
 -    fast-levenshtein "~2.0.6"
 -    levn "~0.3.0"
 -    prelude-ls "~1.1.2"
 -    type-check "~0.3.2"
 -    word-wrap "~1.2.3"
 -
 -os-tmpdir@~1.0.2:
 -  version "1.0.2"
 -  resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
 -  integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
 +    deep-is "^0.1.3"
 +    fast-levenshtein "^2.0.6"
 +    levn "^0.4.1"
 +    prelude-ls "^1.2.1"
 +    type-check "^0.4.0"
 +    word-wrap "^1.2.3"
  
  parent-module@^1.0.0:
    version "1.0.1"
@@@ -530,15 -629,15 +535,15 @@@ path-is-absolute@^1.0.0
    resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
    integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
  
 -path-key@^2.0.1:
 -  version "2.0.1"
 -  resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
 -  integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
 +path-key@^3.1.0:
 +  version "3.1.1"
 +  resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
 +  integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
  
 -prelude-ls@~1.1.2:
 -  version "1.1.2"
 -  resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
 -  integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
 +prelude-ls@^1.2.1:
 +  version "1.2.1"
 +  resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
 +  integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
  
  progress@^2.0.0:
    version "2.0.3"
@@@ -550,16 -649,24 +555,16 @@@ punycode@^2.1.0
    resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
    integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
  
 -regexpp@^2.0.1:
 -  version "2.0.1"
 -  resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f"
 -  integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==
 +regexpp@^3.1.0:
 +  version "3.1.0"
 +  resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2"
 +  integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==
  
  resolve-from@^4.0.0:
    version "4.0.0"
    resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
    integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
  
 -restore-cursor@^3.1.0:
 -  version "3.1.0"
 -  resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
 -  integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==
 -  dependencies:
 -    onetime "^5.1.0"
 -    signal-exit "^3.0.2"
 -
  rimraf@2.6.3:
    version "2.6.3"
    resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
    dependencies:
      glob "^7.1.3"
  
 -run-async@^2.4.0:
 -  version "2.4.0"
 -  resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.0.tgz#e59054a5b86876cfae07f431d18cbaddc594f1e8"
 -  integrity sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg==
 -  dependencies:
 -    is-promise "^2.1.0"
 -
 -rxjs@^6.5.3:
 -  version "6.5.4"
 -  resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.4.tgz#e0777fe0d184cec7872df147f303572d414e211c"
 -  integrity sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==
 -  dependencies:
 -    tslib "^1.9.0"
 +semver@^7.2.1:
 +  version "7.3.2"
 +  resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938"
 +  integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==
  
 -"safer-buffer@>= 2.1.2 < 3":
 -  version "2.1.2"
 -  resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
 -  integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
 -
 -semver@^5.5.0:
 -  version "5.7.1"
 -  resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
 -  integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
 -
 -semver@^6.1.2:
 -  version "6.3.0"
 -  resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
 -  integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
 -
 -shebang-command@^1.2.0:
 -  version "1.2.0"
 -  resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
 -  integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
 +shebang-command@^2.0.0:
 +  version "2.0.0"
 +  resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
 +  integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
    dependencies:
 -    shebang-regex "^1.0.0"
 +    shebang-regex "^3.0.0"
  
 -shebang-regex@^1.0.0:
 -  version "1.0.0"
 -  resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
 -  integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
 -
 -signal-exit@^3.0.2:
 -  version "3.0.2"
 -  resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
 -  integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
 +shebang-regex@^3.0.0:
 +  version "3.0.0"
 +  resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
 +  integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
  
  slice-ansi@^2.1.0:
    version "2.1.0"
@@@ -607,7 -743,16 +612,7 @@@ string-width@^3.0.0
      is-fullwidth-code-point "^2.0.0"
      strip-ansi "^5.1.0"
  
 -string-width@^4.1.0:
 -  version "4.2.0"
 -  resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5"
 -  integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==
 -  dependencies:
 -    emoji-regex "^8.0.0"
 -    is-fullwidth-code-point "^3.0.0"
 -    strip-ansi "^6.0.0"
 -
 -strip-ansi@^5.1.0, strip-ansi@^5.2.0:
 +strip-ansi@^5.1.0:
    version "5.2.0"
    resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
    integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
@@@ -621,10 -766,10 +626,10 @@@ strip-ansi@^6.0.0
    dependencies:
      ansi-regex "^5.0.0"
  
 -strip-json-comments@^3.0.1:
 -  version "3.0.1"
 -  resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7"
 -  integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==
 +strip-json-comments@^3.1.0:
 +  version "3.1.0"
 +  resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.0.tgz#7638d31422129ecf4457440009fba03f9f9ac180"
 +  integrity sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==
  
  supports-color@^5.3.0:
    version "5.5.0"
@@@ -655,12 -800,34 +660,12 @@@ text-table@^0.2.0
    resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
    integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
  
 -through@^2.3.6:
 -  version "2.3.8"
 -  resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
 -  integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
 -
 -tmp@^0.0.33:
 -  version "0.0.33"
 -  resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
 -  integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
 +type-check@^0.4.0, type-check@~0.4.0:
 +  version "0.4.0"
 +  resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
 +  integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
    dependencies:
 -    os-tmpdir "~1.0.2"
 -
 -tslib@^1.9.0:
 -  version "1.11.1"
 -  resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35"
 -  integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==
 -
 -type-check@~0.3.2:
 -  version "0.3.2"
 -  resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
 -  integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=
 -  dependencies:
 -    prelude-ls "~1.1.2"
 -
 -type-fest@^0.11.0:
 -  version "0.11.0"
 -  resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1"
 -  integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==
 +    prelude-ls "^1.2.1"
  
  type-fest@^0.8.1:
    version "0.8.1"
@@@ -679,14 -846,14 +684,14 @@@ v8-compile-cache@^2.0.3
    resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e"
    integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==
  
 -which@^1.2.9:
 -  version "1.3.1"
 -  resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
 -  integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
 +which@^2.0.1:
 +  version "2.0.2"
 +  resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
 +  integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
    dependencies:
      isexe "^2.0.0"
  
 -word-wrap@~1.2.3:
 +word-wrap@^1.2.3:
    version "1.2.3"
    resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
    integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==